Informatika | UNIX / Linux » Segédlet az, X-windows programozása, méréshez

Alapadatok

Év, oldalszám:2004, 9 oldal

Nyelv:magyar

Letöltések száma:76

Feltöltve:2009. október 03.

Méret:41 KB

Intézmény:
-

Megjegyzés:

Csatolmány:-

Letöltés PDF-ben:Kérlek jelentkezz be!



Értékelések

Nincs még értékelés. Legyél Te az első!


Tartalmi kivonat

SEGÉDLET AZ "X-WINDOWS PROGRAMOZÁSA" c. MÉRÉSHEZ Készült: A Távközlési és Telematikai Tanszék UNIX LAboratóriumában Összeállította: Baumann Ferenc Tel.: 24-02 1. X-Windows X-Window készülékfüggetlen hálózatorientált grafikus user interface(GUI).  A grafikus user interface azt jelenti, hogy a felhasználó, többnyire szines nagy felbontású, grafikus képeket használ a pixelekből felépülő képernyőn . Ezt inkább egérrel, track ball-lal vagy más hasonló eszközzel vezérli, mint keyboard-dal.  Hálózatorientált, mivel az alkalmazásnak nem szükségképpen kell ugyanazon a computeren lenni, mint ahol a felhasználó ül.  Készülékfüggetlensége két dolgot jelent. Egy X-Window alkalmazás forráskódját le kell tudni fordítani és futtatni minden gyártó azon rendszerein, amelyek az X-Window-t támogatják. Továbbá egy X-Window alkalmazás display független is Manapság az X-Window szinte az egyetlen igazán

elterjedt GUI minden UNIX operációs rendszeren. De nem csak a UNIX világra korlátozódik Létezik VM PCDOS VMS operációs rendszerekben is X-Window rövid története: Az MIT-n fejlesztették ki az Athena project keretében, melyet számos szervezet alapított, köztük az IBM és a DEC. A project célja kialakítani egy közös GUI-t, amely képes heterogén hálózati környezetben is müködni. 1986-ig azonban ezt csak az MITn és a DEC-en belül használták 1986-ban jelent meg az X104, amelyet már sok UNIX-ban alkalmaztak, azonban a megbízhatósága nem volt a legjobb. Ezért 1987ben megjelent az X11 ipari szabvánnyá gyakorlatilag 1988-ban vált az X112 megjelenésével egyidőben. 1990-ben jelent meg az X114, amelyet a legtöbb gyártó alkalmaz a rendszerében. Azóta már piacra került az X115 ill az X116 is 2. X koncepció Client Server architektura Az X-Window rendszerben nem szükséges, hogy az alkalmazás ugyanazon a computeren fusson, amely a display-t kezeli.

Ez programokat követel meg az összeköttetés mindkét végén. Ezt két véget nevezzük X Client, ill X server-nek A két végnek nem szükségszerűen kell kiszolgálnia mindkettőt, de kiszolgálhatja. X server Az X server egy olyan alkalmazás, amely egy számítógépen futva kezeli a display-t. Válaszol az vezérlő input eszközöknek és közvetíti a felhasználó tevékenységét az X client felé, mint X eseményeket. Az X server képes egyszerre több X client-sel 2 kommunikálni, ezért az is elképzelhető, hogy egy alkalmazás egyszerre több számítógépen fut. Létezik egy speciális terminál, amely nem képes alkalmazások futtatására, csak az X környezet X server részének futtatására ill. a hálózatra csatlakozásra Ez az ún X terminal. X client Ez az applikáció, az X környezet X client felöli oldala. Client oldalon szükséges egy könyvtár, amely realizálja a kapcsolatot az X serverrel. X hálózaton  Az X client és az X server

