65
ΔΗΜΟΣΙΟ ΙΝΣΤΙΤΟΥΤΟ ΕΠΑΓΓΕΛΜΑΤΙΚΗΣ ΚΑΤΑΡΤΙΣΗΣ Ι.Ε.Κ. ΛΕΥΚΑΔΟΣ TΟΜΕΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΔΙΚΟΣ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ CLIPPER ΤΟΜΟΣ Α΄

Προγραμματισμός σε Clipper - 1

  • Upload
    -

  • View
    591

  • Download
    4

Embed Size (px)

Citation preview

Page 1: Προγραμματισμός σε Clipper - 1

ΔΗΜΟΣΙΟ ΙΝΣΤΙΤΟΥΤΟ ΕΠΑΓΓΕΛΜΑΤΙΚΗΣ ΚΑΤΑΡΤΙΣΗΣ

Ι.Ε.Κ. ΛΕΥΚΑΔΟΣ

TΟΜΕΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΕΙΔΙΚΟΣ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ CLIPPER ΤΟΜΟΣ Α΄

ΓΟΥΡΖΗΣ ΣΤΑΘΗΣ ΦΥΣΙΚΟΣ ΛΕΥΚΑΔΑ - ΜΑΙΟΣ 1999

Page 2: Προγραμματισμός σε Clipper - 1

ΠΕΡΙΕΧΟΜΕΝΑ

ΠΡΟΛΟΓΟΣ

1) ΕΙΣΑΓΩΓΗ ΣΤΟΝ CLIPPER

Μια σύντομη ιστορική αναδρομή στο περιβάλλον ανάπτυξης εφαρμογών για βάσεις δεδομένων της Dbase III+ και του Clipper.Τι είναι η μεταγλώττιση του κώδικα και πως γίνεται η εγκατάσταση του CA- Clipper 5.2 στον υπολογιστή.

2) ΤΑ ΣΤΟΙΧΕΙΑ ΤΟΥ CLIPPER

Ποια είναι τα αρχεία που χρησιμοποιεί ο Clipper,τι είδους μεταβλητές έχουν τα προγράμματά του, τι είναι οι πίνακες, τα ευρετήρια, οι περιοχές εργασίας, οι διαδικα- σίες και οι συναρτήσεις που περιλαμβάνονται στον κώδικα των εφαρμογών του. 3) ΔΟΜΕΣ ΕΛΕΓΧΟΥ ΣΤΟΝ CLIPPER

Ποιες είναι οι βασικές εντολές με τις οποίες ο Clipper υλοποιεί τα προγράμματά του και πως ελέγχει την ροή των διαδικασιών μέσα σε αυτό. Περιορισμοί και πλεονεκτή- ματα σε σύγκριση με άλλες γλώσσες προγραμματισμού. 4) ΟΙ ΕΝΤΟΛΕΣ ΔΙΑΜΟΡΦΩΣΗΣ ΠΕΡΙΒΑΛΛΟΝΤΟΣ SET ΤΟΥ CLIPPER

Οι εντολές περιβάλλοντος Set,με τις οποίες ο Clipper δίνει τον απόλυτο έλεγχο του hardware στον προγραμματιστή και καθορίζει την τελική εμφάνιση της εφαρμογής. Πως χρησιμοποιούνται οι εντολές αυτές και ποιους περιορισμούς παρουσιάζουν.

5) ΛΕΞΙΚΟ ΤΩΝ ΕΝΤΟΛΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΩΝ ΤΗΣ ΕΦΑΡΜΟΓΗΣ Αναφορά σε όλες τις εντολές και τις συναρτήσεις που εμφανίζονται στο παράδειγμα της εφαρμογής. Δομή του προγράμματος σε σχεδιάγραμμα και ανάλυση των λει- τουργιών του ,με βάση τις ανάγκες που δημιουργήθηκε.

ΕΠΙΛΟΓΟΣ

ΒΙΒΛΙΟΓΡΑΦΙΑ

Page 3: Προγραμματισμός σε Clipper - 1
Page 4: Προγραμματισμός σε Clipper - 1

ΕΙΣΑΓΩΓΗ ΣΤΟΝ CLIPPER

Η αρχική ιδέα για την δημιουργία του Clipper, σαν ανεξάρτητη γλώσσα προγραμματισμού που θα ασχολείται με την διαχείριση των εγγραφών σε βάσεις δεδομένων, ανήκει στους προγραμματιστές της περασμένης δεκαετίας, που χρησιμοποιούσαν σαν εργαλείο ανάπτυξης και διαχείρισης των αρχείων τους, την DBase III+. Το πρόγραμμα αυτό αποτελούσε τον πιο διαδεδομένο τρόπο δημιουρ-γίας μιας βάσης δεδομένων και ασφαλούς διαχείρισης των περιεχομένων της. Η Dbase III+ αποτε-λούσε ένα από τα πλέον δημοφιλή προγράμματα στα μέση της δεκαετίας του ’80 και διέθετε ένα σχετικά μικρό, αλλά δυναμικό και αξιόπιστο σετ εντολών, σχεδιασμένο για να προγραμματίζει τις βασικές λειτουργίες ενός αρχείου με οσοδήποτε μεγάλο αριθμό εγγραφών.Εκτός από το περιβάλλον που προσέφερε στον προγραμματιστή, διέθετε και την δυνατότητα να μπορεί να προγραμματίσει τα αρχεία που χρησιμοποιούσε. Γεγονός είναι ότι δεν ήταν ένα εύκολο

Page 5: Προγραμματισμός σε Clipper - 1

πρόγραμμα, από πλευράς ευχρηστίας, αλλά ήταν εξαιρετικά χρήσιμο και πρακτικό για όσους είχαν τις βασικές γνώσεις τόσο των λειτουργικών συστημάτων, όσο και των αρχών του προγραμματισμού και των χαρακτηριστικών των αρχείων που λέγονται βάσεις δεδομένων. Βάση δεδομένων είναι ένα αρχείο με συγκεκριμένη δομή στο εσωτερικό του υπολογιστή, που περιέχει έναν αριθμό από ομοειδή δεδομένα που λέγονται εγγραφές. Κάθε εγγραφή έχει την ίδια δομή με οποιαδήποτε άλλη, αλλά περιέχει διαφορετικά δεδομένα και διαφέρει μόνο ως προς τον αριθμό της, δηλαδή ως προς την θέση που έχει μέσα στο αρχείο. Με το πέρασμα του χρόνου παρουσιάστηκε η ανάγκη να υπάρχει μεγαλύτερος έλεγχος των δεδομένων και έτσι δημιουργήθηκαν καινούργιες εντολές, ώσπου τελικά κατασκευάστηκε ένα ανεξάρτητο πρόγραμμα με αυτές τις λειτουργίες ,ο Clipper.Ο Clipper δημιουργήθηκε από την αμερικανική εταιρεία Nantucket, και παρουσιάστηκε για πρώτη φορά τον χειμώνα του 1984. Πολλοί προγραμματιστές άρχισαν να μετατρέπουν κώδικα της Dbase σε Clipper και να αναγνωρίζουν τα πλεονεκτήματα που προσέφερε, όπως ήταν οι συναρτήσεις που μπορούσε να ορίσει ο προγραμματιστής, ανάλογα με τις ανάγκες των αρχείων που διαχειριζόταν, και η πληθώρα των βάσεων δε-δομένων που μπορούσε να έχει ταυτόχρονα ανοιχτά στην μνήμη. Ακολούθησε η περίφημη έκδοση Summer 87,όπου ο Clipper έγινε γνωστός σε όλο τον κόσμο των προγραμματιστών και η ουσιαστική διαφοροποίησή του από την Dbase III+.Η επόμενη έκδοση του προγράμματος, που καθιέρωσε τον Clipper σαν μια από τις ικανότερες και αποτελεσματικότερες γλώσσες προγραμματισμού, ήταν η 5.01,που έγινε ιδιαίτερα χρήσιμη για κάθε είδους εφαρμογές και προσέλκυσε προγραμματιστές από την C, την Pascal και την Cobol. Η συνεργασία του Clipper με όλα αυτά τα προγραμματιστικά εργαλεία και η δυνατότητά του να ενσωματώνει κώδικα από αυτές τις γλώσσες προγραμματισμού στις εφαρμογές του, τον έκανε πια γνωστό και χρήσιμο σε όλο τον κό-σμο των ηλεκτρονικών υπολογιστών, που ασχολούνταν με την ανάπτυξη εφαρμογών και ειδικά με τις βάσεις δεδομένων.Πολλοί προγραμματιστές, που δεν γνωρίζουν τον Clipper πρακτικά, αναρωτιούνται αν τελικά είναι ένα πρόγραμμα αποκλειστικά για διαχείριση βάσεων δεδομένων ή μια γλώσσα προγραμματισμού ή ακόμα ένα πλήρες σύστημα ανάπτυξης εφαρμογών. Η απάντηση καλύπτει και τις τρεις δυνατότητες. Ο Clipper προέρχεται από ένα πρόγραμμα διαχείρισης βάσης δεδομένων, την Dbase III+,και χρησιμοποιεί σε όλες τις εκδόσεις του, όλες τις εντολές της. Η δομή των αρχείων που υποστηρίζει και είναι σε θέση να χρησιμοποιήσει έχει επεκταθεί και περιλαμβάνει σήμερα όλους τους τύπους βάσεων δεδομένων που υπάρχουν και λειτουργούν σε κάθε είδους υπολογιστικό σύστημα. Από την άλλη μεριά ο Clipper διαθέτει ένα σετ εντολών και συναρτήσεων, στην έκδοση 5.3 τουλάχιστον 500,που δίνουν πλήρη έλεγχο του hardware του υπολογιστή στον προγραμματιστή που τον χρησιμοποιεί.Η άψογη συνεργασία του με την γλώσσα Assembly δείχνει την ικανότητα του Clipper να χρησιμοποιεί τα πλεονεκτήματα που παρουσιάζει σε λειτουργίες χαμηλού επιπέδου, (low level functions), και να ενσωματώνει στις εφαρμογές του την αξιόπιστη χρήση των περιφερειακών συσκευών του υπο-λογιστή, ( οθόνη, πληκτρολόγιο, ποντίκι ), αλλά και της κεντρικής μονάδας, (σκληρός δίσκος, οδηγοί δισκετών, επεκτεταμένη μνήμη). Σαν γλώσσα προγραμματισμού ο Clipper έχει απλό συντακτικό και ομοιομορφία στην χρήση των παραμέτρων στις συναρτήσεις που περιλαμβάνει. Όμως προϋποθέτει βασικές γνώσεις των αρχών του προγραμματισμού και των βάσεων δεδομένων. Ένα πολύ σημαντικό πλεονέκτημα του Clipper είναι ότι προσφέρει την δυνατότητα για πολλά στυλ προγραμματισμού, είτε αυτός είναι δομημένος, (procedural), είτε αντικειμενοστραφής, (object oriented). Ακόμη υποστηρίζει, χωρίς να παρουσιάζει ιδιαίτερα προβλήματα, τον ανοιχτό προγραμματισμό, την ανάπτυξη κώδικα με οποιαδήποτε τεχνική χρησιμοποιεί ο συγγραφέας που αναπτύσσει μια εφαρμογή. Είτε εφαρμόζεται η τεχνική από πάνω προς τα κάτω, (up – down), είτε η τεχνική από κάτω προς τα πάνω, (bottom-up), ο κώδικας μπορεί να μεταγλωττιστεί και να συνδυαστεί με επιτυχία στο τελικό πρόγραμμα. Η πρώτη τεχνική, από πάνω προς τα κάτω, (up – down), αναπτύσσει κώδικα ξεκινώντας από τη δημιουργία της βασικής δομής του προγράμματος και προχωρά στην κατασκευή με ξεχωριστά κομμάτια κώδικα των επιμέρους διαδικασιών της εφαρμογής. Δίνει μεγάλη σημασία στην ανάλυση του αλγορίθμου του προγράμματος και ακολουθεί την δομή του κατά την διάρκεια της συγγραφής του κώδικα. Η άλλη τεχνική, από κάτω προς τα πάνω, (bottom-up), είναι πιο σύγχρονη και πιο ελεύθερη στη φιλοσοφία ανάπτυξης του κώδικα ενός προγράμματος. Απαιτεί εμπειρία και μεγάλη εξοικείωση με την συγγραφή πολύπλοκων εφαρμογών, αφού με αυτό τον τρόπο γράφεται πρώτα ο κώδικας των επιμέρους διαδικασιών και μετά γίνεται η τελική πρόσθεση των κομματιών για να ολοκληρωθεί η εφαρμογή. Φαίνεται ότι για να αναπτύσσεις κώδικα με αυτόν τον τρόπο, πρέπει να έχεις στο μυαλό την δομή της

Page 6: Προγραμματισμός σε Clipper - 1

εφαρμογής καθώς και ένα μεγάλο μέρος από τον έλεγχό της, δηλαδή κυρίως τα πιθανά προβλήματα που μπορεί να παρουσιαστούν κατά της διάρκεια της δημιουργίας της. Όπως και να γράφει κανείς κώδικα όμως ,ο Clipper είναι σε θέση να αξιοποιήσει το υλικό με τον compiler που διαθέτει.Ο Clipper λοιπόν είναι ένα πλήρες σύστημα ανάπτυξης εφαρμογών, από την στιγμή που μπορεί να χρησιμοποιηθεί για την δημιουργία μεγάλων εφαρμογών από ομάδες προγραμματιστών και από το γεγονός ότι ο κώδικας που παράγεται μπορεί να επαναχρησιμοποιηθεί μελλοντικά για την συντήρηση και την βελτίωση των προγραμμάτων ή για την δημιουργία άλλων. Σημαντικό πλεονέκτημά του, είναι ότι ο compiler του Clipper μπορεί να συμπεριλάβει στις εφαρμογές του, συναρτήσεις και εντολές που αναπτύσσονται από τρίτους κατασκευαστές, από άλλες γλώσσες προγραμματισμού. Ακόμα οι εφαρμογές του Clipper χρησιμοποιούν την επεκτεταμένη μνήμη του συστήματος ή δημιουργούν ιδεατή μνήμη,(virtual memory),αν αυτό είναι απαραίτητο.Η εταιρεία Nantucket αγοράστηκε το 1992 από την Computer Associates και το επίσημο όνομα του Clipper έγινε CA-Clipper, από τα αρχικά του ονόματος της καινούργιας ιδιοκτήτριας εταιρείας. Η έκδοση του προγράμματος Clipper 5.2,που θα ασχοληθούμε σε αυτές τις σημειώσεις, περιλαμβάνει πια ένα πολύ μεγάλο αριθμό εντολών και συναρτήσεων, ώστε να χρειάζονται αρκετές ώρες μελέτης ακόμα και από έμπειρους προγραμματιστές για να αξιοποιηθούν πλήρως οι δυνατότητες του.Τελειώνοντας την εισαγωγική αναφορά στον Clipper θα θέλαμε να τονίσουμε ότι για να υπάρξει η πλήρης κατανόηση και στη συνέχεια αξιοποίηση του προγράμματος αυτού, σαν ένα εργαλείο ανάπτυξης εφαρμογών θα πρέπει να προηγηθεί η συστηματική μελέτη και προσπάθεια, ειδικά από την μεριά του αρχάριου προγραμματιστή. Σημαντικό πλεονέκτημα του Clipper είναι η ταχύτατη παραγωγή αποτελέσματος με την χρήση λίγων γραμμών κώδικα, αλλά όσο περισσότερο χρόνο επενδύσετε στην εκμάθηση της θεωρίας, τόσο λιγότερα προβλήματα θα αντιμετωπίσετε στην πρακτική εφαρμογή της δημιουργίας ενός προγράμματος.

Page 7: Προγραμματισμός σε Clipper - 1

ΕΙΣΑΓΩΓΗ ΣΤΟΝ CLIPPER

Η μεταγλώττιση ενός προγράμματος

Υπάρχουν δύο τρόποι για να υλοποιηθεί ένα πρόγραμμα στο εσωτερικό ενός υπολογιστή, για να «τρέξει» όπως λέγεται στην γλώσσα των computers.Ο ένας είναι να χρησιμοποιηθεί διερμηνευτής, (interpreter), εντολών και ο άλλος είναι να χρησιμοποιηθεί μεταγλωττιστής, (compiler). Ο πρώτος τρόπος, η διερμηνεία των εντολών, συνίσταται στην μετάφραση των εντολών του προγράμματος, μια προς μια. Κάθε φορά που ενεργοποιείται ένα πρόγραμμα με διερμηνευτή εντολών, κάθε γραμμή του κώδικα ελέγχεται ξεχωριστά και, αν δεν υπάρχουν λάθη, στέλνεται στον επεξεργαστή για εκτέλεση. Έτσι αν εντοπιστεί λάθος το πρόγραμμα σταματά, χωρίς να υλοποιούνται άλλα κομμάτια κώδικα, που είναι πιθανόν σωστά στη λειτουργία τους. Ακόμα για να επαναληφθεί το πρόγραμμα θα

Page 8: Προγραμματισμός σε Clipper - 1

διερμηνευ-τούν αναγκαστικά πάλι όλες οι γραμμές του κώδικα από την αρχή. Έχουμε δηλαδή επανάληψη της μετάφρασης των εντολών του προγράμματος και δέσμευση χώρου στην μνήμη για να συμβεί αυτό.Ο μεταγλωττιστής ελέγχει τον κώδικα μια μόνο φορά για λάθη και αν τα εντοπίσει δεν σταματά την ροή του προγράμματος. Δεν μετατρέπει κώδικα σε εκτελέσιμο πρόγραμμα, αλλά σε ένα ενδιάμεσο τύπο αρχείων, τα αρχεία object,που έχουν την προέκταση *.obj. Στην μεταγλώττιση γίνεται έλεγχος όλων των γραμμών του προγράμματος και κατόπιν εμφανίζεται μια συνολική αναφορά με τα λάθη που πιθανόν εντοπίστηκαν. Όμως το σημαντικότερο είναι ότι οι γλώσσες προγραμματισμού που χρησιμοποιούν compilers παράγουν ανεξάρτητα εκτελέσιμα αρχεία, τα αρχεία τύπου executable,που έχουν προέκταση *.exe. Για την ακρίβεια πρώτα δημιουργούνται τα αρχεία object και μετά γίνεται η διασύνδεση, (linking), με τις βιβλιοθήκες της γλώσσας και άλλα απαραίτητα αρχεία, όπως τα αρχεία κεφαλίδων,(header files).

ΔΙΑΔΙΚΑΣΙΑ ΔΗΜΙΟΥΡΓΙΑΣ ΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ ΜΕ ΜΕΤΑΓΛΩΤΤΙΣΗ

Ενέργεια Τύπος αρχείου Προέκταση

Συγγραφή κώδικα αρχείο εντολών και συναρτήσεων *.prg

Μεταγλώττιση κώδικα αρχείο αντικείμενο *.obj

Διασύνδεση αρχείου αντικειμένου εκτελέσιμο αρχείο *.exe

Διάγραμμα 1: Στάδια δημιουργίας ενός προγράμματος με compiler.

ΔΙΑΔΙΚΑΣΙΑ ΔΗΜΙΟΥΡΓΙΑΣ ΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ ΜΕ ΜΕΤΑΓΛΩΤΤΙΣΗ

Ενέργεια Πρόγραμμα Τύπος αρχείου Προέκταση

Writing code Editor Files (functions and orders) *.prg Compiling code Compiler Object Files *.obj Linking code with libraries Linker Executable Files *.exe

Διάγραμμα 2: Στάδια δημιουργίας ενός προγράμματος με compiler.

