comparison src/video/Xext/Xxf86dga/XF86DGA2.c @ 1575:3ba88cb7eb1b

Updated dynamic X11 code. See details in Bugzilla #170.
author Ryan C. Gordon <icculus@icculus.org>
date Wed, 22 Mar 2006 05:00:59 +0000
parents 6fd39b50dd91
children ecba4bbaf9c2
comparison
equal deleted inserted replaced
1574:0fd72308659e 1575:3ba88cb7eb1b
105 105
106 switch((wire->u.u.type & 0x7f) - info->codes->first_event) { 106 switch((wire->u.u.type & 0x7f) - info->codes->first_event) {
107 case MotionNotify: 107 case MotionNotify:
108 mevent = (SDL_NAME(XDGAMotionEvent)*)event; 108 mevent = (SDL_NAME(XDGAMotionEvent)*)event;
109 mevent->type = wire->u.u.type & 0x7F; 109 mevent->type = wire->u.u.type & 0x7F;
110 mevent->serial = p_XSetLastRequestRead(dpy, (xGenericReply *)wire); 110 mevent->serial = _XSetLastRequestRead(dpy, (xGenericReply *)wire);
111 mevent->display = dpy; 111 mevent->display = dpy;
112 mevent->screen = wire->u.event.screen; 112 mevent->screen = wire->u.event.screen;
113 mevent->time = wire->u.event.time; 113 mevent->time = wire->u.event.time;
114 mevent->state = wire->u.event.state; 114 mevent->state = wire->u.event.state;
115 mevent->dx = wire->u.event.dx; 115 mevent->dx = wire->u.event.dx;
117 return True; 117 return True;
118 case ButtonPress: 118 case ButtonPress:
119 case ButtonRelease: 119 case ButtonRelease:
120 bevent = (SDL_NAME(XDGAButtonEvent)*)event; 120 bevent = (SDL_NAME(XDGAButtonEvent)*)event;
121 bevent->type = wire->u.u.type & 0x7F; 121 bevent->type = wire->u.u.type & 0x7F;
122 bevent->serial = p_XSetLastRequestRead(dpy, (xGenericReply *)wire); 122 bevent->serial = _XSetLastRequestRead(dpy, (xGenericReply *)wire);
123 bevent->display = dpy; 123 bevent->display = dpy;
124 bevent->screen = wire->u.event.screen; 124 bevent->screen = wire->u.event.screen;
125 bevent->time = wire->u.event.time; 125 bevent->time = wire->u.event.time;
126 bevent->state = wire->u.event.state; 126 bevent->state = wire->u.event.state;
127 bevent->button = wire->u.u.detail; 127 bevent->button = wire->u.u.detail;
128 return True; 128 return True;
129 case KeyPress: 129 case KeyPress:
130 case KeyRelease: 130 case KeyRelease:
131 kevent = (SDL_NAME(XDGAKeyEvent)*)event; 131 kevent = (SDL_NAME(XDGAKeyEvent)*)event;
132 kevent->type = wire->u.u.type & 0x7F; 132 kevent->type = wire->u.u.type & 0x7F;
133 kevent->serial = p_XSetLastRequestRead(dpy, (xGenericReply *)wire); 133 kevent->serial = _XSetLastRequestRead(dpy, (xGenericReply *)wire);
134 kevent->display = dpy; 134 kevent->display = dpy;
135 kevent->screen = wire->u.event.screen; 135 kevent->screen = wire->u.event.screen;
136 kevent->time = wire->u.event.time; 136 kevent->time = wire->u.event.time;
137 kevent->state = wire->u.event.state; 137 kevent->state = wire->u.event.state;
138 kevent->keycode = wire->u.u.detail; 138 kevent->keycode = wire->u.u.detail;
173 173
174 LockDisplay(dpy); 174 LockDisplay(dpy);
175 GetReq(XDGAQueryVersion, req); 175 GetReq(XDGAQueryVersion, req);
176 req->reqType = info->codes->major_opcode; 176 req->reqType = info->codes->major_opcode;
177 req->dgaReqType = X_XDGAQueryVersion; 177 req->dgaReqType = X_XDGAQueryVersion;
178 if (!p_XReply(dpy, (xReply *)&rep, 0, xFalse)) { 178 if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
179 UnlockDisplay(dpy); 179 UnlockDisplay(dpy);
180 SyncHandle(); 180 SyncHandle();
181 return False; 181 return False;
182 } 182 }
183 *majorVersion = rep.majorVersion; 183 *majorVersion = rep.majorVersion;
190 190
191 for (i = 0, j = info->codes->first_event; 191 for (i = 0, j = info->codes->first_event;
192 i < XF86DGANumberEvents; 192 i < XF86DGANumberEvents;
193 i++, j++) 193 i++, j++)
194 { 194 {
195 pXESetWireToEvent(dpy, j, xdga_wire_to_event); 195 XESetWireToEvent(dpy, j, xdga_wire_to_event);
196 pXESetEventToWire(dpy, j, xdga_event_to_wire); 196 XESetEventToWire(dpy, j, xdga_event_to_wire);
197 } 197 }
198 SDL_NAME(XDGASetClientVersion)(dpy); 198 SDL_NAME(XDGASetClientVersion)(dpy);
199 } 199 }
200 return True; 200 return True;
201 } 201 }
234 LockDisplay(dpy); 234 LockDisplay(dpy);
235 GetReq(XDGAOpenFramebuffer, req); 235 GetReq(XDGAOpenFramebuffer, req);
236 req->reqType = info->codes->major_opcode; 236 req->reqType = info->codes->major_opcode;
237 req->dgaReqType = X_XDGAOpenFramebuffer; 237 req->dgaReqType = X_XDGAOpenFramebuffer;
238 req->screen = screen; 238 req->screen = screen;
239 if (!p_XReply(dpy, (xReply *)&rep, 0, xFalse)) { 239 if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
240 UnlockDisplay(dpy); 240 UnlockDisplay(dpy);
241 SyncHandle(); 241 SyncHandle();
242 return False; 242 return False;
243 } 243 }
244 244
245 if(rep.length) { 245 if(rep.length) {
246 deviceName = Xmalloc(rep.length << 2); 246 deviceName = Xmalloc(rep.length << 2);
247 p_XRead(dpy, deviceName, rep.length << 2); 247 _XRead(dpy, deviceName, rep.length << 2);
248 } 248 }
249 249
250 ret = SDL_NAME(XDGAMapFramebuffer)(screen, deviceName, 250 ret = SDL_NAME(XDGAMapFramebuffer)(screen, deviceName,
251 (unsigned char*)(long)rep.mem1, 251 (unsigned char*)(long)rep.mem1,
252 rep.size, rep.offset, rep.extra); 252 rep.size, rep.offset, rep.extra);
299 GetReq(XDGAQueryModes, req); 299 GetReq(XDGAQueryModes, req);
300 req->reqType = dinfo->codes->major_opcode; 300 req->reqType = dinfo->codes->major_opcode;
301 req->dgaReqType = X_XDGAQueryModes; 301 req->dgaReqType = X_XDGAQueryModes;
302 req->screen = screen; 302 req->screen = screen;
303 303
304 if (p_XReply(dpy, (xReply *)&rep, 0, xFalse)) { 304 if (_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
305 if(rep.length) { 305 if(rep.length) {
306 xXDGAModeInfo info; 306 xXDGAModeInfo info;
307 int i, size; 307 int i, size;
308 char *offset; 308 char *offset;
309 309
313 offset = (char*)(&modes[rep.number]); /* start of text */ 313 offset = (char*)(&modes[rep.number]); /* start of text */
314 314
315 315
316 if(modes) { 316 if(modes) {
317 for(i = 0; i < rep.number; i++) { 317 for(i = 0; i < rep.number; i++) {
318 p_XRead(dpy, (char*)(&info), sz_xXDGAModeInfo); 318 _XRead(dpy, (char*)(&info), sz_xXDGAModeInfo);
319 319
320 modes[i].num = info.num; 320 modes[i].num = info.num;
321 modes[i].verticalRefresh = 321 modes[i].verticalRefresh =
322 (float)info.vsync_num / (float)info.vsync_den; 322 (float)info.vsync_num / (float)info.vsync_den;
323 modes[i].flags = info.flags; 323 modes[i].flags = info.flags;
341 modes[i].maxViewportY = info.viewport_ymax; 341 modes[i].maxViewportY = info.viewport_ymax;
342 modes[i].viewportFlags = info.viewport_flags; 342 modes[i].viewportFlags = info.viewport_flags;
343 modes[i].reserved1 = info.reserved1; 343 modes[i].reserved1 = info.reserved1;
344 modes[i].reserved2 = info.reserved2; 344 modes[i].reserved2 = info.reserved2;
345 345
346 p_XRead(dpy, offset, info.name_size); 346 _XRead(dpy, offset, info.name_size);
347 modes[i].name = offset; 347 modes[i].name = offset;
348 offset += info.name_size; 348 offset += info.name_size;
349 } 349 }
350 *num = rep.number; 350 *num = rep.number;
351 } else 351 } else
352 p_XEatData(dpy, rep.length << 2); 352 _XEatData(dpy, rep.length << 2);
353 } 353 }
354 } 354 }
355 355
356 UnlockDisplay(dpy); 356 UnlockDisplay(dpy);
357 SyncHandle(); 357 SyncHandle();
380 req->dgaReqType = X_XDGASetMode; 380 req->dgaReqType = X_XDGASetMode;
381 req->screen = screen; 381 req->screen = screen;
382 req->mode = mode; 382 req->mode = mode;
383 req->pid = pid = XAllocID(dpy); 383 req->pid = pid = XAllocID(dpy);
384 384
385 if (p_XReply(dpy, (xReply *)&rep, 0, xFalse)) { 385 if (_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
386 if(rep.length) { 386 if(rep.length) {
387 xXDGAModeInfo info; 387 xXDGAModeInfo info;
388 int size; 388 int size;
389 389
390 size = rep.length << 2; 390 size = rep.length << 2;
391 size -= sz_xXDGAModeInfo; /* get text size */ 391 size -= sz_xXDGAModeInfo; /* get text size */
392 392
393 dev = (SDL_NAME(XDGADevice)*)Xmalloc(sizeof(SDL_NAME(XDGADevice)) + size); 393 dev = (SDL_NAME(XDGADevice)*)Xmalloc(sizeof(SDL_NAME(XDGADevice)) + size);
394 394
395 if(dev) { 395 if(dev) {
396 p_XRead(dpy, (char*)(&info), sz_xXDGAModeInfo); 396 _XRead(dpy, (char*)(&info), sz_xXDGAModeInfo);
397 397
398 dev->mode.num = info.num; 398 dev->mode.num = info.num;
399 dev->mode.verticalRefresh = 399 dev->mode.verticalRefresh =
400 (float)info.vsync_num / (float)info.vsync_den; 400 (float)info.vsync_num / (float)info.vsync_den;
401 dev->mode.flags = info.flags; 401 dev->mode.flags = info.flags;
420 dev->mode.viewportFlags = info.viewport_flags; 420 dev->mode.viewportFlags = info.viewport_flags;
421 dev->mode.reserved1 = info.reserved1; 421 dev->mode.reserved1 = info.reserved1;
422 dev->mode.reserved2 = info.reserved2; 422 dev->mode.reserved2 = info.reserved2;
423 423
424 dev->mode.name = (char*)(&dev[1]); 424 dev->mode.name = (char*)(&dev[1]);
425 p_XRead(dpy, dev->mode.name, info.name_size); 425 _XRead(dpy, dev->mode.name, info.name_size);
426 426
427 dev->pixmap = (rep.flags & XDGAPixmap) ? pid : 0; 427 dev->pixmap = (rep.flags & XDGAPixmap) ? pid : 0;
428 dev->data = SDL_NAME(XDGAGetMappedMemory)(screen); 428 dev->data = SDL_NAME(XDGAGetMappedMemory)(screen);
429 429
430 if(dev->data) 430 if(dev->data)
611 LockDisplay(dpy); 611 LockDisplay(dpy);
612 GetReq(XDGAGetViewportStatus, req); 612 GetReq(XDGAGetViewportStatus, req);
613 req->reqType = info->codes->major_opcode; 613 req->reqType = info->codes->major_opcode;
614 req->dgaReqType = X_XDGAGetViewportStatus; 614 req->dgaReqType = X_XDGAGetViewportStatus;
615 req->screen = screen; 615 req->screen = screen;
616 if (!p_XReply(dpy, (xReply *)&rep, 0, xFalse)) 616 if (!_XReply(dpy, (xReply *)&rep, 0, xFalse))
617 status = rep.status; 617 status = rep.status;
618 UnlockDisplay(dpy); 618 UnlockDisplay(dpy);
619 SyncHandle(); 619 SyncHandle();
620 return status; 620 return status;
621 } 621 }
633 LockDisplay(dpy); 633 LockDisplay(dpy);
634 GetReq(XDGASync, req); 634 GetReq(XDGASync, req);
635 req->reqType = info->codes->major_opcode; 635 req->reqType = info->codes->major_opcode;
636 req->dgaReqType = X_XDGASync; 636 req->dgaReqType = X_XDGASync;
637 req->screen = screen; 637 req->screen = screen;
638 p_XReply(dpy, (xReply *)&rep, 0, xFalse); 638 _XReply(dpy, (xReply *)&rep, 0, xFalse);
639 UnlockDisplay(dpy); 639 UnlockDisplay(dpy);
640 SyncHandle(); 640 SyncHandle();
641 } 641 }
642 642
643 643
660 req->dgaReqType = X_XDGAChangePixmapMode; 660 req->dgaReqType = X_XDGAChangePixmapMode;
661 req->screen = screen; 661 req->screen = screen;
662 req->x = *x; 662 req->x = *x;
663 req->y = *y; 663 req->y = *y;
664 req->flags = mode; 664 req->flags = mode;
665 p_XReply(dpy, (xReply *)&rep, 0, xFalse); 665 _XReply(dpy, (xReply *)&rep, 0, xFalse);
666 *x = rep.x; 666 *x = rep.x;
667 *y = rep.y; 667 *y = rep.y;
668 UnlockDisplay(dpy); 668 UnlockDisplay(dpy);
669 SyncHandle(); 669 SyncHandle();
670 } 670 }