Blue Max
Immense Cult RetroFigure
- Joined
- 13 Οκτ 2020
- Μηνύματα
- 4.936
- Αντιδράσεις
- 16.147

H Hobby Basic είναι ένας διερμηνευτής για την κονσόλα των Windows.
Το συντακτικό της είναι τύπου BASIC.
Χειρίζεται ANSI γραφικά με ευκολία.
Υποστηρίζει Ελληνικά και ποντίκι.
Δημιουργεί αυτόνομο εκτελέσιμο.
Είναι γραμμένη σε fasm.
Download
Λίγα λόγια για την γλώσσα.
Το 2013 έγραψα μια βιβλιοθήκη από ρουτίνες για την κονσόλα σε 32-bit assembly με σκοπό να με βοηθήσουν στα δικά μου project. Δηλαδή κώδικα που θα μπορούσα να επαναχρησιμοποιήσω. Έγραψα διάφορες μικρές εφαρμογές με την βιβλιοθήκη αυτή (ανάμεσα σε αυτές και ένα multi-user chat server), είδα πως οι ρουτίνες δουλεύουν σταθερά. Το 2015 μου ήρθε η ιδέα να δέσω την βιβλιοθήκη αυτή γύρω από έναν μικρό διερμηνευτή BASIC, έτσι γεννήθηκε η Hobby Basic. Μέχρι και σήμερα την αναπτύσω, σιγά-σιγά και χαλαρά, όταν ξεκλέψω λίγο ελεύθερο χρόνο κάποιο Σαββατοκύριακο. Πρόκειται για ένα απλοικό toy intepreter με ορισμένες μάλλον ασυνήθιστες δυνατότητες όπως θα διαπιστώσετε. Δεν σκοπεύει να αντικαταστήσει την αγαπημένη σας γλώσσα προγραμματισμού.
Λόγω της ιδιαιτερότητας του εκτελέσιμου αρχείου, που οφείλεται στο μικρό μεγέθους του, και την γλώσσα που είναι γραμμένο (assembly), υπάρχει περίπτωση το AV σας να γκρινιάξει. Θα είναι περίπτωση false positive, η HB είναι ανεβασμένη στο δίκτυο αρκετό καιρό και δοκιμασμένη από πολλούς χρήστες. Ανάμεσα στα παραδείγματα κώδικα που την συνοδεύουν θα βρείτε ένα σχεδιαστικό πρόγραμμα για την κονσόλα, έναν ANSI Viewer αλλά και ένα p2p Draw μεταξύ 2 υπολογιστών. Με εντελώς retro λοιπόν διάθεση την κάνω post σήμερα εδώ.
Ένα παράδειγμα κώδικα.
Κώδικας:
rem TV.BAS
rem Hobby Basic Interpreter
FULL_BLOCK = 0x2588
a$ = 'N O S I G N A L'
dim c[8] = 15,14,11,10,13,12,9,0
title a$
screen 80,25
cursor 0,0
color 0,7
cls
for x = 0 to 7
pen c[x]
paint x*10,0,10,25,FULL_BLOCK,1
next x
erase 17
erase 18
erase 19
pen 15
at 25,18,a$
inkey
cls : end

Πως να τρέξετε τα παραδείγματα.
Ανοίξτε την γραμμή εντολών CMD.EXE στον φάκελο της HB.
Για να τρέξετε το πρόγραμμα TV.BAS πληκτρολογήστε:
Κώδικας:
hb EXAMPLES/TV.BAS

Σημείωση για χρήστες των Windows 10.
Αν η Hobby Basic δεν λειτουργεί σωστά στην κονσόλα των Windows 10, δοκιμάστε να ενεργοποιήστε την επιλογή legacy για μέγιστη συμβατότητα.

Ακόμα ένα παράδειγμα κώδικα.
Κώδικας:
rem RALLY.BAS
rem Hobby Basic Interpreter
C = 9
R = 5
D = 0
dim rally[C,R]
dim temp[16]
rally$ = PATH('DATA\RALLY.HB')
road$ = '███ ███'
distance = 0
load rally$,rally[]
if V0 = -1 then alert 0x10,'path not found',rally$ : end
data$ = PATH('DATA\RALLY.TXT')
if SIZE(data$) = -1 then save data$,'100'
load data$,best$
best$ = TRIM(best$)
for index = 0 to 15
rgbc index, -1
temp[index] = V0
next
title 'Rally 0.2'
screen 80,25
cursor 0,0
grab 0,0,C,R,rally[],1
start#
gosub STAGE0
if D > VAL(best$)
best$ = STR(D)
save data$,best$
endif
x = 36
y = 12
n = 30
p = 40
r = 0
D = 0
T = 40000
color 0,7 : cls
at 4,2,'Use the arrow keys'
at 4,3,('Try to beat '+best$)
at 4,4,'Distance 0'
color 6,2
for i = 0 to 24
erase n,i,24,-1,-1
at n,i,road$
next
for i = 3 to 0 step -1
if i = 0
at p,2,'█████'
at p,3,'█ █'
at p,4,'█ █'
at p,5,'█ █'
at p,6,'█████'
elseif i = 1
at p,2,' █ '
at p,3,' █ '
at p,4,' █ '
at p,5,' █ '
at p,6,' █ '
elseif i = 2
at p,2,'█████'
at p,3,' █'
at p,4,'█████'
at p,5,'█ '
at p,6,'█████'
elseif i = 3
at p,2,'█████'
at p,3,' █'
at p,4,'█████'
at p,5,' █'
at p,6,'█████'
endif
wait 400000
next
main#
paint x,y-1,C,R,-1,-1
if KEY(37)
x = x - 1
elseif KEY(39)
x = x + 1
elseif KEY(27)
for index = 0 to 15
rgbc index, temp[index]
next
color 0,7:cls:end
endif
if (CELL(x,y+2) = '█' or CELL(x+1,y+4) = '█' or CELL(x+8,y+2) = '█' or CELL(x+7,y+4) = '█')
grab x,y,C,R,rally[],1
color 0,4
paint 25,0,55,25,-1,1
wait 1000000
goto start
endif
grab x,y,C,R,rally[],1
color 0,7
move 25,1,50,24,25,0
D = D + 1
if ~(D % 500)
r = (r + 1) % 4
gosub STAGE//r
endif
n = n + RND() % 3 - 1
if n < 25 then n = 25
if n > 48 then n = 48
at 13,4,D
color 6,2
at n,24,road$
T = T - 20 : wait T
goto main
STAGE0# rgbc 2,0x228B22 : rgbc 4,0x2A2AA5 : rgbc 6,0x0B86B8 : return
STAGE1# rgbc 2,0x800080 : rgbc 4,0x8B008B : rgbc 6,0xD355BA : return
STAGE2# rgbc 2,0x228B22 : rgbc 4,0x008000 : rgbc 6,0x6BB7BD : return
STAGE3# rgbc 2,0xED9564 : rgbc 4,0xFF901E : rgbc 6,0xE6E0B0 : return
