Hobby Basic, ένας μικρός διερμηνευτής για την κονσόλα των Windows

Blue Max

RetroNoob
Joined
13 Οκτ 2020
Μηνύματα
20
Αντιδράσεις
25


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

 

Blue Max

RetroNoob
Joined
13 Οκτ 2020
Μηνύματα
20
Αντιδράσεις
25
Γεια χαρά Always Somewhere.

Αν κάποιος χρειαστεί βοήθεια ή περισσότερες οδηγίες για να την τρέξει, feel free to ask.
 
Μπλουζα