Τετάρτη, 4 Νοεμβρίου 2015

Αναθεώρηση 80

Μια μικρή βελτίωση στην Τύπωσε (Αναθώρηση 80  - η 79 είχε ένα μικρό Bug...στο χρωματισμό και έριχνε το πρόγραμμα!)
Η εντολή Τύπωσε είναι η πιο πολύπλοκη εντολή και αυτό γιατί χρησιμοποιεί στήλες, φορμάρισμα σε στήλες, τυπώνει αναλογικά και μη αναλογικά, μπορεί με το ελληνικό ερωτηματικό να "σπάσει" τις στήλες (να κολλήσει το επόμενο), μπορεί να αλλάξει πρόσκαιρα το πλάτος στηλών, και έχει τρεις ειδικές εντολές, την @() που μετακινεί το δρομέα και "βάφει" το φόντο ή βάζει γραφικό, την $() που βάζει φορμάρισμα γραμμάτων ή αριθμών (π.χ. πόσα δεκαδικά θέλουμε να βλέπουμε) και επίσης βάζει το πλάτος στηλών, και τέλος την ~() που βάζει χρώμα, γραμμάτων, φόντου, πλαισίου.

Η Τύπωσε κανονικά δεν αλλάζει το φόντο, και τυπώνει με χρήση συντεταγμένων χαρακτήρων.

Η έκδοση 8 περιλαμβάνει τρεις ειδικές Τύπωσε, την Τύπωσε Πάνω, Τύπωσε Μέρος και Τύπωσε Υπό. Ουσιαστικά είναι κάτι σαν μακροεντολές. Και οι τρεις επενεργούν πρόσκαιρα στο σύστημα εκτύπωσης, που σημαίνει ότι κάθε αλλαγή σε διαμόρφωση θα χαθεί. Εξ ορισμού η διαμόρφωση σε αυτές τις τρεις εντολές είναι για την γραφή τύπου 4, που σημαίνει αναλογική γραφή, οι αριθμοί στοιχίζονται δεξιά, τα γράμματα αριστερά και αν χρειάζονται χώρο τότε θα πάρουν από την επόμενη στήλη. Όμως η Πάνω βάζει επιπλέον όλη την γραμμή ως μια στήλη και επιπλέον σβήνει το φόντο με το χρώμα φόντου, εκτός από μια γραμμή στο κάτω μέρος (δείτε στην Υπό γιατί). Και οι τρεις εντολές δεν αλλάζουν γραμμή, έτσι αν γράψουμε δέκα στήλες ενώ βλέπουμε πέντε τότε μόνο πέντε θα δούμε (σε αντίθεση η απλή Τύπωσε θα αλλάξει γραμμή και θα συνεχίσει να βάζει αριθμούς ή αλφαριθμητικά...σε στήλες). Ειδικά η Τύπωσε Υπο ξεκινάει με αλλαγή γραμμής αφού βάλει στην τρέχουσα μια γραμμή στο κάτω μέρος (τη γραμμή που δεν βάζει η Τύπωσε Πάνω). Κατά τα άλλα αυτή και η Τύπωσε Μέρος είναι ίδιες, με στήλες τις στήλες που έχουμε επιλέξει εμείς με την $(), ή αυτόματα με κάποια από τις εντολές Φόρμα ή Τύπος ή Παράθυρο.  Επιπλέον αυτές οι τρεις εντολές υποστηρίζουν τον καθορισμό νέων στηλών με αρχή την θέση απ΄όπου ορίζουμε τις στήλες. Έτσι αν για παράδειγμα είχαμε στήλες των 20 χαρακτήρων (μη αναλογικής γραφής), τότε θα μπορούσαμε να ζητήσουμε μετά τις δυο πρώτες στήλες να αλλάξουν οι στήλες σε δεκάρες (δέκα χαρακτήρων), έτσι ώστε οι επόμενες εκτυπώσει να αλλάζουν αυτόματα στήλη ανά δέκα χαρακτήρες. Αυτή η μετάθεση της αρχής των στηλών δεν γίνεται με την απλή Τύπωσε (επειδή αλλάζει γραμμές αυτόματα, έτσι ώστε σε κάθε αλλαγή να ξεκινάει η αρχή των στηλών από τη θέση μηδέν).

Ότι κάνουμε στη βασική οθόνη (στο βασικό επίπεδο) μπορούμε να κάνουμε στο περιθώριο, ή στα 32 επίπεδα από πάνω (με διαφορετικούς δρομείς, χρώματα κλπ), καθώς επίσης και στο φύλλο του εκτυπωτή. Συνολικά αυτά τα επίπεδα είναι 35 και υπάρχει ένα ακόμα που δεν γράφουμε και είναι το επίπεδο "Επιφάνεια"ή Desktop. Δηλαδή μπορούμε να ορίσουμε διαφάνεια στην φόρμα του περιβάλλοντος της Μ2000 και αν ορίσουμε ένα χρώμα για την επιφάνεια, έστω μαύρο μπορούμε να "σβήνουμε προς το μαύρο" το περιβάλλον (δηλαδή υπάρχει για Εφε). Αντί για χρώμα μπορούμε να βάλουμε εικόνα ή να αντιγράψουμε την επιφάνεια εργασίας σε αυτό. Έτσι συνολικά τα επίπεδα είναι 36, αλλά στα 35 μπορούμε να γράφουμε. Το φύλο εκτυπωτή είναι σε ανάλυση του εκτυπωτή, δηλαδή ενώ μας δίνει την εντύπωση (ακόμα και προγραμματιστικά) ότι χρησιμοποιούμε έστω 12άρια γράμματα, το φύλλο του εκτυπωτή θα έχει μεγαλύτερα γράμματα για να καλύψει τη διαφορά στα dpi, με σκοπό να πάρουμε στην εκτύπωση πραγματικά 12άρια! Με απλά λόγια η Μ2000 δουλεύει απ΄ευθείας στην υψηλή ανάλυση του εκτυπωτή. Παλαιότερα για λόγους ταχύτητας είχα κατεβάσει στο ένα τέταρτο την ανάλυση αλλά στην 8 το έφερα ακριβώς όσο πρέπει, αλλά με έναν μόνο συμβιβασμό, ότι θα χρησιμοποιώ τετράγωνα εικονοστοιχεία (δεν χρησιμοποιούν όλοι οι εκτυπωτές τετράγωνα εικονοστοιχεία, ειδικά οι τύπου dye Sublimation), αλλά στην εκτύπωση αν χρειάζεται "τεντώνεται" η εικόνα ανάλογα για να καλύψει την διαφορά αναλογίας.

Από την βοήθεια της Μ2000 (γράψε Βοήθεια Τύπωσε στο περιβάλλον της Μ2000)
1) Μπορούμε για ευκολία να βάζουμε το ? αντί για Τυπωσε ή Print
? 2+3=5 και 2-1>0
2) Τύπωσε 1, 2+4, "Λέξη "+α$   \\ αν δεν χωράνε στη γραμμή συνεχίζουν από κάτω κατά στήλες
3) Τύπωσε "Όνομα:";α$;" ";β$
4) Τύπωσε @(10,10),"Στη θέση 10, 10"
5) Τύπωσε $(3,8),100,200,"Λέξη",300    \\ ορίζουμε στήλη 8 χαρακτήρων και στοίχιση δεξιά
6) Τύπωσε   \\σκέτο αλλάζει γραμμή, στη τελευταία κάτω γραμμή η αλλαγή προκαλεί ολίσθηση γραμμών προς τα πάνω
7) Δεκαεξ 0xFF00+0x0055       \\ Η Τύπωσε σε εξαγωγή δεκαεξαδικού
                  0xFF55
8) Τύπωσε #Α, "Μια γραμμή στο αρχείο με μεταβλητή χειρισμού το Α"
9)  Τύπωσε $("#,###,###.00", 20), 112313.3788   \\ 20 το πλάτος στήλης
   \\ το ίδιο δίνει και αυτό: Τύπωσε $("#,###,###.00", 20), τιμη(μορφη$("{0:2}",112313.3788))