Στην προηγούμενη σελίδα παραθέτουμε τα λογικά διαγράμματα της δημιουργίας ενός προγράμματος με μία σύγχρονη γλώσσα προγραμματισμού, που διαθέτει και μεταγλωττιστή εντολών, (compiler), και διασυνδετή αρχείων, (linker). Δημιουργήσαμε δυο διαγράμματα, το ένα στα ελληνικά και το άλλο στα αγγλικά, γιατί στην αρχή θα πρέπει ο προγραμματιστής να κατανοήσει την θεωρία που βρίσκεται στο Διάγραμμα 1,αλλά πρακτικά θα χρησιμοποιήσει την ορολογία του Διαγράμματος 2.Ο compiler του Clipper λέγεται Clipper.exe και καλείται με το όνομα αυτό ενώ ο διασυνδετής που χρησιμοποιεί λέγεται RTLink.exe και καλείται επίσης με αυτό το όνομα. Για παράδειγμα ας υποθέσουμε ότι θέλουμε να μεταγλωττίσουμε το αρχείο main.prg, που έχουμε μόλις τελειώσει και περιέχει κώδικα σε Clipper. Δίνουμε την παρακάτω εντολή, από την προτροπή εντολών του MS-DOS, που περιλαμβάνει στην διαδρομή το directory που έχουμε εγκαταστήσει τον Clipper,το CLIPPER5,και το directory που περιέχει τον compiler και τον linker, το BIN:

C:\CLIPPER5\BIN > CLIPPER _ MAIN

Page 9: Προγραμματισμός σε Clipper - 1

Το σύμβολο _ , (η κάτω παύλα), σημαίνει ότι πρέπει να δώσουμε ένα κενό, πατώντας το spacebar, ανάμεσα στο όνομα του compiler και στο όνομα του αρχείου. Προσοχή, μην γράφετε main.prg,μην δίνετε και την προέκταση του αρχείου γιατί ο compiler δεν ενεργοποιείται και επιστρέφει μήνυμα λάθους. Μετά το Enter σε αυτή την εντολή ο Clipper θα φτιάξει το αρχείο αντικείμενο, το object αρχείο, που περιέχει όλο τον κώδικα μεταφρασμένο σε γλώσσα μηχανής. Για την διασύνδεση με τις βιβλιοθήκες και την δημιουργία του τελικού εκτελέσιμου αρχείο δίνουμε:

C:\CLIPPER5\BIN > RTLINK _ FI _ MAIN

Η παράμετρος FI σημαίνει FILE και λέει στον διασυνδετή ποια αρχεία αντικείμενα να διασυνδέσει, (εδώ το αρχείο object με όνομα main.obj). Το αρχείο που μόλις φτιάξαμε έχει το όνομα Main.exe και μπορούμε να δούμε τις λειτουργίες του με την εντολή:

C:\CLIPPER5\BIN > MAIN

Κάθε επεξεργαστής διαθέτει το δικό του σετ εντολών, που αναπαρίσταται στην γλώσσα προγραμ-ματισμού Assembly,αυτό που λέμε εντολές σε γλώσσα μηχανής. Ο compiler μεταφράζει το αρχείο που έχουμε δημιουργήσει με τον Editor, σε γλώσσα μηχανής και το παραγόμενο αρχείο είναι το αρχείο αντικείμενο, το object file.Το αρχείο που μεταφράζει ο compiler βρίσκεται με την μορφή χαρακτήρων ASCII, συνήθως αποθηκευμένο στον σκληρό δίσκο του ηλεκτρονικού υπολογιστή.Η μεταγλώττιση ενός προγράμματος είναι αναγκαία, γιατί με αυτόν τον τρόπο αποφεύγεται το γεγονός να επαναληφθεί ο έλεγχος του κώδικα για λάθη, σπαταλώντας τους πόρους του συστήματος, όπως ο χρόνος απασχόλησης του επεξεργαστή και η διαθέσιμη μνήμη. Ένας πολύ σημαντικός λόγος είναι και η αύξηση της ταχύτητας του προγράμματος, αφού ένα μεταγλωττισμένο πρόγραμμα τρέχει μέχρι και 10 ή περισσότερες φορές γρηγορότερα, από ένα πρόγραμμα που διερμηνεύεται.

Το περιβάλλον ανάπτυξης του Clipper

Με τον όρο «περιβάλλον ανάπτυξης» εννοούμε ποια προγράμματα χρησιμοποιεί ένα σύστημα ανάπτυξης εφαρμογών για να δημιουργήσει το τελικό αποτέλεσμα μιας προγραμματιστικής προσπάθειας. Λέμε προσπάθεια, γιατί η κατασκευή μιας εφαρμογής περιλαμβάνει αρκετά και διαφορετικά στάδια, που χρειάζονται επιμέρους προγράμματα για να υλοποιηθούν. Ο Clipper 5.2 δεν διαθέτει ένα ενιαίο περιβάλλον ανάπτυξης, όπως η Turbo Pascal 6.0 ή η Turbo C 2.0 της Borland.Τα βοηθητικά προγράμματα διατίθενται ξεχωριστά, αλλά περιλαμβάνουν όλες τις βασικές διαδικασίες για την ολοκλήρωση μιας εφαρμογής. Μετά την εγκατάσταση του Clipper 5.2,από τις δύο δισκέτες στις οποίες διατίθεται από την Computer Associates,στον ηλεκτρονικό υπολογιστή, τα προγράμματα που διεκπεραιώνουν τις βασικές λειτουργίες αυτής της γλώσσας προγραμματισμού, βρίσκονται στο directory με το όνομα C:\CLIPPER5\BIN.Τα κυριότερα από αυτά τα προγράμματα είναι:

1) Clipper . exe : Είναι ο μεταγλωττιστής, (compiler), του Clipper,που μετατρέπει τον κώδικα από την μορφή που έχει σε ASCII χαρακτήρες σε γλώσσα μηχανής, που περιλαμβάνεται στο object αρχείο.2) RTLink . exe : Ο διασυνδετής, (linker), του Clipper,που συνδέει το object αρχείο με τις απαραίτητες βιβλιοθήκες και άλλα αρχεία με κώδικα.3) RMake . exe : Πρόγραμμα που αυτοματοποιεί τις παραπάνω δύο διαδικασίες, χρη- σιμοποιώντας ειδικά αρχεία με δέσμες εντολών, (*.RMK).4) CLD . exe : Αυτός είναι ο αποσφαλματωτής, (debugger), του Clipper,που χρησι- μεύει για τον εντοπισμό και την επίλυση σφαλμάτων στον κώδικα.5) DBU . exe : Ένα πρόγραμμα που κατασκευάζει τις βάσεις δεδομένων που χρησι- μοποιεί ο Clipper,τα αρχεία *.DBF.6) PE . exe : Ένας μικρός αλλά εύχρηστος και ικανός κειμενογράφος, για να γρά- ψουμε τον κώδικα του προγράμματος.7) RL . exe : Ένα βοηθητικό πρόγραμμα που κατασκευάζει αρχεία για τις εφαρμο-

Page 10: Προγραμματισμός σε Clipper - 1

γές του Clipper,με συγκεκριμένες λειτουργίες.8) DBT 52. exe : Πρόγραμμα ενημέρωσης των βάσεων δεδομένων που ήδη έχουμε δημιουργήσει, είτε με την DBU είτε με κάποια έκδοση της DBase.

Τρία από αυτά τα βοηθητικά προγράμματα, η DBU, ο RL και ο PE,διατίθενται μαζί με τον πηγαίο κώδικα, αφού είναι εφαρμογές που έχουν γραφεί σε Clipper. Είναι πολύ σημαντικό αν σκεφθεί κανείς ότι η DBU είναι ένα πρόγραμμα που κατασκευάζει βάσεις δεδομένων και ο PE είναι ένας πλήρης κειμενογράφος. Ο αρχάριος, αλλά και ο έμπειρος προγραμματιστής, μπορούν να πειραματιστούν πάνω σε κώδικα που είναι διαθέσιμος και αφορά ολοκληρωμένες εφαρμογές.

Εγκατάσταση του προγράμματος

Για να εγκαταστήσετε τον Clipper 5.2 στον υπολογιστή σας χρειάζεστε ελεύθερο χώρο τουλάχιστον 7 MB, (MegaBytes), αφού το κυρίως πρόγραμμα καταλαμβάνει περίπου 4,25 ΜΒ και ο Norton Guider περίπου 1,9 ΜΒ. O Norton Guider είναι ένα ηλεκτρονικό βιβλίο – λεξικό που περιλαμβάνει όλες τις εντολές και τις συναρτήσεις του Clipper, μαζί με σύντομα παραδείγματα χρήσης τους σε κώδικα. Το πρόγραμμα αυτό συνοδεύει τον Clipper 5.2 στις δύο δισκέτες εγκατάστασης και θεωρείται μέρος του πακέτου, αφού τα δικαιώματά ανήκουν στην εταιρεία Computer Associates.O CA – Clipper 5.2 περιλαμβάνει 145 αρχεία σε 11 καταλόγους, (directories, αν χρησιμοποιείτε MS-Dos ή folders αν δουλεύετε με τα Windows 95 ή 98). Ο Norton Guider περιλαμβάνει μόνο 7 αρχεία, αλλά με μεγάλο μέγεθος, αφού αποτελούν βάσεις δεδομένων για όλα τα χαρακτηριστικά της γλώσσας, όπως οι εντολές και οι συναρτήσεις, τα μηνύματα λάθους του compiler και των άλλων προγραμμάτων, η λειτουργία του Clipper σε δίκτυο, συγκρίσεις μεταξύ των εκδόσεων του προγράμματος κ.ά.Για να υλοποιηθεί ο Clipper στον υπολογιστή σας χρειάζεται το λιγότερο τα 512 ΚΒ, (KiloBytes), της συμβατικής μνήμης,(conventional memory).Ακόμα πρέπει η έκδοση του MS-DOS που χρησιμοποιείτε να είναι από την 3.1 και μεταγενέστερη και περιλαμβάνει τους παρακάτω καταλόγους και υποκαταλόγους :

C:\CLIPPER5\ BIN : Περιέχει τα εκτελέσιμα αρχεία του πακέτου, που αναφέραμε στο περιβάλλον ανάπτυξης του Clipper. C:\CLIPPER5\OBJ : Περιέχει τα object αρχεία, που χρησιμοποιούνται σαν συμπληρωματικός κώδικας, στις εφαρμογές του Clipper.C:\CLIPPER5\LIB : Περιέχει τις βιβλιοθήκες του Clipper και αρχεία που συν- δέουν τα προγράμματα με κώδικα σε C και Assembly.C:\CLIPPER5\INCLUDE : Εδώ βρίσκονται τα αρχεία κεφαλίδων,header files,που πε- ριέχουν ορισμούς για εντολές του Clipper.C:\CLIPPER5\SOURCE : Το directory αυτό περιλαμβάνει τον πηγαίο κώδικα από ε- φαρμογές και παραδείγματα σε Clipper.C:\CLIPPER5\SOURCE \RL : Η εφαρμογή RL.ΕΧΕ που φτιάχνει φόρμες και ετικέτες για προγράμματα του Clipper,με τον πηγαίο κώδικα και ό- λα τα απαραίτητα αρχεία.C:\CLIPPER5\SOURCE \PE : Η εφαρμογή RΕ.ΕΧΕ, ο κειμενογράφος του Clipper,με τον πηγαίο κώδικα που έχει χρησιμοποιηθεί.C:\CLIPPER5\SOURCE \DBU : Η εφαρμογή DBU.ΕΧΕ του Clipper,που κατασκευάζει τις βάσεις δεδομένων και τα ευρετήρια τους, με τον πηγαίο κώδικα και λα τα απαραίτητα αρχεία.C:\CLIPPER5\SOURCE \SYS : Ο κατάλογος αυτός περιέχει αρχεία που συνδέουν τον Clipper με τα διάφορα λειτουργικά συστήματα, ώστε να λειτουργούν σωστά οι εφαρμογές του.C:\CLIPPER5\SOURCE \SAMPLE : Μικρά προγράμματα – παραδείγματα σε Clipper που μπορεί να μελετήσει ένας αρχάριος προγραμματιστής.C:\CLIPPER5\PLL : Περιέχει τις προσυνδεδεμένες βιβλιοθήκες,prelinked libra- ries του Clipper,με εντολές και συναρτήσεις που χρησιμο-

Page 11: Προγραμματισμός σε Clipper - 1

ποιούνται στις εφαρμογές του.

Για να δουλέψετε την πρώτη σας εφαρμογή σε Clipper, θα ήταν χρήσιμο να δημιουργήσετε ένα ξεχωριστό κατάλογο κάτω από την δομή του C:\CLIPPER5, με κάποιο ενδεικτικό όνομα π.χ. C:\CLIPPER5\TEST ή C:\CLIPPER5\EFARMOGH, ώστε τα αρχεία προγράμματος, (*.PRG), και οι βάσεις δεδομένων σας, (*.DBF), να μην συγχέονται με άλλα που πιθανόν περιλαμβάνονται ήδη στο δίσκο σας. Για να ενεργοποιήσετε τον compiler του Clipper ή τον διασυνδετή, linker, τον RTLink, προσθέστε στη διαδρομή αναζήτησης αρχείων, (PATH), του MS-DOS, την γραμμή : C:\CLIPPER5\BIN; και θα ενεργοποιούνται αυτόματα κάθε φορά που θα καλείται αυτά τα προγράμματα από την προτροπή εντολών, (PROMPT), C:\>.

Page 12: Προγραμματισμός σε Clipper - 1

ΤΑ ΣΤΟΙΧΕΙΑ ΤΟΥ CLIPPER

Αρχεία που υποστηρίζει ο Clipper

Τα αρχεία που χρησιμοποιεί ο CA - Clipper 5.2 είναι αρκετά κοινά με αυτά της Dbase III+,αλλά υπάρχουν και είδη αρχείων που χρησιμοποιούνται μόνο από τις καινούργιες εφαρμογές του. Το είδος των αρχείων του Clipper δείχνει και τις δυνατότητες που έχει στην ακριβή διαχείριση των εγγραφών των βάσεων δεδομένων. Από την έκδοση 5.2 του 1993,ο Clipper χρησιμοποιεί ένα καινούργιο σύστημα για να μπορεί να χρησιμοποιεί και βάσεις δεδομένων που έχουν δημιουργηθεί με άλλα προγράμματα. Το σύστημα αυτό λέγεται Οδηγοί Αντικαταστάσιμων Βάσεων Δεδομένων, (Replaceable Database Drivers ), και πρόκειται για αρχεία – οδηγούς, drivers, που συνδέουν τις εφαρμογές του Clipper με αυτές τις βάσεις δεδομένων. Εν συντομία αναφερόμαστε στο σύστημα

Page 13: Προγραμματισμός σε Clipper - 1

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

1) Αρχεία Δεδομένων

Τα εξ’ ορισμού αρχεία που υποστηρίζει ο Clipper είναι τα ίδια με τα αρχεία της Dbase,τα Data Base Files,που έχουν προέκταση *.DBF. Τα αρχεία αυτά περιέχουν τα δεδομένα, τις εγγραφές της βάσης δεδομένων. Τα δεδομένα μέσα σε αυτά τα αρχεία μπορούν να έχουν πέντε διαφορετικές μορφές, μπορεί δηλαδή να είναι :

Είδος πεδίων σε αρχείο *.DBF Fields into a Data Base File

Χαρακτήρων Character Αριθμητικά Numeric Ημερομηνίας Date Λογικά Logical Κειμένου Memo

Διάγραμμα 3: Είδη πεδίων σε μία βάση δεδομένων *.DBF

όπως ακριβώς και στα αρχεία *.DBF της Dbase.Ο αριθμός των πεδίων που μπορούμε να ορίσουμε σε ένα αρχείο *.DBF είναι πολύ μεγάλος, υπερβαίνει τα 256, αλλά αυτό είναι πρακτικά αδύνατο, γιατί για να κατασκευάσουμε μια βάση δεδομένων χρησιμοποιούμε συνήθως 20 με 30 πεδία, και όχι πάντως πάνω από 40.Η περίπτωση να ορίσουμε περισσότερα πεδία σε ένα αρχείο θεωρείται εξαιρετικά σπάνια για να τη συμπεριλάβουμε στην πράξη. Σε περιβάλλον δικτύου και σε μια εφαρμογή που αφορά τα δεδομένα ενός μεγάλου δημόσιου οργανισμού, εκατομμύρια εγγραφές, ίσως να μπορεί κάποιος να ορίσει ένα παρόμοιο αρχείο. Όχι όμως σε μια εφαρμογή για μια επιχείρηση ή σε ένα συνηθισμένο πρόγραμμα αρχειοθέτησης εγγραφών, που είναι και οι πιο κοινές περιπτώσεις εφαρμογών που εξετάζουν αυτές οι σημειώσεις.Τα πεδία τύπου character και memo μπορούν να έχουν μέγεθος μέχρι 64 ΚΒ, (KiloBytes), που σημαίνει, κάνοντας έναν πρόχειρο υπολογισμό, ότι χωράνε περίπου 64.000 γράμματα, γύρω στις 1000 γραμμές κειμένου και περίπου 40 σελίδες για μία εγγραφή. Για ένα πεδίο character το μέγεθος είναι υπερβολικό αλλά για ένα πεδίο memo, το κείμενο αυτό είναι υπεραρκετό για να καλύψει όλες τις απαραίτητες πληροφορίες μιας εγγραφής μέσα σε οποιαδήποτε βάση δεδομένων. Κάθε αρχείο *.DBF του Clipper, μπορεί να περιέχει μέχρι 2.000.000.000,δισεκατομμύρια, εγγραφές και αυτό δείχνει την μεγάλη του χρησιμότητα στην ανάπτυξη πολύ μεγάλων εφαρμογών.

2) Ευρετήρια

Ευρετήρια είναι τα αρχεία που περιέχουν την ταξινόμηση των εγγραφών μιας βάσης δεδομένων, ανάλογα με τον τρόπο που έχουμε επιλέξει κατά την δημιουργία τους, κατά όνομα, επίθετο, πατρώνυμο, ηλικία, ημερομηνία γέννησης, επάγγελμα κ.λ.π. Δεν περιέχουν τις ίδιες τις εγγραφές, αλλά μια συσχέτιση τέτοια ώστε να είναι γρηγορότερη η αναζήτηση κάποιας εγγραφής. Ο Clipper υποστηρίζει δύο τύπους ευρετηρίων για τα αρχεία των δεδομένων του : α) Τα αρχεία τύπου *.NTX, που είναι τα ευρετήρια για τις βάσεις δεδομένων που κατασκευάζονται με την DBU,μέσα από το περιβάλλον του Clipper,και β) Τα αρχεία τύπου *.NDX,που είναι τα ευρετήρια που αφορούν τις βάσεις δεδομένων που δημιουργήθηκαν με κάποια έκδοση την DBase.Τα αρχικά των προεκτάσεων προέρχονται από την λέξη index,που σημαίνει ευρετήριο. Στον CA – Clipper 5.2 μπορούμε να ταξινομήσουμε εγγραφές, να δημιουργήσουμε ευρετήρια με βάση πεδία ημερομηνίας,date,πράγμα που δεν ήταν δυνατό να γίνει σε προηγούμενες εκδόσεις της γλώσσας.

Page 14: Προγραμματισμός σε Clipper - 1

3) Αρχεία κειμένου