különválasztása lehetővé teszi az alkalmazásoknak a display függetlenséget . Így nem szükséges a különböző tipusú display-knek megfelelő könyvtárakat beszerkeszteni az X client oldalon. Az X server kezeli valamennyit, a nagy felbontású színes monitortól a kis monochrome monitorig.  Az X server-nek és az X client-nek nem kell különböző számítógépen lennie,. ha ezt a számítógép teljesítménye lehetővé teszi.  Az X server és az X client közötti kommunikációs mechanizmust X protokollnak nevezzük. Amikor a két vég nem egy gépben helyezkedik el, akkor az X protokoll valamilyen hálózati protokollon keresztül ( általában TCP-IP) jut el a másik végre. Azonban átviteli sebesség korlátok miatt ezt csak lokális hálózaton érdemes alkalmazni.  Lehetséges, hogy az X server különböző implementációi némileg különböző módon jelenítik meg ugyanazt a funkciót. A különböző serverek fizikailag különböző

tulajdonságokkal rendelkezhetnek ( beállított színek, képernyő felbontása ). Így egy X client különbözőképpen jelenhet meg, ha különböző X server-hez kapcsolódik. 3. X-Windows programozása Az X windows programozási környezete 3 részt tartalmaz, melyek kapcsolatát a következő ábra tartalmazza. 3 Application X Toolkit Widget set Intrinsics Xlib X Windows programozási interface-e Xlib Ez az alapszint. Az X az X protocol-t jelenti, amely specifikálja az összes információcsomag tartalmát, amelyet az X server küld az X client-nek és fordítva. (akár egy gépen van az X server és client akár külön gépen.) Minden X protokoll üzenetnek megfelel egy függvény a legalacsonyabb programozási szinten. Ez az Xlib könyvtár. X Toolkit Az Xlib-nek létezik egy magasabb szintű alternatívája, amelynek része egy elem gyűjtemény amelyet widget-nek nevezünk. Ezt a gyűjteményt az X alkalmazás megjelenítésénél alkalmazhatjuk sikeresen. Ezek olyan

elemek, mint a nyomógomb kezelés, message box( amely feljön és megjelenit valamely információt a felhasználó számára) , edit box (amelyben a felhaszáló adatokat gépelhet be az alkalmazás számára). Pl egy gomb megnyomásakor egy widget  kiszámítja egy kijelzendő szöveg szélességét pixelben  készít egy ablakot a kívánt méretben,  beállítja, hogy az adott ablak milyen eseményekre lesz érzékeny,  elvégzi a komplex grafikus műveletek ( 2D 3D alkalmazások pl.: forgatás),  elhelyezi az ablakot a képernyőn,  kezeli az eseményeket az ablakban. Eseményvezérelt programok Az X-Windows programok eseményvezéreltek. A tradicionális alkalmazásokban a felhasználó párbeszédben véges számú lehetőségből választva vezérelte a programot. (Pl.: Menü-vezérelt alkalmazások hiearachikus menüj mellett az alkalmazás elindulása után megjelenik a főmenü, ebből juthatunk el a véges számú almenübe stb.) Minden 4 választás

után egy újabb almenü v. egy alprogram választódik ki Ez szigorúan hierarchikus. X-Window környezetben ez nem igaz. A felhasználó szabadon manipulálhatja a programot. Becsukhatja az ablakot, egyszerre több példányban különböző paraméterezéssel futtathatja, egyszerre az összes példány aktívan dolgozhat. Ilyen környezetben egy tradicionális alkalmazás hamarosan lefagyna. Ezért az alkalmazásokat X-Window környezetben úgy kell megtervezni, hogy az applikáció helyesen reagáljon a felhasználó összes lehetséges ténykedésére. Ez csak úgy lehetséges, ha a program fő ciklusában vár egy esemény megtörténésére, amikor egy ismert esemény bekövetkezik, akkor azt egy függvény lekezeli. Nem kötelező minden eseményt lekezelni. Dönteni kell arról, hogy lekezelendő, figyelmen kívül hagyandó, vagy tovább kell adni . Amikor egy eseményt generál a felhasználó, akkor az elősször egy esemény queueba kerül, amelyet az alkalmazás olvas.

