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

Καθυστέρησα λιγάκι την αντικατάσταση της προηγούμενης έκδοσης Αυτή η επιλογή έγινε λόγω της ραγδαίας αύξησης των downloads της v2.3.3, ώστε να διατηρηθεί η θετική ορμή της κοινότητας.

Δεν ξέρεις πόσο χαίρομαι για αυτό!!

Πρόσφατα είχα βγει με ένα γνωστό μου και την γυναίκα του και είχαν φέρει μαζί και τον γιό τους, που θα πάει σε κάποιο δημόσιο ΙΕΚ (αυτά της ΔΥΠΑ) για προγραμματιστής και απο ότι μου είπε ότι θέλει (Ε, το άλλο:) ) να μάθει και δημιουργήσει παιχνίδια και του ανέφερα και για την Hobby Basic να την δοκιμάσει και να την προτείνει και στους καθηγητές, μιας και είναι μια καλή αρχή να ξεκινήσει κάποιος για να μάθει κάποιος προγραμματισμό.

Μου είπε ότι θα δοκιμάσει την HB και θα την παρουσιάσει και στους καθηγητές του απο τον Σεπτέμβρη.

Οπότε αν δεις να σου γράφει απορίες στο site σου κάποιος Έλληνας πιτσιρικάς 17-18 χρονών είναι σίγουρα ο γιος του φίλου μου. Τώρα αν δεις πολλά πιτσιρίκια της ίδιας ηλικίας να σου γράφουν τότε μάλλον θα είναι και συμμαθητές του απο το ΙΕΚ που πηγαίνει στον Κορυδαλλό. :D
 
Τελευταία επεξεργασία:
Ευχαριστώ για την προώθηση

Εύχομαι ολόψυχα καλή επιτυχία στον νεαρό προγραμματιστή.

Με εκπλήσσει θετικά η ραγδαία αύξηση των downloads (πλησιάζουμε τα 7000 από έναν μόνο σύνδεσμο) και με ενθαρρύνει να συνεχίσω την ανάπτυξη του διερμηνευτή.

Πιστεύω πως ορισμένοι παράγοντες έχουν παίξει ρόλο σε αυτή την επιτυχία. Σίγουρα η ιστοσελίδα Get Started και το πρόσφατο βίντεο που ανέβασα έχουν βοηθήσει, αλλά νομίζω ότι το πιο σημαντικό είναι τα πολυάριθμα παραδείγματα (κυρίως τα παιχνίδια με πλήρη source code). Το γεγονός ότι η Hobby επιτρέπει τη δημιουργία παιχνιδιών με ANSI γραφικά στην κονσόλα των Windows, που δεν συναντάς εύκολα αλλού, είναι κάτι που ξεχωρίζει.

Η πρόσφατη προσθήκη της βιβλιοθήκης FPU string math προσφέρει νέες, ακόμη πιο εξελιγμένες δυνατότητες στον διερμηνευτή.

Αν σκεφτεί κανείς την δυσκολία που μπορεί να αντιμετωπίσει κάποιος στις τελευταίες εκδόσεις των Windows όπου το σύστημα κάνει τα πάντα για να αποτρέψει τη λήψη (λέγε με Chrome) και εκτέλεση του αρχείου θεωρώντας το ύποπτο, τότε πραγματικά, ο αριθμός αυτός αποτελεί μια ακόμα μεγαλύτερη επιτυχία.

Εξίσου σημαντική είναι η συνεχιζόμενη υποστήριξη και φιλοξενία στο Retromaniax, η οποία επιτρέπει στους χρήστες από τον Ελλαδικό χώρο να γνωρίσουν την Hobby BASIC.
 
Άντε και σε λίγο θα βγαίνουν demos γραμμένα στην ΗΒ... :)

Σκέφτηκα να δοκιμάσω ένα wave text εφέ, σαν αυτά που βλέπαμε στα παλιά C64 / Amiga demos.

Δεν ήμουν σίγουρος αν κάτι τέτοιο θα μπορούσε να υλοποιηθεί στο παράθυρο της κονσόλας, ίσως να είναι υπερβολικό (ακόμα και για την Hobby BASIC). Παρόλα αυτά, είπα να το τολμήσω.

Για αρχή, χρειαζόμουν μια μεγάλη γραμματοσειρά (big font).

