X11-Basic pro Windows

Kompletní reference s demo příklady • SDL verze

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

SouborPopis
xbasic.exeHlavní interpretr
xbc.exeCompiler (bytekód)
xbvm.exeVirtual machine pro bytekód
xb2c.exePřekladač do C
SDL.dll / SDL2.dllSDL 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říponaTypPříklad
(žádná)Float (64-bit double)x=3.14
%Integer (32-bit)pocet%=42
$String (řetězec)jmeno$="Pavel"
!()Float poleDIM a(10)
%()Integer poleDIM b%(10)
$()String poleDIM 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

KategorieOperá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

FunkcePopisPříklad
LEN(s$)Délka řetězceLEN("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ísmenaUPPER$("ahoj")→"AHOJ"
LOWER$(s$)Malá písmenaLOWER$("AHOJ")→"ahoj"
TRIM$(s$)Ořízne mezeryTRIM$(" x ")→"x"
INSTR(s$,h$)Pozice podřetězceINSTR("abcdef","cd")→3
STR$(n)Číslo → řetězecSTR$(42)→"42"
VAL(s$)Řetězec → čísloVAL("3.14")→3.14
CHR$(n)ASCII kód → znakCHR$(65)→"A"
ASC(s$)Znak → ASCII kódASC("A")→65
SPACE$(n)n mezerSPACE$(5)→" "
STRING$(n,s$)Opakování znakuSTRING$(3,"*")→"***"
REPLACE$(s$,a$,b$)NahrazeníREPLACE$("abc","b","X")→"aXc"
WORD$(s$,n)n-té slovoWORD$("A B C",2)→"B"
WORT_SEPOddělovač slovvý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říkazPopis
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,posNastavení 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

FunkcePopisPříklad
ABS(x)Absolutní hodnotaABS(-5)→5
SGN(x)Znaménko (-1,0,1)SGN(-3)→-1
INT(x)Celá část (dolů)INT(3.7)→3
FRAC(x)Desetinná částFRAC(3.7)→0.7
ROUND(x)ZaokrouhleníROUND(3.7)→4
SQR(x)OdmocninaSQR(16)→4
EXP(x)e^xEXP(1)→2.718..
LOG(x)Přirozený logaritmusLOG(EXP(1))→1
LOG10(x)Desítkový logaritmusLOG10(100)→2
MIN(a,b)MinimumMIN(3,7)→3
MAX(a,b)MaximumMAX(3,7)→7
RANDOM(n)Náhodné 0..n-1RANDOM(6)→0..5
RND(x)Náhodné 0..1RND(1)→0.xxx

14.2 Goniometrické funkce

FunkcePopis
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říkazPopis
ABSOLUTE x,yNastaví absolutní pozici kreslení
AFTER n,procZavolá proceduru po n sekundách
ALERT typ,text$,def,tlac$Zobrazí dialogové okno
ARRAYFILL pole(),valNaplní pole hodnotou
BEEPPípnutí
BGET #n,adr,lenBinární čtení
BLOAD file$,adrNačtení binárního souboru
BOUNDARY typNastavení ohraničení
BOX x1,y1,x2,y2Obdélník (prázdný)
BPUT #n,adr,lenBinární zápis
BSAVE file$,adr,lenUložení binárního souboru
CALL adrVolání strojového kódu
CHAIN file$Načtení a spuštění programu
CHDIR path$Změna adresáře
CIRCLE x,y,rKruh
CLEARVymaže proměnné
CLOSE #nZavře soubor/kanál
CLRVymaže proměnné a obrazovku
CLSVymaže grafickou obrazovku
COLOR cNastaví barvu kreslení
CONTPokračování po STOPu
DATADatové položky
DEFFILL c,typ,vzorDefinice výplně
DEFLINE typ,šířkaDefinice čáry
DEFMARK typ,velDefinice značky
DEFMOUSE nTvar kurzoru myši
DEFTEXT styl,rotace,uhel,velDefinice textu
DELAY nPauza n sekund
DIM pole(vel)Deklarace pole
DO...LOOPNekonečný cyklus
DPOKE adr,valZápis wordu (2B)
DRAW x,y TO x2,y2Kreslení čáry
DUMPVýpis proměnných
EDITEditace programu
ELLIPSE x,y,rx,ryElipsa
ENDKonec programu
ERASE pole()Smazání pole
EVERY n,procPeriodické volání procedury
EXECSpuštění externího procesu
EXIT IF condVýskok z cyklu
FILL x,yVýplň oblasti
FLUSH #nVyprázdnění bufferu
FOR...NEXTCyklus s počítadlem
FREE adrUvolnění paměti
FUNCTION...ENDFUNCTIONDefinice funkce
GET x1,y1,x2,y2,v$Uloží oblast obrazovky
GOSUB labelSkok do podprogramu
GOTO labelNepodmíněný skok
GRAPHMODE nRežim kreslení
IF...THEN...ELSE...ENDIFPodmínka
INC varInkrementace (var=var+1)
DEC varDekrementace (var=var-1)
INPUT prompt$;varVstup od uživatele
KILL file$Smazání souboru
LET var=exprPřiřazení (LET volitelné)
LINE x1,y1,x2,y2Čára
LINEINPUT #n,var$Čtení celého řádku
LISTVýpis zdrojového kódu
LOAD file$Načtení programu
LOCAL varLokální proměnná
LPOKE adr,valZá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
NEWNový program (smaže aktuální)
ON n GOSUB/GOTOVětvení dle hodnoty
OPEN mode$,#n,file$Otevření souboru
PAUSE nPauza n sekund
PBOX x1,y1,x2,y2Vyplněný obdélník
PCIRCLE x,y,rVyplněný kruh
PELLIPSE x,y,rx,ryVyplněná elipsa
PLOT x,yBod
POKE adr,valZápis bajtu
PRINT exprVýstup na obrazovku
PROCEDURE nameDefinice procedury
PSET x,yBod (alternativa PLOT)
PUT x,y,v$Obnovení oblasti obrazovky
QUITUkončení interpretru
READ varČtení z DATA
RENAME old$,new$Přejmenování souboru
REPEAT...UNTILCyklus s podmínkou na konci
RESTOREReset čtení DATA
RETURNNávrat z procedury/GOSUB
RMDIR path$Smazání adresáře
RUNSpuštění programu
SAVE file$Uložení programu
SCREEN w,hNastavení velikosti okna
SEEK #n,posPozice v souboru
SELECT...ENDSELECTVícenásobné větvení
SHOWPAGEZobrazí stránku (double buffer)
SIZEW ,w,hZměna velikosti okna
SORT pole(),nSeřazení pole
SOUND freq,durPřehrání tónu
STOPZastavení programu
SWAP a,bProhození proměnných
SYSTEM cmd$Systémový příkaz
TEXT x,y,text$Text v grafickém okně
VSYNCVertikální synchronizace
WHILE...WENDCyklus s podmínkou na začátku

Funkce (Functions)

FunkcePopis
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
PIKonstanta π
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
TIMERSekundy od půlnoci
TRIM$(s$)Oříznutí mezer
UPPER$(s$)Velká písmena
USINGFormá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