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.