Σκέφτηκα να χρησιμοποιήσω κάποια από το 16colo.rs αλλά θυμήθηκα ότι έχω ήδη αποθηκευμένη σε αρχείο μια διάταξη __font$[128, 5] που περιέχει ολόκληρο το σετ χαρακτήρων από ASCII 32 έως 127, σε μορφή pixel-map.

Κώδικας:
    ! ASCII 65 (A)
    __font$[65,0] = " ███ "
    __font$[65,1] = "█   █"
    __font$[65,2] = "█████"
    __font$[65,3] = "█   █"
    __font$[65,4] = "█   █"

    ! ASCII 66 (B)
    __font$[66,0] = "████ "
    __font$[66,1] = "█   █"
    __font$[66,2] = "████ "
    __font$[66,3] = "█   █"
    __font$[66,4] = "████ "

    ! ASCII 67 (C)
    __font$[67,0] = " ████"
    __font$[67,1] = "█    "
    __font$[67,2] = "█    "
    __font$[67,3] = "█    "
    __font$[67,4] = " ████"


Έγραψα τον παρακάτω κώδικα για να μετατρέψω το αρχείο σε άλλη μορφή που να μπορώ να τη χρησιμοποιήσω στο εφέ.

Κώδικας:
dim flatFont$[96]

for ascii = 32 to 127
    index = ascii - 32
    flat$ = ""

    for row = 0 to 4
        line$ = __font$[ascii, row]
        for col = 1 to LEN(line$)
            pixel$ = MID(line$, col, 1)
            if pixel$ = "█"
                flat$ = flat$ + "1"
            else
                flat$ = flat$ + "0"
            endif
        next
    next

    flatFont$[index] = flat$
next

for i = 0 to 95
    ascii = i + 32
    DEBUG(CHR(34) + flatFont$[i] + CHR(34) + ",\  ! " + STR(ascii) + ": " + CHR(ascii))
next


Η νέα μονοδιάστατη __font$[] διάταξη έχει την μορφή:

1752317106047.png



Επόμενο βήμα η δημιουργία μια απλής big_text(x, y, string) ρουτίνας γενικής χρήσης, στην Hobby BASIC.
  • Η ρουτίνα εμφανίζει κείμενο στην οθόνη χρησιμοποιώντας γραμματοσειρά 5x5 pixel.
  • Μπορείς να ορίσεις πού θα ξεκινήσει να τυπώνει (x, y) και να δώσεις το μήνυμα σαν συμβολοσειρά.
  • Υποστηρίζει μόνο ASCII χαρακτήρες από το 32 έως το 127 (π.χ. γράμματα, αριθμούς, σύμβολα).
  • Ό,τι δεν υποστηρίζεται, εμφανίζεται σαν κενό.
  • Κάθε χαρακτήρας καταλαμβάνει 6 οριζόντια pixels (5 για το γράμμα και 1 για κενό).
  • Η ρουτίνα αγνοεί αυτόματα ό,τι σχέδιο βγει έξω από την οθόνη.
  • Ο πλήρης κώδικας της ρουτίνας.

Κώδικας:
sub big_text(startX, startY, message$)
    local charIndex, verticalRow, horizontalCol
    local asciiCode, screenX, screenY
    local screenWidth, screenHeight
    local charData$
    local baseX, pixelOffset, c$

    screen -1, -1
    screenWidth = V0
    screenHeight = V1

    for charIndex = 1 to LEN(message$)
        asciiCode = ASC(MID(message$, charIndex, 1))
        if asciiCode < 32 or asciiCode > 127 then asciiCode = 32

        charData$ = __font$[asciiCode - 32]
        baseX = startX + (charIndex - 1) * 6

        for verticalRow = 0 to 4
            screenY = startY + verticalRow
            if screenY < 0 or screenY >= screenHeight then pass

            pixelOffset = verticalRow * 5

            for horizontalCol = 0 to 4
                screenX = baseX + horizontalCol
                if screenX < 0 or screenX >= screenWidth then pass

                c$ = MID(charData$, pixelOffset + horizontalCol + 1, 1)
                if c$ = "1"
                    print at screenX, screenY, "█"
                else
                    print at screenX, screenY, " "
                endif
            next
        next
    next
ends



Δοκιμή της ρουτίνας στο παράθυρο της κονσόλας των Windows 11.