Így nem vész el esemény akkor sem, ha az alkalmazás elfoglalt. Minden alkalmazás rendelkezik egy saját esemény bufferrel Az XToolkit-et felhasználva a programozáskor az események automatikusan olvasódnak az esemény bufferből és kerülnek ahhoz a widget-hez, amelyben az esemény generálódott. A widget lekezeli, ignorálja, vagy feldolgozza azt Widget programozása: A widget-ek az egyszerű X-windows interface építőkövei. Minden X-Windows widget-et hierarchikusan osztályokba vannak soroltak külső megjelenésük ill. viselkedésük alapján. Az igy osztályokba sorolt widget-ek (jellemzően úgy viselkednek, mint az objektumok) saját tulajdonságaikat minden esetben örökítik az osztályban a hierarchiában alattuk levőre. Fizikailag egy osztály egy pointer, amely egy adatstruktúrára mutat. Az X-windows object minden példánya két adatstruktúrából áll:  egy az osztály minden elemének általános viselkedését leiró adatstruktúrából  egy

egyedi adatstruktúrából, amely a speciális widget saját egyedi viselkededését írja le. Az Xtoolkit Intrisics definiál néhány alap widget osztályt, amelyek nem alkotnak egy teljes hierarchikus struktúrát. Az olyan widget készletek, mint a Motif vagy az Athena, ezen alap osztályok felhasználásával új teljes widget-készleteket épít fel. A gyakorlatban a programozó csak nagyon ritkán használja az alap widget-eket. ( A Motif widgetkészlet felépítését az 1. melléklet mutatja) Minden X alkalmazás a következő részekből áll: 5 1. A szükséges X header file-ok beillesztése a programba. 2. Az X alkalmazás inicializálása, melynek hatására létrejön a kapcsolat az X client és az X server között. 3. A kívánt widget példányok definiálása 4. A definiált widget-ek módosítása, ill. az X események kezelésének leírása (callback functions, event handlers ) 5. A widget-ek megvalósítása. 6. Események feldolgozása. Header file-ok Minden

X alkalmazás include file-jai a következők:  <X11/Intrinsic.h> amely az általános toolkit definíciókat tartalmazza Ez automatikusan include-olja a az < X11/Xlib.h > header file-t amelyben az Xlib függvények definíciói vannak. Alkalmazástól függően elképzelhető, hogy más belső header file-okra is szükség van, de a mérésben ilyen nem fordul elő.  <Xm/Xm.h> Ez egy általános header file, amelyre minden widget header hivatkozik.  <Xm/.h> Motif header file-ok Lényeges a header file-ok hivatkozási sorrendje a C programon belül. Ez maghatározhatja a program futtathatóságát. A helyes sorrend a következő:  Minden szükséges C könyvtár include file-ja  < X11/Intrinsic.h>  Minden más X11 header file <X11/. >  <Xm/Xm.h>  Minden más Motif header <Xn/.> Toolkit inicializálás X programok inicilizálása az XtAppInitialize() vagy XtVaAppInitilize() híívással történik. Ezt a rutint meg

kell hívni mielött még bármely más X függvényt hívnánk Ennek hatására a következő történik:  Megnyitja az összeköttetést az X server-rel,  Felépít egy ún. resource adatbázist, 6  Kielemzi a parancssor tartalmát,  Inicializálja a toolkit-et,  Létrehoz egy toplevel widget-et, amely minden más widget szülője lesz az alkalmazásban. Pl.: XtAppContext app context; Widget toplevel; toplevel=XtAppInitialize(&app context,"Name",NULL,0,&argc,argv,NULL,NULL,0) Widget példányok definiálása A widget példány generálása és felhasználása 3 lépésből áll:  A widget példány létrehozása,  Tudatni kell a szülőjével, hogy a létrehozott widget példány az ő gyereke. Erre azért van szükség, mivel a továbbiakban a widget szülője menedzseli a widget méretét elhelyezkedését stb.  Létre kell hozni a widget ablakát, ill. láthatóvá kell tenni Erre több alternatív mód is létezik.

