Magaz, The Greek Linux Magazine
Magaz Logo

Xbasic

Κώστας Τσακάλογλου
Απρίλιος 2000

Μία γλώσσα προγραμματισμού Basic που έχει αρκετά στοιχεία C.

Κατά την τακτική επίσκεψη μου στους δικτυακούς χώρους πέρασα και από το site της Sourceforge. Στην προσπάθεια αναζήτησης εργαλείων προγραμματισμού για το LINUX ζήτησα να δώ τι υπάρχει από Developement tools. Προσπαθώντας να δω τελικά με τι θα δουλέψω τώρα που έστησα και εγω επιτέλους το Linuxάκι μου (SUSE 6.3) έπεσα επάνω σε ένα link που έγραφε Xbasic. Τι ωραία! Λές να υπάρχει κάτι ενδιαφέρον, αναρωτιέμαι.. Μια και γράφω σε Basic από την εποχή του TRS-80 καλό θα ήταν να βρω κάτι που δεν θα μου αλλάξει και πολύ το στύλ μου. Ακολουθώντας τα διάφορα links πηγαίνω στην κατάλληλη σελίδα για να δω τελοσπάντων τι πράγμα είναι αυτή η Xbasic. Επιλέγοντας να δω κάποια οθόνη από το πρόγραμμα βρέθηκα μπροστά στην παρακάτω εικόνα:

Αρκετά όμορφο περιβάλλον για να γράφει κανείς πρόγραμμα, για να δούμε όμως από ουσία τι λέει:

Ετσι αποφάσισα να κατεβάσω το πρόγραμμα και να το εγκαταστήσω στο μηχάνημά μου. Σύμφωνα με τις οδηγίες εγκατάστασης, έπρεπε να κατεβάσω το αρχείο xblinux.tar.gz στο μηχάνημά μου και μετά να πληκτρολογήσω τις παρακάτω εντολές:


cd /
 tar xfz xblinux.tar.gz

Αφού λοιπόν το κατέβασμα έγινε μια χαρά και το tar έκανε την δουλειά του, ξεκινάω τα X (KDE). Ανοίγω το Bash Terminal και γράφω:

 cd /usr/xb
 xb
Ωραία ξεκίνησε μια χαρά και ήρθε η ώρα να γράψω τις πρώτες μου εντολές. Μόλις δίνω την εντολή για το ξεκίνημα συγγραφής νέου προγράμματος να και άλλη μια έκπληξη.
'
'
' ######################
' #####  Entry ()  #####
' ######################
'
' Programs contain:
'   1. A PROLOG with type/function/constant declarations.
'   2. This Entry() function where execution begins.
'   3. Zero or more additional functions.
'
FUNCTION  Entry ()

END FUNCTION

Αυτό δεν θυμίζει λίγο στο ξεκίνημα για την C;


main()
{

}

Προσπαθώντας έτσι να ρίξω μια ματιά στην γλώσσα για να δω περίπου τι κάνει, πέφτω επάνω στους τύπους των μεταβλητών. Αρχίζω και βλέπω τύπους που δεν υπάρχουν στην MS-BASIC ούτε καν στην VISUAL BASIC. Είδα διάφορα ωραία πράγματα και τα παραθέτω. Πρώτα από όλα να ξεκινήσω με τον κατάλογο των επιθεμάτων.


@
SBYTE 8-bit signed integer
@@ UBYTE 8 bit unsigned integer
% SSHORT 16 bit signed integer
%% USHORT 16 bit unsigned integer
& SLONG 32 bit signed long integer
&& ULONG 32 bit unsigned long integer
~ XLONG 32/64 bit signed machine integer
$$ GIANT 64 bit signed giant (financial) integer
! SINGLE IEEE single precision floating point
# DOUBLE IEEE double precision floating point
$ STRING STRING of unsigned bytes

Από τον παραπάνω πίνακα, οι τύποι SBYTE ,UBYTE,USHORT,ULONG,XLONG και GIANT δεν υπάρχουν στην MS-BASIC και VISUAL BASIC. Οι Unsigned τύποι καθαρά είναι τύποι που υποστηρίζει η C. Για τον τύπο XLONG νομίζω ότι είναι μια χαρά για εφαρμογές προγραμματισμού συστήματος (systems programming).

Οι μεταβλητες όμως στην XBASIC μπορούν να έχουν και προθέματα που δείχνουν την χρήση των μεταβλητών στις διάφορες ρουτίνες και προγράμματα. Τα προθέματα που μπορούν να χρησιμοποιηθούν στην XBASIC είναι:


#
SHARED Η μεταβλητή είναι διαθέσιμη σε όλες τις ρουτίνες
## EXTERNAL Η μεταβλητή είναι διαθέσιμη και σε άλλα προγράμματα
$ LOCAL CONSTANT Η μεταβλητή έχει σταθερή τιμή για την τρέχουσα ρουτίνα
$$ SHARED CONSTANT Η μεταβλητή έχει σταθερή τιμή και είναι διαθέσιμη σε όλες τις ρουτίνες

Θέλει προσοχή όταν ορίζουμε και χρησιμοποιούμε μεταβλητές στην XBASIC. Όπως και στο Linuxάκι μας τα κεφαλαία / πεζά είναι σημαντικά για την ονοματολογία των αρχείων, έτσι και στην XBasic τα κεφαλαία / πεζά δίνουν διαφορετικά ονόματα μεταβλητών άρα και διαφορετικές τιμές. Για αυτή την γλώσσα τα ονόματα COUNT, Count και count είναι διαφορετικές μεταβλητές.

