Πέμπτη, 9 Μαρτίου 2017

Αναθεώρηση 3 (Έκδοση 8.4)

Η αναθεώρηση 2 έμεινε αναρτημένη για λίγες ώρες και έφτασε η 3 γρήγορα.

Αλλαγές:
1. Στην αναθεώρηση 1 η εντολή Ομάδα είχε βγει από την λίστα "γνωστών" εντολών και δεν χρωματίζονταν στον διορθωτή!
2. Προστέθηκε η δυνατότητα να πατήσουμε Esc όταν κάνουμε αναζήτηση αλφαριθμητικού σε αρχεία...(για να μην περιμένουμε αν δώσουμε λάθος αναζήτηση...- μου έτυχε και το έβαλα και αυτό). Η εντολή Αρχεία ή Files παίρνει μια ή δυο παραμέτρους και στην περίπτωση των δύο, η δεύτερη είναι το αλφαριθμητικό που ψάχνουμε. π.χ. Files "gsb", "WithEvents" ψάχνει όλα τα αρχεία gsb με περιεχόμενο WithEvents. Έψαχνα και βρήκα αυτό: (έτρεχε και σε παλαιότερες εκδόσεις, απλά ήθελα να δω αν θα τρέξει με κάτι αλλαγές που έκανα).
Μπορούμε να το γράψουμε σε ένα τμήμα και να το εκτελέσουμε, αρκεί να έχουμε το Word. Θα μας ανοίξει το Word και μετά από δέκα δευτερόλεπτα θα το κλείσει εκτός και αν το κλείσουμε εμείς. Μετράει το χρόνο που το κλείσαμε! Ενδέχεται να μην μπορεί να το κλείσει γιατί μπορεί να έχουμε ανοίξει κάποια φόρμα διαλόγου.

ExitNow=false
Declare WithEvents Alfa "WORD.APPLICATION"
Title "Minimized", 0
Wait 300
Print "ok"
With Alfa, "Visible", True
Function alfa_quit {
            Print "Why you close Word?"
            ExitNow=True
}
M=0
Every 20 {
      If ExitNow then exit
      M++
      If M>500 then exit
}
Try {
      Method Alfa, "QUIT"
}
Declare Alfa Nothing
if ExitNow then {
      Print format$("Finish  {0:2} sec", M/1000)
} Else {
      Print "Close Word manually"
}
Title "ok",1

3. Διόρθωσα τις εντολές Προσθήκη και Επιστροφή (Append & Return) για τις καταστάσεις (Inventories), όπου τώρα μπορούμε να έχουμε στις εκφράσεις αναφορά στην ίδια κατάσταση.

group k {
      property M=500
}
inventory alfa=1:="alfa","alfa":=2,3:=4,4:=K, 100:=1
Return alfa, alfa$(alfa(100)):=alfa(alfa(3)).M
Print alfa("alfa"), alfa(alfa(3)).M

4. Στην αναθεώρηση 2 μπορούσε κανείς να πειράξει μια ιδιότητα ομάδας, επειδή είναι ομάδα και μπορεί να συγχωνευθεί με μια νέα. Το είχα αφήσει αυτό αλλά το σκέφτηκα και το έκοψα!

Ομάδα Άλφα {
      Ν=30
      Ιδιότητα Μ {αξία}=100
      Ιδιότητα Χ
      Ιδιότητα Όνομα$ {αξία}="Μοναδικό"
}
Άλφα.Χ=500
Τύπωσε Άλφα.Χ
\\ Η Ν δεν είναι ιδιότητα αλλά μπορεί να χρησιμοποιηθεί.
Άλφα.Ν+=100
Τύπωσε Άλφα.Ν
\\ μπορεί να πάρει +=, *= και άλλα
\\ όμως διάβασε παρακάτω!
Δες Οκ {
      \\ αυτό δεν γίνεται για τις ιδιότητες
      \\ εκτός και αν προσθέσουμε τον τελεστή
      Άλφα.Μ++
}
Αν όχι Οκ Τότε Τύπωσε Λάθος$