Κάθε αρχείο βάσης δεδομένων τύπου *.DBF μπορεί να περιέχει κάποιον ή και όλους τους τύπους πεδίων που αναφέραμε στο Διάγραμμα 3.Αν περιέχει όμως και πεδία κειμένου,memo,τότε δημιουργείται αυτόματα και ένα άλλο αρχείο με την προέκταση *.DBT,Data Base Text,που περιέχει αποκλειστικά τα πεδία memo που σχετίζονται με τις εγγραφές του αρχείου *.DBF. Ένα μειονέκτημα που παρουσιάζουν αυτά τα αρχεία είναι ότι οι αν διαγραφούν εγγραφές από το αρχείο .DBF δεν διαγράφονται και τα πεδία κειμένου που αντιστοιχούν σε αυτές, στο αρχείο *.DBT. Για να γίνει αυτό χρειάζεται η ανάπτυξη επιπλέον κώδικα, που αφαιρεί τα πεδία κειμένου που δεν είναι πλέον ούτε χρήσιμα, αλλά ούτε και προσπελάσιμα. Η συντήρηση των αρχείων κειμένου είναι απαραίτητη γιατί τα αρχεία αυτά τείνουν να μεγαλώνουν πολύ γρήγορα και καταλαμβάνουν αρκετό χώρο στο δίσκο, της τάξης των ΜΒ,(MegaBytes).

4) Αρχεία κεφαλίδων

Τα αρχεία αυτά χρησιμοποιούνται βοηθητικά ως προς την τελική δημιουργία του εκτελέσιμου αρχείου μιας εφαρμογής σε Clipper.Περιέχουν ορισμούς εντολών και συναρτήσεων, ή κωδικών πληκτρολόγησης, που έχουν απλουστευτεί ως προς το συντακτικό τους, έτσι ώστε να γίνεται ευκολότερη η χρήση τους μέσα στον κώδικα που αναπτύσσεται για μια εφαρμογή. Ένα παράδειγμα τέτοιου αρχείου βρίσκεται στο Παράρτημα των σημειώσεων αυτών, και είναι το αρχείο INCLUDE.CH, που περιέχει ορισμούς πληκτρολογήσεων. Στην αριστερή στήλη έχουμε τους ορισμούς του Clipper και στην δεξιά τους αριθμούς που αντιστοιχούμε σε αυτούς τους ορισμούς. Με αυτόν τον τρόπο δεν είμαστε αναγκασμένοι να πληκτρολογούμε το όνομα κάθε πλήκτρου με τον πλήρη ορισμό του, αλλά μόνο με τον αντίστοιχο αριθμό που ορίζουμε σε αυτό το αρχείο. Τα αρχεία τέτοιου τύπου λέγονται αρχεία κεφαλίδων, header files, έχουν προέκταση *.CH, και συμπεριλαμβάνονται στην τελική διασύνδεση του object αρχείου με τις βιβλιοθήκες του Clipper. Η προέκταση *.CH σημαίνει Clipper Header και δημιουργήθηκε για να ξεχωρίζουν τα αρχεία αυτά από τα αντίστοιχα αρχεία κεφαλίδων της C, που έχουν προέκταση μόνο το γράμμα *. H.Σε όλες τις εκδόσεις του Clipper,ο προγραμμα-τιστής έχει την δυνατότητα να ορίζει τα δικά του αρχεία κεφαλίδων και να μετατρέπει το όνομα των εντολών του προγράμματος σε άλλα που επιθυμεί ή που πιθανόν χρειάζεται για την ευκολότερη σύνταξη του κώδικα του.

5) Αρχεία μεταβλητών

Ο Clipper δίνει την δυνατότητα να αποθηκεύονται οι τιμές των μεταβλητών, που βρίσκονται στην μνήμη, σε ειδικά αρχεία που έχουν την προέκταση *.ΜΕΜ. Τα αρχεία αυτά κρατούν τιμές για τις μεταβλητές, κατά την διάρκεια μιας διαδικασίας του προγράμματος, ενώ αν αυτές αλλάξουν κατά την συνέχιση της ροής της εφαρμογής, οι τιμές αυτές δεν επηρεάζονται. Η λειτουργία αυτή είναι πολύ χρήσιμη για προγράμματα που εκτελούν υπολογισμούς σε διάφορα στάδια, ενώ παράλληλα είναι απαραίτητο να κρατάνε τα ενδιάμεσα αποτελέσματα που προκύπτουν. Η αποθήκευση των μεταβλητών μνήμης είναι μια τεχνική που προέρχεται, όπως και πολλές άλλες από αυτές που χρη-σιμοποιεί ο Clipper,από την DΒase. Όμως δεν υποστηρίζεται από τους καινούργιους προγραμματιστές του Clipper,γιατί τα αρχεία αυτά κρατούν τιμές μόνο για μεταβλητές τύπου PRIVATE και PUBLIC,που χαρακτηρίζονται ως παλαιού τύπου. Από την έκδοση του Clipper 5 και μετά, χρησιμοποιούνται περισσότερο οι αντίστοιχες μεταβλητές τύπου LOCAL και STATIC,γιατί καταλαμβάνουν λιγότερο χώρο στην μνήμη και ισχύουν για ορισμένα κομμάτια κώδικα, ενώ μετά την διεκπεραίωση της διαδικασίας που «βλέπουν»,αποδεσμεύεται ο χώρος που καταλαμβάνουν στη RAM.

6) Αρχεία ετικετών και αναφορών

Τα αρχεία αυτά δημιουργούνται από το πρόγραμμα RL.EXE που συμπεριλαμβάνεται στο πακέτο του CA - Clipper 5.2.Οι ταχυδρομικές ετικέτες είναι αρχεία που περιέχουν σε μορφή κάρτας, τα στοιχεία των παραληπτών και χρησιμοποιούνται έτοιμες από επαγγελματικά προγράμματα. Έχουν την

Page 15: Προγραμματισμός σε Clipper - 1

προέκταση *.LBL από τα γράμματα της λέξης Label και μοιάζουν με τα αρχεία αναφορών, που έχουν την προέκταση *.FRM, από την λέξη Form. Τα αρχεία αναφορών έχουν μια συγκεκριμένη δομή, που συμπληρώνεται από τα στοιχεία που επιθυμεί ο χρήστης. Και αυτά τα αρχεία ορίζονται στην DΒase, αλλά δεν επικοινωνούν με προϊόντα άλλων κατασκευαστών, όπως αυτά του Clipper.

7) Αρχεία κώδικα

Είναι τα σημαντικότερα αρχεία, μαζί με τα αρχεία δεδομένων, αφού περιέχουν τον πηγαίο κώδικα των προγραμμάτων του Clipper. Τα αρχεία αυτά δημιουργούνται με κάποιον κειμενογράφο, editor, και αποθηκεύονται με την προέκταση *.PRG,από τα γράμματα της λέξης program. Περιέχουν κείμενο με ASCII χαρακτήρες, και όλες τις διαδικασίες, ανεξάρτητα από την σειρά με την οποία έχουν γραφεί στο αρχείο. Δεν υπάρχει όριο για τον αριθμό των διαδικασιών, που περιλαμβάνονται σε ένα αρχείο κώδικα.

8) Άλλοι τύποι αρχείων

Με το σύστημα RDD, ο Clipper είναι σε θέση να χρησιμοποιήσει βάσεις δεδομένων από τρίτους κατασκευαστές. Τα αρχεία - οδηγοί, (drivers), που περιλαμβάνονται σε βιβλιοθήκες και ο τύπος των αρχείων που ανοίγουν, φαίνονται παρακάτω :

Αρχεία - Οδηγοί Τύπος αρχείων Αρχεία - Οδηγοί Τύπος αρχείων

DBFCDX.LIB *.IDX / *.CDX DBFNTX.LIB *.NTX DBFNDX.LIB *.NDX DBPX.LIB *.PDX DBFMDX.LIB *.MDX

Διάγραμμα 4 : Βάσεις δεδομένων και drivers που χρησιμοποιεί ο Clipper.

Μεταβλητές μνήμης

Ο Clipper χρησιμοποιεί τρεις τύπους μεταβλητών : τις μεταβλητές μνήμης, τους πίνακες, και τις μεταβλητές πεδίων. Οι μεταβλητές μνήμης, (memory variables), διακρίνονται σε διάφορα είδη, ανάλογα με το εύρος του κώδικα για τον οποίο ισχύουν. Οι πίνακες, (arrays), είναι και αυτοί μεταβλητές μνήμης, με την διαφορά ότι αποτελούν μεγάλα σύνολα από αυτές. Ένας πίνακας μπορεί να περιέχει μέχρι 4.096 στοιχεία, που έχουν τις ίδιες ιδιότητες με τις μεταβλητές μνήμης. Οι μεταβλητές πεδίων, (field variables), διαφέρουν στο γεγονός ότι μπορούν να ισχύουν για ολόκληρο τον κώδικα μιας εφαρμογής. Στο παράδειγμα αυτών των σημειώσεων χρησιμοποιούνται μόνο μεταβλητές μνήμης, αφού τα άλλα δύο είδη αφορούν εφαρμογές για προχωρημένους προγραμματιστές. Τα είδη των μεταβλητών μνήμης που χρησιμοποιούνται στον CA-Clipper 5.2 είναι :

1) PUBLIC ΜΕΤΑΒΛΗΤΕΣ

Οι μεταβλητές τύπου Public προέρχονται από την εποχή της DΒase, και γι’ αυτό χαρακτηρίζονται ως παλαιού τύπου. Όμως δεν είναι μόνο η έναρξη εφαρμογής τους σε προγράμματα που τις κάνει να φαίνονται παλιές, όσο και η τεχνική με την οποία δημιουργούνται στην μνήμη. Κάθε φορά που εκκινεί μια εφαρμογή σε Clipper,δημιουργείται στην μνήμη του υπολογιστή ένας πίνακας συμβόλων, τον οποίο χρησιμοποιεί η γλώσσα προγραμματισμού, για να διαχειριστεί την ροή του προγράμματος. Είναι σαν να ενημερώνεται το λειτουργικό σύστημα του υπολογιστή για το αλφάβητο μιας καινούρ-γιας γλώσσας που θα χρησιμοποιηθεί από τον επεξεργαστή. Σε αυτόν τον πίνακα συμβόλων καταχωρούνται και οι μεταβλητές Public, και κάθε φορά που γίνεται αναφορά σε αυτές και τις τιμές τους, γίνεται προσπέλαση αυτού του πίνακα. Αυτό όμως απαιτεί κάποιο χρόνο από τον κύκλο εργασιών του επεξεργαστή, και τον απασχολεί αρκετά, ώστε να μην υλοποιεί άλλα κομμάτια κώδικα της εφαρμογής. Σε παλαιότερες εποχές, όπου οι επεξεργαστές είχαν ταχύτητες μεταξύ 20 και 40

Page 16: Προγραμματισμός σε Clipper - 1

Mhz, αυτό ήταν ένα σημαντικό πρόβλημα, ειδικά για μεγάλες εφαρμογές και μεγάλες βάσεις δεδομένων. Για αυτό τον λόγο δημιουργήθηκαν μεταβλητές καινούργιου τύπου και τεχνικής, όπως θα δούμε στη συνέχεια. Έτσι μια εφαρμογή που χρησιμοποιεί τέτοιες μεταβλητές είναι πιο αργή, από άλλη που χρησιμοποιεί καινούργιου τύπου. Οι μεταβλητές τύπου Public είναι ορατές από τον κώδικα ολόκληρης της εφαρμογής, ισχύουν για όλες τις συναρτήσεις και τις διαδικασίες του προγράμματος, ανεξάρτητα από το σημείο που βρίσκονται ορισμένες μέσα στα αρχεία του πηγαίου κώδικα.

2) PRIVATE ΜΕΤΑΒΛΗΤΕΣ

Οι Private μεταβλητές είναι ίδιου τύπου με τις Public,δηλώνονται και αυτές στον πίνακα συμβόλων και είναι το ίδιο παλιές με αυτές. Η διαφορά είναι ότι ισχύουν μόνο για την συνάρτηση ή την διαδικασία μέσα στην οποία έχουν δηλωθεί, ισχύουν δηλαδή μόνο μέχρι την εντολή Return, που τερματίζει το κομμάτι αυτό του κώδικα. Αν δημιουργήσετε μια μεταβλητή και δεν δηλώσετε το είδος της, τότε αυτή καταχωρείται αυτόματα από τον μεταγλωττιστή στην μνήμη σαν τύπου Private.Μια εφαρμογή μπορεί να έχει ορισμένες έως και 4.096 μεταβλητές τύπου Public και Private.

3) STATIC ΜΕΤΑΒΛΗΤΕΣ

Οι μεταβλητές τύπου Static ισχύουν από την έκδοση του Clipper 5.0 και όλες τις μεταγενέστερες. Ορίζονται με διαφορετικό τρόπο στην μνήμη και πολύ πιο απλά από ότι οι μεταβλητές τύπου Public και Private. Ο μεταγλωττιστής ορίζει μια διεύθυνση μνήμης (memory address), και οι τιμές των μεταβλητών αποθηκεύονται σε αυτήν την διεύθυνση. Για να χρησιμοποιήσει τα δεδομένα της μεταβλητής ένα πρόγραμμα, αρκεί να αναζητήσει το όνομα της μεταβλητής στην μνήμη, και όχι στον πίνακα συμβόλων. Η διαδικασία της αναζήτησης της διεύθυνσης στη μνήμη από τον υπολογιστή, είναι πιο γρήγορη από αυτή της ανάγνωσης του πίνακα συμβόλων. Οι μεταβλητές τύπου Static ισ- χύουν για όλες τις διαδικασίες και συναρτήσεις που βρίσκονται στο ίδιο αρχείο πηγαίου κώδικα, (τύπου *. prg ), αν αυτές δηλωθούν στην κορυφή του αρχείου . Αν δηλωθούν μέσα σε μια διαδικασία ή μια συνάρτηση, τότε ισχύουν μόνο γι’ αυτές, και έχουν μόνο τοπική χρήση. Μια ιδιότητα που έχουν είναι ότι διατηρούν τα περιεχόμενά τους, τις τιμές τους, ακόμα και μετά την λήξη της διαδικασίας που τις δημιούργησε.

4) LOCAL ΜΕΤΑΒΛΗΤΕΣ

Οι μεταβλητές τύπου Local είναι ίδιου τύπου με τις Static και ισχύουν και αυτές από την έκδοση του Clipper 5.0 και μετά. Είναι οι πιο εύχρηστες μεταβλητές, γιατί απλά ισχύουν μόνο για τις διαδικασίες και τις συναρτήσεις μέσα στις οποίες ορίζονται, και είναι ταχύτατα προσπελάσιμες στην μνήμη, αφού ορίζονται και αυτές με την τεχνική των διευθύνσεων μνήμης,(memory address).Οι Local μεταβλητές δεν παρουσιάζουν προ-βλήματα στον ορισμό και στην χρήση τους, όπως όλες οι άλλες μεταβλητές.

Οι Πίνακες στον Clipper

Οι πίνακες στα μαθηματικά είναι σύνολα με διατεταγμένα στοιχεία, που έχουν δηλαδή συγκεκριμένες θέσεις μέσα σε αυτά. Τα περιεχόμενά τους ορίζονται από τις συντεταγμένες της γραμμής και την στήλης στην οποία βρίσκονται. Οι πίνακες μπορούν να έχουν μια, δυο, τρεις ή και άπειρες διαστάσεις και να περιέχουν στοιχεία οποιουδήποτε είδους .Παράδειγμα ενός απλού μαθηματικού πίνακα είναι το παρακάτω :

α β γ

δ ε ζ

Page 17: Προγραμματισμός σε Clipper - 1

η θ ι

Πίνακας 1 : Σύνολο μαθηματικά διατεταγμένων στοιχείων σε πίνακα.

Ο πίνακας αυτός έχει δύο διαστάσεις, τρεις γραμμές και τρεις στήλες, ενώ τα στοιχεία του είναι τα εννέα πρώτα γράμματα του ελληνικού αλφαβήτου. Η διάταξη των αριθμών και των γραμμάτων στα μαθηματικά, υπό την μορφή πινάκων διευκολύνει πολύπλοκους υπολογισμούς μεταξύ συνόλων.Στον προγραμματισμό των ηλεκτρονικών υπολογιστών οι πίνακες, (arrays), δεν είναι σύνολα αριθμών ή άλλων στοιχείων, αλλά περιέχουν δεδομένα, τιμές για τις μεταβλητές που αντιπροσω-πεύουν. Οι πίνακες είναι σύνολα από μεταβλητές, ίδιου τύπου, που βρίσκονται καταχωρημένα στην μνήμη. Είναι και οι ίδιοι μεταβλητές και επειδή η δομή τους μοιάζει με αυτή των μαθηματικών πινάκων, έχουν την ίδια ονομασία. Στον Clipper τα στοιχεία του πίνακα είναι αριθμημένα, ξεκινώντας από τον αριθμό 1. Κάθε στοιχείο ενός πίνακα μπορεί να περιέχει την τιμή μιας μόνο μεταβλητής.Στον CA – Clipper 5.2 έχουμε την δυνατότητα να ορίσουμε πίνακες με πολλές διαστάσεις, αφού τα στοιχεία ενός πίνακα μπορούν να είναι εκτός από τιμές μεταβλητών, και άλλοι πίνακες διαφόρων στοιχείων. Κάθε στοιχείο ενός πίνακα χρειάζεται 14 bytes μνήμης, ενώ αν είναι μεταβλητή τύπου character ή άλλος πίνακας απαιτεί περισσότερη. Οι πίνακες χρησιμοποιούνται στις εφαρμογές του Clipper,κυρίως για την κατά-σκευή οθονών,(screens),και κυλιόμενων επιλογών μενού,(pull - down menu).

Ευρετήρια των βάσεων δεδομένων του Clipper

Κάθε βάση δεδομένων περιέχει συνήθως ένα μεγάλο αριθμό εγγραφών, και στον Clip-per μπορεί να φτάσει τα 2 δισεκατομμύρια. Στην πράξη είναι δύσκολο να προσεγγιστεί αυτός ο αριθμός, όμως δεν είναι σπάνια τα αρχεία που περιέχουν εκατοντάδες χιλιάδες εγγραφές ή και εκατομμύρια, ειδικά εκείνα που χρησιμοποιούνται από μεγάλες επιχειρήσεις. Για τις εφαρμογές που αναπτύσσονται για μικρές επιχειρήσεις ή για τις συνηθισμένες δουλειές ενός γραφείου, ο αριθμός των εγγραφών φτάνει, στην πιο κοινή περίπτωση, τις μερικές εκατοντάδες ή, πιο σπάνια, τις μερικές χιλιάδες. Όσο μικρός ή μεγάλος και αν είναι αυτός ο αριθμός, η ταξινόμηση των εγγραφών είναι πάντα απαραίτητη, για λόγους καλύτερης οργάνωσης των αρχείων και ευκολότερης αναζήτησης των δεδομένων. Για αυτόν τον λόγο δημιουργούνται, με ειδικές εντολές, τα ευρετήρια, που είναι ειδικά αρχεία που περιέχουν ταξινομημένες τις εγγραφές των βάσεων δεδομένων. Τα ευρετήρια του Clipper έχουν την προέκταση *.NTX και κατασκευάζονται με διάφορους τρόπους ταξινόμησης. Για να γίνει ένα ευρετήριο, πρέπει να ορίσουμε το πεδίο, το κλειδί όπως λέγεται, της ταξινόμησης. Αν δηλαδή η ταξινόμηση θα γίνει για παράδειγμα, με το επίθετο, ή με το επάγγελμα ή κάποια ενδεικτική ημερομηνία που καταχωρείται στο αρχείο. Το επίθετο, το επάγγελμα ή η ημερομηνία, είναι πεδία που υπάρχουν μέσα στην βάση δεδομένων, και είναι, συνήθως, τύπου character τα δύο πρώτα και τύπου date το τρίτο. Αυτά είναι τα πεδία, fields,με τα οποία μπορεί να γίνει η ταξινόμηση ενός αρχείου, και από την στιγμή που θα τα χρησιμοποιήσουμε έτσι, λέγονται κλειδιά ταξινόμησης,index keys.Όταν χρησιμοποιούμε αρχεία χωρίς ευρετήρια, οι εγγραφές εμφανίζονται με την σειρά που έχουν εισαχθεί στο αρχείο, δηλαδή με την φυσική τους σειρά. Το όνομα του πεδίου που θα χρησιμοποιηθεί, (π.χ. epitheto), πρέπει να έχει μέγεθος μέχρι 120 χαρακτήρες. Το μικρότερο μέγεθος που μπορεί να έχει ένα αρχείο ευρετηρίου τύπου *.ΝΤΧ, είναι 2048 bytes.Από την στιγμή που θα δημιουργηθεί ένα ευρετήριο, κάθε εγγραφή του αρχείου αντιστοιχεί σε μια εγγραφή του ευρετηρίου. Αυτή η εγγραφή στο ευρετήριο λέγεται κόμβος, node, και όλοι οι υπάρχοντες κόμβοι κατανέμονται σε σελίδες. Κάθε ευρετήριο αποτελείται από δύο περιοχές αποθήκευσης δεδομένων, που κάθε μια έχει μέγεθος 1024 bytes. Η μέθοδος αναζήτησης μιας εγγραφής γίνεται με τον λεγόμενο αλγόριθμο Β-δένδρων, B-tree algorithm. Η μέθοδος αυτή στο πρώτο βήμα της συγκρίνει την αναζητούμενη τιμή της εγγραφής με την τιμή που έχει η εγγραφή στο μέσον του αρχείου. Οποία και αν είναι η τιμή εξαιρεί τις μισές εγγραφές και επαναλαμβάνει την ίδια σύγκριση με την τιμή της μέσης εγγραφής από τις υπόλοιπες. Την τρίτη φορά επαναλαμβάνει την σύγκριση και εξαιρεί ήδη με τρεις λογικές πράξεις το 87,5 % των εγγραφών. Κοιτάξετε με 6 συγκρίσεις εγγραφών τα αποτελέσματα :

