Obsah
4. Yabasic (Yet Another BASIC)
8. Komplexní vývojové prostředí Gambas
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[,constant]… |
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(elements…)[variable(elements…)]… |
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:
- Basic-256 home page
http://www.basic256.org/index_en - Basic-256 Language Documentation
http://doc.basic256.org/doku.php - Basic-256 Art Gallery
http://www.basic256.org/artgallery - Basic-256 Tutorial
http://www.basic256.org/tutorials - Why BASIC?
http://www.basic256.org/whybasic - A book to teach ANYBODY how to program a computer (using BASIC)
http://www.basicbook.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:
- SdlBasic home page
http://www.sdlbasic.altervista.org/main/ - SdlBasic examples
http://nitrofurano.linuxkafe.com/sdlbasic/ - SdlBasic na Wikipedii
http://en.wikipedia.org/wiki/SdlBasic - Simple DirectMedia Layer
http://en.wikipedia.org/wiki/Simple_DirectMedia_Layer - SDLBASIC – The high-level interpreter for all?
http://openbytes.wordpress.com/2008/11/08/sdlbasic-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:
- Yabasic home page
http://www.yabasic.de/ - Yabasic A free BASIC interpreter
http://yabasic.basicprogramming.org/ - Yabasic documentation
http://www.yabasic.de/yabasic.htm - Yabasic na Wikipedii
http://en.wikipedia.org/wiki/Yabasic - Programs Written for the YaBasic compiler/interpreter
http://web.ukonline.co.uk/mws.g/yabasic/index.html - GTK-Server
http://www.gtk-server.org/ - GTK-server na Wikipedii
http://en.wikipedia.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.
V 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.
Odkazy na stránky související s FreeBASICem:
- FreeBASIC home page
http://www.freebasic.net/ - FreeBASIC Wiki
http://www.freebasic.net/wiki/wikka.php?wakka=FBWiki - FreeBASIC Manual
http://www.freebasic.net/wiki/wikka.php?wakka=DocToc - FreeBASIC (Wikipedia CZ)
http://cs.wikipedia.org/wiki/FreeBASIC - The Griffon Legend
http://syn9.thingie.net/?table=griffonlegend
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
- Basic-256 home page
http://www.basic256.org/index_en - Basic-256 Language Documentation
http://doc.basic256.org/doku.php - Basic-256 Art Gallery
http://www.basic256.org/artgallery - Basic-256 Tutorial
http://www.basic256.org/tutorials - Why BASIC?
http://www.basic256.org/whybasic - A book to teach ANYBODY how to program a computer (using BASIC)
http://www.basicbook.org/ - SdlBasic home page
http://www.sdlbasic.altervista.org/main/ - SdlBasic examples
http://nitrofurano.linuxkafe.com/sdlbasic/ - SdlBasic na Wikipedii
http://en.wikipedia.org/wiki/SdlBasic - Simple DirectMedia Layer
http://en.wikipedia.org/wiki/Simple_DirectMedia_Layer - SDLBASIC – The high-level interpreter for all?
http://openbytes.wordpress.com/2008/11/08/sdlbasic-the-high-level-interpreter-for-all/ - Yabasic home page
http://www.yabasic.de/ - Yabasic A free BASIC interpreter
http://yabasic.basicprogramming.org/ - Yabasic documentation
http://www.yabasic.de/yabasic.htm - Yabasic na Wikipedii
http://en.wikipedia.org/wiki/Yabasic - Programs Written for the YaBasic compiler/interpreter
http://web.ukonline.co.uk/mws.g/yabasic/index.html - GTK-Server
http://www.gtk-server.org/ - GTK-server na Wikipedii
http://en.wikipedia.org/wiki/GTK-server - GWBASIC User's Manual
http://www.antonis.de/qbebooks/gwbasman/index2.html - GFA-BASIC
http://sites.google.com/site/gfabasic16/ - E-mail od tvůrce GW-Basicu
http://www.classiccmp.org/pipermail/cctech/2005-April/042999.html - Mystery House
http://en.wikipedia.org/wiki/Mystery_House - Mystery House Taken Over
http://turbulence.org/Works/mystery/ - Ultima I: The First Age of Darkness
http://en.wikipedia.org/wiki/Ultima_I - The Original BASIC
http://www.truebasic.com/ - BASIC – Beginners All-purpose Symbolic Instruction Code
http://hopl.murdoch.edu.au/showlanguage.prx?exp=176 - FreeBASIC home page
http://www.freebasic.net/ - FreeBASIC Wiki
http://www.freebasic.net/wiki/wikka.php?wakka=FBWiki - FreeBASIC Manual
http://www.freebasic.net/wiki/wikka.php?wakka=DocToc - FreeBASIC (Wikipedia CZ)
http://cs.wikipedia.org/wiki/FreeBASIC - The Griffon Legend
http://syn9.thingie.net/?table=griffonlegend - QBasicJedi
http://www.freewebs.com/qbasicjedi/ - QBasic/QuickBasic Downloads
http://www.freewebs.com/qbasicjedi/qbdownloads.html - QuickBASIC (Wikipedia CZ)
http://cs.wikipedia.org/wiki/QuickBASIC - QBasic.com
http://www.qbasic.com/ - QBasic (Wikipedia)
http://cs.wikipedia.org/wiki/QBasic - Dialling with QBASIC
http://www.mysundial.ca/tsp/qbasic.html - Visual Basic .NET (česky)
http://www.vbnet.cz/ - BASIC (Wikipedia EN)
http://en.wikipedia.org/wiki/BASIC - BASIC (Wikipedia CZ)
http://cs.wikipedia.org/wiki/BASIC - Turbo BASIC (Wikipedia CZ)
http://cs.wikipedia.org/wiki/Turbo_BASIC - More BASIC Computer Games
http://www.atariarchives.org/morebasicgames/ - How to build an interpreter in Java, Part 1: The BASICs
http://www.javaworld.com/jw-05–1997/jw-05-indepth.html - Apple I
http://applemuseum.bott.org/sections/computers/a1.html - The Apple 1 history
http://apple2history.org/history/ah02.html - The Apple 2 history
http://apple2history.org/history/ah03.html - INTEGER BASIC Reference
http://www.landsnail.com/a2ref2.htm - APPLESOFT Reference
http://www.landsnail.com/a2ref.htm - Apple II Programming
http://home.swbell.net/rubywand/csa2pfaq.html - Applesoft Lite: Applesoft BASIC for the Replica-1
http://cowgod.org/replica1/applesoft/ - Simons' BASIC
http://en.wikipedia.org/wiki/Simons'_BASIC - Simon's Basic
http://www.lemon64.com/?mainurl=http%3Awww.lemon64.com/museum/list.php%3Flineoffset%3D54%26genre%3Dmanualmisc - BASIC
<a href=„http:www.c64-wiki.com/index.php/BASIC“>http://www.c64-wiki.com/index.php/BASIC - C64 Wiki: Simons Basic
http://www.c64-wiki.de/index.php/Simons_Basic - Simons' Basic (evaluation)
http://www.atarimagazines.com/creative/v9n11/60_Simons_Basic.php - Bill Gates' Personal Easter Eggs in 8 Bit BASIC http://www.pagetable.com/?p=43
- 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.grandjihlava.cz/tmp/kladivo.pdf - Didaktik Gama návod k obsluze
http://www.grandjihlava.cz/tmp/navod.pdf - Můj přítel Didaktik Gama
http://www.grandjihlava.cz/tmp/priteldidaktik.pdf - Tip & trip pro Didaktik
http://www.grandjihlava.cz/tmp/tiptrikdidaktik.pdf - Muzeum československých mikropočítačů
http://cs-pocitace.ic.cz/ - Popis modulů a aplikací pro IQ-151
http://cs.felk.cvut.cz/~bily/iq151/ - IQ 151
http://osmi.tarbik.com/cssr/iq151.html - „Domácí počítače“ nedávné minulosti
http://www.fi.muni.cz/usr/jkucera/pv109/xkrejcir.htm - ZPA: IQ-151
http://www.homecomputer.de/pages/easteurope_cz.html#iq151 - Zrození IQ-151
http://www.iq151.net/index.htm - Stručná historie počítače IQ150/IQ151
http://www.iq151.net/history.htm - Old Computers – IQ 151
http://www.old-computers.com/MUSEUM/computer.asp?st=1&c=1045 - Wikipedia EN: IQ 151
http://en.wikipedia.org/wiki/IQ151 - Wikipedia CZ: IQ 151
http://cs.wikipedia.org/wiki/IQ151 - ZX-Spectrum Child
http://www.dotkam.com/2008/11/19/zx-spectrum-child/ - Speccy.cz
http://www.speccy.cz/ - Planet Sinclair
http://www.nvg.ntnu.no/sinclair/ - World of Spectrum
http://www.worldofspectrum.org/ - Sinclair BASIC Reference
http://www.worldofspectrum.org/faq/reference/BASICReference.htm - ZX Basic Manual
http://www.worldofspectrum.org/ZXBasicManual/ - ZX81 BASIC Programming
http://www.worldofspectrum.org/ZX81BasicProgramming/ - Sinclair BASIC History
http://scratchpad.wikia.com/wiki/Sinclair_BASIC_History - Sinclair BASIC (Wikipedia CZ)
http://cs.wikipedia.org/wiki/Sinclair_BASIC - Sinclair BASIC (Wikipedia EN)
http://en.wikipedia.org/wiki/Sinclair_BASIC - Beta BASIC (Wikipedia EN)
http://en.wikipedia.org/wiki/Beta_BASIC - Beta BASIC (Wikipedia CZ)
http://cs.wikipedia.org/wiki/Beta_BASIC - BETA BASIC NEWSLETTER No 8
http://spectrum128.ru/help/BetaBasicNewsletter8.pdf - R. T. RUSSELL: The home of BBC BASIC
http://www.rtrussell.co.uk/ - R. T. RUSSELL: A History of BBC BASIC
http://www.cix.co.uk/~rrussell/bbcbasic/history.html - SuperBASIC (Wikipedia EN)
http://en.wikipedia.org/wiki/SuperBASIC - SuperBASIC (Wikipedia CZ)
http://en.wikipedia.org/wiki/SuperBASIC - Laser Basic/Laser Compiler
http://www.sincuser.f9.co.uk/049/laser.htm - Laser BASIC (Wikipedia CZ)
http://cs.wikipedia.org/wiki/Laser_BASIC - BBC BASIC
http://www.bbcbasic.co.uk/bbcbasic.html - BBC BASIC
http://mdfs.net/Software/BBCBasic/ - BBC BASIC (Z80) for the ZX Spectrum
http://mdfs.net/Software/BBCBasic/Spectrum/ - BBC BASIC (Wikipedia CZ)
http://en.wikipedia.org/wiki/BBC_BASIC - BeebWiki – 8-bit Acorn Computer Wiky
http://beebwiki.jonripley.com/Main_Page - Porovnání osmibitů
http://porovnani8bitu.spaces.live.com/ - Rosetta Code – Main Page
http://rosettacode.org/wiki/Main_Page - Rosetta Code – Category Basic
http://rosettacode.org/wiki/Category:BASIC - Dartmouth College Computation Center. 1964.-The original Dartmouth BASIC manual
http://www.bitsavers.org/pdf/dartmouth/BASIC_Oct64.pdf