3.2.1 Η ΣΥΝΔΕΣΗ ΜΕ ΤΟ DISPLAY
Τη σύνδεση με τον εξυπηρετητή την δημιουργεί η συνάρτηση
XOpenDisplay. Η
συνάρτηση XOpenDisplay παίρνει ένα όρισμα, μία συμβολοσειρά (string) που
περιέχει το όνομα του display στο οποίο θέλουμε να συνδεθεί το πρόγραμμά
μας. Το όνομα του display πρέπει να είναι στην μορφή που περιγράφηκε στο
κεφάλαιο 2, δηλαδή host:display.screen. Στην περίπτωση που η συμβολοσειρά
είναι κενή (NULL) η σύνδεση γίνεται με το εξ'ορισμού display (αυτό δηλαδή
που ορίζει η μεταβλητή DISPLAY του φλοιού από τον οποίο ξεκινά η εφαρμογή
μας). Η XOpenDisplay σε περίπτωση επιτυχούς σύνδεσης επιστρέφει ένα δείκτη
σε μία δομή (structure) Display, αλλιώς επιστρέφει κενό (NULL). Η δομή
Display περιέχει τις απαραίτητες πληροφορίες για τον εξυπηρετητή και την
σύνδεση. Επιπλέον, στη συνέχεια, για καθ'όλη τη διάρκεια του προγράμματος ο
δείκτης αυτός θα είναι το βασικό όρισμα σε κάθε συνάρτηση της Xlib που θα
καλούμε και θα προσδιορίζει τον εξυπηρετητή που χρησιμοποιούμε. Ο ορισμός
της δομής Display υπάρχει στο include file Xlib.h.
Το τμήμα του προγράμματος που κάνει την σύνδεση με τη χρήση της
XOpenDisplay() μπορεί να γραφεί ως εξής:
#include
#include <Χ11/Xlib.h>
.
.
.
Display *display;
.
.
.
if ( (display = XOpenDisplay( NULL )) == NULL )
{
fprintf( stderr,
"Error: could not open connection on display %s .\n",
XDisplayName( display ) );
exit(1);
}
XOpenDisplay)
και επιστρέφουν την ζητούμενη τιμή. Τέτοιες συναρτήσεις (και μακροεντολές)
είναι οι ακόλουθες:
Window XDefaultRootWindow( Display* ),
Window DefaultRootWindow( Display* )
int XDefaultScreen( Display* ),
int DefaultScreen( Display* )
int XDefaultDepth( Display*, int ),
int DefaultDepth( Display*, int )
XDefaultScreen.
int XDisplayWidth( Display*, int ),
int XDisplayHeight( Display*, int ),
int DisplayWidth( Display*, int ),
int DisplayHeight( Display*, int )
XDefaultDepth.
char *XDisplayString( Display* ),
char *DisplayString( Display* )
XOpenDisplay υπάρχει και η
XCloseDisplay η
οποία κλείνει την σύνδεση με τον εξυπηρετητή των Χ Windows. Η XCloseDisplay
μπαίνει συνήθως στο τέλος του προγράμματος. Έτσι η λογική κατάληξη του
αποσπάσματος κώδικα που προηγήθηκε είναι:
.
.
.
XCloseDisplay( display );
}