📦 Instalace a stažení
| Zdroj | URL |
|---|---|
| Windows instalátor | sourceforge.net/projects/x11-basic/files/X11-Basic-WIN/ |
| Domovská stránka | x11-basic.sourceforge.net |
| Příklady (ZIP) | codeberg.org/kollo/X11-Basic_examples |
| GitHub | github.com/kollokollo/X11Basic |
Po instalaci je interpreter dostupný jako xbasic.exe v instalační složce. Přidej ji do PATH pro spouštění odkudkoli.
▶ Spuštění programu
' PowerShell / CMD xbasic.exe program.bas ' Interaktivní režim (bez souboru) xbasic.exe ' Kompilace do bytekódu xbbc.exe program.bas -o program.xbc xbvm.exe program.xbc
Po skončení programu se otevře interaktivní prompt >. Ukončení: napiš quit nebo stiskni Ctrl+C.
⚠️ Záludnosti Windows verze
Kritické rozdíly oproti jiným BASICům – pokud přicházíš z QB64 nebo FreeBASIC, toto tě překvapí.
| Co nefunguje | Co místo toho použít |
|---|---|
| Jednořádkový IF THEN | Blokový IF … ENDIF (viz sekce IF) |
END IF (dvě slova) |
ENDIF (jedno slovo) |
DO … LOOP WHILE |
WHILE … WEND nebo REPEAT … UNTIL |
GOSUB label: |
PROCEDURE name … END PROC |
COLOR r, g, b |
COLOR RGB(r, g, b) |
OPENW šířka, výška |
OPENW čísloOkna (pak SIZEWIN) |
TITLE "text" |
TITLEW číslo, "text" |
SETFONT velikost, "bold" |
SETFONT velikost |
Podtržítka v identif. (SP_ZAM) |
Bez podtržítek (SPZAM) – může způsobit chyby |
| UTF-8 / české znaky v kódu | Pouze ASCII – diakritika v řetězcích může selhat |
🔤 Proměnné a typy
| Typ | Přípona | Příklad | Popis |
|---|---|---|---|
| Celé číslo | (žádná) | x = 42 | Integer (32-bit) |
| Desetinné | (žádná) | pi = 3.14 | Float (64-bit) |
| Řetězec | $ | jmeno$ = "Pavel" | String |
| Pole čísel | (žádná) | DIM a(10) | 1D pole |
| Pole řetězců | $ | DIM s$(5) | Pole stringů |
Proměnné se inicializují na 0 resp. "" automaticky. Není nutné explicitní
DIM pro skaláry.
' Deklarace pole DIM hodnoty(100) DIM jmena$(20) ' Přiřazení hodnoty(1) = 42 jmena$(0) = "Alice" ' 2D pole DIM mat(10, 10) mat(2, 3) = 99
➕ Operátory
| Aritmetika | Popis |
|---|---|
| + - * / | Základní operace |
| ^ | Mocnina |
| MOD | Zbytek po dělení |
| DIV | Celočíselné dělení |
| Porovnání | Popis |
|---|---|
| = <> < > | Rovnost / nerovnost |
| <= >= | Menší/větší nebo rovno |
| AND OR NOT | Logické operátory |
x = 10 ^ 2 ' = 100 r = 17 MOD 5 ' = 2 q = 17 DIV 5 ' = 3 b = (x > 5) AND (x < 200) ' = -1 (true)
📝 Řetězce
' Spojení řetězců operátorem + pozdrav$ = "Ahoj" + " " + "svete" ' Délka n = LEN(pozdrav$) ' = 10 ' Podřetězec zac$ = LEFT$(pozdrav$, 4) ' = "Ahoj" kon$ = RIGHT$(pozdrav$, 5) ' = "svete" mid$ = MID$(pozdrav$, 6, 5) ' = "svete" ' Konverze s$ = STR$(42) ' číslo → řetězec n = VAL("3.14") ' řetězec → číslo u$ = UPPER$(s$) ' na velká l$ = LOWER$(s$) ' na malá
STR$ vrací číslo s případnou mezerou na začátku. Pro zobrazení bez mezery použij
LTRIM$(STR$(x)) nebo STR$(INT(x)).
🔀 IF / ELSE / ENDIF
Kritické pravidlo: X11-Basic Windows neakceptuje jednořádkový
IF podmínka THEN příkaz. Vždy použij blokovou formu s ENDIF.
❌ NEFUNGUJE
IF x > 0 THEN PRINT "kladne" IF x < 0 THEN x = 0
✅ FUNGUJE
IF x > 0 PRINT "kladne" ENDIF IF x < 0 x = 0 ENDIF
' IF s ELSE IF skore >= 50 PRINT "Prospel" ELSE PRINT "Neprospel" ENDIF ' Vnořené IF IF a > 0 IF a < 100 PRINT "V rozsahu 1-99" ENDIF ENDIF
Obě varianty
IF podmínka (bez THEN) i IF podmínka THEN (s THEN na konci řádku) fungují pro blokový IF. THEN na konci řádku bez příkazu je v pořádku.
🔁 Smyčky
FOR … NEXT
FOR i = 1 TO 10 PRINT i NEXT i FOR i = 10 TO 1 STEP -1 PRINT i NEXT i
WHILE … WEND
' Podmínka se testuje NA ZAČÁTKU – tělo se nemusí provést vůbec x = 1 WHILE x <= 5 PRINT x x = x + 1 WEND
REPEAT … UNTIL
' Tělo se provede VŽDY ALESPOŇ JEDNOU REPEAT PRINT "Zadej kladne cislo: "; INPUT n UNTIL n > 0
DO … LOOP (nekonečná smyčka)
DO INPUT cmd$ IF cmd$ = "quit" EXIT ENDIF PRINT "Prikaz: " + cmd$ LOOP
DO … LOOP WHILE podmínka není v Windows verzi podporováno. Použij
REPEAT…UNTIL nebo nastav flag proměnnou a WHILE flag = 1 … WEND.
📦 PROCEDURE / END PROC
GOSUB label: nefunguje. X11-Basic Windows vyžaduje pro podprogramy klíčové slovo
PROCEDURE.
❌ NEFUNGUJE
GOSUB mojefunkce ... mojefunkce: PRINT "ahoj" RETURN
✅ FUNGUJE
' Volání – jménem bez GOSUB mojefunkce ' Definice PROCEDURE mojefunkce PRINT "ahoj" END PROC
' Lokální proměnné – globální scope, ale konvence: krátká jména uvnitř procedury PROCEDURE vypocet tmp = 0 FOR i = 1 TO ndeti tmp = tmp + 1000 NEXT i vysl = tmp END PROC ' Předčasné ukončení procedury PROCEDURE zkontroluj IF x < 0 RETURN ' EXIT z procedure ENDIF PRINT "OK: " + STR$(x) END PROC
Všechny proměnné jsou v X11-Basic globální. Procedury sdílejí namespace s hlavním programem.
⌨️ INPUT / PRINT
' Základní INPUT INPUT x ' čte číslo INPUT jmeno$ ' čte řetězec ' INPUT s promptem PRINT "Zadejte mzdu (Kc): "; ' ; = bez odřádkování INPUT mzda ' PRINT varianty PRINT "Ahoj" ' s odřádkováním PRINT "Ahoj"; ' bez odřádkování PRINT ' prázdný řádek PRINT "x =", x ' , = tabulátor
🪟 Grafické okno
' Otevření okna OPENW 1 ' okno č. 1 TITLEW 1, "Moje aplikace" SIZEWIN 800, 600 ' nastavení velikosti ' Smazání obsahu CLEARW 1 ' Zavření CLOSEW 1
OPENW šířka, výška nefunguje. Parametr je číslo okna (celé číslo). Velikost nastav přes SIZEWIN.
🎨 Barvy
' Nastavení barvy kreslení COLOR RGB(255, 0, 0) ' červená COLOR RGB(0, 128, 0) ' zelená COLOR RGB(255, 255, 255) ' bílá COLOR RGB(0, 0, 0) ' černá
COLOR r, g, b (tři parametry) nefunguje. Vždy použij COLOR RGB(r, g, b).
Předdefinované konstanty barev:
| Konstanta | Hodnota | Barva |
|---|---|---|
| WHITE | RGB(255,255,255) | Bílá |
| BLACK | RGB(0,0,0) | Černá |
| RED | RGB(255,0,0) | Červená |
| GREEN | RGB(0,255,0) | Zelená |
| BLUE | RGB(0,0,255) | Modrá |
| YELLOW | RGB(255,255,0) | Žlutá |
✏️ Kreslení
| Příkaz | Popis | Příklad |
|---|---|---|
| PLOT x, y | Bod | PLOT 100, 200 |
| DRAW x1,y1 TO x2,y2 | Čára | DRAW 0,0 TO 200,100 |
| BOX x1,y1,x2,y2 | Obdélník (obrys) | BOX 10,10,200,100 |
| PBOX x1,y1,x2,y2 | Obdélník (výplň) | PBOX 10,10,200,100 |
| CIRCLE x,y,r | Kružnice (obrys) | CIRCLE 100,100,50 |
| PCIRCLE x,y,r | Kruh (výplň) | PCIRCLE 100,100,50 |
| ELLIPSE x,y,rx,ry | Elipsa | ELLIPSE 100,100,60,30 |
' Příklad: barevné obdélníky OPENW 1 TITLEW 1, "Bary" COLOR RGB(200, 50, 50) PBOX 20, 20, 120, 120 COLOR RGB(50, 200, 50) PBOX 140, 20, 240, 120 COLOR RGB(50, 50, 200) PBOX 260, 20, 360, 120 INPUT a$ CLOSEW 1 END
🔠 TEXT a SETFONT
' Nastavení fontu SETFONT 14 ' velikost v bodech SETFONT 18 ' Vykreslení textu na souřadnice (x, y = levý dolní roh) COLOR RGB(0, 0, 0) TEXT 20, 40, "Ahoj svete" ' Text s proměnnou (přes pomocný řetězec) t$ = "Vysledek: " + STR$(vysl) + " Kc" TEXT 20, 60, t$
SETFONT velikost, "bold" nefunguje. X11-Basic Windows přijímá pouze číslo velikosti.
Souřadnice Y u TEXT jsou dolní okraj textu (baseline), nikoli horní roh.
🔢 Matematické funkce
| Funkce | Popis | Příklad |
|---|---|---|
| ABS(x) | Absolutní hodnota | ABS(-5) = 5 |
| INT(x) | Zaokrouhlení dolů | INT(3.9) = 3 |
| ROUND(x) | Zaokrouhlení | ROUND(3.5) = 4 |
| SQR(x) | Odmocnina | SQR(9) = 3 |
| SIN(x) | Sinus (radiány) | SIN(3.14159/2) |
| COS(x) | Kosinus | COS(0) = 1 |
| TAN(x) | Tangens | TAN(0.785) |
| LOG(x) | Přirozený logaritmus | LOG(2.718) |
| EXP(x) | e^x | EXP(1) = 2.718 |
| MAX(a,b) | Maximum | MAX(3,7) = 7 |
| MIN(a,b) | Minimum | MIN(3,7) = 3 |
| SGN(x) | Znaménko (-1/0/1) | SGN(-5) = -1 |
| RND(x) | Náhodné číslo 0..x | RND(100) |
🧵 Řetězcové funkce
| Funkce | Popis | Příklad |
|---|---|---|
| LEN(s$) | Délka řetězce | LEN("ahoj") = 4 |
| LEFT$(s$,n) | Levých n znaků | LEFT$("abcde",3) = "abc" |
| RIGHT$(s$,n) | Pravých n znaků | RIGHT$("abcde",2) = "de" |
| MID$(s$,p,n) | n znaků od pozice p | MID$("abcde",2,3) = "bcd" |
| UPPER$(s$) | Na velká písmena | UPPER$("ahoj") = "AHOJ" |
| LOWER$(s$) | Na malá písmena | LOWER$("AHOJ") = "ahoj" |
| LTRIM$(s$) | Odstraní mezery vlevo | LTRIM$(" x") = "x" |
| RTRIM$(s$) | Odstraní mezery vpravo | |
| TRIM$(s$) | Odstraní mezery na obou stranách | |
| INSTR(s$,h$) | Pozice podřetězce (0=nenalezen) | INSTR("ahoj","ho") = 2 |
| SPACE$(n) | n mezer | SPACE$(3) = " " |
| STRING$(n,s$) | Opakování řetězce | STRING$(3,"ab") = "ababab" |
| CHR$(n) | Znak dle ASCII kódu | CHR$(65) = "A" |
| ASC(s$) | ASCII kód prvního znaku | ASC("A") = 65 |
🔄 Konverze typů
' Číslo na řetězec s$ = STR$(42) ' " 42" (s mezerou) s$ = LTRIM$(STR$(42)) ' "42" (bez mezery) s$ = STR$(INT(x)) ' celé číslo jako text ' Řetězec na číslo n = VAL("3.14") n = VAL(" 42 ") ' mezery jsou OK ' Formátované číslo (pevný počet des. míst) s$ = FORMAT$("%.2f", 3.14159) ' "3.14" s$ = FORMAT$("%d", 42) ' "42"
👋 Příklad: Hello World s grafikou
OPENW 1 TITLEW 1, "Hello World" COLOR RGB(30, 30, 80) PBOX 0, 0, 400, 200 COLOR RGB(255, 255, 100) SETFONT 24 TEXT 80, 110, "Hello, X11-Basic!" COLOR RGB(200, 200, 200) SETFONT 12 TEXT 140, 140, "Stiskni Enter..." INPUT a$ CLOSEW 1 END
🧮 Příklad: Konzolová kalkulačka
novy = 1 WHILE novy = 1 PRINT PRINT "=== KALKULACKA ===" PRINT "Prvni cislo: "; INPUT a PRINT "Operator (+,-,*,/): "; INPUT op$ PRINT "Druhe cislo: "; INPUT b vysl = 0 chyba = 0 IF op$ = "+" vysl = a + b ENDIF IF op$ = "-" vysl = a - b ENDIF IF op$ = "*" vysl = a * b ENDIF IF op$ = "/" IF b = 0 PRINT "Chyba: deleni nulou!" chyba = 1 ELSE vysl = a / b ENDIF ENDIF IF chyba = 0 t$ = STR$(a) + " " + op$ + " " + STR$(b) + " = " + STR$(vysl) PRINT t$ ENDIF PRINT PRINT "Dalsi vypocet? (1=ano / 0=konec): "; INPUT novy WEND PRINT "Nashledanou." END
📊 Příklad: Sloupcový graf
OPENW 1 TITLEW 1, "Sloupcovy graf" SIZEWIN 640, 400 ' Data DIM data(5) DIM popisy$(5) data(1) = 80 : popisy$(1) = "Leden" data(2) = 120 : popisy$(2) = "Unor" data(3) = 95 : popisy$(3) = "Brezen" data(4) = 150 : popisy$(4) = "Duben" data(5) = 110 : popisy$(5) = "Kveten" ' Pozadi COLOR RGB(240, 245, 255) PBOX 0, 0, 640, 400 ' Nadpis COLOR RGB(20, 40, 120) SETFONT 16 TEXT 220, 30, "Mesicni trzby" ' Sloupce maxval = 200 barw = 70 gbase = 350 FOR i = 1 TO 5 xpos = 60 + (i - 1) * 110 bh = INT(data(i) / maxval * 280) COLOR RGB(60 + i * 30, 100, 220) PBOX xpos, gbase - bh, xpos + barw, gbase COLOR RGB(30, 30, 30) SETFONT 10 TEXT xpos + 5, gbase + 16, popisy$(i) t$ = STR$(data(i)) TEXT xpos + 15, gbase - bh - 5, t$ NEXT i COLOR RGB(80, 80, 80) DRAW 50, gbase TO 610, gbase INPUT a$ CLOSEW 1 END