Page 18: Προγραμματισμός σε Clipper - 1

1η σύγκριση εγγραφής Εξαιρείται το 50.0000 % των εγγραφών του αρχείου 2η σύγκριση εγγραφής Εξαιρείται το 25.0000 % των εγγραφών του αρχείου 3η σύγκριση εγγραφής Εξαιρείται το 12.5000 % των εγγραφών του αρχείου 4η σύγκριση εγγραφής Εξαιρείται το 6.2500 % των εγγραφών του αρχείου 5η σύγκριση εγγραφής Εξαιρείται το 3.1250 % των εγγραφών του αρχείου 6η σύγκριση εγγραφής Εξαιρείται το 1.0625 % των εγγραφών του αρχείουΣτις 6 συγκρίσεις εγγραφών έχει εξαιρεθεί ήδη το 98 % των εγγραφών του αρχείου.Πρόκειται, προφανώς, για μια ταχύτατη μέθοδο εντοπισμού εγγραφών, που είναι διαρκώς πιο αποδοτική όσο μεγαλώνει το μέγεθος των αρχείων στα οποία γίνεται η αναζήτηση. Ο αλγόριθμος Β-δένδρων κυκλοφόρησε την δεκαετία του ’70 από τους Bayer και McCreight και παραμένει μια από τις καλύτερες μεθόδους ταξινόμησης μέχρι και σήμερα. Στον CA – Clipper 5.2 επιτρέπεται να έχετε ανοιχτά ταυτόχρονα μέχρι και 15 ευρετήρια, αλλά αν προσεγγίσετε αυτόν τον αριθμό πρακτικά, πράγμα σπάνιο, θα διαπιστώσετε μια μείωση στην ταχύτητα εκτέλεσης του προγράμματος. Το πρώτο ευρετήριο που είναι ανοιχτό λέγεται κύριo ευρετήριο,master index,και ελέγχει τον δείκτη των εγγραφών μέσα στο αρχείο δεδομένων.

Περιοχές εργασίας και ψευδώνυμα στον Clipper

Περιοχή εργασίας, work area ,λέγεται στην γλώσσα των προγραμματιστών βάσεων δεδομένων, κάθε αρχείο που είναι ανοιχτό σε μια συγκεκριμένη χρονική στιγμή, κατά την διάρκεια εκτέλεσης ενός προγράμματος. Κάθε περιοχή εργασίας μέσα στο περιβάλλον του Clipper, περιέχει πληροφορίες σχετικά με αυτό το αρχείο και τις εγγραφές του. Οι περιοχές εργασίας που μπορείτε να έχετε ταυτόχρονα ενεργές σε ένα πρόγραμμα φτάνουν τις 250, αλλά και αυτό είναι πρακτικά αδύνατο, γιατί σημαίνει ότι, όχι μόνο έχετε κατασκευάσει τουλάχιστον 250 βάσεις δεδομένων, αλλά τις έχετε χρησιμοποιήσει κιόλας σε ένα μόνο πρόγραμμα. Από τεχνικής πλευράς αυτό πλησιάζει τα όρια του φανταστικού και από πρακτικής πλευράς φαίνεται λάθος, μιας και αν πραγματικά χρειάζεστε τόσα πολλά αρχεία, μπορείτε να κάνετε περισσότερα προγράμματα για να έχετε μεγαλύτερο έλεγχο στα δεδομένα σας. Κάθε περιοχή εργασίας έχει ένα δείκτη εγγραφών, record pointer, ο οποίος δείχνει πάντα σε μια εγγραφή του αρχείου. Μόνο μια εγγραφή για κάθε αρχείο είναι προσπελάσιμη κάθε φορά, αυτή στην οποία είναι τοποθετημένος ο δείκτης. Αυτή η εγγραφή χαρακτηρίζεται ως η ενεργή εγγραφή.Κάθε ανοιχτό αρχείο σε μία εφαρμογή έχει και ένα ψευδώνυμο,alias,που είναι το όνομα του αρχείου στο MS-DOS χωρίς την προέκταση, π.χ. το KATALOGO.DBF έχει εξ’ ορισμού το ψευδώνυμο KATALOGO. Η εντολή, για παράδειγμα, USE KATALOGO, ανοίγει το αρχείο KATALOGO.DBF. Η συνάρτηση ALIAS( ) του Clipper επιστρέφει το ψευδώνυμο του αρχείου που είναι ανοιχτό εκείνη τη στιγμή, σε μια εφαρμογή.

Οι τελεστές του Clipper

Τελεστές είναι τα σύμβολα εκείνα που χρησιμοποιεί μια γλώσσα προγραμματισμού για να υπολογίσει διάφορες εκφράσεις. Σημαντική διαφορά ανάμεσα στις γλώσσες προγραμματισμού είναι οι τελεστές που χρησιμοποιούν, γι’ αυτό το λόγο αν εξοικειωθεί κανείς με τους τελεστές μιας γλώσσας είναι σχεδόν βέβαιο ότι μπορεί και να την χρησιμοποιήσει για να κατασκευάσει προγράμματα. Ο Clipper χρησιμοποιεί τελεστές όλων των ειδών, και πολλοί από αυτούς είναι ίδιοι με αυτούς της γλώσσας C.

1) Μαθηματικοί τελεστές

Οι τελεστές που χρησιμοποιεί ο CA - Clipper 5.2 για να κάνει τους απαραίτητους μαθηματικούς υπολογισμούς σε ένα πρόγραμμα, είναι οι παρακάτω:

+ : Ο τελεστής της μαθηματικής πράξης της πρόσθεσης δύο αριθμών.- : Ο τελεστής της μαθηματικής πράξης της αφαίρεσης δύο αριθμών.* : Ο τελεστής της μαθηματικής πράξης του πολλαπλασιασμού δύο αριθμών./ : Ο τελεστής της μαθηματικής πράξης της διαίρεσης δύο αριθμών.

Page 19: Προγραμματισμός σε Clipper - 1

% : Ο τελεστής αυτός μας δίνει το υπόλοιπο μιας διαίρεσης.^ : Ο τελεστής της μαθηματικής πράξης της ύψωσης σε δύναμη ενός αριθμού.** : Ο τελεστής της μαθηματικής πράξης της ύψωσης σε δύναμη ενός αριθμού.

Οι πράξεις επιλύονται από αριστερά προς τα δεξιά, με την ακόλουθη σειρά :

1. Πρώτα γίνονται οι πράξεις που βρίσκονται μέσα στις παρενθέσεις.2. Μετά γίνονται οι υψώσεις σε δύναμη.3. Μετά υπολογίζονται οι πολλαπλασιασμοί και οι διαιρέσεις, και4. Τέλος γίνονται οι προσθέσεις και οι αφαιρέσεις.

2) Σχεσιακοί τελεστές

Πολύ σημαντικοί είναι οι τελεστές σύγκρισης σε μια γλώσσα προγραμματισμού, αφού χρησιμοποιούνται συχνά σαν λογικές συνθήκες διακλάδωσης του προγράμματος. Οι σχεσιακοί τελεστές λέγονται και τελεστές σύγκρισης, γιατί συγκρίνουν τις τιμές δύο εκφράσεων, είτε αυτές είναι αριθμητικές, numeric, είτε αλφαριθμητικά, strings. Όταν συγκρίνουμε δύο ποσότητες πρέπει να προσέχουμε να χρησιμοποιούμε εκφράσεις ίδιου τύπου,π.χ. και οι δύο εκφράσεις να είναι αριθμοί ή και οι δύο να είναι αλφαριθμητικά. Αλλιώς ο compiler του Clipper δίνει μήνυμα λάθους και δεν δημιουργεί object αρχείο.Οι σχεσιακοί τελεστές του Clipper είναι οι παρακάτω :

< : Τελεστής σύγκρισης «μικρότερο από».> : Τελεστής σύγκρισης «μεγαλύτερο από».= : Τελεστής σύγκρισης «ίσο με».< > : Τελεστής σύγκρισης «όχι ίσο με».# : Τελεστής σύγκρισης «όχι ίσο με».! = : Τελεστής σύγκρισης «όχι ίσο με».< = : Τελεστής σύγκρισης «μικρότερο από ή ίσο με».> = : Τελεστής σύγκρισης «μεγαλύτερο από ή ίσο με».$ : Τελεστής σύγκρισης «περιέχεται σε».== : Τελεστής σύγκρισης «είναι ακριβώς ίσο με».

Τα αποτελέσματα που δίνουν οι σχεσιακοί τελεστές, όταν γίνει η σύγκριση, είναι αληθή,( .T. ),ή ψευδή,( .F. ).Οι τελεστές επιδρούν σε μια έκφραση, όπως και οι μαθηματικοί τελεστές, από αριστερά προς τα δεξιά.

3) Λογικοί τελεστές

Οι λογικοί τελεστές είναι επίσης πολύ σημαντικοί σε μια γλώσσα προγραμματισμού, γιατί και αυτοί χρησιμοποιούνται συχνά σαν συνθήκες διακλάδωσης του προγράμματος ή για να αποφασισθεί η επιλογή κάποιας ενέργειας. Ο Clipper χρησιμοποιεί τους παρακάτω λογικούς τελεστές :

.AND. : Ενώνει δύο ή και περισσότερες λογικές εκφράσεις σε ένα αποτέλεσμα. Για να είναι αληθές το αποτέλεσμα, πρέπει όλες οι εκφράσεις να είναι αληθείς..OR. : Ενώνει δύο ή περισσότερες λογικές εκφράσεις σε ένα αποτέλεσμα. Για να είναι αληθές το αποτέλεσμα, πρέπει μια από τις εκφράσεις να είναι ψευδής..NOT. ή ! : Η έκφραση αυτή αντιστρέφει το αποτέλεσμα μιας λογικής σύγκρισης. Οι δύο μορφές του τελεστή είναι ισοδύναμες.

Οι λογικές εκφράσεις στον Clipper υπολογίζονται με την ακόλουθη σειρά :

Page 20: Προγραμματισμός σε Clipper - 1

1. Υπολογίζονται πρώτα οι λογικές εκφράσεις μέσα στις παρενθέσεις.2. Υπολογίζεται η έκφραση .ΝΟΤ.3. Υπολογίζεται η έκφραση .AND. και τέλος4. Υπολογίζεται η έκφραση .ΟR.

4) Τελεστές αλφαριθμητικών

Υπάρχουν δύο ειδικοί τελεστές για την ένωση δύο αλφαριθμητικών,strings,στον Clip-per που μοιάζουν με τους μαθηματικούς τελεστές αλλά λειτουργούν διαφορετικά. Αυτοί οι ειδικοί τελεστές είναι οι παρακάτω :

+ : Ο τελεστής αυτός ενώνει δύο αλφαριθμητικά μαζί με όλα τα σύμβολα που έχουν. - : Ο τελεστής αυτός ενώνει δύο αλφαριθμητικά, εκτός από τα κενά που περιλαμβά- νονται στα αριστερά του τελεστή.

5) Τελεστές εκχώρησης

Είναι ειδικοί τελεστές και αντικαθιστούν πολλές φορές τις εντολές του Clipper.Οι τελε-στές εκχώρησης στην έκδοση 5.2 είναι οι παρακάτω :

= : Τελεστής εκχώρησης τιμής σε μια μεταβλητή.: = : Καταχώρηση τιμής σε μια μεταβλητή.+ = : Πρόσθεση αριθμητικών τιμών ( π.χ. α += β είναι ίδιο με το α = α + β ). - = : Αφαίρεση αριθμητικών τιμών ( π.χ. α -= β είναι ίδιο με το α = α - β ). * = : Πολλαπλασιασμός αριθμητικών τιμών ( π.χ. α *= β είναι ίδιο με α = α * β ). / = : Διαίρεση αριθμητικών τιμών ( π.χ. α /= β είναι ίδιο με το α = α / β ).** : Ύψωση σε δύναμη ενός αριθμού ( π.χ. α ** β είναι ίδιο με το α = α ^ β ).^ = : Ύψωση σε δύναμη ενός αριθμού ( π.χ. α ^=β είναι ίδιο με το α = α ^ β ).% = : Υπολογισμός του υπολοίπου της διαίρεσης δύο αριθμών, ( π.χ. α %=β είναι ίδιο με το α = α % β ).

6) Τελεστές αύξησης και μείωσης

Οι τελεστές αυτές υπολογίζουν την τιμή μιας αριθμητικής μεταβλητής ή μιας μεταβλη-τής ημερομηνίας και την αυξάνουν ή την μειώνουν κατά 1.

++ : Αυξάνει κατά 1, ( var := var++ σημαίνει ότι αυξήθηκε η τιμή της var κατά 1 ).-- : Μειώνει κατά 1, ( var := var- - σημαίνει ότι μειώθηκε η τιμή της var κατά 1 ).

7) Ειδικοί τελεστές

Οι ειδικοί τελεστές είναι διαφόρων ειδών και δεν υπόκεινται σε καμία κατηγορία. Οι ειδικοί τελεστές του Clipper είναι οι παρακάτω :( ) : Οι παρενθέσεις χρησιμοποιούνται για να δηλώσουν μια συνάρτηση ή για να κάνουν ομαδοποίηση μεταβλητών σε αριθμητικές πράξεις.[ ] : Με τις απλές αγκύλες δηλώνονται τα στοιχεία ενός πίνακα.{ } : Με αυτές τις αγκύλες συμβολίζονται τα περιεχόμενα ενός πίνακα ή ένα τμήμα κώδικα,code block.| | : Τα ορίσματα σε ένα τμήμα κώδικα περιέχονται μέσα σε αυτές τις παύλες.& : Υποδηλώνει μεταγλώττιση μακροεντολών και πέρασμα τιμών σε μεταβλητές.

Page 21: Προγραμματισμός σε Clipper - 1

@ : Πέρασμα παραμέτρου δια αναφοράς στην μνήμη.; : Ξεχωρίζει δύο γραμμές κώδικα σε μεγάλα προγράμματα. : : Τελεστής αποστολής για τις κλάσεις αντικειμένων του Clipper.Καταχωρεί ή παίρνει δεδομένα από τις μεταβλητές που ορίζονται στον κώδικα.&& : Σημειώσεις για τον κώδικα του προγράμματος./* : Τελεστής που υποδηλώνει την αρχή των σχολίων.*/ : Τελεστής που υποδηλώνει το τέλος των σχολίων. . : Τελεστής που υποδηλώνει τον τερματισμό μιας μακροεντολής.; ; : Τελεστής για πολλαπλές εντολές του προεπεξεργαστή.‘ ’ : Οριοθέτης περιεχομένων για αλφαριθμητικά.¨ ¨ : Οριοθέτης περιεχομένων για αλφαριθμητικά.=> : Οδηγίες για τον προεπεξεργαστή του Clipper.-> : Δείκτης που υποδηλώνει ψευδώνυμα πεδίων.

Page 22: Προγραμματισμός σε Clipper - 1

ΔΟΜΕΣ ΕΛΕΓΧΟΥ ΤΟΥ CLIPPER

Οι δομές ελέγχου στον Clipper.

Οι δομές ελέγχου σε μια γλώσσα προγραμματισμού, συνθέτουν τον τρόπο με το οποίο επιλύει τα προβλήματα που καλείται να αντιμετωπίσει, μέσα σε ένα πρόγραμμα. Με αυτές τις δομές μετατρέπουμε τις βασικές σκέψεις μιας εφαρμογής σε γραμμές κώδικα, και υλοποιούμε τις λειτουργίες ενός προγράμματος. Εκτός από το είδος των μεταβλητών και των αρχείων που χρησιμοποιεί μια γλώσσα προγραμματισμού, το συνολικό «ύφος» της καθορίζεται και από το είδος των δομών που διαθέτει. Ο Clipper χρησιμοποιεί τις βασικές δομές που έχουμε συναντήσει και στην

Page 23: Προγραμματισμός σε Clipper - 1

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

1) IF … ELSEIF … ELSE … ENDIF

Η πιο βασική δομή ελέγχου στις διαδικαστικές γλώσσες προγραμματισμού, (procedural programming languages), είναι η σύνθετη εντολή IF … ENDIF. Η εντολή χρησιμοποιείται με συνθήκες διαφόρων τύπων και μπορεί να διαχωρίσει την ροή του προ-γράμματος σε διάφορες κατευθύνσεις.

Παραδείγματα κώδικα:

α) IF VAR == ” Monday ” @ 01,01 SAY “ This is the first day of the week. ”

ENDIF

Η δομή IF … ENDIF χρειάζεται πάντα το ENDIF για να κλείσει τις λειτουργίες της, αλλιώς ο compiler του Clipper, εντοπίζει το λάθος και μας καλεί να το διορθώσουμε, δείχνοντάς μας και την γραμμή του κώδικα όπου εντοπίστηκε. Στο παράδειγμα αυτό γίνεται έλεγχος με τον τελεστή == ,αν τα περιεχόμενα της μεταβλητής VAR είναι το αλφαριθμητικό Monday. Αν οι δύο ποσότητες είναι ακριβώς ίδιες, η εντολή SAY παρουσιάζει στην 1η γραμμή και στην 1η στήλη, ( @ 01,01 ), της οθόνης το ανάλογο μήνυμα. Με τον κώδικα αυτό έχουμε μια δυνατότητα κατεύθυνσης του προγράμματος, αλλά ελέγχουμε την ροή του, με την συνθήκη μετά το IF.

β) IF VAR == ”Monday”

@ 01,01 SAY “This is the first day of the week.”

ELSE

@ 01,01 SAY “This is not the first day of the week.”

ENDIF

Στο δεύτερο παράδειγμα γίνεται πάλι ο έλεγχος με τον τελεστή == ,στα περιεχόμενα της μεταβλητής VAR και παρουσιάζεται στην 1η γραμμή και στην 1η στήλη της οθόνης το ίδιο μήνυμα. Αν όμως οι ποσότητες διαφέρουν, το πρόγραμμα αλλάζει κατεύθυνση και παρουσιάζει με τον ίδιο τρόπο το άλλο μήνυμα στην οθόνη του υπολογιστή. Με τη χρήση της εντολής ELSE φαίνεται ότι μπορούμε να δώσουμε στο πρόγραμμα δύο δυνατότητες και ταυτόχρονα να κάνουμε έλεγχο των δεδομένων που πε-ριέχουν οι μεταβλητές που χρησιμοποιεί με διάφορες συνθήκες.

