Σάββατο 4 Δεκεμβρίου 2021

Αναθεώρηση 43, Έκδοση 10

Άλλαξε κάτι σε σχέση με τις παλαιότερες εκδόσεις/Αναθεωρήσεις, πιθανή ασυμβατότητα. Η Main.Task ή Κύριο.Έργο δεν ανανεώνει την οθόνη (ή επίπεδο) στο τρέχον αντικείμενο εξόδου (που είναι πάνω σε αυτό το νήμα). Αν θέλουμε δίνουμε την εντολή Ανανέωση. Δείτε πως την χρησιμοποιούμε στα παραδείγματα. Έχουν τροποποιηθεί και τα παραδείγματα στο αρχείο Info. Με αυτήν την αλλαγή, και μερικές μη φανερές πιο μέσα στα νήματα, μπορεί να λειτουργεί η Μ2000 χωρίς να χρειάζεται να τρέχει ο επεξεργαστής με υψηλή χρήση ενέργειας, όταν για παράδειγμα λειτουργούν τα νήματα και παράλληλα ένα νήμα έχει σταματήσει σε MessageBox. Δεν υπήρχε από την Μ2000 κάτι ως Αδράνεια του συστήματος, αλλά τώρα με μια αλλαγή πρόσθεσα χρόνο προς το σύστημα (sleep) χωρίς να επιβαρύνω την Μ2000. Πώς γίνεται; Σε κάθε tick του TaskManager, κοιτάει αν κάποιο νήμα πρέπει να τρέξει, και τα παίρνει όλα με τη σειρά μέχρι να βρει πιο πρέπει να τρέξει. Αν δεν βρει τότε βάζει αδράνεια, με το sleep, για ελάχιστο χρόνο, οπότε στο επόμενο tick μπορεί ή όχι να ξαναδώσει. Το tick το προκαλεί εξωτερικός χρονιστής (από τα Windows). Προτεραιότητα υπάρχει για τις διακοπές από τα γεγονότα, πχ από κάποια φόρμα.

Μπήκαν και νέα πράγματα:

