Hlavní navigace

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

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

Sdílet

V dnešní části seriálu o architekturách počítačů i o jejich základním programovém vybavení dokončíme popis historie programovacího jazyka BASIC. Řekneme si, jaké dialekty BASICu i jaká vývojová prostředí zjednodušující a urychlující vývoj v tomto programovacím jazyku lze používat v současnosti.

Obsah

1. bwBASIC (Bywater BASIC)

2. Basic-256

3. SdlBasic

4. Yabasic (Yet Another BASIC)

5. Yabasic a GTK-Server

6. OpenOffice.org Basic

7. FreeBASIC

8. Komplexní vývojové prostředí Gambas

9. Odkazy na Internetu

1. bwBASIC (Bywater BASIC)

V předchozích částech tohoto seriálu jsme si stručně popsali historii programovacího jazyka BASIC na osmibitových domácích mikropočítačích i na osobních počítačích kompatibilních s IBM PC. Ovšem programovací jazyk BASIC se v některých případech používá i v současnosti. Nejedná se již ovšem o „klasický“ BASIC s čísly řádků, nestrukturovanými příkazy GOTO, ON GOTO ani s automaticky deklarovanými globálními proměnnými, ale o jazyk, který se svou syntaxí, sémantikou i podporovanými datovými typy mnohem více podobá běžným strukturovaným programovacím jazykům. V dnešní části seriálu si některé současné interpretry a překladače tohoto jazyka popíšeme. Bude se jednat jak o velmi jednoduché interpretry s řádkovým editorem (bwBASIC), tak i o dialekty BASICu vybavené integrovaným vývojovým prostředím (Basic-256, SdlBasic, Yabasic) a taktéž o skriptovací jazyk použitý pro tvorbu maker a modulů známého aplikačního balíku OpenOffice.org.

Obrázek 1: V SdlBasicu popsaném v dalších kapitolách lze mj. volat i funkce grafické knihovny OpenGL.

Nejjednodušší dialekt programovacího jazyka BASIC, který si dnes popíšeme, se nazývá Bywater BASIC, zkráceně bwBASIC. Tento dialekt založený na ANSI BASICu, který lze používat jak v Linuxu, tak i v mnoha dalších operačních systémech, dokáže buď interpretovat programy uložené v externím souboru, podobně jako BASH či mnoho dalších nástrojů a interpretrů, nebo může s uživatelem komunikovat interaktivně, ovšem pouze s využitím (jedno)řádkového vstupního editoru, což je vlastně krok zpět za těmi BASICy, které byly dostupné již v dobách MS-DOSu. Podobným způsobem jako bwBASIC pracuje například i Python či Perl v interaktivním režimu. O bwBASICu se v tomto článku zmiňuji především z toho důvodu, že se pyšní jednou vlastností, kterou u prakticky žádného dalšího dialektu BASICu nenajdeme – dokáže přímo spouštět příkazy shellu, takže lze tento jazyk použít namísto klasických shellscriptů, což by možná mohlo být pro zaryté bejzikáře (pokud ještě nějací existují :-) docela zajímavé.

Obrázek 2: Jednoduše ovladatelné vývojové prostředí Basicu-256.

Z repertoáru poměrně velkého množství příkazů a funkcí definovaných v ANSI normě BASICu je možné v bwBASICu použít následující příkazy (text uvedený v hranatých závorkách je samozřejmě nepovinný):