γ) IF VAR == 1

@ 01,01 SAY “This is number one.”

ELSEIF VAR == 2

@ 01,01 SAY “This is number two.”

ELSEIF VAR == 3

@ 01,01 SAY “This is number three.”

Page 24: Προγραμματισμός σε Clipper - 1

ELSEIF VAR == 4

@ 01,01 SAY “This is number four.”

ELSE

@ 01,01 SAY “This is not a known number.”

ENDIF

Στο τρίτο παράδειγμα κώδικα, η μεταβλητή VAR δεν είναι αλφαριθμητικό,(τύ-που character),αλλά αριθμός, (τύπου number), που σημαίνει ότι έχει οριστεί διαφορετικά σε κάποιο άλλο σημείο του προγράμματος. Αρχικά γίνεται ο πρώτος έλεγχος με τον τελεστή == ,αν το περιεχόμενο της μεταβλητής VAR είναι ίσο με τον αριθμό ένα. Αν οι δύο αριθμοί είναι ίσοι, η εντολή SAY του Clipper, παρουσιάζει στην οθόνη το πρώτο μήνυμα. Αν οι αριθμοί διαφέρουν, γίνεται δεύτερος έλεγχος μήπως η μεταβλητή VAR είναι ίση με τον αριθμό δύο. Αν αυτοί οι δύο αριθμοί βρεθούν ίσοι, η εντολή SAY παρουσιάζει στην οθόνη το δεύτερο μήνυμα. Αν και αυτοί οι δύο αριθμοί διαφέρουν, γίνεται τρίτος έλεγχος μήπως η μεταβλητή VAR είναι ίση με τον αριθμό τρία. Αν αυτοί είναι οι δύο αριθμοί που είναι ίσοι, η εντολή SAY παρουσιάζει στην οθόνη το τρίτο μήνυμα. Στην τέταρτη διακλάδωση του κώδικα γίνεται έλεγχος αν η μεταβλητή VAR είναι ίση με τον αριθμό τέσσερα. Αν οι δύο αριθμοί είναι ίσοι, η εντολή SAY παρουσιάζει στην οθόνη του υπολογιστή το τέταρτο μήνυμα. Στην περίπτωση που η VAR δεν είναι ίση με κανένα από τους τέσσερις αριθμούς η SAY μας εμφανίζει το τελευταίο μήνυμα στην οθόνη. Είναι προφανές ότι η εντολή ELSEIF μας δίνει την δυνατότητα να χωρίσουμε την ροή του προγράμματος σε όσες πιθανές καταστάσεις επιθυμούμε, συμπεριλαμβάνοντας και ισάριθμες συνθήκες ελέγχου. Απαραίτητη είναι και η χρήση της εντολής ELSE στο τέλος των επιλογών, για να δώσουμε στο πρόγραμμα μας την δυνατότητα να εκτελέσει κάποια άλλη λειτουργία σε περίπτωση που όλες οι συνθήκες αποδειχθούν ψευδείς. Συνήθως στην επιλογή ELSE καταχωρεί-ται ο κώδικας για την έξοδο της ροής του προγράμματος από την δομή IF … ENDIF,και αν αποτελεί τον βασικό βρόχο στην αρχή, τον τερματισμό της εφαρμογής.

2) DO CASE …ENDCASE

Αυτή η δομή ελέγχου προέρχεται από την DBase και μας δίνει την δυνατότητα να διαλέξουμε ανάμεσα σε έναν αριθμό επιλογών, που εμείς καθορίζουμε. Οι επιλογές που κάνουμε εξαρτώνται από τις συνθήκες που θα ορίσουμε, με την βοήθεια συνήθως κάποιων μεταβλητών. Μέχρι την εμφάνιση της δομής ελέγχου IF … ENDIF, η δομή DO CASE … ENDCASE, ήταν ο μόνος τρόπος για να κάνουμε ένα πρόγραμμα να διακλαδίζεται σε περισσότερες από δύο καταστάσεις. Από άποψη λειτουργικότητας μέσα σε ένα πρόγραμμα, αυτές οι δύο δομές ελέγχου του Clipper είναι ισοδύναμες.

Παράδειγμα κώδικα

α) DO CASE

CASE VAR == 1 @ 01,01 SAY “This is number one.”

CASE VAR == 2

@ 01,01 SAY “This is number two.”

CASE VAR == 3

Page 25: Προγραμματισμός σε Clipper - 1

@ 01,01 SAY “This is number three.” CASE VAR == 4

@ 01,01 SAY “This is number four.”

OTHERWISE

@ 01,01 SAY “This is not a known number.”

ENDCASE

Στο παράδειγμα αυτό του κώδικα, η μεταβλητή VAR είναι ένας αριθμός,(τύπου number),που σημαίνει ότι έχει οριστεί ανάλογα σε άλλο σημείο του προγράμματος, (συνήθως στην αρχή). Αρχικά η DO CASE κάνει τον πρώτο έλεγχο, με τον ίδιο τελεστή == ,στο περιεχόμενο της μεταβλητής VAR για να διαπιστώσει αν είναι ίσο με τον αριθμό ένα. Αν αυτοί οι δύο αριθμοί είναι ίσοι, η εντολή SAY θα παρουσιάσει στην οθόνη το πρώτο μήνυμα. Αν οι δύο αριθμοί διαφέρουν, γίνεται δεύτερος έλεγχος αν η μεταβλητή VAR είναι ίση με τον αριθμό δύο. Αν έχουμε ισότητα, η εντολή SAY θα παρουσιάσει στην οθόνη το δεύτερο μήνυμα. Αν και αυτοί οι δύο αριθμοί διαφέρουν, γίνεται τρίτος έλεγχος στην μεταβλητή VAR, αν είναι ίση με τον αριθμό τρία. Αν αυτοί είναι οι δύο αριθμοί που είναι ίσοι, η εντολή SAY θα παρουσιάσει στην οθόνη το τρίτο μήνυμα. Στην τέταρτη διακλάδωση του κώδικα γίνεται έλεγχος αν η μεταβλητή VAR είναι ίση με τον αριθμό τέσσερα. Αν οι δύο αριθμοί είναι ίσοι, η εντολή SAY παρουσιάζει στην οθόνη του υπολογιστή το τέταρτο μήνυμα. Στην περίπτωση που η VAR δεν είναι ίση με κανένα από τους τέσσερις αριθμούς, εκτελείται ο κώδικας που περιλαμβάνεται μετά την εντολή OTHERWISE,που είναι προαιρετική.

3) DO WHILE … ENDDO

Αυτή η δομή ελέγχου είναι από τις πλέον σημαντικές σε ένα πρόγραμμα, γιατί του δίνει την δυνατότητα της επανάληψης, μια διαδικασία απαραίτητη ειδικά όταν πρόκειται για επαγγελματικές εφαρμογές. Για παράδειγμα, η εισαγωγή εγγραφών σε ένα αρχείο, είναι μια λειτουργία που πρέπει να επαναλαμβάνεται όσες φορές είναι απαραίτητο από τον όγκο των δεδομένων. Η σύνθετη εντολή DO WHILE επαναλαμβάνει το κομμάτι του κώδικα που βρίσκεται μέχρι την εντολή ENDDO, αφού πρώτα γίνει ο έλεγχος της συνθήκης που υπάρχει μετά το WHILE. Για να κατασκευάσουμε ένα ατέρμονο βρόχο, αρκεί να δώσουμε την έκφραση .Τ. , (που είναι πάντα αληθής), όπως στο παράδειγμα που ακολουθεί. Στην περίπτωση που δεν ισχύει η συνθήκη, ο κώδικας που περιλαμβάνεται ανάμεσα στην δομή δεν εκτελείται καμία φορά.

Παράδειγμα κώδικα :

/* PROGRAM PARADEIGMA */

LOCAL VAR

VAR := 0

DO WHILE .T.

@ 01,01 SAY “ This is a message. “ VAR := VAR+1

IF VAR == 10

Page 26: Προγραμματισμός σε Clipper - 1

EXIT

ENDIF

ENDDO

Στην αρχή αυτού του μικρού προγράμματος, γράφουμε τον τίτλο του, υπό την μορφή σχολίων. Στη συνέχεια ορίζουμε τις απαραίτητες μεταβλητές, (εδώ η μεταβλητή VAR λειτουργεί στην ουσία σαν μετρητής), και αρχικοποιούμε την τιμή της, ώστε να εκκινήσει ο βρόχος. Ο κώδικας μέσα στην δομή DO WHILE εμφανίζει το μήνυμα στην οθόνη, με την χρήση της εντολής SAY. Κάθε φορά που εκτελείται ο κώδικας αυτός γίνεται και αύξηση του μετρητή κατά 1. Όταν η μεταβλητή VAR γίνει ίση με το 10, ο έλεγχος που κάνει η δομή IF … ENDIF τερματίζει τον βρόχο με την εντολή EXIT.Με την ίδια εντολή τερματίζουμε και μια δομή DO CASE … ENDCASE.

4) FOR … TO … NEXT

Η δομή ελέγχου που χρησιμοποιεί ο Clipper,για να επαναλάβει ένα κομμάτι του κώδικα ενός προγράμματος για έναν προκαθορισμένο αριθμό φορών, είναι η FOR … NEXT. Η εντολή είναι σύνθετη και ορίζεται με την συνοδεία μεταβλητών, που μπορεί να είναι αριθμητικές ή και αλφαριθμητικά. Υπάρχει ένα πάνω όριο και ένα κάτω όριο, για να προσδιοριστεί ο αριθμός των επαναλήψεων. Η δομή ελέγχου FOR … NEXT δίνει την δυνατότητα στον προγραμματιστή να προκαλέσει μια ελεγχόμενη επανάληψης ενός τμήματος κώδικα, που αντιπροσωπεύει μία συγκεκριμένη λειτουργία για την εφαρμογή.

Παράδειγμα κώδικα :

LOCAL I

FOR I =1 TO 10

@ 01,01 SAY “ This is a message. “

NEXT

Σε αυτό το παράδειγμα κώδικα η FOR … NEXT επαναλαμβάνει 10 φορές την εμφάνιση ενός μηνύματος στην οθόνη του υπολογιστή, με την βοήθεια της εντολής SAY. Μόλις συμπληρωθεί ο αριθμός αυτός, το πρόγραμμα θα συνεχίσει με τον κώδικα που περιλαμβάνεται αμέσως μετά την εντολή ΝΕΧΤ, (αν υπάρχει). Η μεταβλητή Ι πρέπει να δηλωθεί σαν LOCAL, (τοπική), στην αρχή της διαδικασίας, (procedure), ή της συνάρτησης, (function), που περιλαμβάνει την δομή FOR … NEXT. Στην πραγματικότητα η μεταβλητή αυτή λειτουργεί σαν μετρητής των επαναλήψεων του κώδικα. Η μεταβλητή αυτή καθορίζει την αριθμητική αρχή της επανάληψης του βρόχου και μπορεί να πάρει την αρχική τιμή της με την απ’ ευθείας δήλωσή της μέσα στην δομή ελέγχου. Αυξάνεται κατά 1, κάθε φορά που επαναλαμβάνεται ο βρόχος των γραμμών του προγράμματος. Η εντολή ΤΟ καθορίζει το όριο των επαναλήψεων του κώδικα.

Page 27: Προγραμματισμός σε Clipper - 1

ΟΙ ΕΝΤΟΛΕΣ ΔΙΑΜΟΡΦΩΣΗΣΠΕΡΙΒΑΛΛΟΝΤΟΣ SET ΤΟΥ CLIPPER

Οι εντολές SET του Clipper.

Ο Clipper σαν ολοκληρωμένη γλώσσα προγραμματισμού εμφανίστηκε σχετικά πρόσφατα, με την έκδοση 5.0 του 1990. Από εκείνη την εποχή πολλοί προγραμματιστές πλησίασαν αυτό το καινούργιο εργαλείο ανάπτυξης εφαρμογών και οι περισσότεροι εξοικειώθηκαν γρήγορα με τις καινούργιες τεχνικές που εισήγαγε στον προγραμματισμό. Το απλό νοηματικά συντακτικό που διέθετε, η ανοιχτή αρχιτεκτονική στην συγγραφή των διαδικασιών και των συναρτήσεων, η ευκολία διαχείρισης της

Page 28: Προγραμματισμός σε Clipper - 1

οθόνης και των περιφερειακών, ήταν μερικά μόνο από τα πλεονεκτήματα που προσέφερε εκείνη την εποχή. Μια όμως από τις πιο σημαντικές καινοτομίες του Clipper,ήταν η δυνατότητα που έδινε στον προγραμματιστή, να διαχειρίζεται το περιβάλλον της εφαρμογής και του ηλεκτρονικού υπολογιστή γενικότερα. Ο έλεγχος του hardware,του υλικού που υλοποιεί το πρόγραμμα που κατασκευάζουμε, είναι ένας από τους σοβαρότερους παράγοντες που επηρεάζουν την σωστή λειτουργία του. Ως εκ τούτου είναι και ένας πολύ σημαντικός λόγος δημιουργίας λαθών κατά την διάρκεια εκτέλεσης του προγράμματος, που δεν μπορούσε να ελεγχθεί και να διορθωθεί. Μέχρι εκείνη την εποχή, μόνο οι προγραμματιστές της Assembly και της C διέθεταν την ικανότητα να έχουν κώδικα για να ελέγχουν το υλικό μέρος του υπολογιστή. Οι εντολές περιβάλλοντος SET του καινούργιου Clipper έδωσαν, στην πλειοψηφία τους, την δυνατότητα αυτή στο ευρύ κοινό των προγραμματιστών, χωρίς να είναι απαραίτητη η πολύωρη μελέτη και ο απαραίτητος χρονοβόρος πειραματισμός για την αφομοίωση και την χρήση τους. Ο ορισμός των εντολών περιβάλλοντος γίνεται στην αρχή του αρχείου που περιέχει τον κώδικα με τον οποίο εκκινεί μια εφαρμογή. Οι εντολές SET που θα χρησιμοποιήσει μια εφαρμογή γράφονται μετά το τμήμα δήλωσης των μεταβλητών του προγράμματος. Μπορούν όμως να δηλωθούν και στην αρχή άλλων αρχείων πηγαίου κώδικα, (*.prg), αν η εμβέλειά τους δεν είναι ολόκληρη η εφαρμογή. Οι εντολές όμως που ισχύουν για όλο το πρόγραμμα, γράφονται στο τμήμα δηλώσεων των εντολών περιβάλλοντος, στην αρχή του βασικού αρχείου που περιέχει πηγαίο κώδικα. Δεν είναι απαραίτητο κάθε αρχείο ή κάθε εφαρμογή, γενικότερα, να περιέχει εντολές περιβάλλοντος. Χρησιμοποιώντας όμως τέτοιες εντολές κάνουμε την εφαρμογή πιο εύχρηστη και πιο φιλική προς τον τελικό χρήστη. Ακολουθεί μια αναφορά στις κυριότερες από αυτές τις εντολές περιβάλλοντος, αφού στο σύνολό τους υπερβαίνουν τις 30.

1) SET CENTURY

Με την εντολή αυτή ο Clipper επιλέγει την μορφή που θα έχει η εμφάνιση της χρονολογίας στην οθόνη. Η χρονολογία μπορεί να έχει και τα τέσσερα ψηφία ή να εμφανίζεται συντετμημένη με τα δύο τελευταία ψηφία της. Εξ’ ορισμού η επιλογή αυτή είναι απενεργοποιημένη, σε κατάσταση off. Αν έχουμε επιλέξει SET CENTURY ΟΝ, τότε το πρόγραμμα μπορεί να αναγνωρίζει ημερομηνίες από την 01/01/0100 μέχρι και την 31/12/2999. Οι ημερομηνίες που αφορούν τον 20ο αιώνα εμφανίζονται σωστά, αλλά εκτός του αιώνα δεν έχουν την σωστή απεικόνιση. Έτσι για τα προγράμματα του Clip-per που θα λειτουργούν και μετά το 1999,πρέπει να έχετε ενεργοποιημένη την εντολή αυτή, συμπληρώνοντας την παράμετρο ΟΝ.

2) SET COLOR

Από τις πιο σημαντικές εντολές περιβάλλοντος είναι αυτή που ορίζει τα χρώματα με τα οποία θα εμφανίζεται το πρόγραμμα στην οθόνη του υπολογιστή. Καθορίζει τα χρώματα του προσκηνίου και του φόντου, τα χρώματα των εντολών GET, ενεργών και μη, το χρώμα του περιθωρίου της οθόνης, αν έχει οριστεί κ.λ.π. Η εντολή SET COLOR δέχεται τις παραμέτρους των χρωμάτων με γράμματα που αντιστοιχούν σε αυτά. Μια τυπική σύνταξη της εντολής αυτής είναι η ακόλουθη:

SET COLOR TO < Standard > < Enhanced > < Border > < Background > < Unselected > < cString >

Η εντολή δέχεται έξι παραμέτρους που συμβολίζουν χρώματα για διαφορετικές περιοχές της οθόνης. Αυτές είναι:

1) Η < Standard > καθορίζει το βασικό χρώμα προσκηνίου και φόντου.2) Η < Enhanced > είναι το ζεύγος χρωμάτων που εμφανίζονται οι εντολές GET.3) Η < Border > δηλώνει το χρώμα που σχεδιάζεται το περιθώριο της οθόνης.4) Η < Background > δεν χρησιμοποιείται από τον Clipper.5) Η < Unselected > είναι το χρώμα των ανενεργών GET,και ή 6) Η < cString > είναι μια έκφραση character που υποκαθιστά κάποια από τις προηγούμενες

παραμέτρους.

Page 29: Προγραμματισμός σε Clipper - 1

Οι κωδικοί χρωμάτων στον Clipper είναι :

Χρώμα ή ιδιότητα Σύμβολο

Μαύρο N Μπλε B Πράσινο G Κυανό BG Κόκκινο R Ροζ RB Καφέ GR Ασπρο W Γκρι N+ Κίτρινο GR+ Κενό X Υπογράμμιση U Αντεστραμμένη φωτεινότητα | Αναβόσβημα * Υψηλή ένταση +

Πίνακας 1 : Σύμβολα του Clipper για τον ορισμό των χρωμάτων.

3) SET CURSORΗ εντολή αυτή ελέγχει την εμφάνιση του δρομέα, του κέρσορα, στην οθόνη. Εξ’ ορισμού η κατάσταση της εντολή είναι ΟΝ, που σημαίνει ότι ο κέρσορας εμφανίζεται πάντα στην οθόνη. Αν θέλουμε να κατασκευάσουμε μια εισαγωγική οθόνη για ένα πρόγραμμα, απενεργοποιούμε την εμφάνιση του δείκτη, με την εντολή SET CURSOR OFF.4) SET DATEΜε την εντολή αυτή καθορίζουμε τον τρόπο που εμφανίζονται οι ημερομηνίες στην οθόνη. Οι μορφές της ημερομηνίας που μπορούν να επιλεγούν παρουσιάζονται στον παρακάτω πίνακα :

Τύπος ημερομηνίας Μορφή ημερομηνίας

Αμερικάνικος ΜΜ / ΗΗ / ΕΕ ANSI ΕΕ . ΜΜ .ΗΗ Βρετανικός ΗΗ / ΜΜ / ΕΕ Γαλλικός ΗΗ / ΜΜ / ΕΕ Γερμανικός ΗΗ . ΜΜ . ΕΕ Ιταλικός ΗΗ - ΜΜ - ΕΕ Γιαπωνέζικος ΧΧ / ΜΜ / Ε Η.Π.Α. ΜΜ - ΗΗ - ΕΕ

