1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
/* $XConsortium: Initer.c,v 1.7 91/05/28 16:08:34 converse Exp $ */
/*
* Copyright 1988, 1989 by the Massachusetts Institute of Technology
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in advertising
* or publicity pertaining to distribution of the software without specific,
* written prior permission. M.I.T. makes no representations about the
* suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
*
*/
/* Created By: Chris D. Peterson
* MIT X Consortium
* Date: May 8, 1989
*/
#include <X11/Intrinsic.h>
#include <X11/Xmu/Initer.h>
struct InitializerList {
XmuInitializerProc function; /* function to call */
XPointer data; /* Data to pass the function. */
XtAppContext * app_con_list; /* a null terminated list of app_contexts. */
};
static struct InitializerList * init_list = NULL;
static Cardinal init_list_length = 0;
static Boolean AddToAppconList();
void
XmuAddInitializer(func, data)
XmuInitializerProc func;
XPointer data;
{
init_list_length++;
init_list = (struct InitializerList *) XtRealloc( (char *) init_list,
(sizeof(struct InitializerList) *
init_list_length) );
init_list[init_list_length - 1].function = func;
init_list[init_list_length - 1].data = data;
init_list[init_list_length - 1].app_con_list = NULL;
}
void
XmuCallInitializers(app_con)
XtAppContext app_con;
{
int i;
for (i = 0 ; i < init_list_length ; i++) {
if (AddToAppconList(&(init_list[i].app_con_list), app_con))
(init_list[i].function) (app_con, init_list[i].data);
}
}
/* Function Name: AddToAppconList
* Description: Adds an action to the application context list and
* returns TRUE, if this app_con is already on the list then
* it is NOT added and FALSE is returned.
* Arguments: app_list - a NULL terminated list of application contexts.
* app_con - an application context to test.
* Returns: TRUE if not found, FALSE if found.
*/
static Boolean
AddToAppconList(app_list, app_con)
XtAppContext **app_list, app_con;
{
int i;
XtAppContext *local_list;
i = 0;
local_list = *app_list;
if (*app_list != NULL) {
for ( ; *local_list != NULL ; i++, local_list++) {
if (*local_list == app_con)
return(FALSE);
}
}
*app_list = (XtAppContext *) XtRealloc((char *)(*app_list),
sizeof(XtAppContext *) * (i + 2) );
(*app_list)[i++] = app_con;
(*app_list)[i] = NULL;
return(TRUE);
}
|