Příkaz/funkce
ABS( number )
ASC( string$ )
ATN( number )
CALL subroutine-name
CASE ELSE | IF partial-expression | constant
CHAIN [MERGE] file-name [, line-number] [, ALL]
CHDIR pathname
CHR$( number )
CINT( number )
CLEAR
CLOSE [[#]file-number]…
CLS
COMMON variable [, variable…]
COS( number )
CSNG( number )
CVD( string$ )
CVI( string$ )
CVS( string$ )
DATA constant[,con­stant]…
DATE$
DEF FNname(arg…)] = expression
DEFDBL letter[-letter](, letter[-letter])…
DEFINT letter[-letter](, letter[-letter])…
DEFSNG letter[-letter](, letter[-letter])…
DEFSTR letter[-letter](, letter[-letter])…
DELETE line[-line]
DIM variable(elemen­ts…)[variable(e­lements…)]…
DO NUM|UNNUM
DO [WHILE expression]
EDIT
ELSE
ELSEIF
END IF | FUNCTION | SELECT | SUB
ENVIRON variable-string = string
ENVIRON$( variable-string )
EOF( device-number )
ERASE variable[, variable]…
ERL
ERR
ERROR number
EXP( number )
FIELD [#] device-number, number AS string-variable
FILES filespec$
FUNCTION
FOR counter = start TO finish [STEP increment]
GET [#] device-number [, record-number]
GOSUB line | label
GOTO line | label
HEX$( number )
IF expression THEN [statement [ELSE statement]]
INKEY$
INPUT [# device-number]|[;][„prompt string“;]list of variables
INSTR( [start-position,] string-searched$, string-pattern$ )
INT( number )
KILL file-name
LEFT$( string$, number-of-spaces )
LEN( string$ )
LET variable = expression
LINE INPUT [[#] device-number,][„prompt string“;] string-variable$
LIST line[-line]
LOAD file-name
LOC( device-number )
LOCATE line, column
LOF( device-number )
LOG( number )
LOOP [UNTIL expression]
LSET string-variable$ = expression
MERGE file-name
MID$( string$, start-position-in-string[, number-of-spaces ] )
MKD$( number )
MKDIR pathname
MKI$( number )
MKS$( number )
NAME old-file-name AS new-file-name
NEW
NEXT [counter]
OCT$( number )
ON variable GOTO|GOSUB line[,line,line,…]
ON ERROR GOSUB line
OPEN „O“|„I“|„R“, [#], file-name [,record length]
OPEN file-name FOR INPUT|OUTPUT|APPEND AS [#]device-number [LEN = record-length]
OPTION BASE number
POS
PRINT [# device-number,][USING format-string$;] expressions…
PUT [#] device-number [, record-number]
QUIT
RANDOMIZE number
READ variable[, variable]…
REM string
RESTORE line
RETURN
RIGHT$( string$, number-of-spaces )
RMDIR pathname
RND( number )
RSET string-variable$ = expression
RUN [line][file-name]
SAVE file-name
SELECT CASE expression
SGN( number )
SIN( number )
SPACE$( number )
SPC( number )
SQR( number )
STOP
STR$( number )
STRING$( number, ascii-value|string$ )
SUB subroutine-name
SWAP variable, variable
SYSTEM
TAB( number )
TAN( number )
TIME$
TIMER
TROFF
TRON
VAL( string$ )
WEND
WHILE expression
WIDTH [# device-number,] number
WRITE [# device-number,] element [, element ]…

Obrázek 3: Grafický demonstrační příklad naprogramovaný a interpretovaný SdlBasicem.

2. Basic-256

Zatímco výše popsaný bwBASIC se svou filozofií i možnostmi blížil prvním interpretrům BASICu používaných na minipočítačích, Basic-256 se již od klasické školy BASICu v mnoha ohledech odklání. Jedná se o interpret doplněný o vývojové prostředí s grafickým uživatelským rozhraním, který byl navržen s ohledem na to, aby se tento dialekt mohl použít při výuce programování, především na středních školách. Tomu odpovídá jak jednoduchost a přehlednost vlastního vývojového prostředí, tak i sémantika jazyka, která samozřejmě podporuje strukturované programování. Na Internetu je dostupná cca 300stránková učebnice programování, v níž jsou použity příklady naprogramované právě v Basicu-256. Nejedná se však v žádném případě o učebnici, která by pouze popisovala syntaxi tohoto jazyka, právě naopak – ukázána je například práce se základními datovými strukturami (seznamy, zásobníkem, frontou) spolu s vysvětlením, jak jsou tyto datové struktury a operace nad nimi interně implementovány. Kromě toho lze v této učebnici najít i mnohé základní algoritmy, například řazení prvků v posloupnosti.

Obrázek 4: Grafické vývojové prostředí Basicu-256 po jeho spuštění v Linuxu s Fluxboxem.

Kromě strukturovaných řídicích konstrukcí lze v Basicu-256 používat i (nechvalně) známé absolutní skoky, tj. příkazy typu GOTO a GOSUB), ovšem čísla řádků jsou nahrazena mnohem čitelnějšími textovými návěštími (label). Čísla řádků jsou považována za speciální typ návěští a jejich použití je doporučováno pouze při převodu starších programů do Basicu-256. Vývojové prostředí Basicu-256 obsahuje kromě velmi jednoduchého textového editoru i možnost zobrazení okna s hodnotami proměnných a taktéž grafickou oblast, do níž je možné provádět vykreslování. Ostatně právě možnost práce s grafikou, i když jsou k dispozici pouze základní grafické příkazy, je pro jazyk určený pro výuku programování nedocenitelná. Pro ukázku, jak vypadá zdrojový kód psaný v dialektu Basicu-256, jsem vybral část jednoduché hry Star Trek, která je odvozená od legendárního Star Treku hraného ještě na mainframech. Povšimněte si použití strukturovaných smyček (WHILE, END WHILE) a podmíněných bloků, ale i příkazu GOTO, za nímž následuje namísto čísla řádku textové návěští:

print "Your mission begins with the Enterprise in quadrant ";
print " (" + (egx+1) + "," + (egy+1) + ")."
while true
    # update ship's condidion
    condition = 0
    if shields < 200 then
        condition = 1
        print "Shields are dangerously low."
    end if
    if nklingonsector > 0 then
        condition = 2
        print "Red Alert - Combat Area"
    end if
    if energy + shields < 500 then
        condition = 2
        print "Total ship energy is dangerously low."
    end if
    if energy + shields < 100 then
        condition = 2
        print "You have insufficient energy to maneuver the ship in space."
        print " You are dead in the water."
        goto badends
    end if
    # get orders
    input "Captian, your orders? ", orders$
    orders$ = upper(left(orders$,3))
    if orders$ = "NAV" then gosub NAV
    if orders$ = "SRS" then gosub SRS
    if orders$ = "LRS" then gosub LRS
    if orders$ = "CHA" then gosub CHA
    if orders$ = "PHA" then gosub PHA
    if orders$ = "TOR" then gosub TOR
    if orders$ = "SHE" then gosub SHE
    if orders$ = "DAM" then gosub DAM
    if orders$ = "DOC" then gosub DOC
    if orders$ = "AWA" then gosub AWA
    if orders$ = "COM" then gosub COM
    if orders$ = "XXX" then gosub XXX
    if orders$ = "HEL" then gosub HEL
end while

Obrázek 5: Struktura integrovaného vývojového prostředí Basicu-256.

Odkazy na stránky související s Basicem-256:

  1. Basic-256 home page
    http://www.ba­sic256.org/in­dex_en
  2. Basic-256 Language Documentation
    http://doc.ba­sic256.org/do­ku.php
  3. Basic-256 Art Gallery
    http://www.ba­sic256.org/ar­tgallery
  4. Basic-256 Tutorial
    http://www.ba­sic256.org/tu­torials
  5. Why BASIC?
    http://www.ba­sic256.org/why­basic
  6. A book to teach ANYBODY how to program a computer (using BASIC)
    http://www.ba­sicbook.org/

Obrázek 6: Jednoduchý program pro vykreslení Mandelbrotovy množiny spuštěný z vývojového prostředí Basicu-256. Na tomto screenshotu můžeme vidět jak využití grafické oblasti, tak i sledování hodnot proměnných při běhu programu.

3. SdlBasic

Třetím dialektem programovacího jazyka BASIC, kterému se v dnešním článku budeme alespoň ve stručnosti věnovat, je SdlBasic. Jedná se o poměrně známý dialekt založený na wxBasicu, který je doplněný o vývojové prostředí s grafickým uživatelským rozhraním a taktéž o poměrně velké množství příkazů a funkcí, pomocí nichž je možné pracovat s knihovnou SDL (Simple DirectMedia Layer). Právě díky dostupnosti SDL bylo v tomto dialektu BASICu naprogramováno poměrně velké množství různých her a grafických dem. SdlBasic byl dokonce portován i na Sony Playstation Portable, což mj. znamená, že většinu programů odladěných v tomto jazyku na osobním počítači (PC) je možné přenést na PSP a tam spustit (pro vývoj lze použít emulátor PSP). Ze syntaktického hlediska se SdlBasic, podobně jako i další dnes popisované dialekty, přibližuje dalším moderním interpretrům a překladačům BASICu, tj. jedná se o plnohodnotný strukturovaný programovací jazyk.

Obrázek 7: Integrované vývojové prostředí SdlBasicu, z něhož byl spuštěný jednoduchý demonstrační příklad.

Jednou z poněkud netypických vlastností, která by mohla programátory při přechodu na SdlBasic překvapit, je to, že u příkazu next se neuvádí jméno řídicí proměnné smyčky (počitadla), tak, jako je tomu u mnoha dalších interpretrů programovacího jazyka BASIC – viz též obrázek číslo 8 se zobrazeným chybovým oknem.

Obrázek 8: SdlBasic při výskytu syntaktické chyby přeruší běh programu a umožní chybnou část kódu opravit.

Podobně jako u dalších dialektů BASICu, i zde si na krátkých programech ukážeme syntaxi SdlBasicu.

Program použitý na obrázku číslo 7, v němž je nejprve otevřeno okno s grafickou plochou o rozměrech 256×256 pixelů a bitovou hloubkou 32bpp, do něhož je prováděno vykreslování po jednotlivých pixelech, tj. na nejnižší úrovni abstrakce:

setdisplay(256,256,32,1)
paper(0xFFFFFF)
ink(0x000000)
pen(0x000000)
cls
for y=0 to 256
    for x=0 to 256
        ink(x+y*256)
        putpixel(x,y)
    next
next
waitkey

Ukázka využití operátoru + pro spojování řetězců a taktéž toho, že číselné proměnné není zapotřebí deklarovat:

setdisplay(320,240,32,1)
paper(8^8-1)
ink(0)
pen(0)
cls
mousehide
for a=1 to 15
    b=rnd(10)
    c=rnd(10)
    if not (b>c) then
        prints(str$(b)+","+str$(c)+": b is not greater than c")
    end if
next
waitkey

Odkazy na stránky související se SdlBasicem:

  1. SdlBasic home page
    http://www.sdlba­sic.altervista­.org/main/
  2. SdlBasic examples
    http://nitrofu­rano.linuxkafe­.com/sdlbasic/
  3. SdlBasic na Wikipedii
    http://en.wiki­pedia.org/wiki/SdlBa­sic
  4. Simple DirectMedia Layer
    http://en.wiki­pedia.org/wiki/Sim­ple_DirectMedi­a_Layer
  5. SDLBASIC – The high-level interpreter for all?
    http://openby­tes.wordpress­.com/2008/11/08/sdlba­sic-the-high-level-interpreter-for-all/

Obrázek 9: Díky velkému množství knihoven, procedur a funkcí, které je možné spolu se SdlBasicem použít, lze relativně jednoduše implementovat například i prohlížečku souborů SVG (Scalable Vector Graphics).

4. Yabasic (Yet Another BASIC)

Čtvrtým dialektem BASICu, s nímž se dnes seznámíme, je Yabasic neboli Yet Another BASIC. Jedná se o dialekt BASICu, který již má za sebou poměrně dlouhý vývoj, neboť jeho první verze vznikla již v roce 1995 a v následujících letech došlo k portaci Yabasicu na další platformy, včetně operačních systémů Microsoft Windows a taktéž Sony PlayStation 2 (což znamená, že je možné pro tuto platformu poměrně snadno vyvíjet například jednodušší hry). Yabasic byl původně interpret ovládaný z příkazového řádku, ovšem dnes je ho možné používat i spolu s poměrně jednoduchým vývojovým prostředím. Ze syntaktického hlediska se jedná o strukturovaný programovací jazyk podporující uživatelské funkce a procedury s parametry, lokální proměnné, strukturované programové smyčky atd. Kromě základních řídicích příkazů, matematických, řetězcových aj. funkcí jsou uživatelům dostupné i příkazy pro práci s grafikou. Pro tvorbu programů s plnohodnotným grafickým uživatelským rozhraním lze využít například GTK-Server popsaný v následující kapitole.

Obrázek 10: Společenská hra Scrabble naprogramovaná v Yabasicu.

Následuje ukázka uživatelské funkce s parametry a lokálními proměnnými, v níž je využita jak počítaná smyčka typu FOR, tak i strukturovaná smyčka typu REPEAT-UNTIL s podmínkou vyhodnocovanou na konci smyčky (jedná se o funkci použitou v jednoduché hře):

sub placebombs(w, h, b)
    local n, rx, ry
    for n = 1 to b
        repeat
            rx = int(ran(w + 1))
            ry = int(ran(h + 1))
        until(grid$(rx, ry) = "" and rx > 0 and ry > 0 and rx <= w and ry <= h)
        grid$(rx, ry) = "x"
    next n
    return
end sub

Obrázek 11: Grafické demo spuštěné v Yabasicu emulujícího PlayStation 2.

Odkazy na stránky související se Yabasicem:

  1. Yabasic home page
    http://www.ya­basic.de/
  2. Yabasic A free BASIC interpreter
    http://yabasic­.basicprogram­ming.org/
  3. Yabasic documentation
    http://www.ya­basic.de/yaba­sic.htm
  4. Yabasic na Wikipedii
    http://en.wiki­pedia.org/wiki/Y­abasic
  5. Programs Written for the YaBasic compiler/inter­preter
    http://web.ukon­line.co.uk/mws­.g/yabasic/in­dex.html
  6. GTK-Server
    http://www.gtk-server.org/
  7. GTK-server na Wikipedii
    http://en.wiki­pedia.org/wiki/GTK-server

5. Yabasic a GTK-Server

Již v předchozí kapitole jsme se zmínili o tom, že aplikace s plnohodnotným grafickým uživatelským rozhraním bylo možné v Yabasicu vytvářet za použití velmi šikovného a poněkud neprávem opomíjeného nástroje: GTK-Serveru. GTK-Server, který je dostupný jak pro mnoho unixových systémů, tak i pro Microsoft Windows, může být spuštěn jako samostatný proces, který se stará o vytváření oken a taktéž všech prvků grafického uživatelského rozhraní zobrazeného v těchto oknech. Aplikace napsaná například v Yabasicu, ale i v BASHi, Forthu, 4th (dialekt Forthu), LISPu či Erlangu, může s GTK-Serverem obousměrně komunikovat několika způsoby – pomocí posílání zpráv přes standardní vstup a výstup, využitím obousměrné roury, použitím dvojice pojmenovaných rour (pipes), přes TCP port (potvrzované spojení) nebo přes protokol UDP (nepotvrzované spojení, při lokálním použití prakticky nehrozí ztráta dat a komunikace je rychlejší než při použití TCP spojení).

Obrázek 12: Program naprogramovaný v Yabasicu, který využívá GTK-Server, spuštěný na Linuxu.

Aplikace, která má svým uživatelům nabídnout plnohodnotné grafické uživatelské rozhraní, musí nejprve spustit GTK-Server, navázat obousměrné spojení se spuštěným procesem a následně posílat příkazy odpovídající voláním funkcí přes aplikační programové rozhraní knihovny GTK. GTK-Server naopak posílá zpět zprávy v případě, že dojde k nějaké události, například ke stlačení tlačítka ve formuláři, výběru položky z list-boxu atd. Pro vytvoření dvojice rour, z nichž jedna je použita pro čtení a druhá pro zápis při komunikaci s GTK-Serverem (což je jedna z pěti možností popsaných v předchozím odstavci), je možné použít následující úryvek kódu napsaného v Yabasicu. Po zavolání procedury SETUP lze v programu používat dvojici „souborů“, k nimž je možné přistupovat pod čísly 1 a 2. Yabasic totiž, jako ostatně velké množství dalších dialektů BASICu, podporuje ve vstupně-výstupních příkazech nepovinná čísla souborů zapisovaná za křížek: PRINT #1, „Hello world“, INPUT #2, A$ atd.

REM Setup pipes
SUB SETUP()
os$ = PEEK$("os")
IF (os$ = "unix") THEN
SYSTEM("gtk-server fifo /tmp/yab.pipe &")
ELSE
SYSTEM("start gtk-server.exe fifo")
SLEEP 0.5
OPEN "\\\\.\\pipe\\out" FOR WRITING AS 1
SLEEP 0.5
OPEN "\\\\.\\pipe\\in" FOR READING AS 2
END IF
SLEEP 1
END SUB

Obrázek 13: Tentýž program, jaký je zobrazený na předchozím obrázku, jenž je spuštěný v operačním systému Microsoft Windows.

6. OpenOffice.org Basic

Jeden z dialektů programovacího jazyka BASIC je použit i ve známém aplikačním balíčku OpenOffice.org, v němž se používá pro programování maker nebo různých rozšíření jednotlivých aplikací v OpenOffice.org, například textového či tabulkového procesoru. Kromě BASICu, který se zde nazývá OpenOffice.org Basic, lze v aplikacích OpenOffice.org používat i další skriptovací jazyky, především BeanShell a JavaScript, popř. lze přes aplikační programové rozhraní využít i Python či Javu. OpenOffice.org Basic se v mnoha ohledech podobá například VBA (Visual Basic for Application) z dílny firmy Microsoft, ale i některým dalším (starším) interpretrům a překladačům Microsoftu, například QBasicu nebo QuickBasicu. Jedná se o dialekt, v němž se nepoužívají čísla řádků ani příkazy pro skok na konkrétní řádky (GOTO, ON GOTO, GOSUB, ON GOSUB); namísto toho jsou použity strukturované příkazy IF-THEN-ELSE a strukturované programové smyčky.

Obrázek 14: Dialog pro výběr, spuštění, smazání či úpravu Basicových maker zobrazený v jedné z aplikací OpenOffice.org.

OpenOffice.org BASICu jsou samozřejmě podporovány i uživatelské funkce a procedury (subrutiny), deklarace proměnných (která může být vynucena pomocí příkazu OPTION EXPLICIT), základní typy dat (Integer, Long Integer, Float, Single, Double, Currency, String, Boolean) a v neposlední řadě i jednorozměrná a vícerozměrná pole. Poměrně zajímavé je, že maximální délka řetězců může být jen 65535 znaků, což poněkud omezuje možnosti použití BASICu například při konverzi dat z tabulkových procesorů (jedním z možných řešení je rozdělit data po jednotlivých řádcích do jednorozměrného pole). U polí je možné zadat jak jejich horní mez, tak i mez dolní, přičemž při nezadání dolní meze má první prvek index roven 0, zatímco u některých dalších dialektů BASICu je to 1.

Obrázek 15: Program napsaný v OpenOffice.org Basicu, který je editován přímo v prostředí OpenOffice.org.

Podobně jako při popisu předchozích dialektů jazyka BASIC, i zde si uvedeme alespoň krátký demonstrační příklad. V tomto příkladu si povšimněte použití lokálních proměnných, počítané smyčky FOR (kde se navíc v čase běhu aplikace zjišťuje délka pole), smyčky typu WHILE-WEND a taktéž strukturovaného příkazu IF-THEN:

Sub GetTableMetaData()
    Dim iType as Long
    Dim m as Integer
    Dim Found as Boolean
    Dim i as Integer
    Dim sFieldName as String
    Dim n as Integer
    Dim WidthIndex as Integer
    Dim oField as Object
    MaxIndex = Ubound(DialogModel.lstSelFields.StringItemList())
    Dim ColumnMap(MaxIndex)as Integer
    FieldNames() = DialogModel.lstSelFields.StringItemList()
    ' Build a structure which maps the position of a selected field (within the selection) to the the column position within
    ' the table. So we ensure that the controls are placed in the same order the according fields are selected.
    For i = 0 To Ubound(FieldNames())
        sFieldName = FieldNames(i)
        Found = False
        n = 0
        While (n< MaxIndex And (Not Found))
            If (FieldNames(n) = sFieldName) Then
                Found = True
                ColumnMap(n) = i
            End If
            n = n + 1
        Wend
    Next i
    For n = 0 to MaxIndex
        sFieldname = FieldNames(n)
        oField = oColumns.GetByName(sFieldName)
        iType = oField.Type
        FieldMetaValues(n,0) = oField.Type
        FieldMetaValues(n,1) = AssignFieldLength(oField.Precision)
        FieldMetaValues(n,2) = GetValueoutofList(iType, WidthList(),1, WidthIndex)
        FieldMetaValues(n,3) = WidthList(WidthIndex,3)
        FieldMetaValues(n,4) = oField.FormatKey
        FieldMetaValues(n,5) = oField.DefaultValue
        FieldMetaValues(n,6) = oField.IsCurrency
        FieldMetaValues(n,7) = oField.Scale
'       If oField.Description <> "" Then
'' Todo: What's wrong with this line?
'           Msgbox oField.Helptext
'       End If
        FieldMetaValues(n,8) = oField.Description
    Next
    ReDim oDBShapeList(MaxIndex) as Object
    ReDim oTCShapeList(MaxIndex) as Object
    ReDim oDBModelList(MaxIndex) as Object
    ReDim oGroupShapeList(MaxIndex) as Object
End Sub

Obrázek 16: Zdrojový kód jedné pomocné aplikace dodávané s OpenOffice.org – instalátor fontů.

7. FreeBASIC

Jedním z nejlépe podporovaných open source dialektů BASICu je s velkou pravděpodobností FreeBASIC. Syntaxe tohoto jazyka byla zvolena s ohledem na to, aby se programátoři znající QBasic nebo Quick Basic nemuseli učit nový programovací jazyk a taktéž z toho důvodu, aby bylo možné převádět postarší DOSovské aplikace psané v BASICu na modernější operační systémy. FreeBASIC obsahuje překladač, pomocí něhož lze vytvářet jak spustitelné aplikace pracující s příkazovým řádkem či grafickým uživatelským rozhraním, tak i statické či dynamické knihovny a objektové soubory (.o, .obj), které lze slinkovat například s céčkovými programy. Samotný programovací jazyk byl (i přes zachování zpětné kompatibility) rozšířen snad ve všech směrech – do jazyka je například implementován preprocesor, lze používat ukazatele na data i ukazatele na funkce, používat inline assembler, programovat multivláknové aplikace, používat pole a řetězce s maximálním rozsahem až 2 GB atd. Přímo v jazyku je zabudována grafická knihovna kompatibilní s QBasicem (právě díky ní byla portována hra Gorilly), ovšem navíc podporující práci se sprity, průhlednost atd.

Obrázek 17: Screenshot ze hry The Griffon Legend naprogramované ve FreeBASICu.

Ukázka práce s ukazateli:

TYPE Node
    PreviousNode AS Node POINTER
    NextNode     AS Node POINTER
END TYPE
DIM CurrentNode AS Node POINTER
CurrentNode->NextNode = NULL
DIM A AS SHORT POINTER, B AS SHORT POINTER, C AS SHORT POINTER POINTER
*A = *B \ **C

Použití preprocesoru pro vytvoření maker:

#DEFINE bar(x,y) ((x) * (y))
#DEFINE foo(x,y) bar(x-y,y-x)
a = foo(b, c)

Obrázek 18: Další screenshot ze hry The Griffon Legend.

Spolu s FreeBasicem je možné použít poměrně velké množství různých knihoven, z nichž ty nejznámější jsou vypsány v následující tabulce:

Název knihovny Stručný popis
Allegro a SDL knihovny používané především při vývoji her (grafika, zvuky, hudba, animace)
BIG_INT a GMP práce s čísly s libovolným rozsahem
cgi-util a fastCGI podpora pro psaní CGI skriptů pro prakticky libovolný webový server
DevIL práce s různými grafickými formáty
fmod podpora pro hudební formáty, mezi jinými pro MODy, MP3, OGG vorbis atd.
GD vytváření obrázků, rendering
GLUT OpenGL Utility Toolkit
GTK+ a wx-c podpora pro vytváření GUI
LibXML a Mini-XML zpracování XML
MySQL rozhraní pro známou open source relační databázi
PDFlib vytváření PDF souborů

Obrázek 19: Raytracer napsaný ve FreeBASICu.

root_podpora

Odkazy na stránky související s FreeBASICem:

  1. FreeBASIC home page
    http://www.fre­ebasic.net/
  2. FreeBASIC Wiki
    http://www.fre­ebasic.net/wi­ki/wikka.php?wak­ka=FBWiki
  3. FreeBASIC Manual
    http://www.fre­ebasic.net/wi­ki/wikka.php?wak­ka=DocToc
  4. FreeBASIC (Wikipedia CZ)
    http://cs.wiki­pedia.org/wiki/Fre­eBASIC
  5. The Griffon Legend
    http://syn9.thin­gie.net/?table=grif­fonlegend

8. Komplexní vývojové prostředí Gambas

Poměrně vyspělý dialekt programovacího jazyka BASIC je použit i ve vývojovém prostředí Gambas, ovšem s ohledem na velké možnosti, které toto prostředí svým uživatelům nabízí (a také kvůli tomu, že byl několikanásobně překročen průměrný rozsah článku), se mu budeme věnovat v paralelně běžícím seriálu, v němž se zabýváme programovacími jazyky i aplikacemi určenými pro výuku programování – Jazyky pro výuku programování.

9. Odkazy na Internetu

  1. Basic-256 home page
    http://www.ba­sic256.org/in­dex_en
  2. Basic-256 Language Documentation
    http://doc.ba­sic256.org/do­ku.php
  3. Basic-256 Art Gallery
    http://www.ba­sic256.org/ar­tgallery
  4. Basic-256 Tutorial
    http://www.ba­sic256.org/tu­torials
  5. Why BASIC?
    http://www.ba­sic256.org/why­basic
  6. A book to teach ANYBODY how to program a computer (using BASIC)
    http://www.ba­sicbook.org/
  7. SdlBasic home page
    http://www.sdlba­sic.altervista­.org/main/
  8. SdlBasic examples
    http://nitrofu­rano.linuxkafe­.com/sdlbasic/
  9. SdlBasic na Wikipedii
    http://en.wiki­pedia.org/wiki/SdlBa­sic
  10. Simple DirectMedia Layer
    http://en.wiki­pedia.org/wiki/Sim­ple_DirectMedi­a_Layer
  11. SDLBASIC – The high-level interpreter for all?
    http://openby­tes.wordpress­.com/2008/11/08/sdlba­sic-the-high-level-interpreter-for-all/
  12. Yabasic home page
    http://www.ya­basic.de/
  13. Yabasic A free BASIC interpreter
    http://yabasic­.basicprogram­ming.org/
  14. Yabasic documentation
    http://www.ya­basic.de/yaba­sic.htm
  15. Yabasic na Wikipedii
    http://en.wiki­pedia.org/wiki/Y­abasic
  16. Programs Written for the YaBasic compiler/inter­preter
    http://web.ukon­line.co.uk/mws­.g/yabasic/in­dex.html
  17. GTK-Server
    http://www.gtk-server.org/
  18. GTK-server na Wikipedii
    http://en.wiki­pedia.org/wiki/GTK-server
  19. GWBASIC User's Manual
    http://www.an­tonis.de/qbebo­oks/gwbasman/in­dex2.html
  20. GFA-BASIC
    http://sites.go­ogle.com/site/gfa­basic16/
  21. E-mail od tvůrce GW-Basicu
    http://www.clas­siccmp.org/pi­permail/cctech/20­05-April/042999.html
  22. Mystery House
    http://en.wiki­pedia.org/wiki/Mys­tery_House
  23. Mystery House Taken Over
    http://turbulen­ce.org/Works/mys­tery/
  24. Ultima I: The First Age of Darkness
    http://en.wiki­pedia.org/wiki/Ul­tima_I
  25. The Original BASIC
    http://www.tru­ebasic.com/
  26. BASIC – Beginners All-purpose Symbolic Instruction Code
    http://hopl.mur­doch.edu.au/show­language.prx?ex­p=176
  27. FreeBASIC home page
    http://www.fre­ebasic.net/
  28. FreeBASIC Wiki
    http://www.fre­ebasic.net/wi­ki/wikka.php?wak­ka=FBWiki
  29. FreeBASIC Manual
    http://www.fre­ebasic.net/wi­ki/wikka.php?wak­ka=DocToc
  30. FreeBASIC (Wikipedia CZ)
    http://cs.wiki­pedia.org/wiki/Fre­eBASIC
  31. The Griffon Legend
    http://syn9.thin­gie.net/?table=grif­fonlegend
  32. QBasicJedi
    http://www.fre­ewebs.com/qba­sicjedi/
  33. QBasic/QuickBasic Downloads
    http://www.fre­ewebs.com/qba­sicjedi/qbdow­nloads.html
  34. QuickBASIC (Wikipedia CZ)
    http://cs.wiki­pedia.org/wiki/Qu­ickBASIC
  35. QBasic.com
    http://www.qba­sic.com/
  36. QBasic (Wikipedia)
    http://cs.wiki­pedia.org/wiki/QBa­sic
  37. Dialling with QBASIC
    http://www.my­sundial.ca/tsp/qba­sic.html
  38. Visual Basic .NET (česky)
    http://www.vbnet­.cz/
  39. BASIC (Wikipedia EN)
    http://en.wiki­pedia.org/wiki/BA­SIC
  40. BASIC (Wikipedia CZ)
    http://cs.wiki­pedia.org/wiki/BA­SIC
  41. Turbo BASIC (Wikipedia CZ)
    http://cs.wiki­pedia.org/wiki/Tur­bo_BASIC
  42. More BASIC Computer Games
    http://www.ata­riarchives.or­g/morebasicga­mes/
  43. How to build an interpreter in Java, Part 1: The BASICs
    http://www.ja­vaworld.com/jw-05–1997/jw-05-indepth.html
  44. Apple I
    http://applemu­seum.bott.org/sec­tions/computer­s/a1.html
  45. The Apple 1 history
    http://apple2his­tory.org/histo­ry/ah02.html
  46. The Apple 2 history
    http://apple2his­tory.org/histo­ry/ah03.html
  47. INTEGER BASIC Reference
    http://www.lan­dsnail.com/a2ref2­.htm
  48. APPLESOFT Reference
    http://www.lan­dsnail.com/a2ref­.htm
  49. Apple II Programming
    http://home.swbe­ll.net/rubywan­d/csa2pfaq.html
  50. Applesoft Lite: Applesoft BASIC for the Replica-1
    http://cowgod­.org/replica1/ap­plesoft/
  51. Simons' BASIC
    http://en.wiki­pedia.org/wiki/Si­mons'_BASIC
  52. 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
  53. BASIC
    <a href=„http:www.c64-wiki.com/index­.php/BASIC“>http://­www.c64-wiki.com/index­.php/BASIC
  54. C64 Wiki: Simons Basic
    http://www.c64-wiki.de/index­.php/Simons_Ba­sic
  55. Simons' Basic (evaluation)
    http://www.ata­rimagazines.com/cre­ative/v9n11/60_­Simons_Basic.php
  56. Bill Gates' Personal Easter Eggs in 8 Bit BASIC http://www.pa­getable.com/?p=43
  57. 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
  58. Didaktik Gama návod k obsluze
    http://www.gran­djihlava.cz/tmp/na­vod.pdf
  59. Můj přítel Didaktik Gama
    http://www.gran­djihlava.cz/tmp/pri­teldidaktik.pdf
  60. Tip & trip pro Didaktik
    http://www.gran­djihlava.cz/tmp/tip­trikdidaktik.pdf
  61. Muzeum československých mikropočítačů
    http://cs-pocitace.ic.cz/
  62. Popis modulů a aplikací pro IQ-151
    http://cs.fel­k.cvut.cz/~bi­ly/iq151/
  63. IQ 151
    http://osmi.tar­bik.com/cssr/iq­151.html
  64. „Domácí počítače“ nedávné minulosti
    http://www.fi­.muni.cz/usr/jku­cera/pv109/xkr­ejcir.htm
  65. ZPA: IQ-151
    http://www.ho­mecomputer.de/pa­ges/easteurope_cz­.html#iq151
  66. Zrození IQ-151
    http://www.iq151­.net/index.htm
  67. Stručná historie počítače IQ150/IQ151
    http://www.iq151­.net/history.htm
  68. Old Computers – IQ 151
    http://www.old-computers.com/MU­SEUM/computer­.asp?st=1&c=1045
  69. Wikipedia EN: IQ 151
    http://en.wiki­pedia.org/wiki/IQ151
  70. Wikipedia CZ: IQ 151
    http://cs.wiki­pedia.org/wiki/IQ151
  71. ZX-Spectrum Child
    http://www.dot­kam.com/2008/11­/19/zx-spectrum-child/
  72. Speccy.cz
    http://www.spec­cy.cz/
  73. Planet Sinclair
    http://www.nvg­.ntnu.no/sincla­ir/
  74. World of Spectrum
    http://www.wor­ldofspectrum.or­g/
  75. Sinclair BASIC Reference
    http://www.wor­ldofspectrum.or­g/faq/referen­ce/BASICReferen­ce.htm
  76. ZX Basic Manual
    http://www.wor­ldofspectrum.or­g/ZXBasicManu­al/
  77. ZX81 BASIC Programming
    http://www.wor­ldofspectrum.or­g/ZX81BasicPro­gramming/
  78. Sinclair BASIC History
    http://scratchpad­.wikia.com/wi­ki/Sinclair_BA­SIC_History
  79. Sinclair BASIC (Wikipedia CZ)
    http://cs.wiki­pedia.org/wiki/Sin­clair_BASIC
  80. Sinclair BASIC (Wikipedia EN)
    http://en.wiki­pedia.org/wiki/Sin­clair_BASIC
  81. Beta BASIC (Wikipedia EN)
    http://en.wiki­pedia.org/wiki/Be­ta_BASIC
  82. Beta BASIC (Wikipedia CZ)
    http://cs.wiki­pedia.org/wiki/Be­ta_BASIC
  83. BETA BASIC NEWSLETTER No 8
    http://spectrum128­.ru/help/Beta­BasicNewsletter8­.pdf
  84. R. T. RUSSELL: The home of BBC BASIC
    http://www.rtrus­sell.co.uk/
  85. R. T. RUSSELL: A History of BBC BASIC
    http://www.cix­.co.uk/~rrusse­ll/bbcbasic/his­tory.html
  86. SuperBASIC (Wikipedia EN)
    http://en.wiki­pedia.org/wiki/Su­perBASIC
  87. SuperBASIC (Wikipedia CZ)
    http://en.wiki­pedia.org/wiki/Su­perBASIC
  88. Laser Basic/Laser Compiler
    http://www.sin­cuser.f9.co.uk/049/la­ser.htm
  89. Laser BASIC (Wikipedia CZ)
    http://cs.wiki­pedia.org/wiki/La­ser_BASIC
  90. BBC BASIC
    http://www.bbcba­sic.co.uk/bbcba­sic.html
  91. BBC BASIC
    http://mdfs.net/Sof­tware/BBCBasic/
  92. BBC BASIC (Z80) for the ZX Spectrum
    http://mdfs.net/Sof­tware/BBCBasic/Spec­trum/
  93. BBC BASIC (Wikipedia CZ)
    http://en.wiki­pedia.org/wiki/BBC_BA­SIC
  94. BeebWiki – 8-bit Acorn Computer Wiky
    http://beebwi­ki.jonripley.com/Ma­in_Page
  95. Porovnání osmibitů
    http://porovna­ni8bitu.spaces­.live.com/
  96. Rosetta Code – Main Page
    http://rosetta­code.org/wiki/Ma­in_Page
  97. Rosetta Code – Category Basic
    http://rosetta­code.org/wiki/Ca­tegory:BASIC
  98. Dartmouth College Computation Center. 1964.-The original Dartmouth BASIC manual
    http://www.bit­savers.org/pdf/dar­tmouth/BASIC_Oc­t64.pdf

Byl pro vás článek přínosný?

Autor článku

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