XtCreateWidget() A widget példányok létrehozásának alapfüggvénye. XtManageChild() Az XtCreateWidget() függvénnyel létrehozott widget példány menedzselését egy szülőhöz rendeli. XtCreateManagedWidget() XtVarCreateManagedWidget() Ez a két függvény funkcójában azonos. A widget-et létrehozásakor egyben egy szülőhöz is rendeli. XmCreate<widgetname>() Motif widget létrehozása. A <widgetname> helyére a widget nevét kell helyettesíteni. Pl: XmCreatePushButton Eseménykezelés 7 Az eseménykezelés történhet callback függvénnyel vagy event handler-rel. Ez a segédlet csak a callback függvényes eseménykezeléssel foglalkozik. A callback függvény mindig void tipusú. Ebben a függvényben kell azt leírni, hogy adott X esemény hatására mit válaszol az alkalmazás. A widget példány callback függvénnyel történő kiegészítése az XtAddCallback() függvénnyel történik. A callback függvény 3 formális paraméterrel rendelkezik:

 Widget widget azonosító amelyre vonatkozik,  caddr t; egy cim ahol azok az adatok helyezkednek el, amelyet az alkalmazás át kíván adni a callback függvénynek.  caddr t; egy cím, ahol a callback függvény adatokat tud visszaadni az alkalmazásnak. Widget-ek megvalósítása A widget példányok létrehozása, ill. az eseménykezelő függvények megvalósítása nem jelenti, hogy a widgethez rendelt window is létrjön. Erről külön kell gondoskodni Ezt az XtRealizeWidget() függvény teszi meg, amely gondoskodik a paraméterként megadott widget ablakának megvalósításáról az összes gyerekével együtt. Események feldolgozása. Az események feldolgozását az XtMainLoop() v. XtAppMainLoop() függvény végzi. Ez egy végtelen ciklus, amely folyamatosan érzékeli a beérkező X eseményeket és meghívja az azt lekezelő függvényt. Xlib programozása Az Xlib hívások az X-Windows programozásának a legalacsonyabb szintjét jelentik. Az összes

magasabb szintű X elem ezekre sz Xlib könyvtári elemekre hivatkozik. Minden Xlib-beli hívás az X protokoll egyegy elemét valósítja meg A gyakorlatban az X alkalmazásoknak vannak olyan részei, melyet nem lehet magasabb szinten megvalósítani, azonban itt a programozás sokkal nehézkesebb. Egy Xlib hívásokból felépülő program a következő részeket kell, hogy tartalmazza: 8 1. Csatlakozás az X Server-hez (XOpenDisplay) 2. A kezelendő objektumok paramétereinek beállítása (szín, méret ) 3. Az objektumok létrehozása (XCreateSimpleWindow, XCreateWindow) 4. A kezelendő események maszkjának beállítása és hozzárendelése az objektumhoz (XSelectInput) 5. Az objektumok megjelenítése(XMapWindow) 6. Az esemény queue kitörlése (Xflush,Xsync) 7. Az események folyamatos feldolgozása (végtelen ciklus, XNextEvent) Már a lépések számából is jól látható, nem is beszélve a kezelendő nagy adatstruktúrákról, hogy az X-Windows programozása Xlib

könyvtári elemekkel nagyon komplikált. Főleg egy összetett, több menüt, almenüt, ill ablakokat tartalmazó alkalmazás esetén. Az Xlib könyvtár elemeit a 2 sz melléklet tartalmazza A pontos szintaktikáját a BOSS-on Infoexplorer segítségével ismerheti meg. 9