Πίνακας 2 : Τύποι ημερομηνίας που χρησιμοποιεί ο Clipper.Τα σύμβολα ΜΜ είναι για τον μήνα, (αριθμητικά), τα ΗΗ για την ημέρα,(αριθμητικά) και ΕΕ για το έτος, (επίσης αριθμητικά). Η μορφή ημερομηνίας ΜΜ / ΗΗ / ΕΕ, (αμερικάνικη), είναι η εξ’ ορισμού που χρησιμοποιεί ο Clipper.

5) SET DEVICE

Page 30: Προγραμματισμός σε Clipper - 1

H SET DEVICE κατευθύνει τα αποτελέσματα, την έξοδο, των εντολών @ SAY σε κάποια συσκευή. Συνήθως η εναλλαγή των συσκευών είναι ανάμεσα στην οθόνη και τον εκτυπωτή. Εξ’ ορισμού η εντολή SET DEVICE έχει έξοδο στην οθόνη. Αν θέλουμε να κατευθύνουμε τα αποτελέσματα της @ SAY στον εκτυπωτή χρησιμοποιούμε την έκφραση SET DEVICE TO PRINT. Η μέθοδος αυτή είναι ένας τρόπος για να εκτυπώνουμε δεδομένα μέσα από προγράμματα του Clipper.Αν χρησιμοποιή-σουμε την παράμετρο TO PRINT πρέπει να επαναφέρουμε την έξοδο των εντολών @ SAY στην ο-θόνη με την εντολή SET DEVICE TO SCREEN.

6) SET EXCLUSIVE

Αυτή η εντολή περιβάλλοντος λειτουργεί σε περιβάλλον δικτύου και ελέγχει την αποκλειστική χρήση ενός αρχείου. Όταν μια εφαρμογή του Clipper υλοποιείται σε περιβάλλον δικτύου, οι βάσεις δεδομένων που χρησιμοποιεί πρέπει να ανοίγονται αποκλειστικά από έναν χρήστη. Αυτό πρέπει να συμβαίνει γιατί είναι πολύ πιθανό να γίνουν διορθώσεις σε κάποιες εγγραφές. Αν δύο ή περισσότεροι χρήστες επιχειρήσουν διορθώσεις στην ίδια εγγραφή ταυτόχρονα, το πιθανότερο είναι να χαθούν τα ήδη υπάρχοντα δεδομένα του αρχείου. Έτσι πρέπει να ανοίγουν οι βάσεις δεδομένων για ε-πεξεργασία, αποκλειστικά από έναν χρήστη κάθε φορά. Η SET EXCLUSIVE με την παράμετρο ON ορίζει την αποκλειστική χρήση των αρχείων. Με την παράμετρο OFF απενεργοποιείται και η πρόσβαση στα αρχεία είναι ελεύθερη για όλους τους χρήστες.

7) SET KEY

Η εντολή περιβάλλοντος SET KEY συνδυάζει το πάτημα ενός πλήκτρου, με την ενεργοποίηση μιας συγκεκριμένης διαδικασίας ,procedure, του προγράμματος. Η τυπική σύνταξη μιας εντολής SET KEY,περιλαμβάνει τον ορισμό του κωδικού του πλήκτρου που θα πατηθεί και το όνομα της διαδικασίας που θα συνδεθεί με αυτό. Οι εντολές SET KEY που μπορούν να οριστούν σε ένα πρόγραμμα φτάνουν τις 32. Οι κωδικοί των πλήκτρων που μπορούν να χρησιμοποιηθούν σε μια εντολή SET KEY δεν έχουν περιορισμό, εκτός από τον κωδικό 28 που αντιστοιχεί στο λειτουργικό πλήκτρο F1. To πλήκτρο αυτό χρησιμοποιείται εξ’ ορισμού για να ενεργοποιηθεί η διαδικασία της βοήθειας σε ένα πρόγραμμα Clipper. Οι κωδικοί των πλήκτρων που αντιστοιχούν στα υπόλοιπα λειτουργικά πλήκτρα, function keys, φαίνονται στον πίνακα 3 :

Λειτουργικό πλήκτρο Κωδικός πλήκτρου

F1 28 F2 -1 F3 -2 F4 -3 F5 -4 F6 -5 F7 -6 F8 -7 F9 -8 F10 -9 F11 -10 F12 -11

Πίνακας 3 : Λειτουργικά πλήκτρα και κωδικοί του Clipper που αντιστοιχούν.

Για να ενεργοποιηθεί η αντιστοίχηση μιας εντολής περιβάλλοντος SET KEY,πρέπει το πρόγραμμα να βρίσκεται σε κατάσταση αναμονής πατήματος κάποιου πλήκτρου, συνήθως μετά από την χρήση μιας συνάρτησης INKEY( ) χωρίς ορίσματα.

Page 31: Προγραμματισμός σε Clipper - 1

8) SET MESSAGE

Αυτή η εντολή περιβάλλοντος χρησιμοποιείται για την τοποθέτηση του μηνύματος από την παράμετρο MESSAGE της εντολής @ PROMPT, σε κάποια γραμμή της οθόνης. Η εντολή SET MESSAGE TO 23 CENTER τοποθετεί τα ορίσματα της MESSAGE στην γραμμή 23 της οθόνης και η παράμετρος CENTER τα τοποθετεί στο κέντρο της. Αν δώσουμε την εντολή χωρίς ορίσματα, δηλαδή SET MESSAGE TO απενεργοποιείται η εμφάνιση των μηνυμάτων στην οθόνη.

9) SET WRAP

Η SET WRAP επιτρέπει την κυκλική μετακίνηση της φωτεινής μπάρας στις επιλογές ενός μενού, όταν είναι ενεργοποιημένη. Αυτό σημαίνει ότι όταν φτάσουμε στην τελευταία επιλογή του μενού, η μπάρα μετακινείται στην πρώτη και αντίστροφα. Εξ’ ορισμού η κατάσταση της εντολής είναι OFF, γι ’ αυτό πρέπει να την ορίζουμε στην αρχή του προγράμματος, ώστε τα μενού που σχηματίζουμε στην οθόνη, να είναι πιο εύχρηστα στον τελικό αποδέκτη της εφαρμογής.

Page 32: Προγραμματισμός σε Clipper - 1

ΛΕΞΙΚΟ ΤΩΝ ΕΝΤΟΛΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΩΝΤΗΣ ΕΦΑΡΜΟΓΗΣ

Ορισμός των εντολών και των συναρτήσεων του κώδικα.

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

Page 33: Προγραμματισμός σε Clipper - 1

των εκφράσεων που χρησιμοποιούνται στην εφαρμογή, είναι πιο εύκολο να αφομοιώσουν τις τεχνικές αλλά και την βασική δομή του προγράμματος. Ακολουθεί η παρουσίαση των συμβόλων, των εντολών και των συναρτήσεων του προγράμματος, με την σειρά που έχουν στα αρχεία του πηγαίου κώδικα Main.prg, Main file.prg και Demo.rmk.

/ /

Με τα σύμβολα / /, (πλάγιες κάθετοι), στην αρχή της γραμμής του editor, γράφουμε τα σχόλια για τον πηγαίο κώδικα. Τα σχόλια μπορεί να είναι πληροφορίες ή οδηγίες για το πρόγραμμα, που θα θέλαμε να έχουμε σε μελλοντική του χρήση. Όλες αυτές οι σημειώσεις αγνοούνται από τον μεταγλωττιστή, και δεν συμπεριλαμβάνονται στα αρχεία object. Για να γράψουμε σχόλια σε ένα πρόγραμμα μπορούμε να χρησιμοποιήσουμε και τα * ή τον συμβολισμό /* στην αρχή του σχολίου και */ στο τέλος του. Ότι υπάρχει ανάμεσα στα σύμβολα / * */ αγνοείται από τον μεταγλωττιστή.

Παραδείγματα :

// Αυτό είναι ένα σχόλιο προγράμματος.* Αυτό είναι ένα σχόλιο προγράμματος./* Αυτό είναι ένα σχόλιο προγράμματος. */

# include

Η εντολή include ορίζεται πάντα με το σύμβολο # μπροστά της, και λέγεται και ντιρεκτίβα, οδηγία, για τον προεπεξεργαστή. Λέει στον Clipper να συμπεριλάβει στον πηγαίο κώδικα του προγράμματος και το αρχείο κεφαλίδων, header file, που αναφέρεται. Τα αρχεία αυτά έχουν προέκταση *.CH και στην εφαρμογή αυτή ζητάμε να συμπεριληφθεί το αρχείο INKEY.CH, που περιέχει τους ορισμούς των πλήκτρων στο περιβάλλον του Clipper. Τα περιεχόμενα του αρχείου αυτού βρίσκονται στο Παράρτημα των σημειώσεων, μετά από αυτό το κεφάλαιο.

Παράδειγμα κώδικα :

# include “INKEY.CH”# include “ACHOICE.CH”# include “DBEDIT.CH”# include “MEMOEDIT.CH”# include “STD.CH”# include “INKEY.CH”,“ACHOICE.CH”,“DBEDIT.CH”,“MEMOEDIT.CH”,“STD.CH”

Οι εντολές αυτές περιλαμβάνονται πάντα στη αρχή του προγράμματος, πριν από οποιαδήποτε αναφορά άλλων εντολών ή συναρτήσεων του Clipper. Τα αρχεία κεφαλίδων μπορείτε να τα καλείτε ξεχωριστά ή όλα μαζί σε μια γραμμή κώδικα, αλλά καλύτερα να χρησιμοποιείτε την πρώτη μέθοδο, για να αποφύγετε πιθανά λάθη.

ANNOUNCE

Η πρόταση ANNOUNCE συνδέει το όρισμά της, (την έκφραση που ακολουθεί), με τον μεταγλωττιστή. Οι προτάσεις αυτές περιλαμβάνονται πάντα στη αρχή του κώδικα και πριν από την αναφορά άλλων εκφράσεων του Clipper.Μόνο μια πρόταση ANNOUNCE μπορεί να περιλαμβάνεται σε κάθε αρχείο πηγαίου κώδικα,*.prg.

Παράδειγμα κώδικα :

ANNOUNCE CLIPPER501

Page 34: Προγραμματισμός σε Clipper - 1

Η πρόταση αυτή συνδέει στα object αρχεία του Clipper 5.2,βιβλιοθήκες που έχουν δημιουργηθεί με την παλαιότερη έκδοση του Clipper 5.01. Στην εφαρμογή αυτή χρησιμοποιείται η βιβλιοθήκη TILEY.LIB στην τελική δημιουργία του αρχείου *.exe, γιατί περιέχει τον κώδικα της συνάρτησης Winshade( ). Η αναφορά και η σύνδεση της βιβλιοθήκης γίνεται στο αρχείο Demo.rmk,κατά την κλήση του διαδυνδετή Rtlink.exe.

SET SCOREBOARD

Είναι μια εντολή διαμόρφωσης περιβάλλοντος SET και περιλαμβάνεται στον κώδικα για να μην επιτρέπει την εμφάνιση μηνυμάτων από την εντολή READ και την συνάρτηση MemoEdit( ). Όταν χρησιμοποιούμε στον κώδικα αυτές τις εκφράσεις, εμφανίζονται μηνύματα στην γραμμή 0 της οθόνης, (αυτός είναι ο κωδικός της 1ης γραμμής για την οθόνη στον Clipper). Εξ’ ορισμού η κατάσταση της εντολής είναι ΟΝ.

Παράδειγμα κώδικα :

SET SCOREBOARD OFF

SET CONFIRM

Άλλη μια εντολή διαμόρφωσης περιβάλλοντος SET του Clipper, που ορίζεται και αυτή στην αρχή του προγράμματος. Η εντολή αυτή όταν είναι σε κατάσταση ΟΝ, (όταν είναι ενεργοποιημένη), δεν επιτρέπει την μετακίνηση του δείκτη από μια εντολή GET σε μια επόμενη, αν πρώτα δεν συμπληρωθεί με δεδομένα. Η χρήση της είναι απαραίτητη για να μην υπάρχουν κενά πεδία στις εντολές GET, που σημαίνει εγγραφές στο αρχείο επίσης χωρίς δεδομένα. Εξ’ ορισμού η κατάσταση της εντολής είναι ΟFF.

Παράδειγμα κώδικα :

SET CONFIRM ON

SET ESCAPE

Η εντολή διαμόρφωσης περιβάλλοντος SET ESCAPE του Clipper, καθορίζει την δυνατότητα διαφυγής από κάποια εντολή GET … READ, με το πάτημα του πλήκτρου Escape, (Esc). Αν η εντολή είναι σε κατάσταση ΟΝ, (ενεργοποιημένη), μπορεί να τερματίσει μια GET και χωρίς να έχει γίνει εισαγωγή δεδομένων. Αυτό δεν είναι πάντα σωστό, ειδικά όταν το σύστημα GET … READ περιλαμβάνεται σε πλαίσια συναρτήσεων όπως η WinShade( ) της εφαρμογής. Ο τερματισμός της GET με το πλήκτρο Esc, προκαλεί λάθος στην επαναφορά της οθόνης, γιατί δεν γίνεται σβήσιμο του πλαισίου που δημιουργεί η συνάρτηση WinShade( ). Εξ’ ορισμού η κατάσταση αυτής της εντολής περιβάλλοντος είναι ΟN.

Παράδειγμα κώδικα :

SET ESCAPE OFF

CLSΕίναι σύντμηση της εντολής CLEAR SCREEN και διαγράφει την υπάρχουσα οθόνη, χωρίς να ακυρώνει τα ενεργά GET που πιθανόν εκκρεμούν. Αν χρησιμοποιηθεί και υπάρχουν GET που περιμένουν εισαγωγή δεδομένων, δεν ακυρώνονται οι περιοχές που γίνεται η εισαγωγή αυτών των χαρακτήρων. Είναι παρόμοια με την εντολή του MS-DOS που καθαρίζει την οθόνη από όλα τα περιεχόμενά της. Δεν υπάρχουν ορίσματα για την εντολή αυτή.

Παράδειγμα κώδικα :

Page 35: Προγραμματισμός σε Clipper - 1

CLS

@ … BOX

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

Παράδειγμα κώδικα :

@ 0,0,24,79 BOX REPLICATE ( CHR(177) , 9)

Η εντολή BOX θα σχεδιάσει από την γραμμή 0 και την στήλη 0 της οθόνης, (από το πάνω αριστερά άκρο της), μέχρι την γραμμή 24 και την στήλη 79, (το κάτω δεξιά άκρο της ), ένα πλαίσιο που αποτελείται από τον χαρακτήρα με ASCII κωδικό 177. Εδώ η BOX χρησιμοποιείται σε συνδυασμό με την συνάρτηση CHR( ). Στην ουσία γεμίζει όλη την οθόνη με αυτόν τον χαρακτήρα, που είναι ένα μικρό παραλληλόγραμμο. Η παράμετρος 9 καθορίζει την πυκνότητα των χαρακτήρων που θα σχεδιαστούν, και συγκεκριμένα καλύπτει όλη την περιοχή της οθόνης.

CHR ( )

Η συνάρτηση CHR( ) επιστρέφει στο πρόγραμμα τον χαρακτήρα, που έχει τον ASCII κωδικό που παίρνει σαν όρισμα. Στην προηγούμενη εντολή επιστρέφει ένα παραλληλόγραμμο, επειδή το όρισμά της είναι ο αριθμός 177 που αντιστοιχεί σε αυτό. Ακόμα η συνάρτηση μπορεί να προκαλέσει ηχητικό σήμα από τον υπολογιστή με όρισμα τον αριθμό 7 και πρόθεμα το σύμβολο. Μπορεί να χρησιμοποιηθεί και σε συνδυασμό με άλλες εντολές όπως στο προηγούμενο παράδειγμα.

Παραδείγματα κώδικα :

α) CHR(177) β) ? CHR(7)

WINSHADE( )

Η συνάρτηση αυτή είναι ορισμένη από τον χρήστη, (User Define Function - UDF), αφού δεν ανήκει στο στάνταρ σετ των εντολών του Clipper.Περιέχεται στην βιβλιοθήκη TILEY.LIB, που έχει κατασκευάσει ο W.Edward Tiley, συγγραφέας του βιβλίου «Using Clipper,Special Edition». Η βιβλιοθήκη του W.Tiley χρησιμοποιήθηκε στην κατασκευή του προγράμματος που περιέχεται σε αυτές τις σημειώσεις, όσο και γενικότερα στο θεωρητικό υλικό που περιλαμβάνουν. Πρόκειται για ένα άψογο παράδειγμα αξιοποίησης του Clipper και για μια πολύ έξυπνη τεχνική προγραμματισμού.Η συνάρτηση δέχεται σαν παραμέτρους τις τέσσερις συντεταγμένες της οθόνης και μια παράμετρο που δείχνει την κατάσταση ενεργοποίησης. Όταν «ανοίγουμε» ένα παράθυρο στην οθόνη, η παράμετρος αυτή είναι ΟΝ, όταν θέλουμε να κλείσουμε το πλαίσιο την ορίζουμε OFF. Στο κάτω μέρος και στην δεξιά πλευρά του παραθύρου, σχηματίζεται μια σκιά, που δίνει και το όνομα στην συνάρτηση. Η WinShade( ), ορίζει έναν πίνακα στην μνήμη που περιέχει σαν στοιχεία τα παράθυρα που ανοίγει η συνάρτηση. Όταν ανοίγουμε πολλά παράθυρα, πρέπει να τα κλείνουμε με την αντίστροφη σειρά από την οποία τα δημιουργήσαμε.

Παράδειγμα κώδικα :

WINSHADE(10,11,13,68,’ON’)

@ 11,12 SAY PADC(“ This is an example of how we ”,56)

Page 36: Προγραμματισμός σε Clipper - 1

@ 12,12 SAY PADC(“ use the Function WinShade( ) ”,56)INKEY(0)

WINSHADE(10,11,13,68,’OFF’)

Η συνάρτηση χρησιμοποιείται, συνήθως, για να κατασκευάσει πλαίσια γύρω από μηνύματα που προβάλλονται στην οθόνη. Στο παράδειγμα περικλείει σε πλαίσιο τα αλφαριθμητικά ορίσματα της εντολής SAY, σε συνδυασμό με το κεντράρισμα της συνάρτησης PADC( ). Η συνάρτηση ΙΝΚΕΥ(0) θα σταματήσει την ροή του προγράμματος για να προλάβουμε να διαβάσουμε το μήνυμα και η επόμενη WINSHADE( ) θα κλείσει το παράθυρο με τον ορισμό της παραμέτρου σε OFF.

@ … SAY … GET

Η εντολή αυτή είναι σύνθετη, περιλαμβάνει δύο μέρη, το πρώτο της εντολής @ … SAY και το δεύτερο με την εντολή GET. Η εντολή @ … SAY χρησιμοποιείται για την έξοδο μηνυμάτων στην οθόνη και τον εκτυπωτή, όπως στην προηγούμενη παράγραφο, ενώ η εντολή GET ενεργοποιεί το σύστημα εισαγωγής δεδομένων του Clipper. Μετά από κάθε εντολή GET πρέπει να υπάρχει η εντολή READ, για να είναι έγκυρη και να λειτουργήσει κανονικά, αλλιώς ο compiler μας δίνει ένα μήνυμα σφάλματος. Μια εντολή READ μπορεί να υποστηρίξει μέχρι και 128 εντολές GET,δηλαδή εισαγωγή δεδομένων για 128 διαφορετικές μεταβλητές μνήμης.

Παραδείγματα κώδικα :

α) @ 02,02 SAY PADC(“ Επώνυμο Π. Όνομα - Ιδιότητα “,32) @ 03,02 SAY PADC(“ Προγραμματιστής Ηλ.Υπολογιστών“,32)

