Εκτέλεση (Βασικά)

Απαντήσεις σε συχνές ερωτήσεις!

(μπορεί σε αυτά που γράφω να έχει κάποιος διαφωνείες ή να κατανοεί άλλο πράγμα από αυτό που γράφω...ελπίζω να γίνομαι κατανοητός.  Η ικανότητα να γίνεται  κάποιος κατανοητός στον καθένα...μάλλον είναι του προφήτη...και κάτι τέτοιο δεν είμαι!)

 

-Αναθεώρηση κειμένου που καλύπτει και την έκδοση 8.2 αναθ. 9

Πώς αλλάζω γενικές ρυθμίσεις;

Με την εντολή Ρυθμίσεις ή με Ctrl+U ανοίγει ο διάλογος των ρυθμίσεων. Η μόνη πρακτικά μη χρήσιμη ρύθμιση για τα windows είναι η πεζά/κεφαλαία ξεχωριστά σε αρχεία. Αυτό χρειάζεται για το Linux. 
Αυτό που μας ενδιαφέρει είναι η γραμματοσειρά, αν θα έχουμε Ελληνικά ή Λατινικά (παλιά είχε νόημα, διότι συνδέονταν με την κωδικοσελίδα, τώρα αλλάζει την εμφάνιση των μηνυμάτων από Ελληνικά σε Αγγλικά). Τα χρώματα (τα βασικά) για φόντο και γράμματα, αν θέλουμε να ξεκινάμε με Bold (Φαρδιά) γράμματα, το μέγεθος των γραμμάτων και το διάστιχο. Μπορούμε να δούμε τις αλλαγές πριν τις δώσουμε. Μπορούμε να δούμε αν η γραμματοσειρά έχει δικά της γράμματα για Ελληνικά ή δανεικά, λόγω έλλειψης. Έχουμε ένα κουμπάκι που γυρνάει τα γράμματα σαν Unicode (16LE) και σαν Ansi (8bit), αυτό δεν σημαίνει ότι αλλάζει κάτι στη Μ2000, αυτό που μας δείχνει είναι τι αντικαταστάσεις κάνει το λειτουργικό για τη συγκεκριμένη γραμματοσειρά (κάποιες δεν έχουν ελληνικά και παίρνει το σύστημα ελληνικά από άλλη γραμματοσειρά). Μπορούμε να βάζουμε διάστιχο ανά 30 twips για την κονσόλα(ή οθόνη όπως την λέμε στην Μ2000). (2 pixels στα 96dpi, 1440 twips είναι η ίντσα - η λογική στην οθόνη, η πραγματική στον εκτυπωτή). 
 Νέα προσθήκη στο διάλογο Ρυθμίσεις είναι τα χρώματα της εξαγωγής σε HTML, που γίνεται από το διορθωτή με την αντιγραφή στο πρόχειρο. Με DARK έχουμε χρώματα σκούρα για φωτεινό φόντο, ενώ η επιλογή BRIGHT είναι κατάλληλη για σκούρα φόντα!

 

Τι είναι o μεταφραστής γραμμής εντολών (CLI)

Όταν ανοίγουμε το περιβάλλον βρισκόμαστε στον CLI ή command line interpreter, ή Μεταφραστή Γραμμής Εντολών ΜΓΕ, ο οποίος γνωρίζει ένα υποσύνολο της Μ2000. Θεωρούμε το επίπεδο λειτουργίας το μηδέν, με την έννοια ότι αν έχουμε καλέσει το Α και εκείνο το Β τότε το Β είναι στο επίπεδο 2.
Ότι φτιάχνουμε σε επίπεδο 0 είναι γενικό (ή σφαιρικό, global). Μπορούμε να φτιάξουμε τμήματα, συναρτήσεις, πίνακες, μεταβλητές. Προγραμματιστικά, εντός των τμημάτων, καλούμε τον CLI με την εντολή Θέσε και ότι έχουμε μέχρι την άκρη της γραμμής!
Ο ΜΓΕ Δεν υποστηρίζει αριθμούς γραμμών εντολών, επαναλήψεις ούτε ακόμα και σημειώσεις με τα ' και \ αλλά μόνο με το ΣΗΜ ή REM, όπου ένα τμήμα Α  μπορούμε να το εκτελέσουμε από το ΜΓΕ ως σενάριο (script) χωρίς δηλαδή να λογαριάζεται το τμήμα, οι εντολές περνούν στο ΜΓΕ σαν να τις πληκτρολογίσαμε. Οι εντολές αυτές είναι η ΣΕΝΑΡΙΟ και SCRIPT, είναι μόνο για το ΜΓΕ και μόνο για τμήματα πρώτου επιπέδου.
Ο μεταφραστής της Μ2000 μπορεί να ξεκινήσει με εντολή ως παράμετρο, χωρίς να ανοίξει το περιβάλλον σε κοινή θέα, αλλά εσωτερικά θα τρέξει μια εντολή φόρτωσης προγράμματος το οποίο θα τρέξει στον μεταφραστή.Σε αυτή την περίπτωση πρέπει να δοθεί η εντολή Άναψε για να έχουμε θέαση στην φόρμα της εφαρμογής! Υπάρχει δυνατότητα να ανοίγει η Μ2000 φόρμες διαλόγων χωρίς καν να ανοίξει το περιβάλλον του μεταφραστή γραμμής εντολών! Όπως αυτό εδώ που δουλεύει εδώ και μερικές εκδόσεις...αδιάκοπα γιατί με αυτό υπογράφω το m2000.exe αρχείο (καλεί άλλο πρόγραμμα αλλά είναι μια χαρά για τη δουλειά του)

Ποια είναι η πιο χρήσιμη εντολή μετά την Τέλος;


Είναι η εντολή Βοήθεια
Βοήθεια Βοήθεια
Βοήθεια Τύπωσε

Αν τα θέλεις όλα τότε:
Βοήθεια ΟΛΑ



Πώς γράφω ένα τμήμα:

Σ Άλφα ανοίγει το διορθωτή στο Άλφα και ότι γράψουμε με Esc σώνεται ξεχωριστά ως τμήμα Άλφα στην μνήμη (όχι στο δίσκο). Με Σώσε Άλφα σώνω το τμήμα στο δίσκο. Προσοχή αν γράψω το παρακάτω θα γίνει;
Σ ΝΕΟ
Τύπωσε "δεν το κάνω"

Τώρα αν δώσω την εντολή ΝΕΟ για να σβήσει το πρόγραμμα θα μας απαντήσει ο διερμηνευτής:

δεν το κάνω

Για να καλέσουμε την ΝΕΟ ως εντολή και όχι το τμήμα πρέπει τώρα να δώσουμε τον άμεσο τρόπο:

@ΝΕΟ

Τώρα έσβησε το τμήμα ΝΕΟ.

Τα τμήματα προηγούνται των εντολών εκτός από βασικές εντολές αλλαγής ροής και ανάθεσης τιμών.

Γιατί στο μεταφραστή γραμμής δεν μπορώ να πάω με το βελάκι πίσω;

Η ρουτίνα εισαγωγής σε αυτό το επίπεδο έχει μόνο backspace, enter και Ctrl+V για αντιγραφή καθώς και τα βελάκια πάνω και κάτω για να δούμε τις εντολές που είχαμε δώσει. Παρόλα αυτά έχουμε τη δυνατότητα να δούμε όλες τις εντολές αν γράψουμε το Σ ή Edit χωρίς παράμετρο και έτσι θα ανοίξει ο διορθωτής με όλες τις γραμμές που έχουμε εισάγει και μάλιστα με αυτόματο χρωματισμό εντολών (μπορούμε να προσθέσουμε γραμμές). Έτσι αν κάποιος θέλει με το Σ και enter γράφει μια σειρά εντολών, βγαίνει με Esc και με τα βελάκια άνω και κάτω επιλέγει όποια εντολή θέλει και δίνει Enter.

Γιατί εξυπηρετεί ο χρωματισμός του κώδικα, πέρα από το ωραίο της εμφάνισης;

