1. Úvod do X11-Basic
X11-Basic je interpretovaný programovací jazyk založený na klasickém BASICu (GFA-BASIC / Atari ST tradice). Na Windows běží přes SDL knihovnu a nabízí grafiku, síťovou komunikaci, matematické funkce a přístup k systémovým voláním.
Verze pro Windows: Používá SDL (Simple DirectMedia Layer) jako grafický backend místo X11. Většina příkazů funguje identicky jako na Linuxu. Spouštění: xbasic.exe program.bas nebo interaktivně xbasic.exe.
Klíčové vlastnosti
Interpretr s možností kompilace do pseudokódu, podpora strukturovaného programování (procedury, funkce, lokální proměnné), 2D grafika (SDL okno), GUI dialogy, práce se soubory, síťová komunikace přes sockety, matematická knihovna včetně matic a FFT, kompatibilita s GFA-BASIC syntaxí.
2. Instalace na Windows
2.1 Stažení
Oficiální stránka: x11-basic.sourceforge.net
Stáhněte Windows SDL balíček (ZIP archiv). Rozbalte do libovolného adresáře, např. C:\X11Basic\.
2.2 Obsah balíčku
| Soubor | Popis |
xbasic.exe | Hlavní interpretr |
xbc.exe | Compiler (bytekód) |
xbvm.exe | Virtual machine pro bytekód |
xb2c.exe | Překladač do C |
SDL.dll / SDL2.dll | SDL runtime knihovna |
examples/ | Ukázkové programy |
2.3 Spuštění
REM Interaktivní mód (REPL):
C:\X11Basic\xbasic.exe
REM Spuštění programu:
C:\X11Basic\xbasic.exe mujprogram.bas
REM Kompilace do bytekódu:
C:\X11Basic\xbc.exe mujprogram.bas -o mujprogram.b
REM Spuštění bytekódu:
C:\X11Basic\xbvm.exe mujprogram.b
Pozor: Na Windows SDL verzi nefungují některé X11-specifické příkazy (ROOTWINDOW, XCONNECT apod.). Grafické okno se otevře přes SDL automaticky při prvním grafickém příkazu.
3. Základy jazyka
3.1 Struktura programu
' ============================================
' X11-Basic program - komentáře uvádíme '
' nebo klíčovým slovem REM
' ============================================
REM Každý příkaz na samostatném řádku
REM Řádky NEMAJÍ čísla (není nutné)
REM Více příkazů na řádku oddělujeme :
PRINT "Ahoj" : PRINT "Svete"
' Program se ukončí příkazem END nebo QUIT
END
3.2 Výstup
PRINT "Ahoj, světe!"
PRINT "Číslo: ";42
PRINT "PI = ";PI
PRINT ' prázdný řádek
PRINT "A","B","C" ' tabulátorová zarážka
PRINT "X"; ' středník = bez nového řádku
' Formátovaný výstup
PRINT USING "###.##", 3.14159
PRINT USING "$$#,###.##", 12345.6
' Výstup do grafického okna
TEXT 100,100,"Text v grafickém okně"
3.3 Vstup
INPUT "Zadejte jméno: ";jmeno$
INPUT "Zadejte číslo: ";cislo
LINEINPUT "Celý řádek: ";radek$
' Vstup klávesy (bez čekání)
a$=INKEY$
IF a$<>"" THEN PRINT "Stisknuto: ";a$
4. Proměnné a datové typy
4.1 Typy proměnných
| Přípona | Typ | Příklad |
| (žádná) | Float (64-bit double) | x=3.14 |
% | Integer (32-bit) | pocet%=42 |
$ | String (řetězec) | jmeno$="Pavel" |
!() | Float pole | DIM a(10) |
%() | Integer pole | DIM b%(10) |
$() | String pole | DIM c$(10) |
4.2 Přiřazení a konstanty
' Přiřazení
x=100
jmeno$="X11-Basic"
pocet%=0
' Vestavěné konstanty
PRINT PI ' 3.14159265...
PRINT TRUE ' -1
PRINT FALSE ' 0
' Přetypování
a%=INT(3.7) ' a%=3
b=VAL("123.45") ' b=123.45
c$=STR$(42) ' c$="42"
4.3 Operátory
| Kategorie | Operátory |
| Aritmetické | + - * / MOD ^ |
| Porovnávací | = <> < > <= >= |
| Logické | AND OR NOT XOR |
| Bitové | AND OR XOR NOT (na integerech) |
| Řetězcové | + (spojení) |
5. Řízení toku programu
5.1 IF...THEN...ELSE...ENDIF
' Jednořádkové
IF x>10 THEN PRINT "Velké"
' Blokové
IF x>100
PRINT "Velmi velké"
ELSE IF x>10
PRINT "Střední"
ELSE
PRINT "Malé"
ENDIF
5.2 SELECT...CASE
SELECT volba%
CASE 1
PRINT "Jedna"
CASE 2,3
PRINT "Dva nebo tři"
CASE 4 TO 10
PRINT "Čtyři až deset"
DEFAULT
PRINT "Jiná hodnota"
ENDSELECT
5.3 Cykly FOR...NEXT
' Klasický FOR
FOR i=1 TO 10
PRINT i
NEXT i
' S krokem
FOR i=10 TO 0 STEP -2
PRINT i
NEXT i
' EXIT IF pro předčasný konec
FOR i=1 TO 1000
EXIT IF i*i>500
PRINT i
NEXT i
5.4 Cyklus WHILE...WEND
x=1
WHILE x<100
PRINT x
x=x*2
WEND
5.5 Cyklus REPEAT...UNTIL
REPEAT
INPUT "Zadejte kladné číslo: ";n
UNTIL n>0
PRINT "Zadáno: ";n
5.6 Cyklus DO...LOOP
DO
a$=INKEY$
IF a$<>"" THEN PRINT "Klávesa: ";ASC(a$)
PAUSE 0.05
LOOP
5.7 GOTO a GOSUB (legacy)
' GOTO a GOSUB fungují, ale doporučeny jsou procedury
GOTO dalsi
PRINT "Toto se nevypíše"
dalsi:
PRINT "Přeskočeno sem"
' GOSUB / RETURN
GOSUB podprogram
PRINT "Zpět"
END
podprogram:
PRINT "V podprogramu"
RETURN
6. Procedury a funkce
6.1 Definice procedury
' Definice procedury (bez návratové hodnoty)
PROCEDURE pozdrav(jmeno$)
LOCAL text$
text$="Ahoj, "+jmeno$+"!"
PRINT text$
RETURN
' Volání
pozdrav("Pavel")
@pozdrav("Svět") ' @ je volitelný prefix
6.2 Definice funkce
' Funkce s návratovou hodnotou
FUNCTION faktorial(n)
LOCAL vysledek
IF n<=1
RETURN 1
ELSE
RETURN n*faktorial(n-1)
ENDIF
ENDFUNCTION
PRINT "5! = ";faktorial(5)
' Řetězcová funkce
FUNCTION opakuj$(s$,n%)
LOCAL vysledek$,i%
vysledek$=""
FOR i%=1 TO n%
vysledek$=vysledek$+s$
NEXT i%
RETURN vysledek$
ENDFUNCTION
PRINT opakuj$("*",20)
6.3 Lokální proměnné
PROCEDURE demo
LOCAL a,b,c$ ' lokální pro tuto proceduru
a=10
b=20
c$="lokální"
PRINT a,b,c$
RETURN
7. Práce s řetězci
7.1 Řetězcové funkce
| Funkce | Popis | Příklad |
LEN(s$) | Délka řetězce | LEN("Ahoj")→4 |
LEFT$(s$,n) | Levých n znaků | LEFT$("Hello",3)→"Hel" |
RIGHT$(s$,n) | Pravých n znaků | RIGHT$("Hello",2)→"lo" |
MID$(s$,p,n) | Podřetězec od p, n znaků | MID$("Hello",2,3)→"ell" |
UPPER$(s$) | Velká písmena | UPPER$("ahoj")→"AHOJ" |
LOWER$(s$) | Malá písmena | LOWER$("AHOJ")→"ahoj" |
TRIM$(s$) | Ořízne mezery | TRIM$(" x ")→"x" |
INSTR(s$,h$) | Pozice podřetězce | INSTR("abcdef","cd")→3 |
STR$(n) | Číslo → řetězec | STR$(42)→"42" |
VAL(s$) | Řetězec → číslo | VAL("3.14")→3.14 |
CHR$(n) | ASCII kód → znak | CHR$(65)→"A" |
ASC(s$) | Znak → ASCII kód | ASC("A")→65 |
SPACE$(n) | n mezer | SPACE$(5)→" " |
STRING$(n,s$) | Opakování znaku | STRING$(3,"*")→"***" |
REPLACE$(s$,a$,b$) | Nahrazení | REPLACE$("abc","b","X")→"aXc" |
WORD$(s$,n) | n-té slovo | WORD$("A B C",2)→"B" |
WORT_SEP | Oddělovač slov | výchozí je mezera |
7.2 Demo: Práce s řetězci
text$="X11-Basic pro Windows"
PRINT "Délka: ";LEN(text$)
PRINT "Velká: ";UPPER$(text$)
PRINT "Prvních 9: ";LEFT$(text$,9)
PRINT "Od 5, 5 znaků: ";MID$(text$,5,5)
PRINT "Pozice 'pro': ";INSTR(text$,"pro")
' Rozdělení na slova
FOR i=1 TO 3
PRINT "Slovo ";i;": ";WORD$(text$,i)
NEXT i
' Binární/hex konverze
PRINT BIN$(255) ' "11111111"
PRINT HEX$(255) ' "FF"
PRINT OCT$(255) ' "377"
8. Pole (Arrays)
8.1 Deklarace a práce s poli
' Jednorozměrná pole (indexy od 0!)
DIM a(10) ' 11 prvků: a(0) až a(10)
DIM b%(5) ' integer pole
DIM jmena$(3) ' string pole
' Naplnění
FOR i=0 TO 10
a(i)=i*i
NEXT i
jmena$(0)="Adam"
jmena$(1)="Bára"
jmena$(2)="Cyril"
' Vícerozměrná pole
DIM matice(3,3)
FOR r=0 TO 3
FOR s=0 TO 3
matice(r,s)=r*4+s
NEXT s
NEXT r
' Změna velikosti
DIM a(20) ' pole se přealokuje
' ARRAYFILL - naplnění hodnotou
DIM pole(100)
ARRAYFILL pole(),0 ' vynulování
' SORT - řazení pole
DIM x(5)
x(0)=5 : x(1)=2 : x(2)=8 : x(3)=1 : x(4)=4
SORT x(),5
FOR i=0 TO 4
PRINT x(i);" ";
NEXT i
PRINT
9. Práce se soubory
9.1 Základní I/O
' Otevření pro zápis
OPEN "O",#1,"test.txt"
PRINT #1,"Řádek 1"
PRINT #1,"Řádek 2"
PRINT #1,"Hodnota: ";42
CLOSE #1
' Otevření pro čtení
OPEN "I",#1,"test.txt"
WHILE NOT EOF(#1)
LINEINPUT #1,radek$
PRINT radek$
WEND
CLOSE #1
' Otevření pro přidání
OPEN "A",#1,"test.txt"
PRINT #1,"Přidaný řádek"
CLOSE #1
9.2 Binární soubory
' Binární zápis
OPEN "O",#1,"data.bin"
BPUT #1,VARPTR(x),LEN(x)
CLOSE #1
' Binární čtení
OPEN "I",#1,"data.bin"
BGET #1,VARPTR(y),LEN(y)
CLOSE #1
9.3 Souborové funkce
| Funkce/Příkaz | Popis |
EXIST(soubor$) | Existuje soubor? (TRUE/FALSE) |
SIZE(soubor$) | Velikost souboru v bajtech |
KILL soubor$ | Smazání souboru |
RENAME old$,new$ | Přejmenování |
MKDIR adresar$ | Vytvoření adresáře |
RMDIR adresar$ | Smazání adresáře |
CHDIR adresar$ | Změna adresáře |
DIR$(mask$) | Výpis souborů |
LOF(#n) | Délka otevřeného souboru |
LOC(#n) | Pozice v souboru |
SEEK #n,pos | Nastavení pozice |
EOF(#n) | Konec souboru? |
10. Grafika (SDL)
10.1 Grafické okno
' Velikost okna (nutno zavolat před grafikou)
SIZEW ,640,480 ' šířka, výška
' Nebo starší způsob
' SCREEN 640,480
' Vyčištění obrazovky
CLS
CLR ' vyčistí proměnné + obrazovku
' Barvy: COLOR přední, pozadí
' Barvy se zadávají jako RGB hodnota
COLOR COLOR_RGB(1,0,0) ' červená
COLOR COLOR_RGB(0,1,0) ' zelená
COLOR COLOR_RGB(0,0,1) ' modrá
COLOR COLOR_RGB(1,1,1) ' bílá
COLOR COLOR_RGB(0,0,0) ' černá
10.2 Základní kreslení
' Bod
PLOT 100,100
PSET 200,200 ' alternativa
' Čára
LINE 0,0,640,480
DRAW x1,y1 TO x2,y2
' Obdélník
BOX 10,10,200,150
' Vyplněný obdélník
PBOX 10,10,200,150
' Kruhy a elipsy
CIRCLE 320,240,100 ' kruh (x,y,r)
PCIRCLE 320,240,100 ' vyplněný kruh
ELLIPSE 320,240,100,60 ' elipsa (x,y,rx,ry)
PELLIPSE 320,240,100,60 ' vyplněná elipsa
' Oblouk
ARC 320,240,100,0,PI ' oblouk
' Čára libovolná
DRAW 100,100 TO 200,150 TO 300,100
' Text
TEXT 100,200,"Hello X11-Basic!"
DEFTEXT 1,0,0,24 ' styl,osa,úhel,velikost
TEXT 100,250,"Velký text"
10.3 Pokročilá grafika
' Vyplnění oblasti
FILL 320,240
' GET/PUT - uložení a obnovení části obrazovky
GET 0,0,100,100,blok$ ' uloží oblast do řetězce
PUT 200,200,blok$ ' obnoví oblast
' GRAPHMODE - režim kreslení
GRAPHMODE 0 ' REPLACE (výchozí)
GRAPHMODE 1 ' TRANSPARENT
GRAPHMODE 2 ' XOR
GRAPHMODE 3 ' REVERSE TRANSPARENT
' Čtení barvy pixelu
c=POINT(x,y)
' Dvojité bufferování (SDL)
VSYNC ' synchronizace s překreslením
SHOWPAGE ' zobrazí stránku (double buffer)
10.4 Demo: Grafika - Hvězdné nebe
' ===================================
' Demo: Animované hvězdné nebe
' ===================================
CLS
COLOR COLOR_RGB(1,1,1)
DIM sx(200),sy(200),sv(200),sb(200)
' Inicializace hvězd
FOR i=0 TO 199
sx(i)=RANDOM(640)
sy(i)=RANDOM(480)
sv(i)=RANDOM(3)+1 ' rychlost
sb(i)=0.3+RANDOM(70)/100 ' jas
NEXT i
DO
CLS
FOR i=0 TO 199
' Pohyb
sx(i)=sx(i)-sv(i)
IF sx(i)<0
sx(i)=639
sy(i)=RANDOM(480)
ENDIF
' Vykreslení s jasem
COLOR COLOR_RGB(sb(i),sb(i),sb(i))
IF sv(i)>2
LINE sx(i),sy(i),sx(i)+sv(i),sy(i)
ELSE
PLOT sx(i),sy(i)
ENDIF
NEXT i
SHOWPAGE
PAUSE 0.03
LOOP
11. GUI a dialogy
11.1 Alert dialog
' Informační dialog
ALERT 1,"Toto je zpráva!",1,"OK"
' Otázka s volbami (vrací číslo tlačítka)
a=ALERT(2,"Chcete pokračovat?",1,"Ano|Ne|Zrušit")
PRINT "Zvoleno: ";a
' Typy ikon: 0=žádná, 1=info, 2=otázka, 3=stop
ALERT 3,"Chyba!",1,"OK"
11.2 Výběr souboru
' Dialog pro výběr souboru
f$=FILESET$("Vyberte soubor:","*.bas")
IF f$<>""
PRINT "Vybrán: ";f$
ENDIF
11.3 Menu
' Vyskakovací menu
MENU m$()
' nebo vytvoření menu řetězce
m$="Menu1|Položka 1|Položka 2||Menu2|Položka A|Položka B"
' Menu systém závisí na platformě
12. Zvuk
12.1 Zvukové příkazy
' Jednoduchý tón (pípnutí)
BEEP
' SOUND příkaz (frekvence, délka)
SOUND 440,0.5 ' tón A4 na 0.5 sekundy
SOUND 880,0.3 ' tón A5
' Melodie
FOR i=1 TO 8
SOUND 220*i,0.2
PAUSE 0.1
NEXT i
' WAVE - generování zvukového signálu
' PLAYSOUND - přehrání WAV souboru (SDL)
' PLAYSOUND "zvuk.wav"
13. Síťová komunikace
13.1 TCP/IP sockety
' ===================================
' TCP Klient
' ===================================
OPEN "UC",#1,"server.example.com",80
PRINT #1,"GET / HTTP/1.0"
PRINT #1,"Host: server.example.com"
PRINT #1,""
WHILE NOT EOF(#1)
LINEINPUT #1,radek$
PRINT radek$
WEND
CLOSE #1
' ===================================
' TCP Server
' ===================================
OPEN "US",#1,"",12345 ' naslouchá na portu 12345
PRINT "Čekám na klienta..."
' Čekání na připojení
OPEN "UA",#2,#1 ' přijme spojení
PRINT "Klient připojen!"
PRINT #2,"Vitejte na serveru!"
LINEINPUT #2,zprava$
PRINT "Klient říká: ";zprava$
CLOSE #2
CLOSE #1
13.2 UDP
' UDP komunikace
OPEN "UU",#1,"",5000 ' UDP socket na portu 5000
' Odeslání
SEND #1,"Zpráva",LEN("Zpráva"),"192.168.1.100",5001
' Přijem
data$=SPACE$(1024)
n=RECV(#1,VARPTR(data$),1024)
PRINT LEFT$(data$,n)
CLOSE #1
14. Matematické funkce
14.1 Základní funkce
| Funkce | Popis | Příklad |
ABS(x) | Absolutní hodnota | ABS(-5)→5 |
SGN(x) | Znaménko (-1,0,1) | SGN(-3)→-1 |
INT(x) | Celá část (dolů) | INT(3.7)→3 |
FRAC(x) | Desetinná část | FRAC(3.7)→0.7 |
ROUND(x) | Zaokrouhlení | ROUND(3.7)→4 |
SQR(x) | Odmocnina | SQR(16)→4 |
EXP(x) | e^x | EXP(1)→2.718.. |
LOG(x) | Přirozený logaritmus | LOG(EXP(1))→1 |
LOG10(x) | Desítkový logaritmus | LOG10(100)→2 |
MIN(a,b) | Minimum | MIN(3,7)→3 |
MAX(a,b) | Maximum | MAX(3,7)→7 |
RANDOM(n) | Náhodné 0..n-1 | RANDOM(6)→0..5 |
RND(x) | Náhodné 0..1 | RND(1)→0.xxx |
14.2 Goniometrické funkce
| Funkce | Popis |
SIN(x) | Sinus (radiány) |
COS(x) | Kosinus |
TAN(x) | Tangens |
ASIN(x) | Arkus sinus |
ACOS(x) | Arkus kosinus |
ATAN(x) | Arkus tangens |
ATAN2(y,x) | Arkus tangens 2 parametry |
SINH(x) COSH(x) TANH(x) | Hyperbolické |
RAD(x) | Stupně → radiány |
DEG(x) | Radiány → stupně |
14.3 Bitové operace
PRINT BSET(0,3) ' nastaví bit 3 → 8
PRINT BCLR(15,2) ' smaže bit 2 → 11
PRINT BTST(8,3) ' testuje bit 3 → TRUE
PRINT SHL(1,4) ' posun vlevo → 16
PRINT SHR(16,2) ' posun vpravo → 4
PRINT SWAP(x%) ' prohodí horní/dolní bajty
15. Systémové příkazy
15.1 Čas a datum
PRINT DATE$ ' aktuální datum
PRINT TIME$ ' aktuální čas
PRINT TIMER ' sekundy od půlnoci
t=TIMER
' ... nějaká operace ...
PRINT "Trvalo: ";TIMER-t;" sekund"
15.2 Systémové volání
' Spuštění příkazu OS
SYSTEM "dir" ' Windows dir
SYSTEM "notepad.exe" ' spustí Poznámkový blok
a$=SYSTEM$("echo test") ' zachytí výstup příkazu
PRINT a$
' Prostředí
PRINT ENV$("PATH") ' proměnná prostředí
15.3 Paměť a systém
PRINT MALLOC(1024) ' alokuje 1024 bajtů, vrátí adresu
FREE adr ' uvolní paměť
' Peek/Poke
DPOKE adr,hodnota ' zápis 2 bajty
LPOKE adr,hodnota ' zápis 4 bajty
PRINT DPEEK(adr) ' čtení 2 bajty
PRINT LPEEK(adr) ' čtení 4 bajty
PRINT PEEK(adr) ' čtení 1 bajt
POKE adr,byte ' zápis 1 bajt
15.4 Časování
PAUSE 1.5 ' pauza 1.5 sekundy
DELAY 0.1 ' alternativa
VSYNC ' čeká na vertikální sync (SDL)
' Přesný timing
EVERY 0.1,akce ' volá proceduru každých 0.1s
AFTER 2.0,akce ' zavolá za 2 sekundy
PROCEDURE akce
PRINT TIMER
RETURN
16. Demo programy
16.1 Kalkulačka
demo_kalkulacka.bas
' ===================================
' Jednoduchá kalkulačka
' ===================================
DO
CLS
PRINT "==========================="
PRINT " KALKULAČKA X11-Basic"
PRINT "==========================="
PRINT
PRINT "1. Sčítání"
PRINT "2. Odčítání"
PRINT "3. Násobení"
PRINT "4. Dělení"
PRINT "5. Mocnina"
PRINT "6. Odmocnina"
PRINT "0. Konec"
PRINT
INPUT "Volba: ";volba%
IF volba%=0 THEN END
IF volba%>=1 AND volba%<=5
INPUT "Číslo A: ";a
INPUT "Číslo B: ";b
ELSE IF volba%=6
INPUT "Číslo: ";a
ENDIF
SELECT volba%
CASE 1
PRINT "Výsledek: ";a;" + ";b;" = ";a+b
CASE 2
PRINT "Výsledek: ";a;" - ";b;" = ";a-b
CASE 3
PRINT "Výsledek: ";a;" * ";b;" = ";a*b
CASE 4
IF b<>0
PRINT "Výsledek: ";a;" / ";b;" = ";a/b
ELSE
PRINT "Chyba: Dělení nulou!"
ENDIF
CASE 5
PRINT "Výsledek: ";a;" ^ ";b;" = ";a^b
CASE 6
IF a>=0
PRINT "Výsledek: SQR(";a;") = ";SQR(a)
ELSE
PRINT "Chyba: Záporné číslo!"
ENDIF
DEFAULT
PRINT "Neplatná volba!"
ENDSELECT
PRINT
INPUT "Stiskněte Enter...";dummy$
LOOP
16.2 Mandelbrot fraktál
demo_mandelbrot.bas
' ===================================
' Mandelbrot fraktál - grafický demo
' ===================================
w%=640
h%=480
max_iter%=64
CLS
xmin=-2.0
xmax=0.8
ymin=-1.2
ymax=1.2
FOR py%=0 TO h%-1
FOR px%=0 TO w%-1
x0=(px%/w%)*(xmax-xmin)+xmin
y0=(py%/h%)*(ymax-ymin)+ymin
x=0.0
y=0.0
iter%=0
WHILE (x*x+y*y<4.0) AND (iter%<max_iter%)
xtemp=x*x-y*y+x0
y=2*x*y+y0
x=xtemp
INC iter%
WEND
IF iter%<max_iter%
' Barva podle iterací
r=0.5+0.5*SIN(iter%*0.1)
g=0.5+0.5*SIN(iter%*0.13+2)
b=0.5+0.5*SIN(iter%*0.17+4)
COLOR COLOR_RGB(r,g,b)
ELSE
COLOR COLOR_RGB(0,0,0)
ENDIF
PLOT px%,py%
NEXT px%
SHOWPAGE
NEXT py%
PRINT "Hotovo! Stiskněte klávesu..."
a$=""
WHILE a$=""
a$=INKEY$
PAUSE 0.05
WEND
16.3 Analogové hodiny
demo_hodiny.bas
' ===================================
' Analogové hodiny s SDL grafikou
' ===================================
cx%=320
cy%=240
r%=200
PROCEDURE kresli_rucicku(uhel,delka,tloustka%)
LOCAL x,y,rad
rad=RAD(uhel-90)
x=cx%+COS(rad)*delka
y=cy%+SIN(rad)*delka
' Kreslení tlusté čáry
FOR d=0 TO tloustka%-1
LINE cx%+d-tloustka%/2,cy%,x+d-tloustka%/2,y
NEXT d
RETURN
DO
CLS
' Ciferník
COLOR COLOR_RGB(0.2,0.2,0.3)
PCIRCLE cx%,cy%,r%+10
COLOR COLOR_RGB(0.9,0.9,0.95)
PCIRCLE cx%,cy%,r%
' Značky hodin
FOR i=0 TO 11
rad=RAD(i*30-90)
IF i MOD 3=0
' Hlavní značky
COLOR COLOR_RGB(0.1,0.1,0.1)
x1=cx%+COS(rad)*(r%-25)
y1=cy%+SIN(rad)*(r%-25)
x2=cx%+COS(rad)*(r%-5)
y2=cy%+SIN(rad)*(r%-5)
LINE x1,y1,x2,y2
LINE x1+1,y1,x2+1,y2
ELSE
COLOR COLOR_RGB(0.4,0.4,0.4)
x1=cx%+COS(rad)*(r%-15)
y1=cy%+SIN(rad)*(r%-15)
x2=cx%+COS(rad)*(r%-5)
y2=cy%+SIN(rad)*(r%-5)
LINE x1,y1,x2,y2
ENDIF
NEXT i
' Čísla hodin
COLOR COLOR_RGB(0.1,0.1,0.2)
FOR i=1 TO 12
rad=RAD(i*30-90)
x=cx%+COS(rad)*(r%-45)-8
y=cy%+SIN(rad)*(r%-45)+6
TEXT x,y,STR$(i)
NEXT i
' Získání času
t$=TIME$
hh=VAL(LEFT$(t$,2))
mm=VAL(MID$(t$,4,2))
ss=VAL(RIGHT$(t$,2))
' Hodinová ručička
h_uhel=(hh MOD 12)*30+mm*0.5
COLOR COLOR_RGB(0.1,0.1,0.2)
kresli_rucicku(h_uhel,r%*0.5,4)
' Minutová ručička
m_uhel=mm*6+ss*0.1
COLOR COLOR_RGB(0.2,0.2,0.3)
kresli_rucicku(m_uhel,r%*0.7,3)
' Vteřinová ručička
s_uhel=ss*6
COLOR COLOR_RGB(0.8,0.1,0.1)
kresli_rucicku(s_uhel,r%*0.8,1)
' Střed
COLOR COLOR_RGB(0.3,0.1,0.1)
PCIRCLE cx%,cy%,6
' Čas textově
COLOR COLOR_RGB(1,1,1)
TEXT cx%-30,cy%+r%+30,t$
SHOWPAGE
PAUSE 0.2
LOOP
16.4 Jednoduchá hra - Had
demo_had.bas
' ===================================
' Jednoduchá hra HAD (Snake)
' ===================================
vel%=20 ' velikost segmentu
cols%=30
rows%=22
max_delka%=200
DIM hadx%(max_delka%), hady%(max_delka%)
' Inicializace
delka%=5
smer%=0 ' 0=pravo,1=dolu,2=vlevo,3=nahoru
skore%=0
konec%=FALSE
' Počáteční pozice
FOR i%=0 TO delka%-1
hadx%(i%)=15-i%
hady%(i%)=11
NEXT i%
' Jídlo
jx%=RANDOM(cols%)
jy%=RANDOM(rows%)
DO
' Vstup
k$=INKEY$
IF k$<>""
kk%=ASC(k$)
IF (kk%=ASC("d") OR kk%=77) AND smer%<>2 THEN smer%=0
IF (kk%=ASC("s") OR kk%=80) AND smer%<>3 THEN smer%=1
IF (kk%=ASC("a") OR kk%=75) AND smer%<>0 THEN smer%=2
IF (kk%=ASC("w") OR kk%=72) AND smer%<>1 THEN smer%=3
IF kk%=27 THEN konec%=TRUE
ENDIF
' Nová hlava
nx%=hadx%(0)
ny%=hady%(0)
SELECT smer%
CASE 0 : INC nx%
CASE 1 : INC ny%
CASE 2 : DEC nx%
CASE 3 : DEC ny%
ENDSELECT
' Kontrola hranic
IF nx%<0 OR nx%>=cols% OR ny%<0 OR ny%>=rows%
konec%=TRUE
ENDIF
' Kontrola kolize se sebou
IF NOT konec%
FOR i%=0 TO delka%-2
IF hadx%(i%)=nx% AND hady%(i%)=ny%
konec%=TRUE
ENDIF
NEXT i%
ENDIF
IF konec% THEN EXIT IF TRUE
' Pohyb těla
jedl%=FALSE
IF nx%=jx% AND ny%=jy%
' Snědl jídlo
jedl%=TRUE
INC skore%
IF delka%<max_delka% THEN INC delka%
jx%=RANDOM(cols%)
jy%=RANDOM(rows%)
BEEP
ENDIF
' Posun segmentů
IF NOT jedl%
FOR i%=delka%-1 TO 1 STEP -1
hadx%(i%)=hadx%(i%-1)
hady%(i%)=hady%(i%-1)
NEXT i%
ELSE
FOR i%=delka%-1 TO 1 STEP -1
hadx%(i%)=hadx%(i%-1)
hady%(i%)=hady%(i%-1)
NEXT i%
ENDIF
hadx%(0)=nx%
hady%(0)=ny%
' Vykreslení
CLS
' Pozadí hrací plochy
COLOR COLOR_RGB(0.1,0.15,0.1)
PBOX 0,0,cols%*vel%,rows%*vel%
' Mřížka
COLOR COLOR_RGB(0.15,0.2,0.15)
FOR i%=0 TO cols%
LINE i%*vel%,0,i%*vel%,rows%*vel%
NEXT i%
FOR i%=0 TO rows%
LINE 0,i%*vel%,cols%*vel%,i%*vel%
NEXT i%
' Jídlo
COLOR COLOR_RGB(1,0.2,0.2)
PCIRCLE jx%*vel%+vel%/2,jy%*vel%+vel%/2,vel%/2-2
' Had
FOR i%=0 TO delka%-1
IF i%=0
COLOR COLOR_RGB(0.2,0.9,0.2)
ELSE
COLOR COLOR_RGB(0.1,0.7,0.1)
ENDIF
PBOX hadx%(i%)*vel%+1,hady%(i%)*vel%+1,hadx%(i%)*vel%+vel%-1,hady%(i%)*vel%+vel%-1
NEXT i%
' Skóre
COLOR COLOR_RGB(1,1,1)
TEXT 10,rows%*vel%+20,"Skóre: "+STR$(skore%)+" Délka: "+STR$(delka%)+" [ESC] = Konec"
SHOWPAGE
PAUSE 0.12
LOOP
' Konec hry
COLOR COLOR_RGB(1,0,0)
PBOX 150,180,450,280
COLOR COLOR_RGB(1,1,1)
TEXT 200,230,"GAME OVER!"
TEXT 200,260,"Skóre: "+STR$(skore%)
SHOWPAGE
PRINT "Stiskněte klávesu..."
k$=""
WHILE k$=""
k$=INKEY$
PAUSE 0.05
WEND
END
16.5 TCP Chat klient/server
demo_chat_server.bas
' ===================================
' TCP Chat Server
' ===================================
port%=12345
PRINT "Chat Server na portu ";port%
PRINT "Čekám na klienta..."
OPEN "US",#1,"",port% ' server socket
OPEN "UA",#2,#1 ' přijme spojení
PRINT "Klient připojen!"
PRINT #2,"Vítejte na chat serveru!"
DO
' Čtení od klienta
IF INP?(#2)
LINEINPUT #2,zprava$
IF UPPER$(zprava$)="QUIT" THEN EXIT IF TRUE
PRINT "Klient: ";zprava$
ENDIF
' Vstup od serveru
k$=INKEY$
IF k$=CHR$(13)
INPUT "Server> ";odpoved$
PRINT #2,odpoved$
IF UPPER$(odpoved$)="QUIT" THEN EXIT IF TRUE
ENDIF
PAUSE 0.05
LOOP
PRINT "Spojení ukončeno."
CLOSE #2
CLOSE #1
END
demo_chat_klient.bas
' ===================================
' TCP Chat Klient
' ===================================
INPUT "Server IP: ";ip$
IF ip$="" THEN ip$="127.0.0.1"
port%=12345
PRINT "Připojuji se k ";ip$;":";port%;"..."
OPEN "UC",#1,ip$,port%
PRINT "Připojeno!"
' Přečtení uvítací zprávy
IF INP?(#1)
LINEINPUT #1,vitani$
PRINT "Server: ";vitani$
ENDIF
DO
' Čtení ze serveru
IF INP?(#1)
LINEINPUT #1,zprava$
IF UPPER$(zprava$)="QUIT" THEN EXIT IF TRUE
PRINT "Server: ";zprava$
ENDIF
' Vstup od uživatele
k$=INKEY$
IF k$=CHR$(13)
INPUT "Vy> ";moje$
PRINT #1,moje$
IF UPPER$(moje$)="QUIT" THEN EXIT IF TRUE
ENDIF
PAUSE 0.05
LOOP
PRINT "Odpojeno."
CLOSE #1
END
16.6 Kreslící program
demo_kresli.bas
' ===================================
' Jednoduchý kreslící program
' ===================================
w%=640
h%=480
barva_r=1.0
barva_g=1.0
barva_b=1.0
tloustka%=2
kreslim%=FALSE
CLS
' Panel nástrojů
PROCEDURE kresli_panel
COLOR COLOR_RGB(0.2,0.2,0.25)
PBOX 0,h%-40,w%,h%
' Barvy
COLOR COLOR_RGB(1,1,1) : PBOX 5,h%-35,25,h%-5
COLOR COLOR_RGB(1,0,0) : PBOX 30,h%-35,50,h%-5
COLOR COLOR_RGB(0,1,0) : PBOX 55,h%-35,75,h%-5
COLOR COLOR_RGB(0,0,1) : PBOX 80,h%-35,100,h%-5
COLOR COLOR_RGB(1,1,0) : PBOX 105,h%-35,125,h%-5
COLOR COLOR_RGB(1,0,1) : PBOX 130,h%-35,150,h%-5
COLOR COLOR_RGB(0,1,1) : PBOX 155,h%-35,175,h%-5
COLOR COLOR_RGB(0,0,0) : PBOX 180,h%-35,200,h%-5
' Tlačítka
COLOR COLOR_RGB(0.5,0.5,0.5)
PBOX 220,h%-35,280,h%-5
COLOR COLOR_RGB(1,1,1)
TEXT 225,h%-12,"SMAZAT"
PBOX 290,h%-35,360,h%-5
COLOR COLOR_RGB(1,1,1)
TEXT 295,h%-12,"ULOŽIT"
' Indikátor
COLOR COLOR_RGB(barva_r,barva_g,barva_b)
PCIRCLE 400,h%-20,12
COLOR COLOR_RGB(0.7,0.7,0.7)
TEXT 420,h%-12,"T:"+STR$(tloustka%)
RETURN
kresli_panel
lastx%=-1
lasty%=-1
DO
' Čtení myši
MOUSE mx%,my%,mb%
' Kliknutí v panelu
IF mb%>0 AND my%>=h%-40
IF mx%>=5 AND mx%<25
barva_r=1 : barva_g=1 : barva_b=1
ELSE IF mx%>=30 AND mx%<50
barva_r=1 : barva_g=0 : barva_b=0
ELSE IF mx%>=55 AND mx%<75
barva_r=0 : barva_g=1 : barva_b=0
ELSE IF mx%>=80 AND mx%<100
barva_r=0 : barva_g=0 : barva_b=1
ELSE IF mx%>=105 AND mx%<125
barva_r=1 : barva_g=1 : barva_b=0
ELSE IF mx%>=130 AND mx%<150
barva_r=1 : barva_g=0 : barva_b=1
ELSE IF mx%>=155 AND mx%<175
barva_r=0 : barva_g=1 : barva_b=1
ELSE IF mx%>=180 AND mx%<200
barva_r=0 : barva_g=0 : barva_b=0
ELSE IF mx%>=220 AND mx%<280
' Smazat
COLOR COLOR_RGB(0,0,0)
PBOX 0,0,w%,h%-40
ELSE IF mx%>=290 AND mx%<360
' Uložit
GET 0,0,w%,h%-40,obraz$
' BSAVE "obrazek.bmp",VARPTR(obraz$),LEN(obraz$)
ALERT 1,"Obraz uložen!",1,"OK"
ENDIF
kresli_panel
PAUSE 0.15
ENDIF
' Kreslení
IF mb%>0 AND my%<h%-40
COLOR COLOR_RGB(barva_r,barva_g,barva_b)
IF lastx%>=0
FOR d=0 TO tloustka%-1
LINE lastx%+d,lasty%,mx%+d,my%
LINE lastx%,lasty%+d,mx%,my%+d
NEXT d
ENDIF
lastx%=mx%
lasty%=my%
ELSE
lastx%=-1
lasty%=-1
ENDIF
' Klávesové zkratky
k$=INKEY$
IF k$="+"
INC tloustka%
kresli_panel
ELSE IF k$="-"
IF tloustka%>1 THEN DEC tloustka%
kresli_panel
ELSE IF k$=CHR$(27)
END
ENDIF
SHOWPAGE
PAUSE 0.02
LOOP
16.7 Bubble sort vizualizace
demo_sort_viz.bas
' ===================================
' Vizualizace Bubble Sort
' ===================================
n%=60
DIM data(n%)
' Náhodná data
FOR i%=0 TO n%-1
data(i%)=RANDOM(400)+20
NEXT i%
PROCEDURE vykresli(zvyrazni1%,zvyrazni2%)
CLS
sirina%=INT(620/n%)
FOR i%=0 TO n%-1
IF i%=zvyrazni1% OR i%=zvyrazni2%
COLOR COLOR_RGB(1,0.2,0.2)
ELSE
h=data(i%)/420
COLOR COLOR_RGB(0.2,0.3+h*0.5,0.8-h*0.3)
ENDIF
PBOX 10+i%*sirika%,460-data(i%),10+i%*sirika%+sirika%-2,460
NEXT i%
COLOR COLOR_RGB(1,1,1)
TEXT 10,20,"Bubble Sort Vizualizace"
SHOWPAGE
RETURN
' Vizuální Bubble Sort
sirika%=INT(620/n%)
FOR i%=0 TO n%-2
FOR j%=0 TO n%-i%-2
vykresli(j%,j%+1)
IF data(j%)>data(j%+1)
tmp=data(j%)
data(j%)=data(j%+1)
data(j%+1)=tmp
ENDIF
PAUSE 0.01
NEXT j%
NEXT i%
vykresli(-1,-1)
COLOR COLOR_RGB(0,1,0)
TEXT 200,240,"SEŘAZENO!"
SHOWPAGE
' Čekání na klávesu
k$=""
WHILE k$=""
k$=INKEY$
PAUSE 0.05
WEND
END
16.8 Lissajousovy křivky
demo_lissajous.bas
' ===================================
' Animované Lissajousovy křivky
' ===================================
cx%=320
cy%=240
r%=200
fa=3 ' frekvence A
fb=2 ' frekvence B
faze=0
DO
CLS
' Pozadí
COLOR COLOR_RGB(0.05,0.05,0.1)
PBOX 0,0,640,480
' Křivka
steps%=1000
FOR i%=0 TO steps%
t=i%*2*PI/steps%
x=cx%+r%*SIN(fa*t+faze)
y=cy%+r%*COS(fb*t)
' Barevný gradient
h=i%/steps%
COLOR COLOR_RGB(0.5+0.5*SIN(h*6),0.5+0.5*SIN(h*6+2),0.5+0.5*SIN(h*6+4))
IF i%>0 THEN LINE lx,ly,x,y
lx=x
ly=y
NEXT i%
' Info
COLOR COLOR_RGB(1,1,1)
TEXT 10,20,"Lissajous: A="+STR$(fa)+" B="+STR$(fb)
TEXT 10,40,"Fáze: "+STR$(INT(DEG(faze)) MOD 360)+"°"
TEXT 10,60,"[1-9] A freq [Q-O] B freq [ESC] konec"
SHOWPAGE
faze=faze+0.02
IF faze>2*PI THEN faze=faze-2*PI
k$=INKEY$
IF k$<>""
IF ASC(k$)>=ASC("1") AND ASC(k$)<=ASC("9")
fa=ASC(k$)-ASC("0")
ENDIF
IF UPPER$(k$)="Q" THEN fb=1
IF UPPER$(k$)="W" THEN fb=2
IF UPPER$(k$)="E" THEN fb=3
IF UPPER$(k$)="R" THEN fb=4
IF UPPER$(k$)="T" THEN fb=5
IF k$=CHR$(27) THEN END
ENDIF
PAUSE 0.03
LOOP
16.9 Souborový prohlížeč
demo_prohlizec.bas
' ===================================
' Jednoduchý souborový prohlížeč
' ===================================
PROCEDURE zobraz_soubory(cesta$)
LOCAL soubor$,pocet%
PRINT "==================================="
PRINT "Adresář: ";cesta$
PRINT "==================================="
pocet%=0
soubor$=DIR$(cesta$+"*")
WHILE soubor$<>""
INC pocet%
IF EXIST(cesta$+soubor$)
vel=SIZE(cesta$+soubor$)
IF vel<1024
vel$=STR$(INT(vel))+" B"
ELSE IF vel<1048576
vel$=STR$(INT(vel/1024))+" KB"
ELSE
vel$=STR$(INT(vel/1048576))+" MB"
ENDIF
ELSE
vel$="<DIR>"
ENDIF
PRINT USING "###",pocet%;
PRINT " ";LEFT$(soubor$+SPACE$(30),30);vel$
soubor$=DIR$() ' další soubor
WEND
PRINT "-----------------------------------"
PRINT "Celkem: ";pocet%;" položek"
PRINT
RETURN
' Hlavní cyklus
cesta$=".\"
DO
CLS
zobraz_soubory(cesta$)
INPUT "Nový adresář (nebo QUIT): ";nova$
IF UPPER$(nova$)="QUIT" THEN END
IF nova$<>""
IF RIGHT$(nova$,1)<>"\" THEN nova$=nova$+"\"
cesta$=nova$
ENDIF
LOOP
16.10 Čistá mzda kalkulačka CZ
demo_mzda_cz.bas
' ===================================
' Kalkulačka čisté mzdy - ČR 2025
' ===================================
PRINT "==================================="
PRINT " Výpočet čisté mzdy - ČR 2025"
PRINT "==================================="
PRINT
INPUT "Hrubá mzda (Kč): ";hruba
INPUT "Počet dětí: ";deti%
INPUT "Student (1=ano, 0=ne): ";student%
INPUT "Invalidita (0/1/2/3): ";invalid%
' Pojistné zaměstnance
soc_zam=hruba*0.071 ' 7.1% sociální (6.5% důch + 0.6% nem)
zdrav_zam=hruba*0.045 ' 4.5% zdravotní
IF zdrav_zam<0.045*18900 THEN zdrav_zam=0.045*18900
pojistne=soc_zam+zdrav_zam
' Základ daně (superhrubá mzda zrušena)
zaklad=hruba
zaklad_zaokr=INT((zaklad+99)/100)*100
' Daň 15% / 23% (23% nad 4x průměr)
IF zaklad_zaokr<=131901*4
dan=zaklad_zaokr*0.15
ELSE
dan=131901*4*0.15+(zaklad_zaokr-131901*4)*0.23
ENDIF
' Slevy na dani
sleva=30840/12 ' základní sleva na poplatníka (měsíčně)
IF student%=1 THEN sleva=sleva+4020/12 ' sleva na studenta
SELECT invalid%
CASE 1 : sleva=sleva+2520/12
CASE 2 : sleva=sleva+5040/12
CASE 3 : sleva=sleva+16140/12
ENDSELECT
dan=dan-sleva
IF dan<0 THEN dan=0
' Daňové zvýhodnění na děti
zvyhodneni=0
IF deti%>=1 THEN zvyhodneni=zvyhodneni+15204/12
IF deti%>=2 THEN zvyhodneni=zvyhodneni+22320/12
IF deti%>=3
FOR i%=3 TO deti%
zvyhodneni=zvyhodneni+27840/12
NEXT i%
ENDIF
dan=dan-zvyhodneni
' Daňový bonus
bonus=0
IF dan<0
bonus=ABS(dan)
dan=0
ENDIF
cista=hruba-pojistne-dan+bonus
' Pojistné zaměstnavatele
soc_firma=hruba*0.248
zdrav_firma=hruba*0.09
PRINT
PRINT "==================================="
PRINT " VÝSLEDEK"
PRINT "==================================="
PRINT USING "Hrubá mzda: ###,###.## Kč",hruba
PRINT USING "Sociální (7.1%): -###,###.## Kč",soc_zam
PRINT USING "Zdravotní (4.5%): -###,###.## Kč",zdrav_zam
PRINT USING "Záloha na daň: -###,###.## Kč",dan
IF bonus>0 THEN PRINT USING "Daňový bonus: +###,###.## Kč",bonus
PRINT "-----------------------------------"
PRINT USING "ČISTÁ MZDA: ###,###.## Kč",cista
PRINT
PRINT USING "Náklady zaměstnavat: ###,###.## Kč",hruba+soc_firma+zdrav_firma
PRINT "==================================="
END
17. Abecední přehled příkazů
Příkazy (Commands)
| Příkaz | Popis |
ABSOLUTE x,y | Nastaví absolutní pozici kreslení |
AFTER n,proc | Zavolá proceduru po n sekundách |
ALERT typ,text$,def,tlac$ | Zobrazí dialogové okno |
ARRAYFILL pole(),val | Naplní pole hodnotou |
BEEP | Pípnutí |
BGET #n,adr,len | Binární čtení |
BLOAD file$,adr | Načtení binárního souboru |
BOUNDARY typ | Nastavení ohraničení |
BOX x1,y1,x2,y2 | Obdélník (prázdný) |
BPUT #n,adr,len | Binární zápis |
BSAVE file$,adr,len | Uložení binárního souboru |
CALL adr | Volání strojového kódu |
CHAIN file$ | Načtení a spuštění programu |
CHDIR path$ | Změna adresáře |
CIRCLE x,y,r | Kruh |
CLEAR | Vymaže proměnné |
CLOSE #n | Zavře soubor/kanál |
CLR | Vymaže proměnné a obrazovku |
CLS | Vymaže grafickou obrazovku |
COLOR c | Nastaví barvu kreslení |
CONT | Pokračování po STOPu |
DATA | Datové položky |
DEFFILL c,typ,vzor | Definice výplně |
DEFLINE typ,šířka | Definice čáry |
DEFMARK typ,vel | Definice značky |
DEFMOUSE n | Tvar kurzoru myši |
DEFTEXT styl,rotace,uhel,vel | Definice textu |
DELAY n | Pauza n sekund |
DIM pole(vel) | Deklarace pole |
DO...LOOP | Nekonečný cyklus |
DPOKE adr,val | Zápis wordu (2B) |
DRAW x,y TO x2,y2 | Kreslení čáry |
DUMP | Výpis proměnných |
EDIT | Editace programu |
ELLIPSE x,y,rx,ry | Elipsa |
END | Konec programu |
ERASE pole() | Smazání pole |
EVERY n,proc | Periodické volání procedury |
EXEC | Spuštění externího procesu |
EXIT IF cond | Výskok z cyklu |
FILL x,y | Výplň oblasti |
FLUSH #n | Vyprázdnění bufferu |
FOR...NEXT | Cyklus s počítadlem |
FREE adr | Uvolnění paměti |
FUNCTION...ENDFUNCTION | Definice funkce |
GET x1,y1,x2,y2,v$ | Uloží oblast obrazovky |
GOSUB label | Skok do podprogramu |
GOTO label | Nepodmíněný skok |
GRAPHMODE n | Režim kreslení |
IF...THEN...ELSE...ENDIF | Podmínka |
INC var | Inkrementace (var=var+1) |
DEC var | Dekrementace (var=var-1) |
INPUT prompt$;var | Vstup od uživatele |
KILL file$ | Smazání souboru |
LET var=expr | Přiřazení (LET volitelné) |
LINE x1,y1,x2,y2 | Čára |
LINEINPUT #n,var$ | Čtení celého řádku |
LIST | Výpis zdrojového kódu |
LOAD file$ | Načtení programu |
LOCAL var | Lokální proměnná |
LPOKE adr,val | Zápis longwordu (4B) |
MENU m$() | Vytvoření menu |
MERGE file$ | Sloučení programu |
MKDIR path$ | Vytvoření adresáře |
MOUSE x,y,k | Čtení pozice myši |
NEW | Nový program (smaže aktuální) |
ON n GOSUB/GOTO | Větvení dle hodnoty |
OPEN mode$,#n,file$ | Otevření souboru |
PAUSE n | Pauza n sekund |
PBOX x1,y1,x2,y2 | Vyplněný obdélník |
PCIRCLE x,y,r | Vyplněný kruh |
PELLIPSE x,y,rx,ry | Vyplněná elipsa |
PLOT x,y | Bod |
POKE adr,val | Zápis bajtu |
PRINT expr | Výstup na obrazovku |
PROCEDURE name | Definice procedury |
PSET x,y | Bod (alternativa PLOT) |
PUT x,y,v$ | Obnovení oblasti obrazovky |
QUIT | Ukončení interpretru |
READ var | Čtení z DATA |
RENAME old$,new$ | Přejmenování souboru |
REPEAT...UNTIL | Cyklus s podmínkou na konci |
RESTORE | Reset čtení DATA |
RETURN | Návrat z procedury/GOSUB |
RMDIR path$ | Smazání adresáře |
RUN | Spuštění programu |
SAVE file$ | Uložení programu |
SCREEN w,h | Nastavení velikosti okna |
SEEK #n,pos | Pozice v souboru |
SELECT...ENDSELECT | Vícenásobné větvení |
SHOWPAGE | Zobrazí stránku (double buffer) |
SIZEW ,w,h | Změna velikosti okna |
SORT pole(),n | Seřazení pole |
SOUND freq,dur | Přehrání tónu |
STOP | Zastavení programu |
SWAP a,b | Prohození proměnných |
SYSTEM cmd$ | Systémový příkaz |
TEXT x,y,text$ | Text v grafickém okně |
VSYNC | Vertikální synchronizace |
WHILE...WEND | Cyklus s podmínkou na začátku |
Funkce (Functions)
| Funkce | Popis |
ABS(x) | Absolutní hodnota |
ACOS(x) | Arkus kosinus |
ASC(s$) | ASCII kód prvního znaku |
ASIN(x) | Arkus sinus |
ATAN(x) | Arkus tangens |
ATAN2(y,x) | Arkus tangens (2 param) |
BIN$(n) | Binární řetězec |
BSET(n,bit) | Nastaví bit |
BCLR(n,bit) | Smaže bit |
BTST(n,bit) | Test bitu |
CHR$(n) | Znak dle ASCII |
COLOR_RGB(r,g,b) | RGB barva (0.0-1.0) |
COS(x) | Kosinus |
COSH(x) | Hyperbolický kosinus |
DATE$ | Aktuální datum |
DEG(x) | Radiány → stupně |
DIR$(mask$) | Výpis souborů |
EOF(#n) | Konec souboru |
ENV$(var$) | Proměnná prostředí |
EXIST(file$) | Existuje soubor? |
EXP(x) | e^x |
FILESET$(title$,mask$) | Dialog výběru souboru |
FRAC(x) | Desetinná část |
HEX$(n) | Hexadecimální řetězec |
INKEY$ | Stisknutá klávesa |
INP?(#n) | Vstup k dispozici? |
INSTR(s$,h$) | Pozice podřetězce |
INT(x) | Celá část |
LEFT$(s$,n) | Levých n znaků |
LEN(s$) | Délka řetězce |
LOC(#n) | Pozice v souboru |
LOF(#n) | Délka souboru |
LOG(x) | Přirozený logaritmus |
LOG10(x) | Desítkový logaritmus |
LOWER$(s$) | Malá písmena |
MALLOC(n) | Alokace paměti |
MAX(a,b) | Maximum |
MID$(s$,p,n) | Podřetězec |
MIN(a,b) | Minimum |
OCT$(n) | Osmičkový řetězec |
PEEK(adr) | Čtení bajtu |
DPEEK(adr) | Čtení wordu |
LPEEK(adr) | Čtení longwordu |
PI | Konstanta π |
POINT(x,y) | Barva pixelu |
RAD(x) | Stupně → radiány |
RANDOM(n) | Náhodné číslo 0..n-1 |
REPLACE$(s$,a$,b$) | Nahrazení v řetězci |
RIGHT$(s$,n) | Pravých n znaků |
RND(x) | Náhodné číslo 0..1 |
ROUND(x) | Zaokrouhlení |
SGN(x) | Znaménko |
SHL(n,bits) | Bitový posun vlevo |
SHR(n,bits) | Bitový posun vpravo |
SIN(x) | Sinus |
SINH(x) | Hyperbolický sinus |
SIZE(file$) | Velikost souboru |
SPACE$(n) | n mezer |
SQR(x) | Odmocnina |
STR$(n) | Číslo → řetězec |
STRING$(n,s$) | Opakování řetězce |
SYSTEM$(cmd$) | Výstup systémového příkazu |
TAN(x) | Tangens |
TANH(x) | Hyperbolický tangens |
TIME$ | Aktuální čas |
TIMER | Sekundy od půlnoci |
TRIM$(s$) | Oříznutí mezer |
UPPER$(s$) | Velká písmena |
USING | Formátovací řetězec |
VAL(s$) | Řetězec → číslo |
VARPTR(var) | Adresa proměnné |
WORD$(s$,n) | n-té slovo |
Speciální znaky a režimy
| Mód otevření | Popis |
"I" | Input (čtení) |
"O" | Output (zápis) |
"A" | Append (přidání) |
"U" | Update (čtení+zápis) |
"UC" | TCP klient |
"US" | TCP server |
"UA" | TCP accept |
"UU" | UDP socket |
Tipy pro Windows SDL verzi:
Používejte SHOWPAGE pro double buffering při animacích.
Pro plynulou animaci kombinujte PAUSE 0.02 s SHOWPAGE.
Příkaz MOUSE x,y,k funguje v SDL okně standardně.
Při problémech s INKEY$ na Windows zkuste PAUSE 0.01 v cyklu.
Cesty k souborům používejte s \ (Windows styl).
X11-Basic Reference & Demo příklady • Verze pro Windows SDL • 2025