Mercurial > kinput2.yaz
comparison lib/ioecall.c @ 0:92745d501b9a
initial import from kinput2-v3.1
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Mon, 08 Mar 2010 04:44:30 +0900 |
parents | |
children | 983aff0dcf18 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:92745d501b9a |
---|---|
1 #ifndef lint | |
2 static char *rcsid = "$Id: ioecall.c,v 1.2 1996/09/30 09:19:52 ishisone Exp $"; | |
3 #endif | |
4 /* | |
5 * Copyright (C) 1994 Software Research Associates, Inc. | |
6 * | |
7 * Permission to use, copy, modify, and distribute this software and its | |
8 * documentation for any purpose and without fee is hereby granted, provided | |
9 * that the above copyright notice appear in all copies and that both that | |
10 * copyright notice and this permission notice appear in supporting | |
11 * documentation, and that the name of Software Research Associates not be | |
12 * used in advertising or publicity pertaining to distribution of the | |
13 * software without specific, written prior permission. Software Research | |
14 * Associates makes no representations about the suitability of this software | |
15 * for any purpose. It is provided "as is" without express or implied | |
16 * warranty. | |
17 * | |
18 * Author: Makoto Ishisone, Software Research Associates, Inc., Japan | |
19 */ | |
20 | |
21 /* | |
22 * X I/O error callback | |
23 */ | |
24 | |
25 #include <stdio.h> | |
26 #include <X11/Xlib.h> | |
27 #include <X11/Xfuncproto.h> | |
28 #include "IOECall.h" | |
29 | |
30 #ifndef NULL | |
31 #define NULL 0 | |
32 #endif | |
33 | |
34 typedef struct ioe_cb_desc_ { | |
35 void (*callback)(); | |
36 XPointer client_data; | |
37 struct ioe_cb_desc_ *next; | |
38 } CBDesc; | |
39 | |
40 static CBDesc *cb_list; | |
41 | |
42 static int (*original_handler)(); | |
43 | |
44 static int | |
45 XIOEHandler(dpy) | |
46 Display *dpy; | |
47 { | |
48 CBDesc *cb; | |
49 | |
50 cb = cb_list; | |
51 while (cb != NULL) { | |
52 (*cb->callback)(cb->client_data); | |
53 cb = cb->next; | |
54 } | |
55 return (*original_handler)(dpy); | |
56 } | |
57 | |
58 void | |
59 XIOEInit() | |
60 { | |
61 int (*oldhandler)() = XSetIOErrorHandler(XIOEHandler); | |
62 | |
63 if (oldhandler != XIOEHandler) original_handler = oldhandler; | |
64 } | |
65 | |
66 XIOEHandle | |
67 XIOESet(handler, client_data) | |
68 void (*handler)(); | |
69 XPointer client_data; | |
70 { | |
71 CBDesc *cb; | |
72 | |
73 cb = (CBDesc *)malloc(sizeof(CBDesc)); | |
74 if (cb == NULL) return NULL; | |
75 | |
76 cb->callback = handler; | |
77 cb->client_data = client_data; | |
78 cb->next = NULL; | |
79 | |
80 if (cb_list == NULL) { | |
81 cb_list = cb; | |
82 } else { | |
83 CBDesc *p = cb_list; | |
84 | |
85 while (p->next != NULL) p = p->next; | |
86 p->next = cb; | |
87 } | |
88 | |
89 return cb; | |
90 } | |
91 | |
92 void | |
93 XIOEUnset(handle) | |
94 XIOEHandle handle; | |
95 { | |
96 CBDesc *cb, *cb0; | |
97 | |
98 cb = cb_list; | |
99 cb0 = NULL; | |
100 | |
101 while (cb != NULL) { | |
102 if (cb == handle) { | |
103 if (cb0 == NULL) { | |
104 cb_list = cb->next; | |
105 } else { | |
106 cb0->next = cb->next; | |
107 } | |
108 (void)free((char *)cb); | |
109 return; | |
110 } | |
111 cb = cb->next; | |
112 } | |
113 } |