Ο χρωματισμός αφενός μας λέει αν μια εντολή υπάρχει αφού όταν υπάρχει χρωματίζεται, αλλά ένα άλλο στοιχείο του είναι η ορθότητα στο χρωματισμό των παρενθέσεων. Υπάρχουν τρία χρώματα για τις παρενθέσεις, ένα για τις εντολές που έχουν παρενθέσεις, ένα άλλο για δικές μας συναρτήσεις και ένα χρώμα για τις "βοηθητικές" παρενθέσεις σε εκφράσεις. Έτσι άμεσα βλέπουμε αν έχουμε κάνει κάποια "πατάτα", δηλαδή αν έχουμε μπερδέψει τις παρενθέσεις! Και άλλα κάνει που είναι πολλά για αυτό το σύντομο οδηγό! 
Ο χρωματισμός βγαίνει και μπαίνει με το F11 (και εναλλάσσεται και η γλώσσα σε μεγάλη η μικρή εκδοχή, στην εμφάνισή της στο διορθωτή), δηλαδή έχουμε τέσσερις καταστάσεις ή 2Χ2.

Στον διορθωτή γιατί δεν μπορώ να κάνω Drag, να σύρω; 

Μπορούμε αλλά είναι κλειστό για να μην γίνεται προβληματική η χρήση για νέους χρήστες. Δουλεύει όμως ανάποδα, δηλαδή να φέρουμε από άλλο κείμενο με μια κίνηση κείμενο! Ένα από αυτά είναι από την βοήθεια που βγαίνει με το ctrl+F1 όταν επιλέξουμε μια εντολή, ή από το μενού με δεξί κλικ, ή με αριστερό στη γραμμή πληροφοριών του διορθωτή.

Πώς κάνουμε εκτέλεση ενός προγράμματος;

