Δευτέρα 26 Οκτωβρίου 2015

Αναθεώρηση 69 - πολύ καλή!

Η προηγούμενη αναθεώρηση έβγαλε ένα δυο Bug, τα οποία διορθώθηκαν.Οι αλλαγές ήταν σημαντικές, στο τρόπο εκτύπωσης, στην οθόνη και στον εκτυπωτή. Θα αναλύσω παρακάτω το θέμα.
Στην σημερινή αναθεώρηση (69), διόρθωσα όλα τα bug, της προηγούμενης (π.χ, είχε πρόβλημα η εντολή CLS ή ΟΘΟΝΗ), και επέκτεινα τον τρόπο χρωματισμού του κώδικα, ώστε να περιλαμβάνει ένα στοιχείο που ήθελα να μπορώ να εμφανίζω σωστά την ανάθεση τιμής σε αλφαριθμητικό με με πολλαπλές γραμμές (παραγράφους).
Ο χρωματισμός ήταν πετυχημένος στις προηγούμενες αναθεωρήσεις και πολύ γρήγορος αλλά γίνονταν μόνο ανά γραμμή. Το πρόβλημα που είχα να λύσω ήταν να υπήρχε τρόπος μια γραμμή να "γνωρίζει" ότι δεν θα χρωματιστεί γιατί είναι κείμενο και όχι εντολές.
Η Μ2000 διαβάζει την θέση της τελευταίας αγκύλης και σβήνει τα διαστήματα από την δεύτερη και τρίτη γραμμή. Στο αλφαριθμητικό θα υπάρχουν και τρία CRLF ( χαρακτήρες 13 και 10), που υποδηλώνουν τον τερματισμό παραγράφου.
π.χ.
Α$={Πρώτη γραμμή
    Δεύτερη γραμμή
    Τρίτη γραμμή-παράγραφος
    }