Κώδικας:
    %include "EXAMPLES\MISC\BIGTEXT.BAS"

    message$ = "RETROWAVE"

    view 7
    screen 80, 40, 0
    cursor 0
    color 0, 0
    cls

    pen 9
    big_text(2, 4, message$)

    for i = 0 to LEN(message$) - 1
        pen RND(6) + 9
        big_text(i * 6 + 10, 12, message$(i))
    next

    inkey
    view 11
    color 0, 7 : cls
    end

1752322736018.png



Retro Wave Animation (FPU) in Hobby BASIC.
  • Το RETROWAVE.BAS είναι ένα demo κύματος σε στυλ retro, γραμμένο σε Hobby BASIC.
  • Δημιουργεί ένα τρένο από μπλοκ ή χαρακτήρες ASCII που κινούνται ομαλά από δεξιά προς τα αριστερά.
  • Η κίνηση ακολουθεί ημιτονοειδή καμπύλη, όπως στα κλασικά εφέ C64 / Amiga demo.
  • Το εφέ είναι έγχρωμο και κάθε χαρακτήρας ή μπλοκ έχει δικό του χρώμα.
  • Η μεταβλητή ENABLE_MESSAGE ενεργοποιεί εμφάνιση μηνύματος αντί για μπλοκ.
  • Οι χαρακτήρες σχεδιάζονται με τη βοηθητική ρουτίνα big_text() σε 5x5 pixel font.
  • Κάθε sprite αποθηκεύεται προσωρινά με bsave για γρήγορη επανεμφάνιση.
  • Η κίνηση υπολογίζεται με πίνακα τιμών wave_offsets[] βασισμένο στο FSIN.
  • Η αλυσίδα επανεκκινεί όταν εξέλθει από την αριστερή πλευρά της οθόνης.
  • Όλα τα γραφικά εμφανίζονται στην κονσόλα, χωρίς εξωτερικά assets ή βιβλιοθήκες.
  • Ο πλήρης κώδικας του προγράμματος.

Windows 11 Console Screenshots.

1752320491030.png
1752319734723.png


Have fun with Hobby BASIC.
 
Άρα μπορεί κάποιος να παίξει λίγο φτιάχνοντας τέτοια μικρά intros & demακια!!! Σκέτη γλύκα είναι αυτά τα χρωματιστά γράμματα. :)

Μπορεί να συνδυαστεί και με ήχο; Με το κλασικό "μπιμ" του pc speaker. Να κάτι σαν αυτό ή αυτό.. ( τι ωραία που τα λεω ε.. :fafoutis: )

Όλα μπορεί να τα κάνει η Hobby Basic!!
 
Τελευταία επεξεργασία:
Ναι, σίγουρα μπορούν να γίνουν μικρά console demos στην Hobby.
Αν τύχει να το δεις ζωντανά, θα διαπιστώσεις ότι τρέχει αρκετά ομαλά (για τα δεδομένα της κονσόλας).
Βέβαια, μπορεί να συνδυαστεί με ήχο. Η Hobby υποστηρίζει .wav για ηχητικά εφέ από τις πρώτες εκδόσεις και .mp3 για μουσική.
Ωστόσο, οι beep προγραμματιζόμενες μελωδίες θα χρειάζονταν ξεχωριστό module και πιθανότατα αρκετή δουλειά στον assembler.
 
  • Like
Reactions: XLV
Προσπαθώ σε κάθε νέο πρόγραμμα σε Hobby BASIC να δοκιμάζω κάτι διαφορετικό, να πιέζω τον διερμηνευτή στα όριά του, από απλή περιέργεια για το τι μπορεί πραγματικά να κάνει. Κι όμως, υπάρχουν στιγμές που αυτή η μικρή έκδοση της BASIC συνεχίζει να με εκπλήσσει ευχάριστα. Με κάνει να αναθεωρώ όσα θεωρούσα δεδομένα και, ταυτόχρονα, να ανεβάζω τον πήχη στους στόχους μου.

Σκέφτηκα να υλοποιήσω ένα Boulder Dash-like παιχνίδι στην κονσόλα των Windows 11, χρησιμοποιώντας ANSI γραφικά. Το παιχνίδι θα τρέχει σε grid: θα υπάρχουν βράχοι με βαρύτητα και λογική πλάγιου slide, διαμάντια που μαζεύει ο παίκτης, και όταν συγκεντρώσει τον απαιτούμενο αριθμό, θα ανοίγει μια κρυφή έξοδος. Παράλληλα, ένας αντίπαλος θα περιπολεί στον χάρτη.