Ο πιο απλός τρόπος είναι να ανοίξουμε την γλώσσα m2000.exe και να γράψουμε Σ Α και πατάμε Enter οπότε ανοίγει ο διορθωτής. Εκεί αντιγράφουμε ένα παράδειγμα και πατάμε Esc. Γράφουμε Α και πατάμε Enter και το πρόγραμμα τρέχει.
Άλλος τρόπος είναι να εκτελέσουμε το gsb αρχείο (όπου γράφονται με τη σειρά τα τμήματα και οι συναρτήσεις και στο τέλος έχουμε το όνομα του τμήματος που θέλουμε να τρέξει. Επίσης χρειάζεται μια εντολή Άναψε ή  show (η Δείξε κάνει κάτι άλλο, οπότε εδώ η λέξη Άναψε κυριολεκτικά ανάβει την οθόνη του περιβάλλοντος της Μ2000)

Παράδειγμα και Ρύθμιση για εκτέλεση προγράμματος απευθείας από αρχείο με πρόγραμμα:

Ξεκινάμε μια φορά τη Μ2000 με δικαιώματα διαχειριστή. Αμέσως μετά γράφουμε αυτό:
Switches "+REG"
Monitor
Η δεύτερη εντολή μας δείχνει σημαντικά μονοπάτια (paths) της Μ2000
Βγαίνουμε από την Μ2000 με Τέλος και ξανά μπαίνουμε χωρίς δικαιώματα διαχειριστή (δεν χρειάζονται πια).

Άλλος τρόπος χωρίς να δώσουμε δικαιώματα είναι να δείξουμε στο σύστημα με ποιο πρόγραμμα θα ανοίγει τα gsb αρχεία.

Γράφουμε  Σ "c:\alfabeta.gsb" οπότε ανοίγει ο διορθωτής που θα γράψει στην έξοδο απευθείας στο δίσκο. Αντιγράφουμε το παρακάτω (χωρίς τη τελεία της λίστας εδώ). Βγαίνουμε από τον διορθωτή και ή γράφουμε Φόρτωσε "c:\alfabeta.gsb"  (μπορούμε να το αντιγράψουμε και αν το επικολλήσουμε στον μεταφραστή γραμμή με ctrl+V) ή ανοίγουμε το φάκελο C: με Win C:
και κάνουμε διπλό κλικ στο alfabeta.gsb

Στο παράδειγμα φορτώνω ένα τμήμα. (εντολές στα Ελληνικά στη θέση των αγγλικών με τη σειρά εμφάνισης:  Τμήμα, Φόρμα, Οθόνη, Πένα, Τύπωσε, Τύπωσε υπό, Άναψε, Κομ$ (από το κομβίον) και Τέλος. Το @() πάει τον δρομέα στο 5,4 (με 0,0 η πάνω αριστερή γωνία). Η Φόρμα φτιάχνει κοσνόλα 20Χ10 χαρακτήρων σε ολόκληρη την οθόνη.

  • Module a {
          Form 20,10
          Cls #fdf5e8 'Duron Paperwhite - http://encycolorpedia.com/fdf5e8
          Pen #738276 'Smoke - http://encycolorpedia.com/738276
          Print @(5,4), "Hello Wold";
          Print Under ' change line and draw a line under
          Show
          a$=Key$ ' WAIT FOR KEYBOARD     
    }
    a
    End

Μπορώ να αλλάξω επιλεκτικά τη γραμματοσειρά της οθόνης και όχι μόνο από τις Ρυθμίσεις;

Ναι γίνεται. Δίνουμε στη σειρά και μια εντολή να αλλάξει τη φόρμα. Υπάρχουν γραμματοσειρές που έχουν το ίδιο πραγματικό μέγεθος για ίδιο μέγεθος που ζητάμε. Αλλά υπάρχουν και άλλες με διαφοροποιήσεις. Αν γνωρίζουμε δυο τέτοιες όπως η Verdana και η Tahoma μπορούμε να γράφουμε με αλλαγή γραμματοσειράς χωρίς να αλλάζουν οι θέσεις εκτύπωσης. Με το παρακάτω τρόπο παίρνουμε ίδια φόρμα με άλλη γραμματοσειρά ανεξάρτητα από το τι αναλογίες πραγματικά έχουν δυο μεταξύ τους γραμματοσειρές για δοσμένο μέγεθος χαρακτήρων. Στα χωριστά επίπεδα (συνολικά είναι 35, μπορούμε να έχουμε ξεχωριστή γραμματοσειρά. Τυπώνουμε Unicode χαρακτήρες.
Τα αλφαριθμητικά κρατάνε UTF-16LE ενώ σώνουμε σε UTF-8.

γραμματοσειρά "VERDANA" Φόρμα πλάτος, ύψος


Μπορώ να γράψω diacritics;   (https://en.wikipedia.org/wiki/Diacritic)

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

Π.χ. το όνομα έχει περισπωμένη Γιω̃ργος σε χωριστό χαρακτήρα. Για να βγει γράφουμε το ω και μετά το Alt 771 ή το Alt + 301  (το + το πληκτρολογούμε, το θέλουμε για δεκαεξαδικό νούμερο, το 301 είναι το 0x301)
Και στο διορθωτή και στη γραμμή εντολών μπορούμε να γράψουμε τέτοιους συνδυασμούς! Στον διορθωτή όταν προχωράμε το βελάκι πάνω από συνδυασμό βλέπουμε να αλλάζει η θέση του δρομέα (αναφέρεται στη θέση του χαρακτήρα στη παράγραφο) και μπορούμε να σβήσουμε το τόνο μόνο.)

Μπορώ να έχω πλάγια ή με έμφαση γράμματα;

Ναι γίνεται με την εντολή Πλάγια που λειτουργεί ως διακόπτης, για πλάγια γράμματα και με την εντολή Φαρδιά για φαρδιά (bold) γράμματα. Η οθόνη έχει σχεδιαστεί για να αναμείξουμε γράμματα φαρδια, πλάγια, φαρδιά και πλάγια και κανονικά με μη αναλογική γραφή.

Μπορώ να εμφανίζω στην οθόνη με αναλογική γραφή γράμματα;
Ναι γίνεται, όπως μπορώ να έχω εκτυπώσεις με στήλες με αναλογική γραφή. Δείτε την Τύπωσε.
Για κείμενο με στοίχιση αριστερά, δεξιά, πλήρη και κέντρο με αυτόματη αναδίπλωση λέξεων δείτε την Αναφορά. Για εισαγωγή με αναλογική γραφή δείτε την Εισαγωγή !


Μπορώ να βλέπω το κείμενο στο διορθωτή χωρίς αναδίπλωση λέξεων;

Ναι μπορούμε με το F1, και μάλιστα να το αλλάζουμε όποια στιγμή θέλουμε. Δεν υπάρχει μπάρα ολίσθησης οριζόντια. Με Home και End πλήκτρα πάμε αριστερά ή δεξιά, ή με κλικ στις άκρες προχωράει αυτόματα ο διορθωτής. Η κάθετη μπάρα ολίσθησης κρύβεται αυτόματα. Με F10 εναλλάσσουμε την εμφάνιση του χαρακτήρα της παραγράφου. Με F9 έχουμε άμεσα την μέτρηση λέξεων.

Μπορώ να διορθώνω ένα τμήμα ενώ βλέπω κάπως και ένα άλλο;


Ναι γίνεται. Πατάμε το F12 και ανοίγει η βοήθεια και δείχνει όλα τα φορτωμένα/δημιουργημένα τμήματα (στο επίπεδο 0, όπου όλα είναι γενικά-global). Μπορούμε να κάνουμε κλικ σε κάποιο και θα το δούμε (όχι χρωματισμένος κώδικας). Μπορούμε να αντιγράψουμε κομμάτι στο τρέχον, ή να σημειώσουμε κάτι - αλλά αυτό είναι προσωρινό. Η φόρμα της βοήθειας δουλεύει με κλικ σε κάποιο όνομα ...φέρνει από τη βάση δεδομένων το πρώτο που βρίσκει ή είναι παρόμοιο.
Η φόρμα της βοήθειας όπως και όλες οι φόρμες της Μ2000 όταν κάνουμε αλλαγή μεγέθους, κάνει αλλαγή μεγέθους και των γραμμάτων! Ειδικά αυτή η φόρμα έχει και μόνο κατά πλάτος αύξηση μεγέθους χωρίς να μεγαλώνει τα γράμματα. Αν επιλέξουμε μετά το F12 το τρέχον τμήμα τότε θα δούμε την παλιά "εικόνα" του, αυτή που είχε πριν φορτωθεί στο διορθωτή, Αυτό συμβαίνει γιατί ο διορθωτής δουλεύει πάνω σε αντίγραφο και αν θέλουμε με Shift F12 βγαίνουμε χωρίς να σώσουμε τις αλλαγές. Το πλήκτρο F12  δουλεύει και από την βοήθεια που μπορούμε να ανοίξουμε όταν κάνουμε δοκιμή στο πρόγραμμα. (περιγράφεται αλλού)

Μπορώ να ολισθαίνω πάνω και κάτω τις γραμμές του διορθωτή;

Μπορούμε να ολισθαίνουν πάνω ή κάτω τις γραμμές του διορθωτή με κράτημα του αριστερού και ώθηση πάνω ή κάτω χωρίς να μετακινούμε το δρομέα, και μάλιστα με αυτόματη ολίσθηση αν κρατήσουμε πατημένο το ποντίκι λίγη ώρα παραπάνω. Με το ροδελάκι του ποντικιού αλλάζουμε και τη θέση του δρομέα και πάμε κατά μισή σελίδα πάνω ή κάτω, πολύ γρήγορα.
Όταν γράφουμε ο διορθωτής προσπαθεί να μεταφέρει την γραμμή που γράφουμε στο μέσον της οθόνης, ώστε να γράφουμε πάντα στο ίδιο σημείο! Για το λόγο αυτό όταν έχουμε ένα μεγάλο πρόγραμμα και ξεκινήσουμε από τη τελευταία γραμμή, με το βελάκι πάνω θα φτάσουμε στο μέσον και μετά θα δούμε όλο το κείμενο να "κατεβαίνει" αλλά ο δρομέας θα είναι στη μεσαία γραμμή!
Μπορεί να ανοίξει πολύ μεγάλα κείμενα και τα χρωματίζει με μεγάλη ταχύτητα (πρακτικά δεν βλέπουμε αναμονή). Ο διορθωτής χρησιμοποιείται και για απλά κείμενα χωρίς χρωματισμό.

Έχουμε Σελιδοδείκτες στο διορθωτή;

Υπάρχουν τρεις σελιδοδείκτες για να μετακινούμαστε γρήγορα σε τρεις θέσεις στο κώδικα του τμήματος (χάνονται αν επιλέξουμε άλλο τμήμα για διόρθωση).
Με τα πλήκτρα F6, F7 και F8 ορίζουμε σελιδοδείκτες (ανά θέση χαρακτήρα ανά παράγραφο). Αν προσθέσουμε παραγράφους δεν χάνεται ο σελιδοδείκτης. Πατάμε μια φορά π.χ. το F6 και άμεσα παίρνει τη ρύθμιση στη μνήμη. Δεύτερη φορά αν ήδη είμαστε στη παράγραφο αφαιρούμε τη μνήμη. Όταν ο σελιδοδείκτης έχει μνήμη έχει ένα αστεράκι. Όταν είμαστε σε παράγραφο με σελιδοδείκτη

Πόσα τμήματα/συναρτήσεις κρατάει στη μνήμη η Μ2000;

η Μ2000 κρατάει έναν αριθμό τμημάτων/συναρτήσεων σε ξεχωριστές θέσεις φορτωμένα. Η εντολή Σώσε δουλεύει για όλα, δηλαδή σώνει όλα τα τμήματα σε αρχείο UTF-8 με κατάληξη .gsb, ενώ η Φόρτωσε φορτώνει προσωρινά εκτός και αν την καλέσουμε από την γραμμή εντολών.
Με την εντολή Διαγραφή σβήνουμε το τελευταίο που φτιάξαμε. Με την Νέο τα σβήνουμε όλα! Η εντολή Συγγραφή (ή Σ για συντομία) εκτός του ότι ανοίγει τον διορθωτή σε νέο ή υπάρχον αναγνωριστικό, μπορεί να χρησιμοποιηθεί για να αλλάξουμε όνομα σε τμήμα. Π.χ Σ α ως β κάνει το α να έχει όνομα β. Μπορούμε να διορθώσουμε τμήματα στο δίσκο αλλά πρέπει να δώσουμε όνομα ως αλφαριθμητικό και με την κατάλληξη π.χ. Σ "αλφα.gsb" (μπορούμε και κείμενο να διορθώσουμε με Σ "αλφα.txt"). Μπορούμε να βάλουμε και το μονοπάτι (φάκελο) στο όνομα αρχείου.
Για να διοθρώσουμε συνάρτηση πρέπει να έχει το όνομα παρενθέσεις (όχι παραμέτρους, ορίζονται αλλιώς). Π.χ. Σ α() ανοίγει ο διορθωτής στο α() και γράφουμε =1000 τώρα αν γράψουμε στη γραμμή εντολών Τύπωσε α() θα πάρουμε το 1000. Αν βάλουμε μια Διάβασε Χ και μετά μια =Χ**2 τότε με Τύπωσε α(10) θα πάρουμε το 100, ενώ με Τύπωσε α() θα πάρουμε λάθος γιατί η διάβασε δεν έχει τίποτα να διαβάσει!


Χωριστή Οθόνη και διορθωτής


Ο διορθωτής στα προγράμματα χρησιμοποιεί όλο το πλάτος της βασικής οθόνης και από το ύψος που δηλώνουμε την χωριστή οθόνη (split screen). Το κάτω μέρος από το ύψος της χωριστής οθόνης μπορεί να ολισθαίνει (πάνω ή κάτω, αλλά αυτόματα πάνω). Ο διορθωτής όμως δεν πειράζει καθόλου την οθόνη, ανοίγει απλά πάνω στο συγκεκριμένο μέρος. Υποτίθεται πως η χωριστή οθόνη λειτουργεί για να κρατήσει ένα μέρος της (το πάνω πάντα) με στοιχεία μόνιμα ή πάντα θεατά.
Με Οθόνη, 0 σβήνουμε τη οθόνη με το τρέχον χρώμα οθόνης και η δεύτερη παράμετρος λέει από πού θα ξεκινάει η χωριστή οθόνη (οπότε και μια εντολή Οθόνη επενεργεί από κει και κάτω). Με το 0 λέμε ότι όλη η οθόνη θα ολισθαίνει. Επειδή υπάρχει και το περιθώριο (το μέρος εκείνο που δεν μπορεί να χρησιμοποιηθεί για χαρακτήρες - μπορούμε και σε αυτό να δώσουμε ένα χρώμα με την παρακάτω εντολή:
Περιθώριο {Οθόνη 5,0}
(και το Περιθώριο είναι ένα επίπεδο όπως η βασική οθόνη και έχει και αυτό χωριστή οθόνη. Υπάρχουν και άλλα 32 επίπεδα πάνω από τη βασική οθόνη και ένα ακόμα για τον εκτυπωτή..άρα σύνολο 35 επίπεδα - τα 32 επίπεδα χρησιμοποιούνται και για τα hardware sprites, για μετακινούμενα αντικείμενα - οι οθόνες μετακινούνται κιόλας...).

Πώς αλλάζω χρώματα ή γράμματα στο διορθωτή;

Τα χρώματα του διορθωτή εξαρτώνται από την Πένα και την Οθόνη .Τα χρώματα χρωματισμού είναι δυο σετ ανάλογα με το χρώμα της οθόνης, αν είναι σκούρο ή ανοικτό.
π.χ. Άσπρο χρώμα τα γράμματα  και Μαύρο το φόντο:
Πένα 15 : Οθόνη 0
το ανάποδο;
Πένα 0: Οθόνη 15
κάτι άλλο με νούμερα για χρώματα από την Html
Πένα #AA7722 : Οθόνη #11FFAA
Το χρώμα της πένας χρησιμοποιείται για σημειώσεις με \ ή ' στην αρχή της γραμμής (ακόμα και αν έχουμε διαστήματα). Όλα τα άλλα χρώματα είναι από επιλογή του χρωματιστή! Αν αφαιρέσουμε όμως το χρωματισμό θα έχουμε χρώμα την Πένα!
Ανάλογα με τα χρώματα Πένας και Οθόνης αποφασίζει ο χρωματιστής αν θα ακολουθήσει τα ανοιχτά ή τα σκούρα χρώματα στο χρωματισμό του κώδικα. Επίσης από εκεί βγάζει αυτόματα "συμπέρασμα" τι χρώμα θα έχει η γραμμή αναφοράς πάνω από τον διορθωτή (εκεί που εμφανίζει όνομα τμήματος ή συνάρτησης και άλλα στοιχεία καθώς και τη γλώσσα πληκτρολογίου).

Πώς κάνουμε πιο γρήγορο το πρόγραμμα με μια εντολή..και πώς πιο αργό;

Ο διερμηνευτής έχει τρεις σκάλες ταχύτητας. Κανονικά τρέχει στη μεσαία. Στο ΜΓΕ (CLI) υπάρχει εντολή ΓΡΗΓΟΡΑ (μεσαία ταχύτητα - προσοχή όχι μισή). Σε αυτή τη περίπτωση οι ανανεώσεις της οθόνης γίνονται κανονικά. (επειδή έτσι θεωρούμε το κανονικά). Στο ΓΡΗΓΟΡΑ !  (δείτε το θαυμαστικό), οι ανανεώσεις γίνονται σε αναμονές ή όταν εμείς θελήσουμε με την εντολή ΑΝΑΝΕΩΣΗ. Με την εντολή Θέσε στέλνουμε το κείμενο μέχρι το τέλος γραμμής στο ΜΓΕ (CLI) μέσα από πρόγραμμα (η ΓΡΗΓΟΡΑ δεν είναι εντολή στο διερμηνευτή, αλλά στο ΜΓΕ).
Το παρακάτω θα τρέξει και θα δούμε μόνο τα τελευταία νούμερα. Το Esc λειτουργεί (σε παλιές εκδόσεις της γλώσσας δεν λειτουργούσε). Δοκιμάστε στο μισό χρόνο εκτέλεσης να πατήσετε το Esc. θα δείτε ότι το Esc λειτουργεί αλλά με το πέρας της Για {}
Ουσιαστικά το Για {} δεν κόβεται με τίποτα! Ούτε με Break (για να έχουμε τη μέγιστη απόδοση).
Για το λόγο αυτό η συγκεκριμένη ταχύτητα δεν θεωρείται η κανονική.
Γράψτε αυτό σε ένα τμήμα έστω Α με την Σ Α

  • Θέσε Γρήγορα !
    Για ι=1 Έως 1000 {
          Τύπωσε ι
    }

Από την γραμμή εντολών οι εντολές ταχύτητας είναι η Γρήγορα, η Γρήγορα ! και η Αργά. Η τελευταία δεν είναι τόσο Αργή όσο φαντάζει (παλαιότερα ήταν). Δεν είναι η ίδια ταχύτητα που με την ΑΡΓΗ ΡΟΗ της φόρμας Δοκιμή.
Δώστε Δοκιμή Α (έστω Α το προηγούμενο πρόγραμμα). θα ανοίξει η φόρμα δοκιμής. Πατήστε το Αργή ροή και μετά την ετικέτα Επόμενο: (ανοίγει ο κώδικας και φαίνεται η εντολή που τρέχει με χρώμα, πιο παραστατικά δεν γίνεται)
Η εντολή Αργά ή Θέσε Αργά μέσα από το πρόγραμμα λειτουργεί με περισσότερο χρόνο στο σύστημα και στα μηνύματα. Έτσι μπορούμε με Ctrl+W να ανοίξουμε ανά πάσα στιγμή τον διορθωτή, να σταματήσουμε δηλαδή το πρόγραμμα, να γράψουμε μερικές μεταβλητές για να μας τις δείχνει, να προχωρήσουμε ή να κλείσουμε το διορθωτή και να ξαναμπεί στην ταχύτητα που ήταν.

Οι διαφορές αν δεν μεσολαβεί ανανέωση οθόνης (π.χ. αντί για τύπωσε βάζουμε το κ=ι)  είναι:
Χωρίς εντολή για την οθόνη όπως η Τύπωσε: 654 (Γρήγορα !)  - 737 (Γρήγορα)-780 (Αργά)
Με την Τύπωσε: 10100 (Γρήγορα ! βλέπουμε μόνο τις τελευταίες γραμμές) και στις άλλες κανονικά:
11106 (Γρήγορα) και 11163 (Αργά). Βλέπουμε ότι η Αργά δεν είναι τόσο αργή όταν τυπώνουμε στην οθόνη! (στην ουσία μετά τα πρώτα τυπώματα έχουμε ολίσθηση οθόνης, άρα έχουμε περίπου 965 ολισθήσεις σε 11,2 δευτερόλεπτα (τα παραπάνω είναι σε χιλιοστά του δευτερολέπτου, ή 86 fps αν πούμε την κάθε ολίσθηση ένα frame). Ουσιαστικά η Γρήγορα ! είναι καλή όταν κάνουμε υπολογισμούς και δεν δείχνουμε κάτι. Μπορούμε να αλλάζουμε ταχύτητα κατά βούληση!

Πώς σταματάμε ένα πρόγραμμα;

Ένα πρόγραμμα σταματάει ή με φυσικό τρόπο, δηλαδή όταν τελειώσει την εργασία του ή με την δράση του χρήστη ή με ξαφνικό κλείσιμο του υπολογιστή.
Εδώ μας ενδιαφέρει το να σταματήσουμε ένα πρόγραμμα με τη δράση του χρήστη:
1. Το πιο βαρύ όπλο είναι το κουμπί Break (πάνω και τέρμα δεξιά στο πληκτρολόγιο). Όμως 99% σβήνει και το πρόγραμμα Εμφανίζει διάλογο για να συνεχίσει ή όχι..(ορισμένες φορές ο διάλογος έρχεται μετά τη διακοπή).
2. Μετά πάμε στο Ctrl+C το οποίο εμφανίζει μήνυμα και αν θέλουμε διακόπτουμε το πρόγραμμα
3. Με το Esc  (το οποίο μπορεί κανείς να το βγάλει εκτός μέσα από το πρόγραμμα με την εντολή ΔΙΑΦΥΓΗ ΟΧΙ)

Πώς κλείνει ο διερμηνευτής;

Με εντολή End ή Τέλος ή με το κουμπί [Χ] που εμφανίζεται στο τίτλο στην γραμμή εργασιών (taskbar). Από εκεί μπορούμε να ελαχιστοποιήσουμε την εφαρμογή (μπορούμε να το κάνουμε και προγραμματιστικά αυτό).

Που είναι ο φάκελος του χρήστη;

Αν αλλάξουμε φάκελο και θέλουμε να επανέλθουμε στο φάκελο χρήστη τότε η εντολή είναι:
Κατάλογος Χρήστη
Για να τον δούμε στον explorer:
Συστημα Κατ$

Πώς γράφουμε ένα αρχείο Gsb

Μπορούμε να το γράψουμε απευθείας με το διορθωτή αρκεί να το βάλουμε σε εισαγωγικά και να βάλουμε και το τύπο στο τέλος:
Σ "α.gsb"
Το αρχείο διορθώνεται και στην έξοδο σώνεται στο δίσκο
Μπορούμε να το φορτώσουμε με Φόρτωσε α  και μετά αν θέλουμε να κάνουμε αλλαγές άμεσα στο φορτωμένο αρχείο (που μπορεί να είναι μοιρασμένο σε τμήματα και συναρτήσεις) τότε με ctrl+a κάνουμε άμεσα σώσιμο με το όνομα που είχαμε φορτώσει (εμφανίζεται η εντολή SAVE COMMAND$).

Τι περιέχει ένα αρχείο Gsb

Ένα αρχείο Gsb είναι ένα αρχείο κειμένου (μπορεί να είναι UTF8 ή όχι, αλλά εξ ορισμού η Μ2000 φτιάχνει αρχεία Gsb σε UTF8).
Επειδή η Μ2000 μπορεί να χρησιμοποιεί κρυπτογραφημένα προγράμματα, αν θέλουμε να γράψουμε ελληνικό πρόγραμμα πρέπει η πρώτη εντολή να περιέχει τη λέξη ΤΜΗΜΑ ή ΣΥΝΑΡΤΗΣΗ ή ΚΛΑΣΗ.
Συνάρτηση Α {
}ή
Τμήμα Α {
}ή
Κλάση Α {
}
Μπορούμε να γράψουμε απλές εντολές εφόσον όμως η πρώτη εντολή έχει  γράμμα με κωδικό κάτω από το 128. Π.χ. όλες οι αγγλικές εντολές έχουν πράγματι τέτοιο κωδικό (κάτω από το 128). Μπορούμε να βάλουμε μια  REM που είναι για σημειώσεις και μετά να βάλουμε απλές εντολές:
REM
Πίνακας α(100)=20, β$(30,20)
Λίστα
Σε αυτές τις εντολές δεν μπορούμε να γράψουμε επαναλήψεις, πάνε στον μεταφραστή γραμμής, σαν να τις γράφαμε με το χέρι (σαν manual mode).
Αν θέλουμε να τρέξουμε ένα τμήμα ως εντολές άμεσα τότε γράφουμε ΣΕΝΑΡΙΟ όνοματμήματος
Τμήμα Α {
Πίνακας α(100)=20, β$(30,20)
Λίστα
}
Σενάριο Α
Το πρόγραμμα παραπάνω κάνει ότι και το προηγούμενο με την εντολή REM αλλά τώρα έχουμε τη λέξη Τμήμα πρώτη!

Τι κάνουν οι εντολές ΑΡΧΗ, ΝΕΟ, ΚΑΘΑΡΟ και ΑΔΕΙΑΣΕ

Η Νέο ή NEW σβήνει όλα τα προγράμματα - και τις στατικές μεταβλητές
Η Καθαρό ή CLEAR χωρίς παράμετρο σβήνει όλες τις μεταβλητές (και τις γενικές και τις στατικές)
Η Άδειασε ή FLUSH αδειάζει το σωρό τιμών
H Αρχη ή START τα κάνει όλα αυτά!

Τι είναι καθολικές (γενικές) μεταβλητές και τμήματα (και συναρτήσεις, και κλάσεις).

Το παρακάτω το γράφουμε με Edit "one.gsb"
Μετά την έξοδο με Esc από το διορθωτή το τρέχουμε με Load one
Οι τελευταίες εντολές είναι δυο: η Script που τρέχει το Α σαν σενάριο εντολών του ΜΓΕ και καθαρίζει μεταβλητές και σωρό, και φτιάχνει καθολικές μεταβλητές - εδώ μια αριθμητική και μια ομάδα (αντικείμενο) με τμήματα Α και Β, ως k.A και k.B και αυτά καθολικά.
  • Μετά καλούμε την C. Και αυτή είναι καθολική αφού υπάρχει στο πρώτο επίπεδο. Μέσα στη C καλούμε αυτά τα τμήματα.
  • Δείτε την άνω κάτω τελεία που χωρίζει εντολές στη γραμμή
  • Επίσης δείτε στην ομάδα (group) ότι τρεις μεταβλητές χωρίς τιμές (αν θέλουμε δίνουμε). Στο μπλοκ της ομάδας δεν δίνουμε εντολές εκτέλεσης. Αν στις μεταβλητές θέλουμε να δώσουμε τιμές με δικές μας συναρτήσεις, τότε στην ουσία εκτελούμε κώδικα αλλά μέσα στη συνάρτηση.
  • Δείτε ότι στο τμήμα Α της ομάδας k τυπώνουμε τις μεταβλητές της ομάδας με αναφορά σε αυτήν με την τελεία. Είναι σύντμηση αυτού Print this.a, this.b, this.c  όπου το This ή Αυτό αναφέρεται στην ομάδα (στο k). Αν βάζαμε το k.a δεν θα είχαμε λάθος εκτός και αν φτιάχναμε μια k.a, οπότε θα παίρναμε την τοπική (στα τμήματα ότι κάνουμε αν δεν το ορίσουμε αλλιώς είναι τοπικό). Εδώ στην δεύτερη Print έχουμε το τοπικό k.a και δίπλα το k.b της ομάδας, οπότε χρησιμοποιώντας τα .a, .b, .c έχουμε μια άμεση ιδέα τι είναι αυτό που έχουμε.
  •                   k.a=10000
                      Print this.a, this.b, this.c
                      Print k.a, k.b
  • Προσοχή εδώ γιατί μια .a=10 θα ορίσει τοπική μεταβλητή, ενώ θέλουμε .a<=10, επειδή το = ορίζει πάντα τοπικό, ψάχνοντας τοπικές μεταβλητές. (ως ισότητα δεν έχει θέμα). Οι πίνακες δεν παίρνουν το <= διότι δεν ορίζονται με το =. Μια Α()=Β() αντιγράφει τον Β πίνακα στο Α, αλλά πρέπει να έχει οριστεί με DIM A() ότι το Α() είναι πίνακας (μπορεί να είναι συνάρτηση ή ρουτίνα, ή και τα τρία μαζί)
Module A {
      Clear
      Flush
      ALFA=1000
      group k {
            \\ define group k as global group
            a,b,c
            Module A {
                  Print .a, .b, .c
            }
            Module B {
                  Read .a,.b,.c
            }
      }
}
Module C {
      k.b 20,30,40
      k.a
      Print ALFA
}
Script A : C

Τι είναι οι στατικές μεταβλητές

Είναι μεταβλητές που μπήκαν από την αναθ. 140 (εκδοση 8) και ο διερμηνευτής "θυμάται" τιμές μεταβλητών, βάσει κλήσης και συνάρτησης/τμήματος, και αφού αυτά πάψουν να τρέχουν. Αυτές οι μεταβλητές είναι απλές, ακέραιες ή αλφαριθμητικές (όχι πίνακες και αντικείμενα). Ενώ οι κανονικές μεταβλητές εγγράφονται σε μια λίστα με σειρά εμφάνισης και διαγράφονται με την ανάποδη σειρά, καθώς ο δημιουργός (τμήμα ή συνάρτηση) τερμάτισε, οι στατικές εγγράφονται στο αντικείμενο εκτέλεσης και στο τερματισμό του δίνονται "πακέτο"στο πατρικό αντικείμενο. Αντικείμενα εκτέλεσης έχουν τα τμήματα, οι συναρτήσεις, τα νήματα, αλλά όχι ένα συγκεκριμένο, αλλά αυτό που θα λάβουν στην κλήση. Αν ένα τμήμα κληθεί από τρια άλλα τμήματα (άρα είναι γενικό) τότε θα έχει "ιστορικά" δημιουργήσει τρία διαφορετικού πατρικού αντικείμενα εκτέλεσης και αν έχουμε στατικές μεταβλητές θα φτιαχτούν τρία πακέτα (το καθένα την ώρα του, όχι όλα μαζί). Το κάθε πακέτο δίνεται στο τμήμα που εκτελείται, και αυτο το επιστρέφει (την πρώτη φορά δεν θα δοθεί κάτι αφού η Μ2000 δεν ξέρει πριν την πρώτη φορά ότι το τμήμα θα κάνει στατικές μεταβλητές). Άρα τα τρία πακέτα στο υποθετικό παράδειγμα θα βρίσκονται σε άλλο αντικείμενο εκτέλεσης και αν έχουμε επιστρέψει στην γραμμή ΜΓΕ (CLI), όπου υπάρχει ένα βασικό αντικείμενο εκτέλεσης σε αναμονή, τότε αυτό θα έχει όλα τα πακέτα πιθανόν με φωλιασμένα πακέτα.

Η εντολή NEW/ΝΕΟ σβήνει όλα τα τμήματα/συναρτήσεις και τις στατικές (αφού δεν έχει νόημα να τις κρατάει το βασικό αντικείμενο εκτέλεσης). H Clear/Καθαρό σβήνει τις στατικές από το τρέχον σημείο (αλλά σβήνει όλες τις άλλες- και τους πίνακες, οπότε είναι ρίσκο αν χρησιμοποιηθεί εντός φωλιασμένου τμήματος, και στο πατρικό υπάρχουν κανονικές μεταβλητές).

Σε ένα τμήμα έστω a γράφουμε αυτό. Όσες φορές το καλέσουμε θα έχουμε αλλαγή στην έξοδο βάσει της k που αυξάνει κατά 1. Αν θέλουμε δίνουμε νέα mm, αν αυτή είναι το 50 τότε σταματάει η έξοδος να αλλάζει, δείχνε συνέχεια το 1000, για κάθε a που εκτελούμε. Με νέο mm που δίνουμε διάφορο του 50 μπαίνουμε σε νέα μέτρηση! Το a είναι ένα αυτόματο! Αλλά δεν λειτουργεί αν δεν το "σκανδαλίσουμε" εμείς. Αυτό δεν ισχύει για τα νήματα...διαβάστε παρακάτω!
  • static mm=100
    if match("N") then read mm
    module kk {
          read m
          if m=50 then clear : m=1000
          static K=1
          print k*m
          k++
    }
    kk mm
    print mm


Τι είναι τα Νήματα.

Τα νήματα είναι μέρη τμήματος ή συνάρτησης που θέλουμε να εκτελούνται περιοδικά, ανά χρονικό διάστημα, και λειτουργούν ασύγχρονα με το όλο πρόγραμμα. Έχουν δικό τους αντικείμενο εκτέλεσης αλλά όχι δική τους λίστα μεταβλητών (αυτή είναι του τμήματος). Έχουν όμως δικές τους στατικές μεταβλητές. Τις ξεκινάμε με Thread Set i=10, i%,, a$="ok", b$ ή Νήμα Θέσε ι=1, ι, α$="ναι", β$. Σε κάθε επανάληψη του νήματος η εντολή αυτή κοιτάει αν υπάρχουν οι μεταβλητές και αν ναι τότε δεν εκτελεί τυχόν τιμή αντικατάστασης.
Τα νήματα ορίζονται με αριθμούς χειρισμού και μπορούν να κρατηθούν, να εκκινήσουν ξανά, να διαγραφούν, να αλλάξουν χρονικό διάστημα (δίνουμε κάθε πότε θα εκκινεί όχι το χρόνο αναμονής για την επόμενη εκτέλεση, σε περίπτωση ένα νήμα  χρειαστεί περισσότερο χρόνο τότε "ζητάει" άμεσα νέα εκτέλεση, αλλά θα πάρει με τη σειρά του. Νήματα που σχετίζονται με αναμονή στο πληκτρολόγιο δεν σταματούν άλλα νήματα). Επιπλέον μπορούμε να δώσουμε μια εντολή για άμεση εκτέλεση από άλλο νήμα, ή το τμήμα που βρίσκεται το νήμα, ή από άλλο τμήμα (υπάρχει περίπτωση το πατρικό να έχει νήματα και να καλέσει ένα τμήμα που και αυτό βάζει νήματα).
Η χρησιμότητά τους είναι να εκτελούν παράλληλα εργασίες. Αν και δεν γίνεται στην τρέχουσα υλοποίηση της Μ2000, σε κάποια άλλη θα μπορούσε να δοθεί κάθε νήμα σε άλλο επεξεργαστή!
Σε ένα παιχνίδι κάθε νήμα μπορεί να "παίζει" διαφορετικό χαρακτήρα/αντικείμενο, ενώ όλα μαζί επενεργούν στις ίδιες πηγές.


Πώς δεν μπερδεύονται τα ονόματα συναρτήσεων, πινάκων και ρουτινών;

Οι πίνακες έχουν προτεραιότητα. Αν επιμένουμε να θέλουμε να χρησιμοποιήσουμε ίδιο όνομα πίνακα με συνάρτηση τότε η συνάρτηση θέλει το @ όπως στο παράδειγμα. Δείτε ότι στην Other ορίζουμε αλλιώς τη συνάρτηση a() (η Def είναι παραλλαγή της εντολής Function/Συνάρτηση που την χρησιμοποιούμε σε μια γραμμή, και κάνει αυτό Function A { Read X   :   = X**3}

Προσοχή εδώ γιατί δεν φαίνεται ...η συνάρτηση a() άλλαξε κανονικά και όχι προσωρινά στην ρουτίνα Other. Οι ρουτίνες γράφουν στη λίστα μεταβλητών του τμήματος, δεν έχουν δική τους λίστα. Απλά όταν τερματίσουν σβήνουν ότι προσθήκη κάνουν. Εδώ ο νέος ορισμός της συνάρτησης δεν ειναι προσθήκη αλλά αλλαγή. Μπορούμε σε ένα τμήμα να έχουμε συναρτήσεις και τμήματα και να τους αλλάζουμε το κώδικα με επιλογές από ρουτίνες, ώστε να αποφεύγουμε τα πολλά if...σε μια κάθε χρήση τμήματος ή συνάρτησης.

Ότι αναφέρθηκε εδώ περιορίζεται σε μια λίστα μεταβλητών και  μια λίστα τμημάτων και συναρτήσεων (οι ρουτίνες είναι εκτός λίστας, αναζητούνται κάθε φορά από το τέλος) ενός τμήματος ή μιας συνάρτησης. Κάθε τμήμα έχει τα δικά του ονόματα και μπορεί να είναι ίδια με τα τμήματα άλλων. Εδώ υπάρχει ένα θέμα που το αντιμετωπίζει ο διερμηνευτής..με το όνομα μιας ομάδας, όπου ο διερμηνευτής δεν δέχεται όνομα τμήματος ίδιο με όνομα ομάδας που περιέχεται στο τμήμα. Εδώ δεν έχουμε να κάνουμε με στατικές μεταβλητές (δεν έχουμε με παρενθέσεις, πίνακες δηλαδή)

  • Dim a(6)=5
    Def a(x)=x**2
    Print a(5) \\ πίνακας
    Print a(@10) \\ συνάρτηση με το @ την ξεχωρίζουμε από πίνακα!
    Gosub a(101) \\ χωρίς gosub/διαμέσου θα δώσει λάθος, θα το δει ως πίνακα και θα περιμένει τιμή
    Print function("a",10)
    Print array("a",5)
    b(3) ' καλούμε τη ρουτίνα έτσι επειδή δεν έχουμε πίνακα b()
    Other(3)
    Sub b(x)
          Print a(x) ' τον πίνακα
    End Sub
    Sub a(X)
          Print X
    End Sub
    Sub Other(X)
          Def a(x)=x**3
          Print a(@x)
    End Sub


Πώς σώνω με κρυπτογράφηση
Έστω ότι έχουμε φτιάξει το τμήμα Α
Σώσε "Αλφα" @
Αρχη
Φόρτωσε "Αλφα"
Αν κάνουμε πως θέλουμε να διαβάσουμε το Α
Σ Α
? το Α κλειδωμένο

Πώς φτιάχνω πρόγραμμα που τρέχει αυτόματα;

Υπάρχουν δυο επίπεδα "άμεσης" εκτέλεσης. Το ένα έχει να κάνει με φόρτωση από το περιβάλλον, και το άλλο με κλήση του περιβάλλοντος και πέρασμα του ονόματος στη γραμμή εντολών αυτόματα (δηλαδή με κλίκ πάνω στο αρχείο gsb που έχει δηλώσει ότι θα ανοίγει με τo m2000.exe).
Για να τρέξει ένα πρόγραμμα αυτόματα πρέπει να έχει μια εντολή τουλάχιστον που να καλεί ένα τμήμα στο τέλος βέβαια.
1. Γίνεται αυτόματα αν σώσουμε και δώσουμε το όνομα του τμήματος για εκκίνηση:
Σώσε α1234, α
Σώσαμε με όνομα α1234.gsb στον τρέχοντα κατάλογο (κατ$) και δώσαμε το α ως την εντολή εκκίνησης
Τώρα αν κάνουμε:
Αρχή
Φόρτωσε α1234
Θα φορτωθεί το α1234 και θα τρέξει το α
2. Ο άλλος τρόπος:
Πρώτα γράφουμε το πρόγραμμα (ή το διορθώνουμε αν είχε σωθεί) απ' ευθείας στο δίσκο:
σ "β123.gsb"
Έστω γράφουμε αυτό: (η εντολή Αναψε και η αναμονή για πληκτρο με μια Α$=Κομ$ είναι απαραίτητα αν θέλουμε να δούμε οθόνη και αν θέλουμε να δούμε και τι γράφει η οθόνη)
Τμήμα Α {
      Διάβασε Κάτι$, κ, λ
      Τύπωσε "Γεια χαρά"
      Τύπωσε Κάτι$, κ*λ
      Άναψε
      Α$=Κομ$
}
Α
Τέλος
Τώρα πατάμε Esc και έχουμε έτοιμο ένα πρόγραμμα που μπορούμε να του περάσουμε κάποιες παραμέτρους (μετά το όνομα δεν υπάρχει κόμμα, αλλά μετά τη πρώτη παράμετρο υπάρχει),
Χρήση β123 "οκ", 10,30
Η Μ2000 δεν περιμένει να πάρει αποτελέσματα σταματόντας την λειτουργία, αλλά μπορεί να χρησιμοποιήσει σωλήνωση (Pipe) για να ακούει τα μηνύματα από την εφαρομογή που ξεκίνησε! Θα το δούμε σε άλλη ανάρτηση, Αυτός είναι ο ασύγχρονος τρόπος λειτουργίας.

Μπορώ να φορτώνω ένα πρόγραμμα πρόσκαιρα σε ένα άλλο και να κάνω κάποιες διεργασίες;

Ναι αυτή είναι η έννοια του τμήματος στην Μ2000, να μπορούν να τρέξουν μέσα σε άλλα τμήματα ακόμα και αν τα φορτώσουμε κατά την εκτέλεση άλλου τμήματος
σ "πρόσωπο.gsb"
Αντιγράφουμε και πατάμε Esc
Κλάση Πρόσωπο {
      όνομα$
      τμήμα Πρόσωπο {
      διάβασε .όνομα$
      }
       τμήμα Παρουσιά_σου {
             Τύπωσε .όνομα$
      }
}

Τώρα γράφουμε Νεο και Σ Α
Φόρτωσε Πρόσωπο
α=Πρόσωπο("Γιώργος")
α.Παρουσιά_σου
Βάλε α
Τώρα με Esc βγαίνουμε και τρέχουμε το Α
Α
Γιώργος
Στην επιστροφή η Α έχει σβήσει τον ορισμό της κλάσης και την μεταβλητή α
το ελέγχουμε με την παρακάτω εντολή
ΛΙΣΤΑ
Ας δούμε το Σωρό:
ΣΩΡΟΣ
Λέει
*[Group]
Ωραία θα το πάρουμε!
Διάβασε Κ
Κ.Παρουσιά_σου
Γιώργος
Ας έφυγε ο "κατασκευαστής", το κατασκεύασμα έμεινε..στο σωρό και το πήραμε!
ΣΩΡΟΣ
Δεν υπάρχει τίποτα
Κάντε πάλι το ίδιο αλλά τώρα δώστε εντολή ΑΔΕΙΑΣΕ και μετά ΣΩΡΟΣ, Τώρα δεν πήραμε τίποτα γιατί ότι ο σωρός ...άδειασε..πριν τον δούμε!

Μπορώ να βάλω πίνακα στο σωρό;

Ναί μπορούμε, θα μπει αντίγραφο:
Πίνακας Α(100)=100
Βάλε Α()
Διάβασε Β()
Τύπωσε Β(4)
        100
Για να σβήσουμε το πίνακα και κάθε μεταβλητή
Καθαρό
Ή αναφορά, αλλά μια φορά μπορεί να μπει αναφορά!
Πίνακας Α(100)=100
Βάλε &Α()
Διάβασε &Γ()
Α(4)+=20
Τύπωσε Γ(4)
        120
Για να σβήσουμε το πίνακα και κάθε μεταβλητή
Καθαρό
Μπορώ να φτιάχνω πίνακα με μηδενική διάσταση(θα βάλω αργότερα)
Πίνακας Α()

Τι είναι ο σωρός στη Μ2000;

Ο σωρός είναι μια ειδική στοίβα που λειτουργεί ως FIFO δηλαδή Το τελευταίο που βάζω βγαίνει πρώτο! Υπάρχουν εντολές για μετακίνηση στοιχείων. Ουσιαστικά ο σωρός είναι μια συλλογή στοιχείων όπου η σχέση τους έχουν να κάνουν με το ότι πάντα διαβάζουμε από αυτό που είναι στην κορυφή, και όταν κάτι διαβαστεί θα βγει από το σωρό δίνοντας τη θέση του στο επόμενο της σειράς.
Στην όγδοη έκδοση μπορούμε να διαβάζουμε (αντιγράφοντας) χωρίς να βγάζουμε στοιχεία. Αλλά αυτό είναι προχωρημένο για αυτόν τον οδηγό.
Όταν καλούμε ένα τμήμα δημιουργείται αντικείμενο εκτέλεσης αλλά με σωρό το σωρό του πατρικού. Οι συναρτήσεις, τα τμήματα που τα καλούμε με τη Κάλεσε, και τα νήματα, έχουν δικό τους σωρό. Οι συναρτήσεις αν κληθούν με την κάλεσε, την πρώτη φορά παίρνουν το σωρό όπως τα τμήματα, σε κάθε άλλη όμως κλήση στον εαυτό τους.. (αναδρομική)  δημιουργούν δικό τους σωρό. Οι ρουτίνες βλέπουν τον σωρό εκείνου που τις καλεί!

Άδειασε
Βάλε 1,2,3,4
Διάβασε Α,Β, Γ,Δ
Τύπωσε Α,Β, Γ,Δ
   4  3  2  1
Μπορώ να χρησιμοποιήσω ανάποδα το Σωρό, να βγάζω το πρώτο που βάζω;
Ναι
Άδειασε
Σειρά 1,2,3,4
Διάβασε Α,Β, Γ,Δ
Τύπωσε Α,Β, Γ,Δ
   1  2  3   4

Τι περιορισμό έχουμε στο Σωρό;

 Μπορούμε να βάλουμε όσα στοιχεία θέλουμε μέχρι να γεμίσουμε και την εικονική μνήμη, περίπου  τα 2 Giga.

Το σωρό τον βλέπουν όλα τα τμήματα;

Υπάρχει ένας σωρός στο επίπεδο 0 που συνεχίζει σε όλα τα επίπεδα αν οι κλήσεις είναι από τμήμα σε τμήμα. Οι συναρτήσεις ξεκινούν δικό τους σωρό. Τα νήματα - μέρη του τμήματος σε παράλληλη εκτέλεση- έχουν επίσης δικό τους σωρό.

Πώς περνάμε παραμέτρους στα τμήματα;

Περνάμε παραμέτρους με την χρήση του σωρού 
Αν καλέσω το Α με τα νούμερα 12, 15 τότε όταν ξεκινήσει το Α θα υπάρχει στη κορυφή το 12 μετά το 15 και ότι άλλο υπήρχε στο σωρό. Το πώς θα τα κάνει το Α με το σωρό δεν είναι θέμα αυτού που καλεί! Αρκεί να ξέρουμε ότι η κλήση της Α απαιτούσε αυτές τις παραμέτρους.

Τα τμήματα δεν προκαθορίζουν το τι θα πάρουν και πότε από το σωρό, Απλά έχουν πρόσβαση για είσοδο και έξοδο τιμών. Αν θέλουμε άλλο κανάλι εξόδου τότε θα γράψουμε σε αρχεία.
Μπορούμε να έχουμε πρόσβαση φυσικά και σε γενικές μεταβλητές και πίνακες, για να πάρουμε ή να δώσουμε κάτι, αλλά τότε ξεφεύγουμε από την "επιταγή" των τμημάτων να ολοκληρώνουν την εργασία τους με ό,τι τους προσφέρουμε στο σωρό! Αν κρατήσουμε αυτή την επιταγή τότε το τμήμα μπορεί να φορτωθεί οποτεδήποτε, ενώ αν χρειάζεται γενικές μεταβλητές και πίνακες τότε είναι εξαρτημένο με περισσότερα από ένα σημείο "Εισόδου", και αυτό σημαίνει ότι έχουμε κάτι πιο σύνθετο. Πολλά όμως απλά προβλήματα λύνονται με χρήση γενικών μεταβλητών και πινάκων, απλά δεν είναι παραγωγικό με την έννοια τις επαναχρησιμοποίησης των ρουτινών.
Όμως η επαναχρησιμοποίηση των ρουτινών δεν είναι εδώ το απόλυτο. Μάλιστα είναι προτιμότερο να φτιάχνει κανείς κάτι νέο παρά να μπλέκεται με κάτι που δεν θα θυμάται επακριβώς τι κάνει, και επειδή δεν είχε ποτέ το κουράγιο να γράψει σημειώσεις για την σωστή χρήση του, να χανει το νόημα και να κάνει περισσότεραλάθη από το να ξεκίναγε κάτι νέο!
Πολλές φορές μια νέα κωδικοποίηση επειδή μας βρίσκει πιο ώριμους γίνεται καλύτερη.

Υπάρχει Αναδρομή στις κλήσεις των τμημάτων;

Όχι, με τον απλό τρόπο κλήσης. Οι συναρτήσεις και οι Ρουτίνες έχουν.

Οι ρουτίνες τι διαφορά έχουν από τα τμήματα;

Οι ρουτίνες είναι μέρη ενός τμήματος, και όπως κάθε μέρος του μπορούν και αυτές να φτιάξουν τμήματα και συναρτήσεις. Όμως οι ρουτίνες έχουν όνομα που γνωρίζει μόνο το τμήμα, είναι ιδιωτικές. Τα τμήματα έχουν το δικό τους όνομα χώρου (namespace). Οτιδήποτε πάρει όνομα θα ανήκει σε ένα όνομα χώρου, και οι ρουτίνες δεν έχουν όνομα χώρου, αλλά δανείζονται το όνομα του τμήματος που εκτελούνται. Για το λόγο αυτό στις ρουτίνες φαίνονται οι μεταβλητές του τμήματος, και μπορούν να αλλαχθούν. Επίσης ο σωρός είναι κοινός. Ουσιαστικά ενώ το τμήμα δεν κάνει αναδρομή άμεσα, με τη χρήση μιας ρουτίνας μπορεί να το κάνει για το κομάτι του αυτό,  την ρουτίνα! Αυτές είναι οι ρουτίνες ΡΟΥΤΙΝΑ ονομα(παράμετροι) ...ΤΕΛΟΣ ΡΟΥΤΙΝΑΣ. ¨Εχουν σταθερές παραμέτρους ως μίνιμουμ αλλά μπορούν να "σηκώσουν" ή να "αφήσουν" στο σωρό δημιουργόντας έλλειμα ή πλεόνασμα!. Επίσης έχουν ένα "μειονέκτημα", Ότι νέο φτιάχνουν θα σβηστεί στο πέρας της εκτέλεσής τους.  Καλούμε την ρουτίνα με την εντολή ΔΙΑΜΕΣΟΥ  (προαιρετικά ή απαραίτητα αν έχουμε πίνακα με το ίδιο όνομα) και το όνομά της πάντα με παρενθέσεις (Ακόμα και αν δεν έχει παραμέτρους  θέλει τις παρενθέσεις).
Δείτε εδώ παράδειγμα

Οι ρουτίνες καλούνται και από τα νήματα, άρα μπορούν να εκτελούνται σε πολλά αντικείμενα εκτέλεσης. Οι στατικές μεταβλητές του νήματος - που ταυτόχρονα εμφανίζονται και ως μεταβλητές του τμήματος, μπορούν να αλλάξουν από τις ρουτίνες!

Υπάρχουν και οι απλές ρουτίνες!

Πως καλώ απλές ρουτίνες;


Οι απλές ρουτίνες καλούνται με όνομα χωρίς παρενθέσεις με τη ΔΙΑΜΕΣΟΥ ή με νούμερο (μέχρι πέντε ψηφία χωρίς δεκαδικά) και την εντολή ΔΙΑΜΕΣΟΥ (π.χ. ΔΙΑΜΕΣΟΥ 5000). Οι απλές ρουτίνες τερματίζουν στην εντολή ΕΠΙΣΤΡΟΦΗ (χωρίς παράμετρο). Αυτές οι απλές ρουτίνες είναι απλά μέρη του τμήματος, που απλά θέλουμε να χρησιμοποιήσουμε αρκετές φορές σε διάφορα σημεία του τμήματος, χωρίς να "περνάμε" παραμέτρους, ή να θέλουμε αναδρομική διαδικασία.
Είναι η κλασική περίπτωση της BASIC, οι ετικέτες με γράμματα τελειώνουν σε άνω και κάτω τελεία και δεν επιδέχονται εντολές στην ίδια γραμμή παρά μόνο σημειώσει με ' ή \. Οι ετικέτες αριθμοί μπορούν να είναι πριν από εντολές αλλά πρώτοι σε μια γραμμή (με ή χωρίς διαστήματα στην άκρη αριστερά).
Δείτε εδώ παράδειγμα

Προσθήκη: Οι ρουτίνες που φτιάχνουμε με το Ρουτίνα όνομα() ..Τέλος Ρουτίνας μπορούν να κληθούν με όνομα() αρκεί να μην έχουμε πίνακα με τέτοιο όνομα. (Ο διερμηνευτής τραβάει το όνομα πρώτα εδώ το όνομα( και κοιτάει αν είναι πίνακας. Αν όχι τότε αυτόματα μεταβαίνει στην κατάσταση αμέσως μετά από εντολή Διαμέσου. Έχει σημασία αυτό γιατί οι τυχόν παράμετροι στις παρενθέσεις λογαριάζονται διαφορετικά, στη κλήση σε ρουτίνα πάμε σε σωρό για να διαβαστούν με μια εσωτερική Διάβασε, ενώ στο πίνακα κάθε αριθμητική έκφραση υπολογίζει τη μερική θέση του στοιχείου στο πίνακα, με την τελευταία να βρίσκει επακριβώς τη θέση).

Πέρασμα τιμών σε συναρτήσεις, τμήματα προαιρετικών

Μπορούμε πια να έχουμε χρήση προαιρετικών μεταβλητών για παραμέτρους σε τμήματα και συναρτήσεις. Αρκεί να βάλουμε στην Διάβασε το ?
Αδειασε
Τμήμα Αλφα {
      Χ=10
      Διάβασε ? Χ, Υ
      Τύπωσε Χ, Υ
}
Αλφα \\ 10,0
Αλφα 5 \\ 5, 0
Αλφα ,4 \\ 10, 4
Αλφα ? \\ 10, 0
Αλφα ?, 3 \\ 10, 3
Αλφα  \\ 10, 0


Προαιρετική μόνο τη δεύτερη παράμετρο
Αδειασε
Τμήμα Αλφα {
      Διάβασε Χ
      Υ=10
      Διάβασε ? Υ
      Τύπωσε Χ, Υ
}
Αλφα 3 \\ 3, 10
Αλφα 3, 4 \\ 3, 4

Περί νέας έκδοσης

Η έκδοση 8.2 είναι η πιο ολοκληρωμένη έκδοση. Μόνο bugs θα διορθωθούν.

Με τα βασικά αυτά στοιχεία μπορεί κανείς να ξεκινήσει να εκτελεί προγράμματα. Παίζει ρόλο να "χαλάμε" τα προγράμματα για να καταλαβαίνουμε τι κάνουμε. Χάλασμα σημαίνει να αλλάζει κανείς νούμερα για να αντιληφθεί τι γίνεται. Κανείς δεν καταλαβαίνει "σκεπτόμενος" στους υπολογιστές, παρά μόνο δοκιμάζοντας. Το σύστημα θέλει να δοκιμάζουμε σε μικρά πράγματα και μόλις καταλάβουμε τότε  πάμε σε μεγαλύτερα. 
Ο μεταφραστής φτιάχτηκε ξεκινώντας από το διορθωτή γραμμής, με την χρήση του Backspace και του Enter  μόνο και πρώτη εντολή την ΤΥΠΩΣΕ και εμφάνιση μόνο ενός αριθμού!
Μετά γράφτηκαν όλα τα άλλα, πώς να κάνει πράξεις, μέχρι και τις φόρμες και τον διορθωτή κειμένου. Ισχύει το "Δεν ήξερα αλλά με δοκιμές το έφτιαξα!" Και μετράει να είναι κανείς παρατηρητικός,  και να έχει αντίληψη του τι αλλάζει και να βρίσκει το γιατί!

Καλό προγραμματισμό...




Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου