Τετάρτη, 16 Δεκεμβρίου 2015

Επιθεώρηση Προγραμμάτων Χρήστη

Τα προγράμματα του χρήστη σώνονται στον φάκελο του χρήστη (εκτός και αν αλλάξουμε φάκελο). Χρησιμοποιούμε τη λίστα επιλογών, χωρίς να την δείξουμε. Η εντολή Επιλογή χωρίς παραμέτρους καθαρίζει τη λίστα. Η λίστα γεμίζει από την εντολή Αρχεία με τον διακόπτη + και μια παράμετρο, το τύπο του αρχείου (τρια γράμματα). Η εσωτερική μεταβλητή μόνο για ανάγνωση Επιλογές μας λέει πόσα αρχεία είναι γραμμένα στις επιλογές. Τα αρχεία έχουν μόνο το όνομα, όχι τον τύπο, ούτε το μονοπάτι (τον κατάλογο). Γενικά στη Μ2000 όταν δίνουμε όνομα αρχείου χωρίς κατάλογο βάζει το κατάλογο χρήστη. Για να φορτώσω το αρχείο πρέπει να δώσω τον τύπο του, ώστε να έχω όλο το όνομα.
Στα έγγραφα το = δεν κάνει αντικατάσταση αλλά προσθήκη στο τέλος.
Στην τελευταία εντολή έχουμε τον διακόπτη κώδικα που δηλώνει ότι η βοήθεια της Μ2000 θα λειτουργεί για το κείμενο καθώς και ο χρωματισμός (αν και δεν γίνεται με το άνοιγμα, αλλά θέλει δυο φορές το F11 για να γίνει σε όλο το κείμενο, αλλιώς χρωματίζει εκεί που κάνουμε αλλαγές - πιθανόν να το αλλάξω αυτό, να χρωματίζει απευθείας όπως τα τμήματα, αλλά και έτσι βολεύει για να κατανοήσει κανείς πώς χρωματίζει το σύστημα).

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

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

Τα φορτωμένα τμήματα τα διορθώνουμε με το Σ ή Συγγραφή. Μπορούμε να τα μετονομάσουμε

Συγγραφή Α
Συγγραφή Α ως Β
ή με την συντόμευση Σ
Σ Α
Σ Α ως Β


Μπορούμε όμως να διορθώσουμε ένα αρχείο GSB χωρίς να το φορτώσουμε (χωρίς δηλαδή να βάλουμε τα τμήματά του στο χώρο των φορτωμένων τμημάτων. Έστω το αρχείο λέγεται a.gsb

Συγγραφή "a.gsb"
Αν δεν υπάρχει το αρχείο το δημιουργεί στην έξοδο από το διορθωτή, εφόσον γράψουμε κάτι! Με τον τρόπο της διόρθωσης άμεσα στο αρχείο μπορούμε να προσθέσουμε εντολές στο τέλος που θα εκτελεστούν από την γραμμή εντολών.
Αν το τελευταίο φορτωμένο τμήμα δεν το θέλουμε φεύγει με Διαγραφή. Με Νέο διαγράφουμε όλα τα τμήματα.



Κατάλογος Χρήστη
Έγγραφο Α$, Β$
Επιλογή
Αρχεία + "GSB"
Για ι=1 έως Επιλογές {
      Α$="\************** "+Επιλογή$(ι)+{ ***************/
      }
      Φόρτωσε.Εγγραφο Β$, Επιλογή$(ι)+".gsb"
      Α$=Β$+{
      }
}
\\ πάτα δυο φορές το F11 να χρωματίσει το κώδικα
\\ Αλλιώς θα χρωματίζει όπου κάνουμε αλλαγές
Διόρθωσε κώδικα Α$

Άλλος Τρόπος χωρίς δεύτερο έγγραφο. Με συγχώνευση γραμμών από άλλο αρχείο

Κατάλογος Χρήστη
Έγγραφο Α$
Επιλογή
Αρχεία + "GSB"
Για ι=1 έως Επιλογές {
      Α$="\************** "+Επιλογή$(ι)+" ***************"/
      \\ δεν θέλει αλλαγή γραμμής η επικεφαλίδα
      Συγχώνευσε.Έγγραφο Α$, Επιλογή$(ι)+".gsb"
      Α$={
      }
}
\\ πάτα δυο φορές το F11 να χρωματίσει το κώδικα
\\ Αλλιώς θα χρωματίζει όπου κάνουμε αλλαγές
\\ αυτά γίνονται με το χαρακτηριστικό "κώδικα"
Διόρθωσε κώδικα Α$


Φόρτωση τμήματος κατά την εκτέλεση.
Έστω ότι έχουμε ένα τμήμα α και θέλουμε να φορτώσουμε ένα πρόγραμμα κ1 που περιέχει ένα άλλο τμήμα α. Υπάρχει θέμα εδώ γιατί δεν μπορούμε να καλέσουμε ένα Α μέσα σε ένα Α! θα νομίζει ότι θέλουμε να καλέσουμε τον εαυτό του και αυτό θέλει να μας πει ότι είναι λάθος...και διακόπτει το πρόγραμμα. Θα μπορούσαμε να κάνουμε τρια πράγματα για να καλέσουμε κάτι με το ίδιο όνομα!

1.Ο καλύτερος τρόπος είναι με τη χρήση μιας ισχνής αναφοράς!

Φόρτωσε κ1
α$=τμήμα$
α$ 12

Παραλλαγή

κκ=20
Φόρτωσε κ1
α$=τμήμα$
α$ 12
Τυπωσε κκ


2. Άλλος τρόπος είναι με την χρήση του ονόματος τμήματος αλλά χωρίς την επιλογή παραπάνω, αλλά με ο Α. ως πρόθεμα.
Φόρτωσε κ1
Α.Α 12

Το πρόβλημα με το 2 είναι ότι αν κληθεί με την Κάλεσε το Α τότε το όνομα του τμήματος που εκτελείται αλλάζει και δεν είναι πια Α. Δηλαδή ενώ στο κώδικα γράφουμε Σ Α και βλέπουμε στο διορθωτή πάνω αριστερά Τμήμα Α η κλήση με το Κάλεσε αντιγράφει το τμήμα με νέο όνομα! Αυτό το κάνει γιατί με την κάλεσε ένα τμήμα μπορεί να καλεί τον εαυτό του (μέχρι 128 φορές). Η σκοπιμότητα αυτού του μηχανισμού αλλαγής ονόματος έχει να κάνει με αυτό: Κάθε φορά που καλεί τον εαυτό του αλλάζει το όνομα οπότε οι μεταβλητές που μπορεί να δημιουργεί θα έχουν άλλο πρόθεμα. Αν δεν πρόκειται να χρησιμοποιήσουμε τη κάλεσε δεν υπάρχει θέμα!

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

Τμήμα ΚΛΜ0001   ' Αλλάζουμε το όνομα του εκτελέσιμου τμήματος.
Φόρτωσε κ1
Α 12


Παραλλαγή
κκ=20
Τμήμα ΚΛΜ0001
Για Αυτό {
      Φόρτωσε κ1
      Α 12
}
Τμήμα Α       ' αν δεν ήταν πρόσκαιρη η Φόρτωσε μέσα στο Για Αυτ {} δεν θα μπορούσα να αλλάξω το τμήμα σε Α
Τύπωσε κκ  ' 300



Για να τρέξουμε τα παραδείγματα και να τα κατανοήσουμε χρειαζόμαστε:
όλα τα παραπάνω διαδοχικά τα γράφουμε σε ένα τμήμα Α
σε ένα τμήμα Β γράφουμε
κάλεσε α
Το αρχείο κ1.gsb περιλαμβάνει αυτά και το φτιάχνομε με Σ "κ1.gsb" και επικόλληση.
ΤΜΗΜΑ Α {Διάβασε Α
κκ=300
Τύπωσε 10*Α
}

 

Μετά δοκιμάζουμε με (το > βγαίνει στην εισαγωγή εντολών)
>Α
και
>Β

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

Η Ζωή ενόςΤμήματος
Η ζωή-παρουσία ενός τμήματος έχει τρια στάδια! Στο στάδιο του ορισμού βρίσκεται σε ένα κείμενο, όπου θα είναι η λέξη Τμήμα το όνομα και το μπλοκ εντολών. Στο στάδιο της εγκατάστασης ορισμός βρίσκει μια θέση στη λίστα τμημάτων. Ο τρόπος εγκατάστασης μπορεί να είναι κανονικός (τοπικός) ή γενικός. Αν δώσουμε δεύτερη εγκατάσταση θα αλλαχθεί ο ορισμός με τον νέο. Το τρίτο στάδιο είναι το στάδιο της εκτέλεσης. Εκεί ο ορισμός αντιγράφεται σε ένα αντικείμενο εκτέλεσης και παίρνει ένα όνομα, ή το όνομα του τμήματος ή το όνομα που αποδίδεται αυτόματα από το σύστημα με την Κάλεσε. Με την εντολή Ένθεση μπορούμε να εισάγουμε εντολές στο αντικείμενο εκτέλεσης στη θέση της Ένθεσης αλλά ο ορισμός δεν θα αλλάξει. Όταν χρησιμοποιούμε άλματα (Προς/Goto) τότε σε κάθε άλμα ο ορισμός (που είναι εγκατεστημένος) ξαναφορτώνεται στο τμήμα από το σημείο που φθάσαμε με το άλμα. Αν χρησιμοποιούμε ρουτίνες με όνομα και παρενθέσεις με Διαμέσου/Gosub τότε αυτές αναζητούνται στον ορισμό που έχει εγκατασταθεί (από ένα κείμενο, ενός άλλου ορισμού, δηλαδή από τον πατρικό ορισμό ) ή στο κείμενο που βρίσκεται ο ορισμός προ εγκατάστασης (στο πατρικό). Έτσι αν θέλουμε μια ρουτίνα να την χρησιμοποιούν δυο τρια τμήματα, την γράφουμε σε αυτό που φτιάχνει αυτά τα τμήματα. Όμως η ρουτίνα λογαριάζεται ότι είναι στο τμήμα που την καλεί. Οι ρουτίνες δεν έχουν εγκατάσταση, υπάρχουν ως ορισμοί και όταν καλούνται εκτελούνται σαν γραμμές εντολών του τμήματος. Η μόνη διαφορά είναι ότι σε κλήση δημιουργείται νέος χώρος για πρόσκαιρες δημιουργίες και στην επιστροφή καθαρίζεται.Έτσι με τις ρουτίνες πετυχαίνουμε αναδρομή σε μεγάλο βάθος..(μπορούμε να ορίσουμε ΟΡΙΟ.ΑΝΑΔΡΟΜΗΣ 30000 άνετα, ενώ ένα τμήμα με την ΚΑΛΕΣΕ φθάνει στις 128 κλήσεις) και επιπλέον η ρουτίνα βλέπει τις μεταβλητές του τμήματος, τα τμήματα και τις συναρτήσεις που έχει φτιάξει ως στατικές.για κάθε αναδρομική κλήση!



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

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