ΠΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ (ΠΊΠΎΡΠΎΡΡΠΉ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π½Π΅ ΠΎΠΊΠ½ΠΎ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ "ΡΠ΄ΠΎΡΠ΅ΡΠ΅Π½ΠΈΠ΅" ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ) ΡΠΎΠ·Π΄Π°Π½ΠΎ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π² ΡΡΠΎΠΌ ΠΎΠΊΠ½Π΅ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π΅. ΠΠΎΡΠΎΠΌΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ²ΠΎΠ΅ΠΌ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠΌ ΠΎΠΊΠ½Π΅ - ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ Π΅Π³ΠΎ ΠΎΠΊΠ½ΠΎ "ΠΎΠ±ΡΠ΅Π·Π°Π΅ΡΡΡ" Π³ΡΠ°Π½ΠΈΡΠ΅ΠΉ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ. ΠΡΠ±ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ ΠΎΠ΄Π½ΠΎ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π΅ ΠΎΠΊΠ½ΠΎ, ΠΈ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΈ ΠΎΠΊΠ½Π° ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°ΡΡΡΡ Π²ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΡΡΠ΅ΠΊ. ΠΠΎΠ³Π΄Π° ΠΎΠΊΠ½ΠΎ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ "ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅ΡΡΡ", Π²ΡΠ΅ Π΅Π³ΠΎ ΠΎΠΊΠ½Π°-ΠΏΠΎΡΠΎΠΌΠΊΠΈ "ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°ΡΡΡΡ" Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π½ΠΈΠΌ, Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΈΡ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½ΠΈΡ. ΠΡΠ»ΠΈ ΠΎΠΊΠ½ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ° "ΠΏΠΎΠ΄Π½ΡΡΠΎ", ΠΎΠ½ΠΎ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ²ΠΎΠΈΡ ΡΠΎΠ±ΡΠ°ΡΡΠ΅Π².
1.1.3 Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°ΠΌΠΈ
ΠΠΊΠ½Π° ΠΌΠΎΠ³ΡΡ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°Ρ Π΄ΡΡΠ³ Π΄ΡΡΠ³Π°. X ΠΈΠΌΠ΅Π΅Ρ Π½Π°Π±ΠΎΡ ΡΡΠ΅Π΄ΡΡΠ², ΠΏΠΎΠ»ΡΠ·ΡΡΡΡ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°-ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΎΠΊΠΎΠ½ ΠΈ ΠΈΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΊΡΠ°Π½Π΅. ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΎΠ½Π° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΎΠΊΠ½Π°ΠΌΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ ΠΈΠ»ΠΈ ΠΌΡΡΠΈ. Π§ΡΠΎΠ±Ρ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²ΠΈΡΡ, Π½ΡΠΆΠ΅Π½ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΎΠΊΠΎΠ½ (Window manager). Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ² X ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ°ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ - twm. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Ρ, Π½ΠΎ, ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΎΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ Π±Π°Π·ΠΎΠ²ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ: ΠΏΠ΅ΡΠ΅Π΄Π²ΠΈΠ³Π°ΡΡ ΠΎΠΊΠ½Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΡΡΠΈ, ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΈΡ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈ Ρ.Π΄. ΠΠΎΠ»Π΅Π΅ ΡΠ°Π·Π²ΠΈΡΡΠΌ ΠΎΠΊΠΎΠ½Π½ΡΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ, ΠΏΠΎ Π²ΡΠ΅ΠΉ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° mwm (Motif Window Manager), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΠΈΡΡΠ΅ΠΌΡ OpenMotif.
ΠΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΎΠΊΠ½Π°ΠΌΠΈ, Π½ΠΈΡΠ΅Π³ΠΎ ΠΎ Π½ΠΈΡ Π½Π΅ Π·Π½Π°Ρ. Π ΠΎΠ΄Π½ΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈΠΌΠ΅ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΎΠΊΠΎΠ½, Π² Π΄ΡΡΠ³ΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΎΠΊΠ½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΄Π΅Π»Π°Π½ΠΎ ΠΌΠ΅Π½ΡΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ², Π° Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΎΠΊΠ½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΎ. ΠΠΊΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ΠΎ (ΠΏΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΎ Π² ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌΡ), Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°ΡΡ ΠΈΠΌΡ ΠΈ Π²ΠΈΠ΄ ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΎΠΎΠ±ΡΠΈΡΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΡ ΡΠ²ΠΎΠΈ ΠΏΠΎΠΆΠ΅Π»Π°Π½ΠΈΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠΊΠΎΠ½, ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π²Π° ΡΠΏΠΎΡΠΎΠ±Π°. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠΊΠ½Π° X ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ (hints) ΠΎ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎΠΊΠ½Π°, Π΅Π³ΠΎ ΡΠΈΡΠΈΠ½Π΅ ΠΈ Π²ΡΡΠΎΡΠ΅, ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΡ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°Ρ ΠΈ Ρ.Π΄. ΠΠΎ-Π²ΡΠΎΡΡΡ , ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π² X ΡΠΏΠΎΡΠΎΠ± ΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ - ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΡΠ²ΠΎΠΉΡΡΠ².
1.1.4 ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ X Window
Π‘ΠΈΡΡΠ΅ΠΌΠ° X Window ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π½Π° ΡΠ°ΡΡΡΠΎΠ²ΡΡ Π΄ΠΈΡΠΏΠ»Π΅ΡΡ . Π ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΡΠΎΠ΄Π° ΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΌΠ°ΡΡΠΈΡΠ΅ΠΉ ΡΠ²Π΅ΡΡΡΠΈΡ ΡΡ ΡΠΎΡΠ΅ΠΊ - ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΈΠΊΡΠ΅Π»Ρ ΠΊΠΎΠ΄ΠΈΡΡΠ΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ Π±ΠΈΡ (ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ 2, 4, 8, 16 ΠΈΠ»ΠΈ 24). Π§ΠΈΡΠ»ΠΎ Π±ΠΈΡ-Π½Π°-ΠΏΠΈΠΊΡΠ΅Π»Ρ Π½Π°Π·ΡΠ²Π°ΡΡ "ΡΠΎΠ»ΡΠΈΠ½ΠΎΠΉ" ΠΈΠ»ΠΈ Π³Π»ΡΠ±ΠΈΠ½ΠΎΠΉ Π΄ΠΈΡΠΏΠ»Π΅Ρ. ΠΠΈΡΡ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ Π½ΠΎΠΌΠ΅ΡΠ°ΠΌΠΈ Π²ΠΎ Π²ΡΠ΅Ρ ΠΏΠΈΠΊΡΠ΅Π»ΡΡ ΠΎΠ±ΡΠ°Π·ΡΡΡ ΠΊΠ°ΠΊ Π±Ρ ΠΏΠ»ΠΎΡΠΊΠΎΡΡΡ, ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΡΠΊΡΠ°Π½Ρ. ΠΠ΅ Π½Π°Π·ΡΠ²Π°ΡΡ ΡΠ²Π΅ΡΠΎΠ²ΠΎΠΉ ΠΏΠ»ΠΎΡΠΊΠΎΡΡΡΡ. X ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΈΡΠΎΠ²Π°ΡΡ Π² Π»ΡΠ±ΠΎΠΉ ΡΠ²Π΅ΡΠΎΠ²ΠΎΠΉ ΠΏΠ»ΠΎΡΠΊΠΎΡΡΠΈ (ΠΈΠ»ΠΈ ΠΏΠ»ΠΎΡΠΊΠΎΡΡΡΡ ), Π½Π΅ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅.
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΈΠΊΡΠ΅Π»Ρ Π½Π΅ Π·Π°Π΄Π°Π΅Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ²Π΅Ρ ΡΠΎΡΠΊΠΈ Π½Π° ΡΠΊΡΠ°Π½Π΅. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° Π΄Π°Π½Π½ΡΡ , Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠ°Π»ΠΈΡΡΠΎΠΉ. Π¦Π²Π΅Ρ Π΅ΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠ΅ΠΉΠΊΠΈ ΠΏΠ°Π»ΠΈΡΡΡ, Π½ΠΎΠΌΠ΅Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ°Π²Π΅Π½ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΈΠΊΡΠ΅Π»Ρ.
X ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ Π½Π°Π±ΠΎΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΡ ΡΠΈΡΠΎΠ²Π°ΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Ρ - ΡΠΎΡΠΊΠΈ, Π»ΠΈΠ½ΠΈΠΈ, Π΄ΡΠ³ΠΈ, Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΡΠ΅ΠΊΡΡ ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΎΠ±Π»Π°ΡΡΡΠΌΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΌΡ.
1.1.5 Π‘Π²ΠΎΠΉΡΡΠ²Π° ΠΈ Π°ΡΠΎΠΌΡ
Π X Window Π²ΡΡΡΠΎΠ΅Π½Ρ ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ-ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌΠΈ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΡΠ²ΠΎΠΉΡΡΠ² (properties). Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ - ΡΡΠΎ ΠΏΠΎΡΡΠΈΡ Π΄Π°Π½Π½ΡΡ , ΡΠ²ΡΠ·Π°Π½Π½Π°Ρ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠΊΠ½ΠΎΠΌ), ΠΈ ΠΊΠΎΡΠΎΡΠ°Ρ Π΄ΠΎΡΡΡΠΏΠ½Π° Π²ΡΠ΅ΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ X.
ΠΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π΅Ρ ΠΈΠΌΡ ΠΈ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ - Π°ΡΠΎΠΌ. ΠΠ±ΡΡΠ½ΠΎ ΠΈΠΌΠ΅Π½Π° ΡΠ²ΠΎΠΉΡΡΠ² Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ Π±ΡΠΊΠ²Π°ΠΌΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ: MY_SPECIAL_PROPERTY. ΠΡΠΎΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌΡ ΡΠ²ΠΎΠΉΡΡΠ² Ρ ΡΠ΅ΠΌ, ΡΡΠΎΠ±Ρ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΏΠ΅ΡΠ΅ΡΡΠ»Π°Π΅ΠΌΠΎΠΉ ΠΏΠΎ ΡΠ΅ΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌΠΈ ΠΈ X ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ.
Π X ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ Π½Π°Π±ΠΎΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΡ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ ΠΈΠΌΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π² ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ Π°ΡΠΎΠΌ, ΠΈ, Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, ΠΏΠΎ Π°ΡΠΎΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅.
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΈΠΌ Π°ΡΠΎΠΌΡ ΡΠ²Π»ΡΡΡΡΡ ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌΠΈ ΠΈ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΡΠΈΠΌ Π°ΡΠΎΠΌΠ°ΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π² ΡΠ°ΠΉΠ»Π°Ρ -Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Xlib. ΠΡΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠ° XA_.
1.1.6 ΠΠ΅ΡΠ²ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ
ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ ΡΡΠ°Π΄ΠΈΡΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΈΠ·Π΄Π°Π½ΠΈΠΉ, ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½Π°ΡΠ½Π΅ΠΌ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΈΡΡΡΡΠ΅ΠΉ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΡΡΡΠΎΠΊΡ "Hello, world!". Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠ°Π³ΠΈ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π² X Window.
uses x,xlib,x11,xutil,strings;
const
WND_X=0;
WND_Y=0;
WND_WDT=100;
WND_HGH=100;
WND_MIN_WDT=50;
WND_MIN_HGH=50;
WND_BORDER_WDT=5;
WND_TITLE='Hello!';
WND_ICON_TITLE='Hello!';
PRG_CLASS='Hello!';
(* SetWindowManagerHints - ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΡ ΠΎΠΊΠΎΠ½. *)
procedure SetWindowManagerHints(
prDisplay: PDisplay; (*Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΡΠΊΡΡΡΡ TDisplay *)
psPrgClass: PChar; (*ΠΠ»Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ *)
argv: PPChar; (*ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ *)
argc: integer; (*Π§ΠΈΡΠ»ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² *)
nWnd: TWindow; (*ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΎΠΊΠ½Π° *)
x, (*ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π»Π΅Π²ΠΎΠ³ΠΎ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ *)
y, (*ΡΠ³Π»Π° ΠΎΠΊΠ½Π° *)
nWidth,
nHeight, (*Π¨ΠΈΡΠΈΠ½Π° ΠΈ Π²ΡΡΠΎΡΠ° ΠΎΠΊΠ½Π° *)
nMinWidth,
nMinHeight:integer; (*ΠΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ ΡΠΈΡΠΈΠ½Π° ΠΈ Π²ΡΡΠΎΡΠ° ΠΎΠΊΠ½Π° *)
psTitle: PChar; (*ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠΊΠ½Π° *)
psIconTitle: PChar; (*ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΠΊΠ½Π° *)
nIconPixmap: TPixmap (*Π ΠΈΡΡΠ½ΠΎΠΊ ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌΡ *)
);
var
rSizeHints: TXSizeHints; (*Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°Ρ ΠΎΠΊΠ½Π°*)
rWMHints: TXWMHints;
rClassHint: TXClassHint;
prWindowName, prIconName: TXTextProperty;
begin
if (XStringListToTextProperty(@psTitle, 1, @prWindowName)=0) or
(XStringListToTextProperty(@psIconTitle, 1, @prIconName)=0) then
begin
writeln('No memory!');
halt(1);
end;
rSizeHints.flags:= PPosition OR PSize OR PMinSize;
rSizeHints.min_width:= nMinWidth;
rSizeHints.min_height:= nMinHeight;
rWMHints.flags:= StateHint OR IconPixmapHint OR InputHint;
rWMHints.initial_state:= NormalState;
rWMHints.input:= True;
rWMHints.icon_pixmap:= nIconPixmap;
rClassHint.res_name:= argv[0];
rClassHint.res_class:= psPrgClass;
XSetWMProperties(prDisplay, nWnd, @prWindowName, @prIconName, argv, argc, @rSizeHints, @rWMHints, @rClassHint);
end;
(* main - ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ *)
//void main(int argc, char *argv[])
var
prDisplay: PDisplay; (* Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΡΠΊΡΡΡΡ Display *)
nScreenNum: integer; (* ΠΠΎΠΌΠ΅Ρ ΡΠΊΡΠ°Π½Π° *)
prGC: TGC;
rEvent: TXEvent;
nWnd: TWindow;
begin
(* Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ²ΡΠ·Ρ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ *)
prDisplay:= XOpenDisplay(nil);
if prDisplay = nil then begin
writeln('Can not connect to the X server!');
halt (1);
end;
(* ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ Π½ΠΎΠΌΠ΅Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΡΠΊΡΠ°Π½Π° *)
nScreenNum:= XDefaultScreen(prDisplay);
(* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ *)
nWnd:= XCreateSimpleWindow(prDisplay, XRootWindow (prDisplay, nScreenNum), WND_X, WND_Y, WND_WDT, WND_HGH, WND_BORDER_WDT, XBlackPixel (prDisplay, nScreenNum),
XWhitePixel (prDisplay, nScreenNum));
(* ΠΠ°Π΄Π°Π΅ΠΌ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ Π΄Π»Ρ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ° ΠΎΠΊΠΎΠ½ *)
SetWindowManagerHints(prDisplay, PRG_CLASS, argv, argc, nWnd, WND_X, WND_Y, WND_WDT, WND_HGH, WND_MIN_WDT, WND_MIN_HGH, WND_TITLE, WND_ICON_TITLE, 0);
(* ΠΡΠ±ΠΈΡΠ°Π΅ΠΌ ΡΠΎΠ±ΡΡΠΈΡ, ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ *)
XSelectInput(prDisplay, nWnd, ExposureMask OR KeyPressMask);
(* ΠΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ *)
XMapWindow(prDisplay, nWnd);
(* Π¦ΠΈΠΊΠ» ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ *)
while (true) do begin
XNextEvent(prDisplay, @rEvent);
case (rEvent.eventtype) of
Expose:
begin
(* ΠΠ°ΠΏΡΠΎΡ Π½Π° ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΡ *)
if (rEvent.xexpose.count βΉβΊ 0) then continue;
prGC:= XCreateGC (prDisplay, nWnd, 0, nil);
XSetForeground(prDisplay, prGC, XBlackPixel (prDisplay, 0));
XDrawString(prDisplay, nWnd, prGC, 10, 50, 'Hello, world!', strlen ('Hello, world!'));
XFreeGC (prDisplay, prGC);
end;
KeyPress:
begin
(* ΠΠ°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ *)
XCloseDisplay(prDisplay);
halt(0);
end;
end;
end;
end.
ΠΠ»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°:
fpc hello.pas
ΠΠ΄Π΅ΡΡ fpc - ΠΈΠΌΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°. ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΡΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠ΅Π°Π»ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ppc386).