β) @ 18,28 SAY “ Επώνυμο Ατόμου : “ GET EPON VALID KENA1( ) @ 19,28 SAY “ Όνομα Ατόμου : “ GET ONΟΜ VALID KENA2( ) @ 20,28 SAY “ Πατρώνυμο Ατόμου : “ GET PATR VALID KENA3( ) READ

Στο πρώτο παράδειγμα, η εντολή @ … SAY εμφανίζει στην οθόνη δύο μηνύματα, που περικλείονται σαν όρισμα σε μια συνάρτηση PADC( ). Στο δεύτερο παράδειγμα του κώδικα, υπάρχει και το δεύτερο μέρος, η εντολή GET,που χρησιμοποιείται για την εισαγωγή δεδομένων στις μεταβλητές EPON, ONOM και PATR. (Οι μεταβλητές αυτές έχουν οριστεί σαν τύπου PUBLIC σε προηγούμενες γραμμές κώδικα του προγράμματος, στην αρχή του main.prg). Η εντολή VALID λειτουργεί σαν παράμετρος, καλώντας τις συναρτήσεις ΚΕΝΑ1( ), ΚΕΝΑ2( ) και την ΚΕΝΑ3( ), για έλεγχο της εισαγωγής δεδομένων. Οι συναρτήσεις αυτές ορίζονται στο τέλος του αρχείου main.prg,και δεν επιτρέπουν την μη εισαγωγή χαρακτήρων στις μεταβλητές των GET.

PADC( )

Η συνάρτηση αυτή κεντράρει το αλφαριθμητικό που δέχεται σαν όρισμα, μέσα στο διάστημα που ορίζεται από τον αριθμό πριν από το τέλος της παρένθεσης. Μπορεί να προσθέσει στα πιθανά κενά και κάποιους χαρακτήρες, όπως το αστεράκι,( * ), το θαυμαστικό,( ? ), κ.λ.π. Παρόμοιες συναρτήσεις είναι η PADL( ) και η PADR( ),που στοιχίζουν το όρισμα, δεξιά και αριστερά αντίστοιχα.

Παραδείγματα κώδικα :

α) @ 02,02 SAY PADC(“ Επώνυμο Π. Όνομα - Ιδιότητα “,32) @ 03,02 SAY PADC(“ Προγραμματιστής Ηλ.Υπολογιστών“,32)

β) @ 11,12 SAY PADC(“ This is an example of how we ”,56,” * ”) @ 12,12 SAY PADC(“ use the Function WinShade( ) ”,56,” ? ”)

Page 37: Προγραμματισμός σε Clipper - 1

SAVESCREEN( )

Είναι από τις πιο χρήσιμες συναρτήσεις του Clipper και από τις πιο συχνά εμφανιζόμενες σε εφαρμογές του. Αποθηκεύει σε μια μεταβλητή στην μνήμη του υπολογιστή, εκείνο το κομμάτι της οθόνης που ορίζεται από τις τέσσερις πρώτες παραμέτρους που δέχεται. Το όνομα της μεταβλητής μπορεί να είναι η πέμπτη παράμετρος της συνάρτησης. Όμως έχουμε και την δυνατότητα να μην ορίσουμε την πέμπτη παράμετρο και να καταχωρήσουμε το αποτέλεσμα της συνάρτησης σε άλλη μεταβλητή, που αναφέρεται σε άλλο σημείο του προγράμματος. Η SAVESCREEN( ), χρησιμοποιείται πάντα σε συνδυασμό με την συνάρτηση RESTSCREEN( ), που επαναφέρει το παράθυρο που αποθηκεύτηκε στην μνήμη στην οθόνη του υπολογιστή.

Παραδείγματα κώδικα :

MASKA : = SAVESCREEN(0,0,24,79)

RESTSCREEN(0,0,24,79,MASKA)

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

ΙΝΚΕΥ( )

Η συνάρτηση αυτή ελέγχει ποιος χαρακτήρας έχει πληκτρολογηθεί από τον χρήστη του προγράμματος, και τον απομακρύνει από τον buffer του πληκτρολογίου. Ο buffer είναι μια περιοχή της μνήμης όπου αποθηκεύονται όλες οι πρόσφατες πληκτρολογήσεις, (οι κωδικοί των πλήκτρων που πατιούνται), πριν από την επεξεργασία τους από τον υπολογιστή. Με όρισμα τον αριθμό 0 σταματά την ροή του προγράμματος, περιμένοντας μια οποιαδήποτε πληκτρολόγηση από τον χρήστη. Αν δοθεί ένας άλλος θετικός αριθμός, το πρόγραμμα σταματά για όσα δευτερόλεπτα αντιπροσωπεύει ο αριθμός αυτός. Η συνάρτηση ΙΝΚΕΥ( ) δεν επηρεάζει την λειτουργία άλλων εντολών ή συναρτήσεων του Clipper.

Παραδείγματα κώδικα :

α) INKEY( 0 ) β) INKEY( 3 )

@ … PROMPT

Η εντολή αυτή δημιουργεί ένα μενού επιλογών, με μια φωτεινή μπάρα για τον καθορισμό της επιλεγμένης διαδικασίας του προγράμματος. Οι παράμετροι που δέχεται είναι οι συντεταγμένες της γραμμής και της στήλης της οθόνης, ένα ενδεικτικό κείμενο για την επιλεγμένη προτροπή και ένα μήνυμα που περιγράφει την διαδικασία. Σε ένα μενού μπορούμε να ορίσουμε μέχρι 32 επιλογές, δηλαδή 32 εντολές @ … PROMPT. Για να ενεργοποιηθεί εξ’ ορισμού κάποια επιλογή χρησιμοποιούμε την εντολή MENU TO. Με την εντολή περιβάλλοντος SET WRAP ON επιτρέπουμε στην φωτεινή μπάρα να επιστρέφει κυκλικά στην πρώτη επιλογή από την τελευταία και αντίστροφα.

Παράδειγμα κώδικα :

@ 03,07 PROMPT “ Αρχείο ” MESSAGE “ Γενικό αρχείο εκπαιδευομένων “@ 03,44 PROMPT “ Τόρος ” MESSAGE “ Πρόγραμμα γραφικών της Qbasic “@ 03,54 PROMPT “ Σημειώσεις ” MESSAGE “ Γενικές σημειώσεις “@ 05,56 PROMPT “ Περί ” MESSAGE “ Υπεύθυνος προγραμματισμού “

Page 38: Προγραμματισμός σε Clipper - 1

Με τον παραπάνω τρόπο δημιουργείται το βασικό μενού επιλογών της εφαρμογής, που περιλαμβάνεται σε αυτές τις σημειώσεις. Το μήνυμα όλων των εντολών PROMPT εμφανίζεται κεντραρισμένο στην γραμμή 23 της οθόνης, λόγω της εντολής περιβάλλοντος SET MESSAGE TO 23 CENTRE,που δόθηκε στην αρχή του main.prg.

MENU TO

Η επιλογή της διαδικασίας ενός προγράμματος με μια εντολή @ … PROMPT,γίνεται με την βοήθεια της εντολής MENU TO. Η εντολή αυτή χρησιμοποιεί σαν όρισμα μια μεταβλητή, που ορίζεται συνήθως σαν LOCAL στην αρχή του προγράμματος. Όταν ο χρήστης θα επιλέξει μια διαδικασία, πατώντας το πλήκτρο Enter,η εντολή ΜΕΝU ΤΟ καταχωρεί στην μεταβλητή έναν αριθμό που αντιστοιχεί στον αριθμό της επιλογής που έγινε. Αν πατηθεί το πλήκτρο Esc η MENU TO επιστρέφει στο πρόγραμμα την τιμή 0.Ανάλογα τον αριθμό που επιστρέφεται ενεργοποιείται η αντίστοιχη διαδικασία .

Παράδειγμα κώδικα :

@ 03,07 PROMPT “ Αρχείο ” MESSAGE “ Γενικό αρχείο εκπαιδευομένων “@ 03,44 PROMPT “ Τόρος ” MESSAGE “ Πρόγραμμα γραφικών της Qbasic “

MENU TO MENU1

Η μεταβλητή που θα κρατήσει τον αριθμό της επιλογής, είναι σε αυτό το παράδειγμα η MENU1.Οι τιμές που μπορεί να πάρει είναι 0,1 και 2,αφού έχουμε μόνο δύο εντολές @ … PROMPT,σε αυτό το μενού.

LASTKEY( )

Η συνάρτηση αυτή επιστρέφει στο πρόγραμμα τον ASCII κωδικό του τελευταίου χαρακτήρα που πληκτρολογήθηκε σε κατάσταση αναμονής. Αν δηλαδή έχουμε δώσει την συνάρτηση ΙΝΚΕΥ( ) και αμέσως μετά την LASTKEY( ), μπορούμε να ελέγξουμε την πληκτρολόγηση που έγινε και να ορίσουμε κάποια συνθήκη για το πρόγραμμα.

Παράδειγμα κώδικα :

INKEY( 0 )IF LASTKEY( ) = 27 EXITENDIF

Με αυτή την τεχνική σταματάμε την ροή ενός προγράμματος και, αν πατηθεί το πλήκτρο Esc, βγαίνουμε από μια δομή DO WHILE ή DO CASE και συνεχίζουμε με τις επόμενες γραμμές κώδικα.

RESTSCREEN( )

Η συνάρτηση RESTSCREEN( ) προϋποθέτει ότι ήδη έχει χρησιμοποιηθεί μια συνάρτηση SAVESCREEN( ), που έχει ήδη σώσει κάποιο τμήμα της οθόνης σε μια μεταβλητή μνήμης. Η RESTSCREEN( ) θα επαναφέρει το κομμάτι της οθόνης, καλώντας με τις ίδιες συντεταγμένες το όνομα της μεταβλητής. Οι τέσσερις πρώτες παράμετροι είναι και εδώ οι συντεταγμένες της οθόνης και ακολουθεί σαν πέμπτη παράμετρος το όνομα της μεταβλητής. Μπορείτε να αλλάξετε τις συντεταγμένες εμφάνισης του παραθύρου που έχετε σώσει με την SAVΕSCREEN( ),αλλά όχι το μέγεθός του

Page 39: Προγραμματισμός σε Clipper - 1

Παράδειγμα κώδικα :

MASKA : = SAVESCREEN(0,0,24,79)

RESTSCREEN(0,0,24,79,MASKA)

USE

Η εντολή αυτή ανοίγει στον Clipper και την Dbase, τις βάσεις δεδομένων και τα σχετικά ευρετήρια, στην ενεργή περιοχή εργασίας του προγράμματος. Αν δεν έχει ορίσματα κλείνει όλα τα αρχεία και τα ευρετήριά τους. Η πιο σημαντική παράμετρος της εντολής είναι η INDEX που ορίζει το όνομα του ευρετηρίου που θα ανοίξει μαζί με το αρχείο.

Παραδείγματα κώδικα :

α) USE KATALOGO INDEX NUMBERβ) USE

Η πρώτη εντολή USE ανοίγει το αρχείο KATALOGO, με πρωτεύων ευρετήριο το NUMBER.Η δεύτερη εντολή USE θα κλείσει το αρχείο και το ευρετήριο.

QUIT

Η εντολή QUIT τερματίζει ένα πρόγραμμα και κλείνει όλα τα, πιθανώς, ανοιχτά αρχεία. Μετά την εντολή QUIT,ο έλεγχος του ηλεκτρονικού υπολογιστή επιστρέφει στο λειτουργικό σύστημα MS-DOS ή στα WINDOWS 95 ή 98,αν έχουμε ρυθμίσει κατάλληλα τις συντομεύσεις, shortcuts, των προγραμμάτων. Η εντολή δεν έχει ορίσματα και χρησιμοποιείται συνήθως σαν τελευταία σε ένα πρόγραμμα.

Παράδειγμα κώδικα :

SET COLOR TOCLSUSEQUIT

Με αυτές τις τέσσερις εντολές κλείνει η εφαρμογή των σημειώσεων, στο αρχείο πηγαίου κώδικα main.prg. Η πρώτη ακυρώνει όλες τις αλλαγές που έχουν γίνει στα χρώματα της οθόνης, η δεύτερη καθαρίζει την οθόνη από τις εξόδους όλων των εντολών και των συναρτήσεων του Clipper, η τρίτη κλείνει όλα τα αρχεία που χρησιμοποιεί το πρόγραμμα και η εντολή QUIT τερματίζει το πρόγραμμα και επιστρέφει τον έλεγχο στο λειτουργικό σύστημα του ηλεκτρονικού υπολογιστή.

SPACE( )

Η συνάρτηση SPACE( ) «γεμίζει» ένα αλφαριθμητικό με τόσα κενά διαστήματα, όσα ορίζει ο αριθμός που δέχεται σαν όρισμα. Χρησιμοποιείται για την αρχικοποίηση των μεταβλητών τύπου character και memo.

Παράδειγμα κώδικα :

PROCEDURE TEXT

LOCAL XNOTES1

Page 40: Προγραμματισμός σε Clipper - 1

XNOTES1 : = SPACE( 10 )

Αμέσως μετά την δήλωση μιας μεταβλητής σε μια διαδικασία, πρέπει να γίνεται η αρχικοποίησή της με την συνάρτηση SPACE( ).

MEMOEDIT( )

Η συνάρτηση MEMOEDIT( ) είναι μια από τις πιο σημαντικές του Clipper,γιατί δίνει την δυνατότητα επεξεργασίας σε μεταβλητές τύπου character αλλά κυρίως σε μεταβλητές τύπου memo. Η συνάρτηση είναι ουσιαστικά ένας μικρός κειμενογράφος και περιλαμβάνει όλες τις βασικές διαδικασίες ενός τέτοιου προγράμματος. Ο κώδικας που την αποτελεί, περιλαμβάνεται στην βιβλιοθήκη EXTEND.LIB και είναι ένα ολόκληρο πρόγραμμα που δέχεται πολλές παραμέτρους.

Παράδειγμα κώδικα :

USE

USE SHMEIVS

XNOTES1 : = MEMOEDIT(NOTES,9,2,22,75,.T.,”WP_UDF”)

REPLACE NOTES WITH XNOTES1

USE

Η πρώτη εντολή κλείνει κάθε αρχείο που είναι πιθανό να είναι ανοιχτό και η δεύτερη ανοίγει τα αρχεία SHMEIVS.DBF και SHMEIVS.DBT. Αυτά τα δύο αρχεία περιέχουν τις απαραίτητες εγγραφές και τα πεδία κειμένου, memo, για την επιλογή του προγράμματος « Σημειώσεις ». Η συνάρτηση MEMOEDIT( ) θα εμφανίσει πρώτα ένα πλαίσιο στην οθόνη, με τις συντεταγμένες 9,2,22,75. Το πλαίσιο αυτό ξεκινά από την 9η γραμμή και την 2η στήλη και κλείνει στην 22η γραμμή και στην 75η στήλη. Η πέμπτη παράμετρος .Τ. επιτρέπει την επεξεργασία της σελίδας που θα εμφανιστεί. Αν η παράμετρος οριστεί σαν .F. μπορούμε μόνο να δούμε τα περιεχόμενα του κειμένου, χωρίς να μπορούμε να προσθέσουμε ή να διορθώσουμε τα δεδομένα. Η WP_UDF( ) είναι μια συνάρτηση που είναι ορισμένη για την επεξεργασία του κειμένου. Η πρώτη παράμετρος NOTES είναι το όνομα της μεταβλητής, με το οποίο βρίσκεται η σελίδα, το κείμενο μέσα στο αρχείο SHMEIVS.DBF. Μετά την επεξεργασία του κειμένου από την συνάρτηση MEMOEDIT( ) το αποτέλεσμα καταχωρείται στην μεταβλητή XNOTES1. Τερματίζουμε την διαδικασία της επεξεργασίας του κειμένου με την εντολή USE που κλείνει και τις ανοιχτές βάσεις δεδομένων.

REPLACE

Η εντολή REPLACE αντικαθιστά τις τιμές των μεταβλητών του προγράμματος, στα πεδία των εγγραφών μέσα στις βάσεις δεδομένων. Με αυτόν τον τρόπο ο Clipper γράφει στον σκληρό δίσκο τα δεδομένα που επεξεργάζονται τα προγράμματά του. Μετά την εγγραφή των καινούργιων δεδομένων, τα ευρετήρια ενημερώνονται αμέσως, αν το πεδίο που ενημερώθηκε είναι κλειδί του ευρετηρίου.

Παράδειγμα κώδικα :

XNOTES1 : = MEMOEDIT(NOTES,9,2,22,75,.T.,”WP_UDF”)

REPLACE NOTES WITH XNOTES1

Page 41: Προγραμματισμός σε Clipper - 1

Στην πρώτη γραμμή κώδικα η συνάρτηση MEMOEDIT( ) θα επεξεργαστεί το πεδίο NOTES και θα καταχωρήσει τις αλλαγές στην μεταβλητή XNOTES1. Στη συνέχεια η εντολή REPLACE θα αντικαταστήσει στο πεδίο ΝΟTES του αρχείου, τα περιεχόμενα της μεταβλητής XNOTES1.

VERSION( )

Η συνάρτηση VERSION( ) επιστρέφει την έκδοση του προγράμματος του Clipper που χρησιμοποιείται για την ανάπτυξη του πηγαίου κώδικα. Η εφαρμογή των σημειώσεων έχει δημιουρ-γηθεί με την έκδοση του Clipper 5.2 και η συνάρτηση επιστρέφει την έκφραση “ Clipper ® 5.2 Intl. “

Παράδειγμα κώδικα :

@ 14,09 SAY VERSION( )

Η εντολή SAY εμφανίζει στην οθόνη την έξοδο της συνάρτησης VERSION( ).

KEYBOARD

Η εντολή αυτή αδειάζει τον buffer του πληκτρολογίου,(βλέπε συνάρτηση INKEY( ) ),και τοποθετεί σε αυτόν ένα αλφαριθμητικό. Πιο απλά, τοποθετεί στην μνήμη του ηλεκτρονικού υπολογιστή πληκτρολογήσεις, σαν να έχουν γίνει από τον χρήστη.

Παραδείγματα κώδικα :

α) KEYBOARD CHR( 27 )+CHR( 19 )β) KEYBOARD CHR( 27 )+CHR( 4 )

Στο πρώτο παράδειγμα καταχωρούνται στην μνήμη τα πλήκτρα με ASCII κωδικούς 27 και 19,το ESC και το αριστερό βέλος ,( ),ενώ στο δεύτερο τα πλήκτρα 27 και 4,που αντιστοιχούν στο Esc και το δεξί βέλος,( ). Έτσι αν πατηθεί το αριστερό ή το δεξί βελάκι, ενεργοποιείται και το πλήκτρο Esc.Αυτό επιτρέπει την μετακίνηση μέσα σε ανοιχτά μενού, με τις επιλογές να φαίνονται στα πλαίσια τους.

RUN

Με την εντολή RUN ενεργοποιούμε εντολές ή προγράμματα στο MS-DOS,μέσα από το περιβάλλον του Clipper. Όταν δώσουμε αυτή την εντολή φορτώνεται στην μνήμη του υπολογιστή ένα αντίγραφο του COMMAND.COM και με αυτό τον τρόπο εκτελούνται όλες οι σχετικές εντολές.

Παράδειγμα κώδικα :

RUN ARTΑυτή είναι η εντολή που ενεργοποιεί στην εφαρμογή τον ScreenSaver με το όνομα ART.Το ART είναι ένα πρόγραμμα γραφικών, που έχει δημιουργηθεί με την γλώσσα προγραμματισμού Turbo Pascal 6.0 και «τρέχει» σε Ms-Dos mode.

PARAMETERS

