Generic.Unix.X11.Mod 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522
  1. (* ETH Oberon, Copyright 2000 ETH Zürich Institut für Computersysteme, ETH Zentrum, CH-8092 Zürich.
  2. Refer to the general ETH Oberon System license contract available at: http://www.oberon.ethz.ch/ *)
  3. MODULE X11; (* 1993-95 / rc *)
  4. (* Oberon interface to X Window System Version 11 *)
  5. (* 1998.06.24 g.f. Linux PPC version *)
  6. (* 1999.04.03 g.f. support for Threads added *)
  7. (* 1999.11.03 g.f. Linux x86 version *)
  8. (* 2001.01.05 g.f. [C] - flag for new compiler *)
  9. (* 2001.08.04 g.f. made this module a pure interface to xlib,
  10. separated low level Display fumctionality into the new module Displays *)
  11. IMPORT Trace, Unix, Modules;
  12. TYPE
  13. Pixmap* = ADDRESS;
  14. Pattern* = ADDRESS (* = PatternPtr *) ;
  15. PatternPtr* = POINTER TO PatternDesc;
  16. PatternDesc* = RECORD
  17. x*, y*: LONGINT;
  18. w*, h*: INTEGER;
  19. pixmap*: Pixmap
  20. END;
  21. MetricDesc* = RECORD
  22. dx*, x*, y*, filler: INTEGER;
  23. p*: PatternDesc
  24. END;
  25. Font* = POINTER TO Bytes;
  26. Bytes* = RECORD
  27. metrics*: ARRAY 256 OF MetricDesc;
  28. xid*: LONGINT
  29. END;
  30. CONST
  31. BufferSize* = 512;
  32. TYPE
  33. Buffer* = ARRAY BufferSize OF CHAR;
  34. ComposeStatus* = RECORD
  35. opaque: ARRAY 6 OF LONGINT
  36. END;
  37. Modifiers* = ARRAY 8 OF KeySym;
  38. DisplayPtr* = ADDRESS;
  39. Window* = ADDRESS;
  40. Drawable* = ADDRESS;
  41. GC* = ADDRESS;
  42. Bool* = WORD;
  43. Colormap* = ADDRESS;
  44. Time* = ADDRESS;
  45. Atom* = ADDRESS;
  46. VisualID* = ADDRESS;
  47. Visual* = RECORD
  48. extData*: ADDRESS;
  49. visualid*: VisualID;
  50. class*: WORD;
  51. redMask*, greenMask*, blueMask*: LONGWORD;
  52. bitsPerRgb*, mapEntries*: WORD
  53. END;
  54. VisualPtr* = POINTER TO Visual;
  55. VisualInfo* = RECORD
  56. visual*{UNTRACED}: VisualPtr;
  57. visualID*: VisualID;
  58. screen*, depth*, class*: WORD;
  59. redmask*, greenmask*, bluemask*: LONGWORD;
  60. colomapsize*, bitsperrgb*: WORD
  61. END;
  62. Color* = RECORD
  63. pixel*: LONGWORD;
  64. red*, green*, blue*: INTEGER;
  65. flags*, pad*: CHAR
  66. END;
  67. Point* = RECORD
  68. x*, y*: INTEGER
  69. END;
  70. Rectangle* = RECORD
  71. x*, y*, w*, h*: INTEGER
  72. END;
  73. Cursor* = ADDRESS; KeySym* = ADDRESS; KeyCode* = CHAR;
  74. AnyEvent* = RECORD
  75. typ*: WORD;
  76. serial*: LONGWORD;
  77. sendEvent*: Bool;
  78. display*: DisplayPtr;
  79. window*: Window;
  80. END;
  81. Event* = RECORD (AnyEvent)
  82. pad*: ARRAY 192 - SIZE OF AnyEvent OF CHAR;
  83. END;
  84. SelectionEvent* = RECORD
  85. typ*: WORD;
  86. serial*: LONGWORD;
  87. sendEvent*: Bool;
  88. display*: DisplayPtr;
  89. requestor*: Window;
  90. selection*, target*, property*: Atom;
  91. time*: Time
  92. END;
  93. SelectionRequestEvent* = RECORD
  94. typ*: WORD;
  95. serial*: LONGWORD;
  96. sendEvent*: Bool;
  97. display*: DisplayPtr;
  98. owner*, requestor*: Window;
  99. selection*, target*, property*: Atom;
  100. time*: Time
  101. END;
  102. ExposeEvent* = RECORD
  103. typ*: WORD;
  104. serial*: LONGWORD;
  105. sendEvent*: Bool;
  106. display*: DisplayPtr;
  107. window*: Window;
  108. x*, y*, width*, height*, count*: WORD;
  109. END;
  110. GraphicsExposeEvent* = RECORD
  111. typ*: WORD;
  112. serial*: LONGWORD;
  113. sendEvent*: Bool;
  114. display*: DisplayPtr;
  115. drawable*: Drawable;
  116. x*, y*, width*, height*, count*, majorCode*, minorCode*: WORD;
  117. END;
  118. ButtonEvent* = RECORD
  119. typ*: WORD;
  120. serial*: LONGWORD;
  121. sendEvent*: Bool;
  122. display*: DisplayPtr;
  123. window*, root*, subwindow*: Window;
  124. time*: Time;
  125. x*, y*, xRoot*, yRoot*, state*, button: WORD;
  126. sameScreen: Bool
  127. END;
  128. KeyEvent* = RECORD
  129. typ*: WORD;
  130. serial*: LONGWORD;
  131. sendEvent*: Bool;
  132. display*: DisplayPtr;
  133. window*, root*, subwindow*: Window;
  134. time*: Time;
  135. x*, y*, xRoot*, yRoot*, state*, keycode*: WORD;
  136. sameScreen: Bool
  137. END;
  138. Image* = ADDRESS;
  139. ImagePtr* = POINTER TO ImageDesc;
  140. ImageDesc* = RECORD
  141. width*, height*: WORD;
  142. xoffset*, format*: WORD; data*: ADDRESS;
  143. byteOrder*, bitmapUnit*, bitmapBitOrder*: WORD;
  144. bitmapPad*, depth*, bytesPerLine*, bitsPerPixel*: WORD;
  145. redmask*, greenmask*, bluemask*: LONGWORD;
  146. obdata*, createImage*, destroyImage*, getPixel*, putPixel*, subImage*, addPixel*: ADDRESS
  147. END;
  148. ErrorEvent* = RECORD
  149. typ*: WORD;
  150. display*: DisplayPtr;
  151. resourceid*: ADDRESS;
  152. serial*: LONGWORD;
  153. errorCode*, requestCode*, minorCode*: CHAR
  154. END;
  155. ErrorEventPtr* = POINTER {UNSAFE,UNTRACED} TO ErrorEvent;
  156. ErrorHandler* = PROCEDURE ( d: DisplayPtr; err: ErrorEventPtr; p3, p4: LONGINT ): LONGINT;
  157. IOErrorHandler = PROCEDURE ( d: DisplayPtr; p2, p3, p4: LONGINT ): LONGINT;
  158. CONST
  159. (* X constants: <X11/X.h> *)
  160. False* = 0; True* = 1; None* = 0;
  161. (* line styles: *)
  162. LineSolid* = 0; LineOnOffDash* = 1; LineDoubleDash* = 2;
  163. (* cap styles: *)
  164. CapNotLast* = 0; CapButt* = 1; CapRound* = 2; CapProjecting* = 3;
  165. (* join styles: *)
  166. JoinMiter* = 0; JoinRound* = 1; JoinBevel* = 2;
  167. (* fill styles: *)
  168. FillSolid* = 0; FillTiled* = 1; FillStippled* = 2; FillOpaqueStippled* = 3;
  169. (* functions: *)
  170. GXand* = 1; GXcopy* = 3; GXxor* = 6; GXor* = 7; GXequiv* = 9;
  171. (* color flags: *)
  172. DoRed* = 1; DoGreen* = 2; DoBlue* = 4; DoAll* = DoRed + DoGreen + DoBlue;
  173. (* for CreateColormap : *)
  174. AllocNone* = 0; AllocAll* = 1;
  175. (* QueryBestSize Class: *)
  176. CursorShape* = 0; TileShape* = 1; StippleShape* = 2;
  177. (* visual classes: *)
  178. StaticGray* = 0; GrayScale* = 1; StaticColor* = 2; PseudoColor* = 3; TrueColor* = 4; DirectColor* = 5;
  179. (* arc modes: *)
  180. ArcChord* = 0; ArcPieSlice* = 1;
  181. (* polygone shape: *)
  182. Complex* = 0; Nonconvex* = 1; Convex* = 2;
  183. (* clip odering and origin: *)
  184. CoordModeOrigin* = 0; CoordModePrevious* = 1; Unsorted* = 0; YSorted* = 1; YXSorted* = 2;
  185. YXBanded* = 3;
  186. (* property modes: *)
  187. PropModeReplace* = 0;
  188. (* events types: *)
  189. KeyPress* = 2; KeyRelease* = 3; ButtonPress* = 4; ButtonRelease* = 5; MotionNotify* = 6;
  190. FocusIn* = 9; FocusOut* = 10;
  191. Expose* = 12; GraphicsExpose* = 13; NoExpose* = 14; UnmapNotify* = 18;
  192. MapNotify* = 19; PropertyNotify* = 28; SelectionClear* = 29; SelectionRequest* = 30;
  193. SelectionNotify* = 31; ClientMessage* = 33; MappingNotify* = 34;
  194. (* event masks: *)
  195. KeyPressMask* = 1H; KeyReleaseMask* = 2H; ButtonPressMask* = 4H; ButtonReleaseMask* = 8H;
  196. PointerMotionMask* = 40H; PointerMotionHintMask* = 80H; ButtonMotionMask* = 2000H;
  197. ExposureMask* = 8000H; StructureNotifyMask* = 20000H; FocusChangeMask* = 200000H;
  198. PropertyChangeMask* = 400000H; OwnerGrabButtonMask* = 1000000H;
  199. (* event modes: <X11/Xlib.h> *)
  200. QueuedAlready* = 0; QueuedAfterReading* = 1; QueuedAfterFlush* = 2;
  201. (* focus revert modes: <X11/X.h> *)
  202. RevertToParent* = 2;
  203. (* buttons: *)
  204. Button1* = 1; Button2* = 2; Button3* = 3;
  205. Button1Mask* = 100H; Button2Mask* = 200H; Button3Mask* = 400H;
  206. (* image format: *)
  207. XYBitmap* = 0; XYPixmap* = 1; ZPixmap* = 2;
  208. (* special keys: <X11/keysymdef.h> *)
  209. (* cursor shapes: <X11/cursorfont.h> *)
  210. XCleftptr* = 132;
  211. (* atoms: <X11/Xatom.h> *)
  212. XAPRIMARY* = 1; XASTRING* = 31;
  213. VAR
  214. ErrorText*: Buffer;
  215. ErrorFlag*: BOOLEAN; lastEventTime*: Time; ioErrors: INTEGER;
  216. (* cut and paste *)
  217. SendSelection*: PROCEDURE ( VAR event: SelectionRequestEvent );
  218. ReceiveSelection*: PROCEDURE ( VAR event: SelectionEvent );
  219. ClearSelection*: PROCEDURE;
  220. VAR
  221. (* Xlib calls: *)
  222. OpenDisplay-: PROCEDURE {C} ( name: ADDRESS ): DisplayPtr;
  223. DefaultScreen-: PROCEDURE {C} ( d: DisplayPtr ): WORD;
  224. DisplayWidth-: PROCEDURE {C} ( d: DisplayPtr; screen: WORD ): WORD;
  225. DisplayHeight-: PROCEDURE {C} ( d: DisplayPtr; screen: WORD ): WORD;
  226. DisplayHeightMM-: PROCEDURE {C} ( d: DisplayPtr; screen: WORD ): WORD;
  227. DefaultDepth-: PROCEDURE {C} ( d: DisplayPtr; screen: WORD ): WORD;
  228. DisplayCells-: PROCEDURE {C} ( d: DisplayPtr; screen: WORD ): WORD;
  229. DisplayPlanes-: PROCEDURE {C} ( d: DisplayPtr; screen: WORD ): WORD;
  230. BlackPixel-: PROCEDURE {C} ( d: DisplayPtr; screen: WORD ): LONGWORD;
  231. WhitePixel-: PROCEDURE {C} ( d: DisplayPtr; screen: WORD ): LONGWORD;
  232. DefaultVisual-: PROCEDURE {C} ( d: DisplayPtr; screen: WORD ): ADDRESS;
  233. DefaultColormap-: PROCEDURE {C} ( d: DisplayPtr; screen: WORD ): Colormap;
  234. DefaultRootWindow-: PROCEDURE {C} ( d: DisplayPtr ): Window;
  235. CreateSimpleWindow-: PROCEDURE {C} ( d: DisplayPtr; parent: Window;
  236. x, y, width, height, borderWidth: WORD; border, background: LONGWORD ): Window;
  237. TranslateCoordinates-: PROCEDURE {C} ( d: DisplayPtr; sw, dw: Window; srcx, srcy: WORD;
  238. VAR dstx, dsty: WORD; VAR child: Window );
  239. MoveResizeWindow-: PROCEDURE {C} ( d: DisplayPtr; w: Window; x, y, width, height: WORD );
  240. StoreName-,
  241. SetIconName-: PROCEDURE {C} ( d: DisplayPtr; w: Window; name: ADDRESS );
  242. SetCommand-: PROCEDURE {C} ( d: DisplayPtr; w: Window; argv: ADDRESS; argc: WORD );
  243. MapRaised-,
  244. LowerWindow-,
  245. ClearWindow-: PROCEDURE {C} ( d: DisplayPtr; w: Window );
  246. Sync-: PROCEDURE {C} ( d: DisplayPtr; discard: Bool );
  247. Flush-: PROCEDURE {C} ( d: DisplayPtr );
  248. StoreColor-: PROCEDURE {C} ( d: DisplayPtr; cmap: Colormap; color: ADDRESS );
  249. CreateBitmapFromData-:
  250. PROCEDURE {C} ( d: DisplayPtr; drawable: Drawable; data: ADDRESS;
  251. width, height: WORD ): Pixmap;
  252. CopyArea-: PROCEDURE {C} ( d: DisplayPtr; src, dest: Drawable; gc: GC;
  253. srcX, srcY, width, height, destX, destY: WORD );
  254. CopyPlane-: PROCEDURE {C} ( d: DisplayPtr; src, dest: Drawable; gc: GC;
  255. srcX, srcY, width, height, destX, destY: WORD; plane: LONGWORD );
  256. SetStipple-: PROCEDURE {C} ( d: DisplayPtr; gc: GC; stipple: Pixmap );
  257. SetTSOrigin-: PROCEDURE {C} ( d: DisplayPtr; gc: GC; tsxorigin, tsyorigin: WORD );
  258. DrawPoint-: PROCEDURE {C} ( d: DisplayPtr; w: Drawable; gc: GC; x, y: WORD );
  259. FillRectangle-: PROCEDURE {C} ( d: DisplayPtr; w: Drawable; gc: GC; x, y, width, height: WORD );
  260. DrawString-: PROCEDURE {C} ( d: DisplayPtr; w: Drawable; gc: GC; x, y: WORD; string: ADDRESS; length: WORD );
  261. CreateGC-: PROCEDURE {C} ( d: DisplayPtr; drawable: Drawable; valueMask: LONGWORD; values: ADDRESS ): GC;
  262. SetForeground-: PROCEDURE {C} ( d: DisplayPtr; gc: GC; foreground: LONGWORD );
  263. SetBackground-: PROCEDURE {C} ( d: DisplayPtr; gc: GC; background: LONGWORD );
  264. SetFunction-: PROCEDURE {C} ( d: DisplayPtr; gc: GC; function: WORD );
  265. SetFont-: PROCEDURE {C} ( d: DisplayPtr; gc: GC; font: ADDRESS );
  266. SetFillStyle-: PROCEDURE {C} ( d: DisplayPtr; gc: GC; fill_style: WORD );
  267. SetPlaneMask-: PROCEDURE {C} ( d: DisplayPtr; gc: GC; mask: LONGWORD );
  268. SetGraphicsExposures-:
  269. PROCEDURE {C} ( d: DisplayPtr; gc: GC; graphicsExposures: Bool );
  270. SetLineAttributes-: PROCEDURE {C} ( d: DisplayPtr; gc: GC; lineWidth, lineStyle, capStyle, joinStyle: WORD );
  271. AllocColorCells-: PROCEDURE {C} ( d: DisplayPtr; cmap: Colormap; contig: Bool; VAR planeMasks: LONGWORD;
  272. nplanes: WORD; VAR pixels: LONGWORD; ncolors: WORD ): WORD;
  273. SetWindowBackground-:
  274. PROCEDURE {C} ( d: DisplayPtr; w: Window; pixel: LONGWORD );
  275. CreateFontCursor-: PROCEDURE {C} ( d: DisplayPtr; shape: WORD ): Cursor;
  276. CreatePixmapCursor-: PROCEDURE {C} ( d: DisplayPtr; csource, cmask: Pixmap;
  277. VAR cfore, cback: Color; xhot, yhot: WORD ): Cursor;
  278. RecolorCursor-: PROCEDURE {C} ( d: DisplayPtr; curs: Cursor; cfore, cback: ADDRESS );
  279. DefineCursor-: PROCEDURE {C} ( d: DisplayPtr; w: Window; curs: Cursor );
  280. DrawLine-: PROCEDURE {C} ( d: DisplayPtr; w: Window; gc: GC; x1, y1, x2, y2: WORD );
  281. SetArcMode-: PROCEDURE {C} ( d: DisplayPtr; gc: GC; arcmode: WORD );
  282. DrawArc-, FillArc-: PROCEDURE {C} ( d: DisplayPtr; w: Window; gc: GC;
  283. x, y, width, height, angle1, angle2: WORD );
  284. FillPolygon-: PROCEDURE {C} ( d: DisplayPtr; w: Window; gc: GC;
  285. points: ADDRESS; npoints, shape, mode: WORD );
  286. SetClipMask-: PROCEDURE {C} ( d: DisplayPtr; gc: GC; clipMask: Pixmap );
  287. SetClipRectangles-: PROCEDURE {C} ( d: DisplayPtr; gc: GC;
  288. clipxorigin, clipyorigin: WORD; rectangles: ADDRESS; n, ordering: WORD );
  289. ListFonts-: PROCEDURE {C} ( d: DisplayPtr; pattern: ADDRESS; maxnames: WORD; VAR count: WORD ): ADDRESS;
  290. FreeFontNames-: PROCEDURE {C} ( list: ADDRESS );
  291. LoadFont-: PROCEDURE {C} ( d: DisplayPtr; name: ADDRESS ): WORD;
  292. SelectInput-: PROCEDURE {C} ( d: DisplayPtr; w: Window; eventMask: LONGWORD );
  293. NextEvent-: PROCEDURE {C} ( d: DisplayPtr; VAR event: Event );
  294. EventsQueued-: PROCEDURE {C} ( d: DisplayPtr; mode: WORD ): WORD;
  295. SetInputFocus-: PROCEDURE {C} ( d: DisplayPtr; focus: Window; revertTo: WORD; time: Time );
  296. LookupString-: PROCEDURE {C} ( VAR event: Event; VAR buf: Buffer; bufsize: WORD;
  297. VAR keysym: KeySym; VAR cstat: ComposeStatus ): WORD;
  298. QueryPointer-: PROCEDURE {C} ( d: DisplayPtr; w: Window; VAR rw, cw: Window;
  299. VAR xr, yr, xw, yw: WORD; VAR keysButtons: WORDSET );
  300. RefreshKeyboardMapping-:
  301. PROCEDURE {C} ( event: ADDRESS );
  302. Bell-: PROCEDURE {C} ( d: DisplayPtr; percent: WORD );
  303. RebindKeysym-: PROCEDURE {C} ( d: DisplayPtr; reboundsym: KeySym; VAR modlist: Modifiers;
  304. modlength: WORD; newstring: ADDRESS; newlength: WORD );
  305. StringToKeysym-: PROCEDURE {C} ( string: ADDRESS ): KeySym;
  306. CopyColormapAndFree-:
  307. PROCEDURE {C} ( d: DisplayPtr; cmap: Colormap ): Colormap;
  308. CreateColormap-: PROCEDURE {C} ( d: DisplayPtr; w: Window; vis: VisualPtr; alloc: WORD ): Colormap;
  309. MatchVisualInfo-: PROCEDURE {C} ( d: DisplayPtr; screen, depth, class: WORD; VAR vinfo: VisualInfo ): WORD;
  310. SetWindowColormap-:
  311. PROCEDURE {C} ( d: DisplayPtr; w: Window; cmap: Colormap );
  312. QueryBestSize-: PROCEDURE {C} ( d: DisplayPtr; class: WORD;
  313. screen: Drawable; width, height: WORD; VAR w, h: WORD );
  314. CreatePixmap-: PROCEDURE {C} ( d: DisplayPtr; drawable: Drawable;
  315. width, height, depth: WORD ): Pixmap;
  316. FreePixmap-: PROCEDURE {C} ( d: DisplayPtr; pixmap: Pixmap );
  317. CreateImage-: PROCEDURE {C} ( d: DisplayPtr; visual: VisualPtr; depth, format, offset: WORD;
  318. data: ADDRESS; width, height, bitmapPad, bytesPerLine: WORD ): Image;
  319. DestroyImage-: PROCEDURE {C} ( image: Image );
  320. SubImage-: PROCEDURE {C} ( image: Image; x, y, width, height: WORD ): Image;
  321. GetImage-: PROCEDURE {C} ( d: DisplayPtr; drawable: Drawable;
  322. x, y, width, height: WORD; planeMask: LONGWORD; format: WORD ): Image;
  323. GetSubImage-: PROCEDURE {C} ( d: DisplayPtr; drawable: Drawable;
  324. x, y, width, height: WORD; planeMask: LONGWORD; format: WORD; dstImage: Image;
  325. dstX, dstY: WORD ): Image;
  326. PutImage-: PROCEDURE {C} ( d: DisplayPtr; drawable: Drawable; gc: GC; image: Image;
  327. srcX, srcY, dstX, dstY, width, height: WORD );
  328. PutPixel-: PROCEDURE {C} ( image: Image; x, y: WORD; pixel: LONGWORD ): WORD;
  329. GetPixel-: PROCEDURE {C} ( image: Image; x, y: WORD ): LONGWORD;
  330. AddPixel-: PROCEDURE {C} ( image: Image; value: LONGWORD );
  331. Free-: PROCEDURE {C} ( data: ADDRESS );
  332. (* SetErrorHandler-: PROCEDURE {C} ( handler: ErrorHandler ); *)
  333. GetErrorText-: PROCEDURE {C} ( d: DisplayPtr; errcode: WORD; VAR buf: Buffer; length: WORD );
  334. StoreBytes-: PROCEDURE {C} ( d: DisplayPtr; bytes: ADDRESS; nbytes: WORD );
  335. FetchBytes-: PROCEDURE {C} ( d: DisplayPtr; VAR nbytes: WORD ): ADDRESS;
  336. SetSelectionOwner-: PROCEDURE {C} ( d: DisplayPtr; selection: Atom; owner: Window; time: Time );
  337. GetSelectionOwner-: PROCEDURE {C} ( d: DisplayPtr; selection: Atom ): Window;
  338. InternAtom-: PROCEDURE {C} ( d: DisplayPtr; name: ADDRESS; onlyifexists: Bool ): Atom;
  339. SendEvent-: PROCEDURE {C} ( d: DisplayPtr; w: Window; propagate: Bool; eventmask: LONGWORD; event: ADDRESS );
  340. ConvertSelection-: PROCEDURE {C} ( d: DisplayPtr; selection, target, property: Atom;
  341. requestor: Window; timestamp: Time );
  342. ChangeProperty-: PROCEDURE {C} ( d: DisplayPtr; w: Window; property, typ: Atom;
  343. format, mode: WORD; data: ADDRESS; nelements: WORD );
  344. GetWindowProperty-:
  345. PROCEDURE {C} ( d: DisplayPtr; w: Window; property: Atom;
  346. offset, length: LONGWORD; delete: Bool; reqtype: Atom; VAR typ: Atom;
  347. VAR format: WORD; VAR nitems, bytesafter: LONGWORD; VAR prop: ADDRESS );
  348. DeleteProperty-: PROCEDURE {C} ( d: DisplayPtr; w: Window; property: Atom );
  349. WarpPointer-: PROCEDURE {C} ( d: DisplayPtr; srcwin, dstwin: Window; srcx, srcy, srcw, srch, dstx, dsty: WORD );
  350. InstallColormap-: PROCEDURE {C} ( d: DisplayPtr; cmap: Colormap );
  351. GetGeometry-: PROCEDURE {C} ( d: DisplayPtr; drawable: Drawable; VAR root, x, y, width, height, orderWidth, Depth: WORD );
  352. ResizeWindow-: PROCEDURE {C} ( d: DisplayPtr; w: Window; x, y: WORD );
  353. Synchronize-: PROCEDURE {C} ( d: DisplayPtr; onoff: Bool );
  354. AllocColor-: PROCEDURE {C} ( d: DisplayPtr; cmap: Colormap; color: ADDRESS ): WORD;
  355. (* SetIOErrorHandler-: PROCEDURE {C} ( handler: IOErrorHandler ); *)
  356. InitXErrorHandlers-: PROCEDURE {C} ( eh: ErrorHandler; ioeh: IOErrorHandler );
  357. PROCEDURE LinkToX;
  358. VAR xlib: ADDRESS;
  359. BEGIN
  360. Unix.LinkToX;
  361. xlib := Unix.Dlopen( Unix.libX11name, 2 );
  362. IF xlib = 0 THEN (* try default version *)
  363. xlib := Unix.Dlopen( "libX11.so", 2 )
  364. END;
  365. IF xlib = 0 THEN
  366. Trace.StringLn( "X11.LinkToX: Unix.Dlopen( libX11.so ) failed " ); Unix.exit( 3 )
  367. END;
  368. Unix.Dlsym( xlib, "XOpenDisplay", ADDRESSOF( OpenDisplay ) );
  369. Unix.Dlsym( xlib, "XDefaultScreen", ADDRESSOF( DefaultScreen ) );
  370. Unix.Dlsym( xlib, "XDisplayWidth", ADDRESSOF( DisplayWidth ) );
  371. Unix.Dlsym( xlib, "XDisplayHeight", ADDRESSOF( DisplayHeight ) );
  372. Unix.Dlsym( xlib, "XDisplayHeightMM", ADDRESSOF( DisplayHeightMM ) );
  373. Unix.Dlsym( xlib, "XDefaultDepth", ADDRESSOF( DefaultDepth ) );
  374. Unix.Dlsym( xlib, "XDisplayCells", ADDRESSOF( DisplayCells ) );
  375. Unix.Dlsym( xlib, "XDisplayPlanes", ADDRESSOF( DisplayPlanes ) );
  376. Unix.Dlsym( xlib, "XBlackPixel", ADDRESSOF( BlackPixel ) );
  377. Unix.Dlsym( xlib, "XWhitePixel", ADDRESSOF( WhitePixel ) );
  378. Unix.Dlsym( xlib, "XDefaultVisual", ADDRESSOF( DefaultVisual ) );
  379. Unix.Dlsym( xlib, "XDefaultColormap", ADDRESSOF( DefaultColormap ) );
  380. Unix.Dlsym( xlib, "XDefaultRootWindow", ADDRESSOF( DefaultRootWindow ) );
  381. Unix.Dlsym( xlib, "XCreateSimpleWindow", ADDRESSOF( CreateSimpleWindow ) );
  382. Unix.Dlsym( xlib, "XTranslateCoordinates", ADDRESSOF( TranslateCoordinates ) );
  383. Unix.Dlsym( xlib, "XMoveResizeWindow", ADDRESSOF( MoveResizeWindow ) );
  384. Unix.Dlsym( xlib, "XStoreName", ADDRESSOF( StoreName ) );
  385. Unix.Dlsym( xlib, "XSetIconName", ADDRESSOF( SetIconName ) );
  386. Unix.Dlsym( xlib, "XSetCommand", ADDRESSOF( SetCommand ) );
  387. Unix.Dlsym( xlib, "XMapRaised", ADDRESSOF( MapRaised ) );
  388. Unix.Dlsym( xlib, "XLowerWindow", ADDRESSOF( LowerWindow ) );
  389. Unix.Dlsym( xlib, "XClearWindow", ADDRESSOF( ClearWindow ) );
  390. Unix.Dlsym( xlib, "XSync", ADDRESSOF( Sync ) ); Unix.Dlsym( xlib, "XFlush", ADDRESSOF( Flush ) );
  391. Unix.Dlsym( xlib, "XStoreColor", ADDRESSOF( StoreColor ) );
  392. Unix.Dlsym( xlib, "XCreateBitmapFromData", ADDRESSOF( CreateBitmapFromData ) );
  393. Unix.Dlsym( xlib, "XCopyArea", ADDRESSOF( CopyArea ) );
  394. Unix.Dlsym( xlib, "XCopyPlane", ADDRESSOF( CopyPlane ) );
  395. Unix.Dlsym( xlib, "XSetStipple", ADDRESSOF( SetStipple ) );
  396. Unix.Dlsym( xlib, "XSetTSOrigin", ADDRESSOF( SetTSOrigin ) );
  397. Unix.Dlsym( xlib, "XFillRectangle", ADDRESSOF( FillRectangle ) );
  398. Unix.Dlsym( xlib, "XDrawPoint", ADDRESSOF( DrawPoint ) );
  399. Unix.Dlsym( xlib, "XDrawString", ADDRESSOF( DrawString ) );
  400. Unix.Dlsym( xlib, "XCreateGC", ADDRESSOF( CreateGC ) );
  401. Unix.Dlsym( xlib, "XSetForeground", ADDRESSOF( SetForeground ) );
  402. Unix.Dlsym( xlib, "XSetBackground", ADDRESSOF( SetBackground ) );
  403. Unix.Dlsym( xlib, "XSetPlaneMask", ADDRESSOF( SetPlaneMask ) );
  404. Unix.Dlsym( xlib, "XSetLineAttributes", ADDRESSOF( SetLineAttributes ) );
  405. Unix.Dlsym( xlib, "XSetFunction", ADDRESSOF( SetFunction ) );
  406. Unix.Dlsym( xlib, "XSetFont", ADDRESSOF( SetFont ) );
  407. Unix.Dlsym( xlib, "XSetFillStyle", ADDRESSOF( SetFillStyle ) );
  408. Unix.Dlsym( xlib, "XSetGraphicsExposures", ADDRESSOF( SetGraphicsExposures ) );
  409. Unix.Dlsym( xlib, "XAllocColorCells", ADDRESSOF( AllocColorCells ) );
  410. Unix.Dlsym( xlib, "XSetWindowBackground", ADDRESSOF( SetWindowBackground ) );
  411. Unix.Dlsym( xlib, "XCreateFontCursor", ADDRESSOF( CreateFontCursor ) );
  412. Unix.Dlsym( xlib, "XCreatePixmapCursor", ADDRESSOF( CreatePixmapCursor ) );
  413. Unix.Dlsym( xlib, "XRecolorCursor", ADDRESSOF( RecolorCursor ) );
  414. Unix.Dlsym( xlib, "XDefineCursor", ADDRESSOF( DefineCursor ) );
  415. Unix.Dlsym( xlib, "XDrawLine", ADDRESSOF( DrawLine ) );
  416. Unix.Dlsym( xlib, "XSetArcMode", ADDRESSOF( SetArcMode ) );
  417. Unix.Dlsym( xlib, "XDrawArc", ADDRESSOF( DrawArc ) );
  418. Unix.Dlsym( xlib, "XFillArc", ADDRESSOF( FillArc ) );
  419. Unix.Dlsym( xlib, "XFillPolygon", ADDRESSOF( FillPolygon ) );
  420. Unix.Dlsym( xlib, "XSetClipMask", ADDRESSOF( SetClipMask ) );
  421. Unix.Dlsym( xlib, "XSetClipRectangles", ADDRESSOF( SetClipRectangles ) );
  422. Unix.Dlsym( xlib, "XListFonts", ADDRESSOF( ListFonts ) );
  423. Unix.Dlsym( xlib, "XFreeFontNames", ADDRESSOF( FreeFontNames ) );
  424. Unix.Dlsym( xlib, "XLoadFont", ADDRESSOF( LoadFont ) );
  425. Unix.Dlsym( xlib, "XSelectInput", ADDRESSOF( SelectInput ) );
  426. Unix.Dlsym( xlib, "XSync", ADDRESSOF( Sync ) );
  427. Unix.Dlsym( xlib, "XNextEvent", ADDRESSOF( NextEvent ) );
  428. Unix.Dlsym( xlib, "XEventsQueued", ADDRESSOF( EventsQueued ) );
  429. Unix.Dlsym( xlib, "XSetInputFocus", ADDRESSOF( SetInputFocus ) );
  430. Unix.Dlsym( xlib, "XLookupString", ADDRESSOF( LookupString ) );
  431. Unix.Dlsym( xlib, "XQueryPointer", ADDRESSOF( QueryPointer ) );
  432. Unix.Dlsym( xlib, "XRefreshKeyboardMapping", ADDRESSOF( RefreshKeyboardMapping ) );
  433. Unix.Dlsym( xlib, "XBell", ADDRESSOF( Bell ) );
  434. Unix.Dlsym( xlib, "XRebindKeysym", ADDRESSOF( RebindKeysym ) );
  435. Unix.Dlsym( xlib, "XStringToKeysym", ADDRESSOF( StringToKeysym ) );
  436. Unix.Dlsym( xlib, "XCopyColormapAndFree", ADDRESSOF( CopyColormapAndFree ) );
  437. Unix.Dlsym( xlib, "XCreateColormap", ADDRESSOF( CreateColormap ) );
  438. Unix.Dlsym( xlib, "XMatchVisualInfo", ADDRESSOF( MatchVisualInfo ) );
  439. Unix.Dlsym( xlib, "XSetWindowColormap", ADDRESSOF( SetWindowColormap ) );
  440. Unix.Dlsym( xlib, "XQueryBestSize", ADDRESSOF( QueryBestSize ) );
  441. Unix.Dlsym( xlib, "XCreatePixmap", ADDRESSOF( CreatePixmap ) );
  442. Unix.Dlsym( xlib, "XFreePixmap", ADDRESSOF( FreePixmap ) );
  443. Unix.Dlsym( xlib, "XCreateImage", ADDRESSOF( CreateImage ) );
  444. Unix.Dlsym( xlib, "XDestroyImage", ADDRESSOF( DestroyImage ) );
  445. Unix.Dlsym( xlib, "XSubImage", ADDRESSOF( SubImage ) );
  446. Unix.Dlsym( xlib, "XGetImage", ADDRESSOF( GetImage ) );
  447. Unix.Dlsym( xlib, "XGetSubImage", ADDRESSOF( GetSubImage ) );
  448. Unix.Dlsym( xlib, "XPutImage", ADDRESSOF( PutImage ) );
  449. Unix.Dlsym( xlib, "XPutPixel", ADDRESSOF( PutPixel ) );
  450. Unix.Dlsym( xlib, "XGetPixel", ADDRESSOF( GetPixel ) );
  451. Unix.Dlsym( xlib, "XAddPixel", ADDRESSOF( AddPixel ) );
  452. Unix.Dlsym( xlib, "XFree", ADDRESSOF( Free ) );
  453. (* Unix.Dlsym( xlib, "XSetErrorHandler", ADDRESSOF( SetErrorHandler ) ) *)
  454. (* Unix.Dlsym( xlib, "XSetIOErrorHandler", ADDRESSOF( SetIOErrorHandler ) ); *)
  455. Unix.Dlsym( xlib, "XGetErrorText", ADDRESSOF( GetErrorText ) );
  456. Unix.Dlsym( xlib, "XStoreBytes", ADDRESSOF( StoreBytes ) );
  457. Unix.Dlsym( xlib, "XFetchBytes", ADDRESSOF( FetchBytes ) );
  458. Unix.Dlsym( xlib, "XSetSelectionOwner", ADDRESSOF( SetSelectionOwner ) );
  459. Unix.Dlsym( xlib, "XGetSelectionOwner", ADDRESSOF( GetSelectionOwner ) );
  460. Unix.Dlsym( xlib, "XInternAtom", ADDRESSOF( InternAtom ) );
  461. Unix.Dlsym( xlib, "XSendEvent", ADDRESSOF( SendEvent ) );
  462. Unix.Dlsym( xlib, "XConvertSelection", ADDRESSOF( ConvertSelection ) );
  463. Unix.Dlsym( xlib, "XChangeProperty", ADDRESSOF( ChangeProperty ) );
  464. Unix.Dlsym( xlib, "XGetWindowProperty", ADDRESSOF( GetWindowProperty ) );
  465. Unix.Dlsym( xlib, "XDeleteProperty", ADDRESSOF( DeleteProperty ) );
  466. Unix.Dlsym( xlib, "XWarpPointer", ADDRESSOF( WarpPointer ) );
  467. Unix.Dlsym( xlib, "XInstallColormap", ADDRESSOF( InstallColormap ) );
  468. Unix.Dlsym( xlib, "XGetGeometry", ADDRESSOF( GetGeometry ) );
  469. Unix.Dlsym( xlib, "XResizeWindow", ADDRESSOF( ResizeWindow ) );
  470. Unix.Dlsym( xlib, "XSynchronize", ADDRESSOF( Synchronize ) );
  471. Unix.Dlsym( xlib, "XAllocColor", ADDRESSOF( AllocColor ) );
  472. END LinkToX;
  473. PROCEDURE MyErrorHandler( d: DisplayPtr; err {UNTRACED}: ErrorEventPtr ): LONGINT;
  474. BEGIN
  475. ErrorFlag := TRUE;
  476. GetErrorText( d, ORD( err.errorCode ), ErrorText, BufferSize );
  477. Trace.StringLn( ErrorText );
  478. RETURN 0
  479. END MyErrorHandler;
  480. PROCEDURE MyIOErrorHandler( d: DisplayPtr): LONGINT;
  481. BEGIN
  482. ErrorFlag := TRUE; ErrorText := "X11 I/O Error";
  483. Trace.StringLn( ErrorText );
  484. INC( ioErrors );
  485. IF ioErrors > 100 THEN Modules.Shutdown( 0 ) END ;
  486. RETURN 0
  487. END MyIOErrorHandler;
  488. BEGIN
  489. ioErrors := 0; LinkToX; ErrorFlag := FALSE;
  490. (*SetIOErrorHandler( MyIOErrorHandler );*)
  491. (*SetErrorHandler( MyErrorHandler );*)
  492. (* Oberon procedures cannot be used as callback procedures because of
  493. incompatibilities between the PPC Oberon ABI and the PPC SYSV ABI.
  494. PPC Oberon follows the old MAC and IBM AIX ABI *)
  495. Unix.InitXErrorHandlers( MyErrorHandler, MyIOErrorHandler );
  496. END X11.