Μα γίνεται κάτι τέτοιο στη γραμμή εντολών των Windows; Και μπορεί η Hobby BASIC να το φέρει εις πέρας;

Η συγγραφή του κώδικα κράτησε 3 μέρες, αλλά μετά χρειάστηκα περίπου μια ακόμα εβδομάδα για να τον φέρω εκεί που ήθελα. Έγραφα και ξαναέγραφα τις ρουτίνες, δοκίμαζα, μετρούσα, προσπαθώντας να βρω τον καλύτερο δυνατό συνδυασμό σε κίνηση και ταχύτητα. Και μην ξεχνάτε, όλα αυτά μέσα στο παράθυρο της κονσόλας. Το τελικό αποτέλεσμα με ικανοποιεί πολύ, είναι από τις στιγμές που νιώθω πως έβγαλα κάτι καλό στον διερμηνευτή.

ANSI Boulder Dash-style παιχνίδι στην κονσόλα (v1.0)​

Πλατφόρμα: Windows 10/11
Γλώσσα: Hobby BASIC
Source: BDASH.BAS

➤ Στόχος του παιχνιδιού:​

➤ Μαζεύεις όλα τα διαμάντια για να εμφανιστεί η έξοδος
➤ Η πόρτα εμφανίζεται τυχαία σε διαφορετικό τεταρτημόριο από εκεί που είναι ο παίκτης.
➤ Πρέπει να φτάσεις στην πόρτα πριν τελειώσει ο χρόνος.
➤ Ό,τι χρόνος περισσέψει, μετατρέπεται σε bonus έξτρα χρόνο για την επόμενη πίστα.

➤ Μηχανισμοί παιχνιδιού:​

➤ Βράχοι και διαμάντια πέφτουν και γλιστρούν ρεαλιστικά.
➤ Αν σε πλακώσει κάτι, πεθαίνεις αμέσως.
➤ Ο παίκτης έχει animation και ήχο όταν πεθαίνει.
➤ Η πόρτα εμφανίζεται δυναμικά μόλις μαζευτούν όλα τα διαμάντια.
➤ Ο χάρτης χωρίζεται σε 4 περιοχές (A, B, C, D) και λειτουργεί ανάλογα με το πού βρίσκεται ο παίκτης.
➤ Τα γραφικά είναι tile-based μέσω της draw_tile().
➤ Υποστηρίζονται ήχοι (.wav) για βήματα, συλλογή διαμαντιού, θάνατο και άνοιγμα πόρτας.

➤ Συμβατότητα:​

➤ Τρέχει κανονικά σε Windows 10/11 χωρίς να χρειάζεται "Use legacy console"
➤ Πλήρης υποστήριξη για χρώματα, tiles και ήχο στη μοντέρνα κονσόλα.

➤ Windows 11 Console screenshots.










Have fun with Hobby BASIC.
 
Με τόσα love likes θα με παρεξηγήσουν/παρεξηγήσεις φίλε @Blue Max αλλά η αλήθεια είναι ότι κάθε φορά που φτιάχνεις κάτι στη Hobby Basic εντυπωσιάζομαι παρά πολύ και κυρίως με τα παιχνίδια.
 
Με τόσα love likes θα με παρεξηγήσουν/παρεξηγήσεις φίλε @Blue Max αλλά η αλήθεια είναι ότι κάθε φορά που φτιάχνεις κάτι στη Hobby Basic εντυπωσιάζομαι παρά πολύ και κυρίως με τα παιχνίδια.
Ευχαριστώ φίλε Βαγγέλη, ευχαριστώ και όλα τα παιδιά που μπαίνουν, διαβάζουν, σχολιάζουν και πατάνε like. Αν τα likes σου ήταν power-ups, θα ‘χα γίνει ήδη invincible!

Ασε την hobby basic και γινε ansi artist, το χεις :)
Ναι, ναι! Παραδέχομαι πως το τελευταίο διάστημα έχω βελτιωθεί. Δουλεύω με μοτίβα, έχω μια καλή βάση από ANSI γραφικά από τα προηγούμενα παιχνίδια και “δανείζομαι” ιδέες από άλλα projects που χρησιμοποιούν 16 χρώματα.
 
Τον Αύγουστο βρήκα τον χρόνο που χρειαζόμουν και υλοποίησα κάτι που είχα στο μυαλό μου εδώ και καιρό.

Ανέβηκε η έκδοση 2.3.5 της Hobby BASIC και φέρνει κάτι πολύ δυνατό:
πρόσβαση στο Win32 API απευθείας μέσα από τη Hobby BASIC.

Με τη νέα εντολή SYSCALL, μπορούμε να καλέσουμε συναρτήσεις από DLLs των Windows.
Αυτή η δυνατότητα ανοίγει έναν ολόκληρο νέο κόσμο δυνατοτήτων για όλους τους χομπίστες προγραμματιστές της Hobby BASIC.
Τώρα μπορούμε να έχουμε πρόσβαση σε εκατοντάδες κλήσεις του λειτουργικού των Windows απευθείας μέσα από τον BASIC κώδικά μας.

Η σύνταξη είναι απλή:
Κώδικας:
syscall "dllname", "functionname", [arguments...]
  • dllname: το όνομα της DLL, π.χ. "user32.dll".
  • functionname: το όνομα της συνάρτησης, π.χ. "MessageBoxW".
  • arguments: ακέραιοι, συμβολοσειρές, ή πίνακες (by value ή byref).

Notes and Limitations
- Wide-character (W) API calls only.
- All integers are passed as 32-bit values (DWORD or handles).
- Structures are supported only if fields are DWORD or pointers.
- Simulate structures with DIM arrays and pass using BYREF.
- For smaller fields (e.g., WORD), extract using shifts and masks.

Παραδείγματα
Λίγα απλά παραδείγματα χρήσης της εντολής.

Κώδικας:
! simple message box
syscall "user32.dll", "MessageBoxW", 0, "Hello from BASIC!", "Title", 0

1756049564843.png

Κώδικας:
! get current user name
x = 256
syscall "advapi32.dll","GetUserNameW", byref a$, byref x
print "User Name: ", a$

Κώδικας:
! launch calculator
syscall "shell32.dll", "ShellExecuteW", 0, "open", "calc.exe", 0, 0, 1

Κώδικας:
! RECT structure (4 DWORDs: left, top, right, bottom)
dim rect[4].ZERO
syscall "kernel32.dll","GetConsoleWindow"
hwnd = V0
syscall "user32.dll","GetWindowRect", hwnd, byref rect[]
width = rect[2] - rect[0]
height = rect[3] - rect[1]
print "Width:", width, " Height:", height

Στη νέα έκδοση θα βρείτε έναν νέο φάκελο γεμάτο παραδείγματα Win32 API και SYSCALL

WINGEO.BAS
Demonstrates window geometry retrieval and aspect ratio calculation using Win32 API.
LOADBMP.BASLoads and draws a 24-bit BMP image onto the console window using GDI.
CURSORPOS.BASTracks and displays the current mouse cursor position.
GDILINES.BASContinuously draws random colorful lines on the console window using GDI.
SHAPES.BASDraws random geometric shapes using Windows GDI functions.
STARFIELD.BASSimulates a starfield animation using Win32 API rendering.
MOUSECOLOR.BASReads and displays the color value under the mouse cursor.
QPC.BASPrints the high-resolution performance counter value with manual 64-bit division.
RADAR.BASImplements a rotating radar sweep with dynamic color changes.
FILESYSTEM.BASDemonstrates basic file operations using Win32 API calls.
GETTIME.BASRetrieves and prints the current system time using GetLocalTime.


Το παράδειγμα RADAR.BAS δημιουργεί μια περιστρεφόμενη γραμμή τύπου ραντάρ στην κονσόλα.

Αυτό το παράδειγμα δείχνει πώς μπορούμε να χρησιμοποιήσουμε Hobby BASIC, Win32 GDI κλήσεις μέσω SYSCALL και υπολογισμούς κινητής υποδιαστολής (FPU) για να σχεδιάσουμε ένα απλό animation σε παράθυρο κονσόλας. Δείχνει την συνεργασία της Hobby BASIC με το Win32 API μέσω SYSCALL. Χρησιμοποιεί FPU συναρτήσεις για τριγωνομετρικούς υπολογισμούς, χωρίς βιβλιοθήκες C.

Κώδικας:
    !  RADAR.BAS
    !  Hobby BASIC Interpreter
    !  Part of the Hobby BASIC examples collection.

    !   This program draws a continuously rotating radar sweep line in the console window.
    !   The line rotates around the center of the window with a slightly smaller radius
    !   to avoid touching the edges. Each full rotation, a new random color is selected.
    !   Floating-point arithmetic (FPU) is used to compute sine, cosine, and rotation steps.

    title "Implements a rotating radar sweep with dynamic color changes"

    view 11
    screen 80, 30, 0
    cursor 0
    color 0, 7
    cls

    ! Get console device context
    syscall "Kernel32.dll", "GetConsoleWindow"
    hwnd = V0
    syscall "User32.dll", "GetDC", hwnd
    hdc = V0

    ! Get window dimensions
    dim rect[4].ZERO
    syscall "User32.dll", "GetWindowRect", hwnd, byref rect[]
    width = rect[2] - rect[0]
    height = rect[3] - rect[1]

    !  Center coordinates and radius
    cx$ = FROUND(FDIV(width, 2), "NEAREST")        ! X center
    cy$ = FROUND(FDIV(height, 2), "NEAREST")       ! Y center
    radius$ = FROUND(FMUL(FDIV(height, 2), "0.8"),"INT")  ! slightly smaller radius

    angle$ = "0.0"       ! current rotation angle in radians
    delta$ = "0.1"       ! rotation increment per frame
    col = 0xFFFFFF       ! initial pen color (white)

    do
        ! Pick new random color after full rotation
        if FCOMP(angle$, "6.283185") > 0
            angle$ = FSUB(angle$, "6.283185")
            col = VAL("0x" + GEN(6,"0123456789ABCDEF"))
        endif

        ! Create pen and select it for drawing
        thick = 2
        syscall "Gdi32.dll", "CreatePen", 0, thick, col
        hpen = V0
        syscall "Gdi32.dll", "SelectObject", hdc, hpen

        ! Compute end point of radar line
        x$ = FADD(cx$, FMUL(radius$, FCOS(angle$)))
        y$ = FADD(cy$, FMUL(radius$, FSIN(angle$)))

        ! Draw radar line from center to computed end point
        x = VAL(FROUND(cx$, "INT"))
        y = VAL(FROUND(cy$, "INT"))
        syscall "Gdi32.dll", "MoveToEx", hdc, x, y,  0

        x = VAL(FROUND(x$, "INT"))
        y = VAL(FROUND(y$, "INT"))
        syscall "Gdi32.dll", "LineTo", hdc, x, y

        wait 10
        angle$ = FADD(angle$, delta$)   ! increment angle

    until KEY(27)

    ! Release DC and exit
    syscall "User32.dll", "ReleaseDC", hwnd, hdc
    cls : end

Windows 11 Console screenshot.

1756049256898.png


Με το νέο αυτό update, η Hobby BASIC αποκτά δυνατότητες που μέχρι τώρα έλειπαν.
Η πρόσβαση σε συναρτήσεις του Win32 API ανοίγει τον δρόμο για:
  • αλληλεπίδραση με το λειτουργικό
  • προσαρμοσμένες λειτουργίες που δεν υπήρχαν ως εντολές
  • δημιουργία πιο εξελιγμένων παραδειγμάτων
Παρότι υπάρχουν περιορισμοί (32-bit περιβάλλον, μόνο Wide API, απλές δομές), οι δυνατότητες που προσφέρει είναι τεράστιες για το μέγεθος και τη φιλοσοφία της Hobby BASIC.

Have fun with Hobby BASIC.
 
Εξαιρετικά νέα!!!

Αν και ξέρω φίλε @Blue Max την αγάπη σου για την αγνή Basic και τον παιχνιδιάρικο προγραμματισμό που προσφέρει θα μπω στο πειρασμό να σε ρωτήσω..


Η Hobby Basic θα μπορούσε να έχει και περισσότερους ASCII χαρακτήρες αν σκεφτούμε ότι κάπως έτσι έγινε και με την Basic επί εποχής MS-DOS που εξελίχθηκε σε Quick Basic και στην πραγματικότητα μπορούσε αργότερα να δημιουργήσει προγράμματα σε περιβάλλον Windows. Θα μπορούσε να εξελιχθεί η hobby basic αργότερα σε Quick Basic;
 
Τελευταία επεξεργασία:
Πίσω
Μπλουζα