1. Μπορεί να σπάσει μια λάμδα σε πολλές γραμμές (το έκανε για τον ορισμό της συνάρτησης, τώρα το κάνει και για τον ορισμό/χρήση κλεισιμάτων. Μπορούμε να αφήσουμε κενές γραμμές ή και να βάλουμε σημειώσεις!

α=λάμδα
Χ=100, 'σημειώσεις
ψ=500 'σημειώσεις
(m)
->{
    =χ*ψ*m
}(3)
Τύπωσε α
α$=λάμδα$
Χ=100, 'σημειώσεις
ψ=500 'σημειώσεις
(m)
->{
    =γραφή$(χ*ψ*m)
}(3)
Τύπωσε α$

2. Στους Στόχους μπήκαν τρία πράγματα

2.1 Όταν χρησιμοποιούμε αναλογική γραφή και το ύψος του στόχου είναι σε ζυγό αριθμό και έχουμε επιλέξει να βγει η λεζάντα στο κέντρο, βγαίνει πράγματι στο κέντρο, δηλαδή "πατάει" σε δυο γραμμές.

2.2 Στο παράδειγμα έχω βάλει και μια συνάρτηση για να κατεβάζω από το Drive της Google σε αρχείο στο φάκελο χρήστη.

Φτιάχνω σε μια επανάληψη τρεις στόχους (κάθε φορά τους σβήνω) για να δείξω πως αλλάζουν τα σχέδια. Στον πρώτο στόχο το πλάτος είναι μικρότερο από το ύψος, στο δεύτερο είναι ανάποδα, στο τρίτο η εικόνα μπαίνει με μέγεθος 0 που σημαίνει ότι θα πάρει όλη την επιφάνεια του στόχου. Μπορούμε να βάλουμε png με διαφάνεια, αλλά και emf αρχεία. Στους στόχους το μικρό νούμερο (mod 10) δείχνει την θέση του κειμένου (από 1 έως 9, σαν το καντραν του τηλεφώνου), και το 0 είναι για να μην δείχνει  κείμενο.  

Στον τελευταίο στόχο έχουμε βάλει ένα κάθετο Ιστόγραμμα (με Κάθετη 0 γίνεται οριζόντιο). Αυτό μεταβάλεται με την Τιμή από 0 έως 100 (και παραπάνω να δώσουμε θα κόψει τα επιπλέον. Υπάρχει επιπλέον και η Βάση η οποία παίρνει και αυτή ποσοστό, και έτσι αντί να μεγαλώνουμε ένα ιστόγραμμα μπορούμε να μετακινούμε με ένα πάχος που θέλουμε μια γραμμή οριζόντια ή κάθετη.

Με στόχος μ2, 0 απενεργοποιούμε το στόχο, οπότε παίζει μόνο σαν ιστόγραμμα. Οι στόχοι λειτουργούν με την Σάρωσε 0.1  (δίνουμε έναν ελάχιαστο χρόνο). Κάθε στόχος μπορεί ή να στέλνει κάτι στο πληκτρολόγιο ή να εκτελεί μια απλή εντολή, συνήθως βάζουμε το "Είμαι=10" στη θέση του ":" και 105 (το 5 δηλώνει κέντρο, το 0 σημαίνει οδηγία, και το 1 αναλογική γραφή). Στο παράδειγμα έχω δώσει το 100+ι για να αλλάζει, ενώ σαν οδηγία το ":" που δεν κάνει τίποτα.

Σε λίγες μέρες θα έχω έτοιμο το πρόγραμμα που δουλεύει με στόχους για την ετοιμασία του Κόσμου του Κάρελ. Αυτό θα είναι το τρίτο μέρος, μετά το λεκτικό/συντακτικό αναλυτή και την εκτέλεση του AST, και τη γραφική αναπαράσταση, και θα τα δέσω όλα μαζί σε μια εφαρμογή!

Στο πρόγραμμα έχουμε αγγλικές εντολές και ελληνικές. Δεν έχει πρόβλημα η Μ2000. Η συνάρτηση Download$() χρησιμοποιεί την εξωτερική συνάρτηση DownloadToFileW  του urlmon.dll που έχει το λειτουργικό. Το 0x10& είναι το 16 σε τύπο Long 32bit (το δηλώνει το &)

Φόρμα 40, 25
function global DownLoad$(filename$, drive$){
Const BINDF_GETNEWESTVERSION = 0x10&
Const FileFromDrive$="http://drive.google.com/uc?export=download&id="
if internet then
If exist(filename$) then Try {dos "del "+quote$(dir$+filename$);} : Wait 200
Declare URLDownloadToFile lib "urlmon.URLDownloadToFileW" {long pCaller, szUrl$, sxFilename$, long dwReserved, long callback}
if URLDownloadToFile(0,FileFromDrive$+drive$, dir$+filename$,BINDF_GETNEWESTVERSION,0)==0 then
= "Ok"
Else
= "Try Again"
end if
else
= "No Internet, Try Again"
end if
}
Αν Δεν Υπάρχει("Φόντο10.emf") Τότε
Οκ$=DownLoad$("Φόντο10.emf", "1kN5Dz9hKHp-R794YnIEq_C9OPGkkSlYe")
Τέλος Αν
Αν Υπάρχει("Φόντο10.emf") Τότε
Φόντο1=Διάρθρωση("Φόντο10.emf")
//Με Φόντο1, "subtype", 2
Για ι=1 έως 9
στόχοι νέοι
δρομέας 5,5
Στόχος μ,":", 10, 15,7 ,15, 110+Ι, "caption"+γραφη$(ι)+"   "
Αλλαγη μ, Εικόνα Φόντο1, μεγεθος 100
δρομέας 15,5
Στόχος μ1,":", 10, 5,7 ,15, 110+Ι, "caption"+γραφη$(ι)+"   "
Αλλαγη μ1, Εικόνα Φόντο1, μεγεθος 100
δρομέας 15,15
Στόχος μ2,":", 10, 5,7 ,15, 110+Ι, "caption"+γραφη$(ι)+"   "
Αλλαγη μ2,Εικόνα Φόντο1, μεγεθος 0, Χρωμα 4, Τιμή (ι+1)*10, Καθετη 1
θέση 0,0
ανανέωση
κ$=κομ$
επόμενο
στόχοι νέοι
Τέλος Αν


3. Στο αρχείο εγκατάστασης μπήκε νεότερο μικρό εγχειρίδιο, και από το σύνδεσμο δεξιά (Μικρό Εγχειρίδιο της Μ2000)  μπορείτε να το κατεβάσετε. Δεν έχει δουλευτεί όλο, αλλά αρκετό. Μπήκε και η Επανάλαβε Όσο.

Καλές Γιορτές

ΓΚ

ΥΓ,

Φέτος είμαι πολύ ευτυχής, έχω πια δύο εγγόνια, την Κατερίνα και τον Αλέξανδρο!



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

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

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