10) Τύπωσε μορφή$("αριθμός με δυο δεκαδικά:{0:2} και εδώ μια λέξη:{1}", 10.678, "ΟΚ")
                                                              \\ η μορφή$() είναι γενική συνάρτηση, ο αριθμός μετά το : δείχνει το τελευταίο δεκαδικό αν υπάρχει και εφαρμόζεται και σε αριθμούς με επιστημονική μορφή (π.χ. 1.23e100), χωρίς να πειράζει τον εκθέτη.

Η εσωτερική συνάρτηση @(), όπου Χ θέση χαρακτήρα, Υ γραμμή (ξεκινούν από 0 μέχρι Πλάτος-1 και Ύψος-1 ως ορατά, αλλά μπορούμε να δώσουμε και εκτός οθόνης νούμερα).
Τα Χ1, Υ1 ορίζουν ένα πλαίσιο στο οποίο θα χρωματίσουμε με το ΧΡ χρώμα, και με το ΠΕΡ περιθώριο. Ή μπορούμε να βάλουμε γραφικό στο θέση του, φορτώνοντάς το από το δίσκο, και απλώνοντας την σε όλο το πλαίσιο ή με το ,1 διατηρώντας την αναλογία της,
@( Χ )
@( ,Υ)
@( Χ, Υ)
@( Χ, Υ, Χ1 ,Υ1, ΧΡ)
@( Χ, Υ, Χ1, Υ1, ΧΡ, ΠΕΡ)
@( Χ, Υ, Χ1, Υ1, "όνομα αρχείου γραφικών")
@( Χ, Υ, Χ1, Υ1, "όνομα αρχείου γραφικών", 1)

Αντί για όνομα αρχείου μπορούμε να δώσουμε ένα αλφαριθμητικό που κρατάει μια εικόνα!
Α$=""   \ δημιουργούμε μια νέα μεταβλητή
αντέγραψε 3000,2000 στο Α$  \\ αντιγράφουμε από το δρομέα γραφικών πλάτος 3000 twips, ύψος 2000 twips στο Α$