Ομάδα Άλφα {
      Ομάδα Μ {
            Τελεστής "++" {
                  Ένωσε γονικό [Μ] στη Μ
                  Μ++
            }
      }
}


\\ Τώρα η ομάδα Μ υποστήριζει τον τελεστή
Άλφα.Μ++
Τύπωσε Άλφα.Μ, Άλφα.Όνομα$



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

6.Είχα αφήσει εκτός το θέμα με τις αλφαριθμητικές ιδιότητες, και ειδικότερα στην Θέσε ή Set όπου μπορούμε πριν θέσουμε μια τιμή να την περιορίσουμε ή να σηκώσουμε λάθος (υπάρχει η εντολή Λάθος "μήνυμα", όπου μπορεί να πιαστεί με την Δες Οκ { } ...το Οκ είναι μεταβλητή, αλλά παίζει και το Λάθος ως μεταβλητή μετά την έξοδο από την Δες, καθώς και η Λάθος$ που είναι το μήνυμα.
Σε επόμενη αναθεώρηση τα value$ και  αξία$ θα χρωματίζονται μπλε! (Η Μ2000 έχει δυο σετ χρωμάτων για τις εντολές ανάλογα με την φωτεινότητα του φόντου, και αλλάζουν αυτόματα. Στις ρυθμίσεις όμως μπορούμε να ορίσουμε την Html αντιγραφή στο πρόχειρο αν θα είναι για φωτεινό ή σκοτεινό φόντο...Τον χρωματισμό τον κάνει ο διορθωτής που επίσης έχω γράψει,  και ανοίγει με τη εντολή Συγγραφή ή Σ ή Edit. Αν και στην γραμμή εργασιών δεν βλέπουμε χρωματισμένες εντολές (είναι πιο ρετρό στιλ) με μια εντολή Σ ή Edit χωρίς όνομα τμήματος ή συνάρτησης, θα ανοίξει το διορθωτή στις εντολές που έχει καταγράψει ο διορθωτής από τη γραμμή εντολών. Μπορούμε να τις διορθώσουμε, και στην έξοδο με Esc να τις επιλέξουμε με τα βελάκια, άνω και κάτω, και να τιε εκτελούμε μία κάθε φορά,.

group alfa {
      property a$ {
            value,
            set {
                        value$=left$(value$,5)
            }
      } ="Ok"
}


alfa.a$="111111111111111"
Τύπωσε alfa.a$


Και ελληνικά:

Ομάδα Άλφα {
      Ιδιότητα α$ {
            Αξία,
            Θέσε {
                        αξία$=αρισ$(αξία$,5)
            }
      } ="Ok"
}

Άλφα.α$="111111111111111"
Τύπωσε Άλφα.α$




7. Επίσης λύθηκε άλλη μια ασυμβατότητα με παλαιότερες εκδόσεις:. Στο παράδειγμα παρακάτω μπορούμε από ένα τμήμα ομάδας να αλλάξουμε ένα άλλο τμήμα. Πριν την διόρθωση, γίνονταν μεν αλλά στην έξοδο απο το τμήμα Μέσα, το τμήμα Κάπα γύρναγε στο προηγούμενο! Αυτό θα συμβαίνει πάντα με ομάδες που είναι σε πίνακες με δηλωμένη μια ομάδα για όλα τα στοιχεία. Εκεί τα τμήματα, οι συναρτήσεις και οι τελεστές βρίσκονται σε μια λίστα για όλα. Κάθε αλλαγή είναι πρόσκαιρη (για το αντικείμενο που την κάνει). Τα αντικείμενα αυτά για να εκτελέσουν εντολές πρέπει να γίνουν επώνυμα και αυτό το κάνει ο διερμηνευτής, και αυτό λέγεται "Ανοικτό αντικείμενο", το οποίο δύναται να περάσει τιμές με αναφορά. Όταν τελειώσει με την χρήση του ανοικτού πια αντικειμένου το γράφει ο διερμηνευτής πίσω, μαζεύοντάς το. Έτσι η λίστα ονομάτων παραμένει πάντα μικρή! Βέβαια υπάρχει κάποιο κόστος στο άνοιγμα-κλείσιμο και για το λόγο αυτό έχουμε τις εντολές Για  {} όπου ανοίγουμε αντικείμενα για πολλές εντολές. Εκτός από τα κλειστά βέβαια έχουμε και τα μόνιμα ανοικτά όπως η Ομάδα Άλφα στο παράδειγμα (μόνιμη μέχρι να τερματίσει το τμήμα που την περιέχει). Παρόλα αυτά μπορούμε να την σώσουμε από την "καταστροφή" του τμήματος, αν την αφήσουμε στο σωρό! Εκεί θα γίνει κλειστεί και θα περιμένει να ανοίξει μόνιμα ή να περάσει σε πίνακα (ή σε κατάσταση)

Ομάδα Άλφα {
      Τμήμα Κάπα { Τύπωσε 100}
      Τμήμα Μέσα {
        
            Ομάδα Μ {
                        Τμήμα Κάπα { Τύπωσε 200}
                  }
                  Αυτό<=Μ
                  \\ δουλεύει και έτσι: Αυτό=Μ
            .Κάπα
       }
}
Τμήματα ?
Άλφα.Μέσα
Άλφα.Κάπα


Λίγα λόγια για το πως βλέπουμε τις μεταβλητές και τα ονόματα τμημάτων ανά πάσα στιγμή.
Υπάρχουν εντολές αλλά και ο έλεγχος. Ο έλεγχος ανοίγει με την εντολή Δοκιμή. Με F12 βλέπουμε τα τμήματα, ενώ τρέχει το πρόγραμμα. Μπορούμε να βλέπουμε κώδικα που τρέχει ή το σωρό και να ορίσουμε μεταβλητές. Εκτός όμως από αυτό, μπορούμε να βλέπουμε αρκετά πράγμα με εντολή μέσα από το πρόγραμμά μας. Η εντολή Δοκιμή παίρνει και αλφαριμθμητικό για να σταματάει το κώδικα εκεί που θα την βρεί ο διερμηνευτής, και ανοίγει την φόρμα ελέγχου!
Δοκιμάστε μια εντολή Δοκιμή "Εδώ είμαι" πριν από γραμμές κώδικα που σας ενδιαφέρει να δείτε να τρέχουν "ζωντανά".


Οι εντολές Λίστα και Τμήματα ? δείχνουν μεταβλητές και Τμήματα/συναρτήσεις. Η εντολή Τμήματα χωρίς το αγγλικό ερωτηματικό δείχνει εκτός από τα τμήματα και τις συναρτήσεις και τα αρχεία GSB από όπου μπορούμε να φορτώσουμε και να σώσουμε. Η εντολή Κατάλογος μας δείχνει τα αρχεία και το όνομα φακέλου. Ενώ η εντολή Σύστημα Κατ$ ανοίγει το φάκελο αυτό σε παράθυρο File Explorer για επεξεργασία. Σύστημα Calc ανοίγει την αριθμομηχανή και γενικά η εντολή Σύστημα είναι ανάλογη της Run των Windows. Οι φόρμες έχουν ζουμ, δηλαδή μεγαλώνουν ή μικραίνουν όσο θέλουμε, μεγαλώνοντας τα γράμματα ανάλογα. Για το κείμενο υπάρχει κρυφή μπάρα ολίσθησης, αλλά δουλεύει και το σπρώξιμο, δηλαδή πάτημα του αριστερού πλήκτρου του ποντικιού και τράβηγμα προς τα κάτω για να φέρουμε από πάνω γραμμές και το ανάποδο για να φέρουμε από κάτω γραμμές!
Τα στοιχεία ελέγχου και τις φόρμες τα έχω γράψει και είναι μέρος της Μ2000.