Η έκφραση PARAMETERS είναι μια πρόταση που δημιουργεί στην μνήμη μεταβλητές τύπου PRIVATE. Στις μεταβλητές αυτές περνιούνται τιμές από διαδικασίες ή συναρτήσεις του προγράμματος. Στον Clipper 5.2 δεν χρησιμοποιείται συχνά για να ορίσει μεταβλητές, αφού συνηθίζονται οι εκφράσεις LOCAL και STATIC.

Παράδειγμα κώδικα :

Page 42: Προγραμματισμός σε Clipper - 1

PARAMETERS MODE, LINE, COL

ALLTRIM( )

Η συνάρτηση ALLTRIM( ) δέχεται σαν όρισμα ένα αλφαριθμητικό, από το οποίο αφαιρούνται όλα τα κενά διαστήματα. Η συνάρτηση αυτή αποκόπτει τα κενά, και από την δεξιά και από την αριστερή πλευρά του αλφαριθμητικού, όπως κάνουν ξεχωριστά οι συναρτήσεις RTRIM( ) και LTRIM( ) του Clipper. Τα παραδείγματα που ακολουθούν είναι λειτουργικά ισοδύναμα για τις μεταβλητές τύπου character,που έχουν σαν ορίσματα μέσα στις παρενθέσεις.

Παραδείγματα κώδικα :

α) ALLTRIM(EPON)β) RTRIM(LTRIM(ONOM))γ) LTRIM(RTRIM(PATR))

STR( )

Η συνάρτηση STR( ) μετατρέπει μια αριθμητική έκφραση σε αλφαριθμητικό. Χρησιμοποιείται για την εμφάνιση αριθμών στην οθόνη, αφού πρέπει πάντα να μετατραπούν σε αλφαριθμητικά μέσω αυτής της συνάρτησης. Μαζί με τον αριθμό που θα μετατραπεί μπορεί να οριστεί και το συνολικό μήκος και τα δεκαδικά ψηφία που θα έχει.

Παράδειγμα κώδικα :

STR(LINE,6,2)

Η αριθμός που περιέχεται στην μεταβλητή LINE θα εμφανιστεί στην οθόνη με συνολικό μήκος 6 ψηφίων, από τα οποία τα δύο θα είναι δεκαδικά.

NEXTKEY( )

Η συνάρτηση NEXTKEY( ) επιστρέφει στο πρόγραμμα το πρώτο πλήκτρο που έχει αποθηκευτεί στον buffer του πληκτρολογίου,(βλέπε συνάρτηση INKEY( ) - σελ 31).Χρησιμοποιείται για να ελέγξει κάποια πληκτρολόγηση και να αποτελέσει συνθήκη για κάποια διαδικασία του προγράμματος.

Παράδειγμα κώδικα :

IF NEXTKEY( ) = -11

EXIT

ENDIF

Στο παράδειγμα η συνάρτηση ελέγχει αν το πλήκτρο που πατήθηκε είναι το Ctrl - W, και αν είναι αληθής η συνθήκη, βγαίνει από κάποια δομή DO … WHILE ή DO … CA-SE, που υπάρχει στο πρόγραμμα.

ALERT( )

H συνάρτηση ALERT( ) χρησιμοποιείται σε ένα πρόγραμμα, για να δημιουργήσει στην οθόνη του ηλεκτρονικού υπολογιστή, ένα πλαίσιο με κάποιο μήνυμα. Μαζί με το αλφαριθμητικό του μηνύματος,

Page 43: Προγραμματισμός σε Clipper - 1

εμφανίζει και κάποιες επιλογές σε μορφή μενού. Τα μηνύματα των επιλογών είναι από τα ορίσματα που δέχεται η συνάρτηση. Είναι πολύ χρήσιμη για να διακλαδώσουμε εύκολα την ροή ενός προγράμματος, χωρίς να χρειάζεται να αναπτύξουμε ξεχωριστό κώδικα για αυτό το σκοπό. Επίσης χρησιμοποιείται από τον Clipper εξ’ ορισμού, για να εμφανίζει μηνύματα λάθους στην οθόνη. Αν πατηθεί το πλήκτρο Esc,η συνάρτηση επιστρέφει την τιμή 0,ενώ αν επιλεγεί η πρώτη προ-τροπή επιστρέφει τον αριθμό 1,αν επιλεγεί η δεύτερη προτροπή τον αριθμό 2 κ.ο.κ.

Παράδειγμα κώδικα :

ALERT( “ Μη δίνετε κενά… “ , { ” Επιστροφή “ } )

Το πρώτο όρισμα είναι το μήνυμα της συνάρτησης ALERT( ),ενώ μέσα στις αγκύλες γράφουμε τα μηνύματα που εμφανίζονται στις προτροπές.

ACHOICE( )

Η συνάρτηση ACHOICE( ) χρησιμοποιείται για την δημιουργία ενός μενού επιλογών. Οι επιλογές καταχωρούνται στα στοιχεία ενός πίνακα, που περνά σαν όρισμα στην συνάρτηση. Η ACHOICE( ) επιστρέφει μια αριθμητική τιμή, με βάση την οποία γίνεται η επιλογή της επόμενης διαδικασίας του προγράμματος. Στην πιο απλή μορφή της, χρησιμοποιείται με τις τέσσερις συντεταγμένες της οθόνης και το όνομα του πίνακα που περιέχει τις επιλογές του μενού. Η συνάρτηση ACHOICE( ) κατασκευάζει τα μενού των επιλογών με την βοήθεια της εντολής DO CASE.

Παράδειγμα κώδικα :

LOCAL PINAKAS,EPILOG

PINAKAS := { “ Εισαγωγή “,” Διόρθωση ”,” Διαγραφή ”,” Σύνολο ”}

EPILOG:=ACHOICE(5,5,11,16,PINAKAS)

DO CASE

CASE EPILOG=0 EXIT CASE EPILOG=1 EISAGΟGH( ) CASE EPILOG=2 NOTREADY( ) CASE EPILOG=3 NOTREADY( ) CASE EPILOG=4 SYNOLO( )

ENDCASEΗ συνάρτηση ACHOICE( ) επιστρέφει μια τιμή στην μεταβλητή EPILOG, και το πρόγραμμα προχωρά σε κάποια διαδικασία. Η μεταβλητή αυτή και το όνομα του πίνακα, ορίζονται πριν από την κλήση της συνάρτησης. Αν πατηθεί από τον χρήστη, το πλήκτρο Esc, η ACHOICE( ) επιστρέφει την τιμή 0 και το πρόγραμμα βγαίνει από την DO CASE. Με κάθε άλλη επιλογή από 1 έως 4, ενεργοποιείται κάποια procedure,με μια συγκεκριμένη λειτουργία του προγράμματος.

COUNT

Page 44: Προγραμματισμός σε Clipper - 1

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

Παραδείγματα κώδικα :

α) COUNT TO XSERβ) COUNT TO XSER WHILE ONOM=” Α “ FOR PATR= “ Β “

Στο πρώτο παράδειγμα, η XSER περιέχει τον αριθμό όλων των εγγραφών του αρχείου, ενώ στο δεύτερο μόνο όσους εκπαιδευόμενους έχουν όνομα Α και πατρώνυμο Β.

APPEND BLANK

Η εντολή APPEND BLANK προσθέτει μια νέα κενή εγγραφή στο τέλος μιας βάσης δε-δομένων και τοποθετεί τον δείκτη εγγραφών σε αυτή την εγγραφή. Δεν παίρνει ορίσματα και συντάσσεται με το κενό διάστημα απαραίτητα ανάμεσα στις δύο λέξεις.

Παράδειγμα κώδικα :

PRO( )OTHONH( )GETAST( )APPEND BLANKREPLAST( )

Στο παράδειγμα αυτό, όλες οι συναρτήσεις είναι UDF, (User Define Functions), δηλαδή ορισμένες από τον χρήστη, αφού δεν ανήκουν στο στάνταρ σετ των εντολών του Clip-per. Η συνάρτηση PRO( ) αρχικοποιεί τις μεταβλητές του προγράμματος που θα δεχθούν δεδομένα για το αρχείο, η συνάρτηση OTHONH( ) σχηματίζει την κάρτα εισαγωγής δεδομένων, η συνάρτηση GETAST( ) πραγματοποιεί την εισαγωγή δεδομένων και η εντολή APPEND BLANK προσθέτει μια καινούργια εγγραφή στο αρχείο. Τέλος η συνάρτηση REPLAST( ) αντικαθιστά τα δεδομένα στα πεδία της εγγραφής.

DATE( )

Η συνάρτηση DATE( ) διαβάζει το ρολόι του συστήματος και επιστρέφει την ημερομηνία που δείχνει. Δεν παίρνει ορίσματα και περιέχεται στην βιβλιοθήκη Clipper.Lib.

Παράδειγμα κώδικα :

DATE( )

TΙΜE( )

Η συνάρτηση TΙΜE( ) διαβάζει το ρολόι του συστήματος και επιστρέφει την ώρα που δείχνει. Δεν παίρνει ορίσματα και περιέχεται στην βιβλιοθήκη Clipper.Lib.

Παράδειγμα κώδικα :

TΙΜE( )

GO

Page 45: Προγραμματισμός σε Clipper - 1

Η εντολή GO μετακινεί τον δείκτη εγγραφών σε μια συγκεκριμένη θέση μέσα σε μια ανοιχτή βάση δεδομένων. Η παράμετρος που δέχεται μπορεί να είναι αριθμητική, ή μια από τις δύο λέξεις TOP και BOTTOM.

Παραδείγματα κώδικα :

α) GO 12β) GO BOTTOMγ) GO TOP

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

DBEDIT( )

Η συνάρτηση DBEDIT( ) είναι από τις σημαντικότερες του Clipper, γιατί δίνει την δυνατότητα εμφάνισης και επεξεργασίας όλων των εγγραφών που βρίσκονται μέσα σε μια βάση δεδομένων. Η συνάρτηση προβάλει στην οθόνη όλο το αρχείο και η επεξεργασία των εγγραφών, γίνεται με την βοήθεια παρόμοιων πλήκτρων με αυτά που χρησιμοποιεί ένας κειμενογράφος. Ο πηγαίος κώδικας της συνάρτησης DBEDIT( ), περιλαμβάνεται στην βιβλιοθήκη EXTEND.LIB του Clipper και αποτελεί μια ολοκληρωμένη εφαρμογή, που μπορεί να ρυθμιστεί με πολλές παραμέτρους.

Παράδειγμα κώδικα :

USE

USE KATALOGO

DBEDIT( )

DBEDIT( 9,2,22,75,,”DB_UDF”)

USE

Η πρώτη εντολή USE κλείνει κάθε αρχείο που μπορεί να είναι ανοιχτό, και η δεύτερη εντολή USE ανοίγει την βάση δεδομένων KATALOGΟ.DBF. Το αρχείο αυτό περιέχει τις εγγραφές των εκπαιδευομένων που επεξεργάζεται το πρόγραμμα. Στο παράδειγμα η συνάρτηση DBEDIT( ) δεν έχει ορίσματα και γι’ αυτό εμφανίζει τις εγγραφές χρησιμοποιώντας ολόκληρη την οθόνη. Η δεύτερη συνάρτηση DBEDIT( ) έχει πέντε παραμέτρους και λειτουργεί με πιο καθορισμένο τρόπο από την πρώτη. Η συνάρτηση αυτή θα εμφανίσει στην οθόνη το αρχείο, σε μια περιοχή που ορίζεται από τις συντεταγμένες 9,2,22,75. Η περιοχή αυτή ξεκινά από την 9η γραμμή και την 2η στήλη και φτάνει μέχρι την 22η γραμμή και την 75η στήλη. Η συνάρτηση DB_UDF( ) είναι ορισμένη από τον χρήστη για την επεξεργασία των εγγραφών. Τερματίζουμε την διαδικασία με την εντολή USE που κλείνει την βάση δεδομένων.

Οι εντολές του αρχείου κατασκευής Demo.Rmk.

# ifdef … # else … # endif

Οι εντολές που έχουν το σύμβολο # μπροστά από το όνομά τους, λέγονται και ντιρεκτίβες και απευθύνονται στον μεταγλωττιστή, (compiler), του Clipper. Η σύνθετη εντολή # ifdef … # else … # endif, χρησιμοποιείται για να γίνει μεταγλώττιση υπό συνθήκες, (conditional compilation).

Page 46: Προγραμματισμός σε Clipper - 1

Παράδειγμα κώδικα :

# ifdef DIST

SWITCHES = / M LINKS =

# else

SWITCHES = / M LINKS = / PLL:BASE52

# endif

Στο παράδειγμα η εντολή # ifdef ελέγχει, αν δίνεται η παράμετρος DIST, πριν από την τελική κατασκευή του αρχείου. Αν η συνθήκη είναι αληθής, θα μεταγλωττίσει ξεχωριστά τα αρχεία του πηγαίου κώδικα, (*.prg), γιατί αυτό καθορίζει η παράμετρος /Μ. Κατόπιν θα δημιουργήσει το εκτελέσιμο αρχείο της εφαρμογής, (*.exe), χωρίς να συνδέσει σε αυτό τις βιβλιοθήκες του Clipper. Αυτό γίνεται για λόγους εξοικονόμησης χώρου στο δίσκο, κατά την φάση ανάπτυξης του προγράμματος. Χωρίς τις βιβλιοθήκες, ένα εκτελέσιμο αρχείο του Clipper, καταλαμβάνει περίπου 300 ΚΒ, (KiloBytes), λιγότερο χώρο στο σκληρό δίσκο του ηλεκτρονικού υπολογιστή. Αν δεν δοθεί αυτή η παράμετρος, θα δημιουργηθεί το τελικό αρχείο της εφαρμογής μαζί με την προσυνδεδεμένη βιβλιο-θήκη, (PreLinked Library), του Clipper, την BASE52.PLL. Οι παράμετροι ανάμεσα στις ντιρεκτίβες, SWITCHES και LINKS, καθορίζουν την διαδικασία διασύνδεσης. Η εντολή Clipper καλεί τον μεταγλωττιστή για να αρχεία του πηγαίου κώδικα. Η εντολή Rtlink Fi <Filenames> LIB Tiley ενεργοποιεί τον διασυνδετή με παραμέτρους Fi τα ονόματα των object αρχείων και LIB για την σύνδεση της βιβλιοθήκηςTiley.Lib.

Page 47: Προγραμματισμός σε Clipper - 1

ΕΠΙΛΟΓΟΣ

Ο Clipper 5.2 είναι μια γλώσσα προγραμματισμού με απεριόριστες δυνατότητες, τόσο για τους αρχάριους όσο και για τους έμπειρους προγραμματιστές. Διαθέτει έναν μεγάλο αριθμό εντολών και συναρτήσεων, ικανό να δημιουργήσουν μια επαγγελματική εφαρμογή και να δώσουν τον πλήρη έλεγχο στον χρήστη. Οι βάσεις δεδομένων που χρησιμοποιεί ο Clipper είναι συμβατές με τα γνωστότερα προγράμματα επεξεργασίας που υπάρχουν στην αγορά και ειδικεύονται στα αρχεία αυτού του τύπου. Αυτό σημαίνει ότι η δουλειά που αναπτύσσεται στο περιβάλλον του Clipper, μπορεί να αξιοποιηθεί και με άλλα προγράμματα, είτε αυτά υλοποιούνται κάτω από περιβάλλον του MS -DOS, είτε κάτω από τα Windows 95 ή 98. Σαν τρόπος δουλειάς, μπορεί να φανεί λίγο παράξενος στην αρχή, ειδικά σε προγραμματιστές που αναπτύσσουν κώδικα σε άλλες γλώσσες προγραμματισμού. Η απλότητα του συντακτικού του Clipper, καθώς και η άμεση αποτελεσματικότητα των εντολών και των συναρτήσεών του, είναι από τα βασικότερα χαρακτηριστικά του. Το γεγονός ότι ο Clipper λειτουργεί κάτω από MS - DOS περιβάλλον δεν αποτελεί σε καμία περίπτωση μειονέκτημα, αλλά αντίθετα πλεονέκτημα. Το λειτουργικό σύστημα του MS -DOS, για όσους το γνωρίζουν καλά, είναι εξαιρετικά σταθερό, δεν «κολλάει», δηλαδή τον ηλεκτρονικό υπολογιστή, και πολύ αξιόπιστο, α-φού είναι πολύ σπάνιο, για να μην πούμε αδύνατο, φαινόμενο, η απώλεια αρχείων ή δεδομένων. Τα Windows 95,από το καλοκαίρι του 1995 που κυκλοφόρησαν, έλυσαν πολλά καθημερινά προβλήματα αλλά δημιούργησαν και πολλά άλλα, που δεν ήταν δυνατόν να επιλυθούν. Τα καινούργια Windows 98 είναι πολύ πιο αξιόπιστα και σταθερά και παρουσιάζουν σημαντικές βελτιώσεις σε όλους τους τομείς. Οποίο και αν είναι, όμως, το λειτουργικό σύστημα του ηλεκτρονικού υπολογιστή, ο Clipper είναι σε θέση να υλοποιεί τις εφαρμογές του με ακρίβεια και αξιοπιστία, είτε αυτές λειτουργούν σε περιβάλλον δικτύου είτε όχι. Μια από τις σημαντικές συμβατότητες του Clipper εί-ναι και η χρήση του επεξεργαστή του ηλεκτρονικού υπολογιστή. Τα προγράμματα του Clipper υλοποιούνται χωρίς προβλήματα σε συστήματα που διαθέτουν επεξεργαστές της Intel, ενώ είναι πολύ πιθανόν να παρουσιάσουν προβλήματα σε επεξεργαστές άλλων εταιρειών, όπως η AMD και η Cyrix. Οι σημειώσεις αυτές είναι ένα απλό πρώτο βήμα, για να εισαγάγουν κάποιον στον προγραμματιστικό κόσμο του Clipper. Για να μπορέσει ένας προγραμματιστής να τον χρησιμοποιήσει, για να αναπτύξει τις δικές του εφαρμογές, πρέπει απαραίτητα, να αποκτήσει μερικά από τα βιβλία που κυκλοφορούν. Αυτά πρέπει να μελετηθούν πολύ προσεκτικά, για να αποκτήσει κανείς την ικανότητα να γράφει πλήρως ελεγχόμενο κώδικα. Στο δεύτερο μέρος των σημειώσεων, στον Τόμο Β’, θα παρουσιάσουμε μερικές ακόμα από τις σημαντικότερες δυνατότητες του Clipper,που μπορούν να βελτιώσουν θεαματικά την απόδοση των εφαρμογών που δημιουργεί. Ο Clipper,σαν εργαλείο ανάπτυξης εφαρμογών, έχει πολλές καινούργιες γνώσεις να προσφέρει, αλλά και να βελτιώσει τις ήδη υπάρχουσες, σε οποιονδήποτε δεν έχει χάσει την θέληση και την ικανότητα να μαθαίνει.

Page 48: Προγραμματισμός σε Clipper - 1

ΒΙΒΛΙΟΓΡΑΦΙΑ

1) « Χρήση και εφαρμογές του Clipper » - W.Edwrad Tiley Εκδόσεις M.Γκιούρδας - Αθήνα 1994

2) « Πλήρης οδηγός του Clipper 5.2 » - Rick Spence Εκδόσεις M.Γκιούρδας - Αθήνα 1994

3) « Προγραμματισμός με τον Clipper 5.01 » - Stephen J. Straley Εκδόσεις Κλειδάριθμος - Αθήνα 1992 (Τόμοι Α’ και Β’)

4) « The Steve Straley seminars : Clipper 5.0 » - Stephen J. Straley Εκδόσεις Bantam Computer Books - New York 1992

5) « Clipper Developer’s Library » - James Occhiogrosso Εκδόσεις Microtrend Books - San Marcos 1992 (2nd Edition)

6) « Programming in Clipper 5 » - Mike Schinkel - John Kester Εκδόσεις Addison Wesley - Reading, Massachusetts 1992