Περί του διορθωτή
Για τον μεταφραστή της Μ2000 το κείμενο το διαβάζει σε μια σειρά, αλλά δεν ισχύει το ίδιο για τον διορθωτή (τον Editor εκεί που γράφουμε προγράμματα). Ο διορθωτής ανοίγει με την εντολή συγγραφή ή σκέτο με ένα σίγμα αλλά απαραίτητα θέλει και το τι θα φτιάξει, ένα όνομα τμήματος, ή μιας συνάρτησης. Π.χ. αν γράψουμε σ Α$() θα ανοίξει ο διορθωτής και θα εμφανίσει πάνω αριστερά το όνομα Α$() και εμείς αρκεί να δώσουμε το ="α" και έχουμε μια συνάρτηση Α$() που δίνει το "α"
Ο διορθωτής λοιπόν πρέπει να εμφανίζει με άλλο χρώμα τις εντολές, τους αριθμούς, τα δικά μας αναγνωριστικά (δηλαδή τις δικές μας μεταβλητές-τμήματα-συναρτήσεις). Επίσης χρωματίζει τα αλφαριθμητικά (τα οποία μπορεί να είναι ανάμεσα από διπλά εισαγωγικά ή σε αγκύλες. Ειδικά με τις αγκύλες μπορούμε να συμπεριλάβουμε κείμενο.

Για να αντιληφθούμε τη δυσκολία...αρκεί να σκεφτούμε πόσες καταστάσεις έχει αυτή η διαμόρφωση κειμένου μέσα στο κείμενο εντολών για τον διορθωτή. Ο διορθωτής δεν παίρνει μόνο ότι πληκτρολογούμε, αλλά μπορεί να πάρει κείμενο με επικόλληση και με σύρσιμο. Επίσης μπορούμε να διαγράφουμε με backspace, με delete, με επιλογή μπλοκ, αλλά επίσης μπορούμε να κάνουμε πολλαπλές αλλαγές (αναζήτηση και αντικατάσταση). Σε όλα αυτά να προσθέσω ότι μπορούμε να επιλέγουμε πολλές γραμμές και με TAB να τις μεταφέρουμε πιο δεξιά, ή με SHIFT TAB πιο αριστερά, ώστε να γράφουμε κώδικα με διάρθρωση εσοχών. Επιπλέον όταν αλλάζουμε γραμμή αυτόματα προσθέτει ο διορθωτής διάστημα. Επιπλέον αν ξεκινήσουμε με νούμερα μια γραμμή στην επόμενη μπαίνει το επόμενο νούμερο (+10) ή (+1) αν υπάρχει το (+10).
Με F1 ελέγχουμε τη αναδίπλωση λέξεων. 'Έτσι αν θέλουμε το κείμενο στα αλφαριθμητικά φαίνεται σε παραγράφους κανονικά (αυτό ισχύει και για τον κώδικα). Το σπάσιμο των γραμμών γίνεται πάρα πολύ γρήγορα...¨Εχω δοκιμάσει κείμενο του 1MB, με 30000 περίπου γραμμές και η αλλαγή γίνεται αστραπιαία.(το ίδιο και ο χρωματισμός, και εδώ μάλιστα έχει να ελέγξει καμιά 500αριά λέξεις για κάθε μια που βρίσκει στο κείμενο, περίπου 250 ελληνικές και 250 αγγλικές).

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

Χρήσιμα είναι και τα άλλα F πλήκτρα: F2 και F3 κάνουν άνω ή κάτω αναζήτηση στη λέξη που έχουμε επιλέξει  (με ένα κλικ επιλέγεται μια λέξη). Με F4 κάνουμε όλες τις ίδιες λέξεις στην ίδια διαμόρφωση πεζά-κεφαλαία. Το F5 κάνει την αλλαγή για την λέξη που έχουμε επιλέξει. Οι αλλαγές καταχωρούνται σε λίστες. οπότε έχουμε τα Ctrl+Z (undo) και Ctrl+Y (redo). Αν βγούμε από τον διορθωτή οι λίστες καθαρίζουν. Τα F6 F7 και F8 είναι δείκτες που μας μετακινούν αυτόματα στο κείμενο. Οι δείκτες δένονται πάνω σε παραγράφους και συγκεκριμένη θέση σε αυτή. Όμως και αυτοί διατηρούνται μέχρι να κλείσουμε τον διορθωτή. Γενικά ο διορθωτής θυμάται μόνο τη θέση του δρομέα (για κάθε τμήμα ή συνάρτηση που έχουμε στη μνήμη). Το F9 μας λέει πόσες λέξεις έχουμε γραμμένες (εξαιρεί αριθμούς και σύμβολα). To F10 μας εμφανίζει το σημάδι παραγράφου σε κάθε παράγραφο. Το F11 μας αλλάζει δυο πράγματα. (έχει τέσσερις καταστάσεις), το μέγεθος της γλώσσας στην επικεφαλίδα (για να μην αναδιπλώνει), και τον χρωματισμό. Από αυτή την αναθεώρηση όταν επιλέγουμε χρωματισμό τότε όχι μόνο "επιτρέπει" την εμφάνιση χρώματος αλλά και κάνει αυτόματο και άμεσο υπολογισμό. Ο μεταφραστής το χρώμα το βρίσκει όταν ανοίγει τον διορθωτή. Τα τμήματα/συναρτήσεις δεν σώνονται με χρώμα.

Ο διορθωτής είναι τύπου Unicode, δηλαδή παίρνει γράμματα από άλλες χώρες όπως ρώσικα, αλλά δεν έχει φτιαχτεί (αν και εμφανίζει τα γράμματα) για τις γλώσσες που γράφονται από δεξιά προς τα αριστερά. Ο κώδικας του διορθωτή είναι στο κώδικα της γλώσσας Μ2000. Μπορεί κανείς να ρίξει μια ματιά! Έχω γράψει το στοιχείο ελέγχου πάνω στο οποίο παίζει ο διορθωτής. Το στοιχείο ελέγχου είναι ένα listbox, το οποίο το έγραψα από το μηδέν, με δική του μπάρα ολίσθησης, με δυνατότητα διάφανου φόντου, με ολίσθηση με σπρώξιμο, και με δυνατότητα να αυξομειώνεται  ομαλά. Με την τεχνική του subclassing το κάνω διάφορα άλλα στοιχεία, όπως λίστα επιλογών, λίστα με αυτόματη συμπλήρωση, στοιχείο εντός/εκτός (checkbox), απλό κομβίον (button) με δυνατότητα ολίσθησης δεξιά για να πάρει την "εντολή". Όλα αυτά υπάρχουν στο κώδικα. Και χρησιμοποιούνται σε φόρμες όπως το παράθυρο επιλογής φακέλου, και άλλων (μόνο του εκτυπωτή δεν έφτιαξα, αφού ο καθένας έχει το δικό του),
Για να σώσουμε από τον διορθωτή αρκεί το Σώσε και ένα όνομα (αν το όνομα έχει αρχικό γράμμα νούμερο ή έχει διαστήματα βάζουμε εισαγωγικά). Με φόρτωσε και το όνομα, φορτώνουμε όλα τα τμήματα και τις συναρτήσεις (μπορούμε να φορτώνουμε και κατά την εκτέλεση ενός προγράμματος).
(Προσθήκες από τις αναθεωρήσεις 94-95, από το διορθωτή αντιγραφή στο πρόχειρο γίνεται σε Unicode και Html Form. Τα χρώματα του Html καθορίζονται από την επιλογή BRIGHT ή DARK στις ΡΥΘΜΙΣΕΙΣ)


Λίγα λόγια για τις αλλαγές από τις προηγούμενες αναθεωρήσεις και μέχρι και αυτήν, για την οθόνη. Η οθόνη και ο τρόπος εμφάνισης στοιχείων σε αυτήν μπορεί να είναι μια απλή ή όχι υπόθεση ανάλογα με το πόση λεπτομέρεια μας ενδιαφέρει να υπολογίσουμε στο κώδικά μας. Στις πρώτες εκδόσεις υπήρχαν δυο επίπεδα συν ένα του εκτυπωτή. Τα δυο επίπεδα ήταν το Περιθώριο και το βασικό. Μπορούσαμε να εκτελέσουμε εντολές που θα είχαμε έξοδο το Περιθώριο βάζοντας μια εντολή Περιθώριο Μέγεθος_Χαρακτήρων { }, ώστε όλες οι εντολές γραφικών και εμφάνισης χαρακτήρων να βγαίνουν εκεί. Το Περιθώριο ξεκίναγε με όλο το μέγεθος της οθόνης μας.Μπορούσαμε όμως να το αλλάξουμε, να το μετακινήσουμε και να το ελαχιστοιποιούμε στην γραμμή εφαρμογών.  Μέσα σε αυτό εμφανίζονταν η βασική "οθόνη", η οποία μπορούσε να είναι μεγαλύτερη από το περιθώριο αλλά θα ήταν ορατό μόνο όσο μας άφηνε το περιθώριο. Επίσης η η βασική οθόνη μπορούσε να κρυφτεί και επίσης το περιθώριο μπορούσε να αντιγράψει την επιφάνεια εργασίας. Στις πρώτες εκδόσεις το μέγεθος των δυο αυτών επιπέδων γίνονταν με βάση την οθόνη ή ένα ζεύγος συντεταγμένων και με το μέγεθος μιας συγκεκριμένης γραμματοσειράς. Μια παλιά εντολή που ακόμα λειτουργεί είναι η Αρχή "Tahoma", {φορτωσε "προγραμμα"} όπου  ξεκίναγε (ψυχρή εκκίνηση),  τον μεταρφαστή και καλούσε συγκεκριμένο πρόγραμμα (όπου μετά από μια σειρά ορισμών είχε εντολή για άμεση εκτέλεση ενός από τα τμήματα του).
Από την αρχική έκδοση, υπήρχαν δυο σημαντικά πράγματα, η επιλογή για διπλά-κανονικά και η επιλογή της χωριστής οθόνης (Split Screen), ώστε να ολισθαίνει το κάτω τμήμα ενώ το πάνω να έχει τίτλους και ότι άλλο θέλαμε για φαίνεται "σταθερά". Στο περιθώριο δεν υπήρχε επιλογή για ολίσθηση. Ουσιαστικά υπήρχαν άλλα τέσσερα επίπεδα, το επίπεδο όπου εμφανίζονται τα βίντεο, το επίπεδο που ανοίγουν σελίδες από το διαδίκτυο και ένα η λίστα επιλογών (drop down list) και το άλλο ο διορθωτής. Επίσης στην βασική οθόνη μπορούσαν να φτιαχτούν στόχοι όπου ένα κλικ με το ποντίκι έδινε μια ενέργεια.
Στην 5η έκδοση της γλώσσας μπήκαν επιπλέον εντολές όπως ΠΛΑΓΙΑ και ΦΑΡΔΙΑ για το κείμενο το οποίο γραφόταν σε σταθερές θέσεις. Μάλιστα ενώ μπορούσαμε να αλλάζουμε μεγέθη και τύπο γραμμάτων, οι θέσεις άλλαζαν λίγο αφού τα φαρδιά δεν είχαν ίδιο πλάτος με τα κανονικά. Όμως δεν φαίνονταν μεγάλη διαφορά τοποθέτησης γιατί οι εκτυπώσεις πάντα στοιχίζονταν στην "κάνναβο" της οθόνης. Οπότε ουσιαστικά εκείνος που έγραφε το πρόγραμμα αν χρειάζοταν έδινε λίγο χώρο. Για αναλογική γραφή υπήρχε μια εντολή για λεζάντες, όπου η στοίχιση γίνεται σε θέση γραφικών (άρα οπουδήποτε) και μπορούσε κανείς να περιστρέψει τη λεζάντα, διαλέγοντας γωνία.
Στην έκτη έκδοση προστέθηκαν 32 επίπεδα και επιπλέον μπήκαν και τα νήματα, ώστε να μπορεί κανείς να κάνει προγραμματισμό με ασύγχρονο τρόπο. Μπορούσε βέβαια κανείς να τα κάνει σαλάτα αν δυο νήματα έγραφαν στο ίδιο επίπεδο. Όμως σε ξεχωριστό επίπεδο δούλευε το πράγμα. Επιπλέον μπήκε και η αναλογική γραφή, ώστε η εντολή ΤΥΠΩΣΕ να τυπώνει κατ επιλογή αναλογική ή μη γραφή (και σε στήλες που ορίζουμε αν θα στοιχίζονται αριστερά, κέντρο, δεξιά ή με υπερχείλιση). Επιπλέον προστέθηκε η εντολή ΑΝΑΦΟΡΑ που τυπώνει κείμενο με παραγράφους και αναδίπλωση λέξεων. (μάλιστα μπορεί να μας αναφέρει πριν τυπώσει το πόσες γραμμές χρειάζεται για δοσμένο πλάτος, σε χαρακτήρες -σταθερούς ή με twips, και εδώ υποστηρίζεται η αριστερή-κέντρο-δεξιά και πλήρης στοίχιση)
 Στην έβδομη έκδοση (από την 6.5) έχουμε την Unicode επεξεργασία, έφυγαν οι φόρμες των Wiindows και μπήκε το ένα και μοναδικό στοιχείο ελέγχου "χρήστη" που κάνει τα πάντα (μαζί με τα επίπεδα που έχω αναφέρει παραπάνω). Το μενού επιλογών και ο διορθωτής στηρίζονται σε αυτό.  Όμως επειδή αυτό το στοιχείο υποστηρίζει το διάστιχο γραμμών, έγιναν αλλαγές και μπήκε και το διάστιχο στα επίπεδα. Οι εντολές ΤΥΠΩΣΕ, ΑΝΑΦΟΡΑ, ΕΙΣΑΓΩΓΗ που εμφανίζουν χαρακτήρες λογαριάζουν το διάστιχο (όπως και το μενού επιλογών και ο διορθωτής).
Με μια εντολή ΦΟΡΜΑ μπορούμε να ορίσουμε ότι μέγεθος κάνναβου χαρακτήρων θέλουμε βάσει πλάτους ή πλάτους και ύψους. Ειδικά για πλάτος και ύψος μπορούμε να πάρουμε οθόνη με ή χωρίς αυτόματο υπολογισμό διάστιχου (π.χ. Φόρμα 30,10;  με το ελληνικό ερωτηματικό στο τέλος, δίνει μια οθόνη 30 χαρακτήρων επί  10 γραμμών χαρακτήρων (ή 30 πλάτος και 10 ύψος). Χωρίς το ερωτηματικό θα δώσει μια ίδια οθόνη (επίπεδο) αλλά θα απλώσει σε όλο το χώρο της οθόνης του υπολογιστή, βάζοντας διάστιχο.
Στην όγδοη έκδοση μπήκαν επιπλέον τρεις ΤΥΠΩΣ, οι ΤΥΠΩΣΕ ΜΕΡΟΣ, ΤΥΠΩΣΕ ΥΠΟ και ΤΥΠΩΣΕ ΠΑΝΩ. Και οι τρεις τυπώνουν χωρίς να αλλάξει η γραμμή με τη διαφορά που η τύπωσε ΥΠΟ τραβάει μια γραμμή οριζόντια ενός εικονοστοιχείου, και αλλάζει γραμμή πριν εμφανίσει κάτι. Και στις τρεις αν βάλουμε κάτι που βγαίνει εκτός οθόνης δεν θα γυρίσει μέσα στην οθόνη (όπως στις απλές ΤΥΠΩΣΕ) αλλά απλά δεν θα εμφανιστεί. Επιπλέον ότι αλλαγές σε στήλες και τρόπο εκτύπωσης αλλάζει τοπικά. Θα αναφερθώ ειδικά για αυτές σε άλλη ανάρτηση. Σε αυτές λοιπόν τις τελευταίες αναθεωρήσεις άλλαξα σε βάθος όλες τις ρουτίνες υποστήριξης ώστε η κάθε θέση χαρακτήρα να χωράει εξ αρχής οποιοδήποτε από τα φαρδιά, πλάγια, φαρδιά και πλάγια και απλά. Το βασικότερο απ΄όλα ήταν ότι όχι μόνο μπορώ να έχω "ανεξάρτητες" μεταβλητές σε όλα τα βασικά μεγέθη, όπως το διάστιχο. αλλά ακόμα και "ιδιωτικά" για νήματα. Έτσι για παράδειγμα ένα νήμα μπορεί να περιμένει εισαγωγή αριθμού ενώ άλλο να σχεδιάζει ή να εμφανίζει βοήθεια παράλληλα!
Έχω παραδείγματα τα οποία θα φέρω σε άλλες αναρτήσεις.
Γενικά η γλώσσα έχει τελειώσει στο 99%. Σε λίγα θέματα δεν έχω καταλήξει σε μια ασφαλή λύση, ένα αφορά τους πίνακες δεδομένων για το λειτουργικό  (Win32 structures), οι οποίοι πρέπει να εμφανίζονται από την πλευρά της Μ2000 ως πίνακες για διάβασμα - γράψιμο (προς το παρόν μπορούμε να περνάμε αλφαριθμητικά και ακέραιους σε κλήσεις στο λειτουργικό). Το δεύτερο είναι το πώς θα βάλω callback ρουτίνες σε μια γλώσσα που είναι διερμηνευτής (interpreter), Τέλος δεν έχω ακόμα καμία ιδέα για ένα τύπο ΣΥΛΛΟΓΗΣ (collection) όπου η αναφορά στο στοιχείο να γίνεται με όνομα. Προς το παρόν για αυτό μπορούμε να χρησιμοποιούμε βάσεις δεδομένων (Η Μ2000 φτιάχνει βάσεις δεδoμένων της Access χωρίς να χρειάζεται την Access, αλλά μπορεί να συνδεθεί σε βάσεις μέσω ODBC).
Αυτά τα ολίγα...
Γ. Κ.



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

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

You can feel free to write any suggestion, or idea on the subject.