Σύμφωνα με προηγούμενα καταλαβαίνουμε ότι οι εντολές πρέπει να γράφονται αποκλειστικά με κεφαλαία γράμματα γιατί διαφορετικά η γλώσσα τις βλέπει σαν μεταβλητές. Έτσι το:

FOR I%=1 to 100   
είναι σωστό, ενώ το:
For  I%=1 to 100  
είναι λάθος γιατί η γλώσσα καταλαβαίνει ότι υπάρχει μια μεταβλητή For όπου δεν την κάνουμε τίποτα.

Παρακάτω συνέχισα την ανάγνωση και έπεσα στους τελεστές συγκρίσεων. Εκεί πάλι είδα στοιχεία από την C να ξεφυτρώνουν όπως οι τελεστές:

= ,<>,<  ,<=,>=,>
μπορούν να εκφραστούν και αντίστοιχα με
==,!=,!>=,!>,!<,!<=
Επίσης αν ρίξουμε μια ματιά στον παρακάτω πίνακα θα δούμε τελεστές διευθύνσεων μνήμης (pointers) που τόσο αρέσουν στους προγραμματιστές της C και διάφορα άλλα καλούδια όπως μετακινίσεις bit κλπ.

OP
ALT ΚIND CLASS OPERANDS RETURNS PREC COMMENTS
& unary 10 AnyType Address 12 Address of Object Data
&& unary 10 AnyType Address 12 Address of Object Handle
! unary 9 Numeric T/F 12 Logical Not (TRUE if 0, else FALSE)
!! unary 9 Numeric T/F 12 Logical Test (FALSE if 0, else TRUE)
NOT ~ unary 9 Integer SameType 12 Bitwise NOT
+ unary 8 Numeric SameType 12 Plus
- unary 8 Numeric SameType 12 Minus
>>> binary 7 Integer LeftType 11 Arithmetic Up Shift
<<< binary 7 Integer LeftType 11 Arithmetic Down Shift
<< binary 7 Integer LeftType 11 Bitwise Left Shift
>> binary 7 Integer LeftType 11 Bitwise Right Shift
** binary 4 Numeric HighType 10 Power
/ binary 4 Numeric HighType 9 Divide
* binary 4 Numeric HighType 9 Multiply
\ binary 6 Numeric Integer 9 Integer Divide
MOD binary 6 Numeric Integer 9 Modul. (Int.Remain)
+ binary 5 Numeric HighType 8 Add
+ binary 5 String String 8 Concatenate
- binary 4 Numeric HighType 8 Subtract
AND & binary 3 Integer HighType 7 Bitwise AND
XOR ^ binary 3 Integer HighType 6 Bitwise XOR
OR | binary 3 Integer HighType 6 Bitwise OR
> !<= binary 2 NumStr T/F 5 Greater-Than
>= !< binary 2 NumStr T/F 5 Greater-Or-Equal
<= !> binary 2 NumStr T/F 5 Less-Or-Equal
< !>= binary 2 NumStr T/F 5 Less-Than
<> != binary 2 NumStr T/F 4 Not-Equal
= == binary 2 NumStr T/F 4 Equal(also "!<>")
&& binary 1 Integer T/F 3 Logical AND
^^ binary 1 Integer T/F 2 Logical XOR
|| binary 1 Integer T/F 2 Logical OR
= binary NumStr RightType 1 Assignment
T/F T/F always returned as XLONG

Κάτι Address και bitwise shift έχουν κάποιο ενδιαφέρον για κάποιους που θέλουν να χρησιμοποιήσουν αυτές τις εντολές αλλά η μέχρι τώρα γνωστές Basic δεν τους έδιναν αυτή την δυνατότητα.

Από μια πρώτη ματιά νομίζω ότι κάποιος που ξέρει BASIC και έχει αποφασίσει να αρχίσει να γράφει προγράμματα για το LINUX καλό είναι να ρίξει μια ματιά σε αυτή την γλώσσα που εκ πρώτης όψεως υπόσχεται πολλά. Εκτός από τις εντολές που δίνουν την δύναμη της C στον προγραμματιστή υπάρχει και παράθυρο εργαλείων για την κατασκευή μιας φόρμας. Κουμπιά και όλα τα Widgets των X μάλλον υποστηρίζονται. Λέω μάλλον γιατί δεν έχω προλάβει να αρχίσω να κάνω κάτι με αυτή την γλώσσα. Απλά όταν την είδα με μια πρώτη ματιά μου άρεσε τόσο που αποφάσισα να μοιραστώ τις εντυπώσεις που με άλλους προγραμματιστές γράφοντας αυτό το κείμενο και παρουσιάζοντάς το στο Magaz. Τον άλλο μήνα που θα έχω κάνει κάτι θα γράψω και νεότερα. Εχω σκοπό να κρατάω σημειώσεις για κάθε τι που κάνω και να παρουσιάζω κάθε τόσο από τη στήλη του Magaz κάθε τι καινούργιο όπως θα το μαθαίνω. Αυτά τα λίγα για τώρα και τα ξαναλέμε στο επόμενο Magaz.


Valid HTML 4.01!   Valid CSS!