Τύπωσε @(10,10,20,20,α$),~(10),"Γεια"   \\ η πρώτη συνάρτηση αλλάζει το δρομέα στο 10,10 και βάζει μια εικόνα από πίσω που πήραμε από τη οθόνη.. Η δεύτερη βάζει το χρώμα 10 (χρώματα δίνουμε με # όπως στην Html, ή με Χρώμα(κόκκινο, πράσινο, μπλε), ή με νούμερα από 0 ως 15 που είναι τα βασικά των Windows).

H $()
$(στοίχιση) 
$(στοίχιση, πλάτος στήλης)
$(φόρμα$)
$(φόρμα$ , πλάτος στήλης)

στοίχιση αποτελέσματος αριθμητικών και λογικών  παραστάσεων: 
0 = δεξιά, 1 = αριστερά, 2 = κέντρο, 3 = δεξιά  - με σταθερά διαστήματα (όπως οι παλιές γραφομηχανές)
4 = δεξιά, 5 = αριστερά, 6 = κέντρο, 7=δεξιά ,8 = δεξιά και αριστερά μαζί -   με αναλογικά διαστήματα (όπως στις εφημερίδες)

στοίχιση αποτελέσματος αλφαριθμητικών παραστάσεων:
0 = αριστερά, 1 = αριστερά, 2 = κέντρο, 3 = δεξιά   με σταθερά διαστήματα (όπως οι παλιές γραφομηχανές)  
4 = αριστερά, 5 = αριστερά, 6 = κέντρο, 7 = δεξιά , 8 =  αριστερά  με αναλογικά διαστήματα (όπως στις εφημερίδες)
στα 0 και 4 τα αλφαριθμητικά γεμίζουν όσες στήλες χρειαστούν. Σε όλα τα άλλα γίνεται αποκοπή.

Υπάρχει και το 9 το οποίο κάνει αποκοπή και εντός λέξης (ενώ το 5 για παράδειγμα αν δει ότι μια λέξη δεν χωράει δεν θα την βάλει, σαν να κάνει αναδίπλωση λέξης χωρίς όμως να την βάλει πουθενά)

Επιπλέον υπάρχουν διακόπτες  ως ξεχωριστές εντολές όπως Πλάγια και  Φαρδιά που αλλάζουν τη φόρμα των γραμμάτων, καθώς και τα Διπλά-Κανονικά όπου η ΔΙΠΛΑ κάνει τα γράμματα διπλό μέγεθος (κατά Χ και κατά Ψ άρα τετραπλάσια σε έκταση). Μπορούμε να αναμείξουμε στην ίδια σειρά Πλάγια, Φαρδιά και όποιο συνδυασμό αυτών, αλλά όχι Διπλά και Κανονικά (κανονικό μέγεθος είναι το αρχικά δηλωμένο) σε μια γραμμή. Επιπλέον μπορούμε να αλλάζουμε γραμματοσειρά (αλλά προκαλεί αλλαγές στη σύστημα της οθόνης, ανά επίπεδο). Mπορούμε να αλλάζουμε το διάστιχο σε twips ανά 30 (ανά δυο pixels).  Έχει προβλεφθεί στην τύπωσε η χρήση των στηλών να αφήνει κάθετες και οριζόντιες γραμμές χωρίς να πειράζονται, ώστε να μπορούμε να φτιάχνουμε στήλες με πλαίσια. Επίσης στην μη αναλογική γραφή το πλάτος του γράμματος είναι του φαρδύτερου, με φαρδιά (bold). Έτσι αν αναμείξουμε φαρδιά, πλάγια και μη, θα κάθεται το κάθε γράμμα στη θέση του χωρίς να πέφτει στο άλλο δίπλα! Η αναλογική γραφή χρησιμοποιεί τα διαστήματα που δηλώνονται από τις στήλες της μη αναλογική γραφής για να γράψει όσο χωράει κείμενο χωρίς να κόβει λέξεις εκτός του 9 που κόβει στο γράμμα και όχι στη λέξη.

Η τύπωσε εκτός από την γραφή στα επίπεδα κάνει και μεταφορά σε αρχεία (με τον αριθμό αρχείου στην αρχή με το σύμβολο #). Σε αρχεία με την τύπωσε γράφουμε σε UTF16LE (16bit) ή σε ANSI (8bit) ανάλογα με το πως θα ανοίξουμε το αρχείο (ο δείκτης ΕΥΡΕΙΑ δηλωνει το Unicode UTF16LE). Αν θέλουμε εξαγωγή σε δεύτερο χρόνο μπορούμε αντί για την Εκτύπωση να κάνουμε με χρήση της μορφή$() εισαγωγή σε μια μεταβλητή τύπου έγγραφο και μετά το σώνουμε με μια εντολή και με επιλογή τύπου εξαγωγής (παίρνει και UTF-8 και UTF-16BE).  Δείτε παράδειγμα εδώ

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

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

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

Τέλος μπορούμε να γράψουμε απ΄ευθείας στο Word! Δείτε παράδειγμα εδώ

Η εκτύπωση είναι βασική διεργασία για τις γλώσσες διότι κάπου και κάπως πρέπει να πάρουμε "απαντήσεις", σε αυτά που κάνουμε με τις διάφορες εφαρμογές. Συνήθως λέγαμε παλιά ότι στόχος των προγραμμάτων τύπου Γραφείου είναι η εκτύπωση σε χαρτί. Ο "πελάτης" δηλαδή θέλει το hardk Copy. Σήμερα αυτό με το Cloud δεν είναι απαραίτητο. Βγάζουμε δηλαδή αντί μιας εκτύπωσης στο χαρτί μια εκτύπωση σε pdf αρχείο και το στέλνουμε! Όπως και να έχει το πράγμα, τη διαμόρφωση της εξαγωγής θα την κάνει η γλώσσα βάσει των εντολών που έχει για το σκοπό αυτό.


ΓΚ

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

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