Mercurial > hg > xemacs-beta
annotate etc/tests/external-widget/test-ew-motif.c @ 5168:cf900a2f1fa3
extract gap array from extents.c, use in range tables
-------------------- ChangeLog entries follow: --------------------
src/ChangeLog addition:
2010-03-22 Ben Wing <ben@xemacs.org>
* Makefile.in.in (objs):
* array.c:
* array.c (gap_array_adjust_markers):
* array.c (gap_array_move_gap):
* array.c (gap_array_make_gap):
* array.c (gap_array_insert_els):
* array.c (gap_array_delete_els):
* array.c (gap_array_make_marker):
* array.c (gap_array_delete_marker):
* array.c (gap_array_delete_all_markers):
* array.c (gap_array_clone):
* array.h:
* depend:
* emacs.c (main_1):
* extents.c:
* extents.c (EXTENT_GAP_ARRAY_AT):
* extents.c (extent_list_num_els):
* extents.c (extent_list_locate):
* extents.c (extent_list_at):
* extents.c (extent_list_delete_all):
* extents.c (allocate_extent_list):
* extents.c (syms_of_extents):
* extents.h:
* extents.h (XEXTENT_LIST_MARKER):
* lisp.h:
* rangetab.c:
* rangetab.c (mark_range_table):
* rangetab.c (print_range_table):
* rangetab.c (range_table_equal):
* rangetab.c (range_table_hash):
* rangetab.c (verify_range_table):
* rangetab.c (get_range_table_pos):
* rangetab.c (Fmake_range_table):
* rangetab.c (Fcopy_range_table):
* rangetab.c (Fget_range_table):
* rangetab.c (put_range_table):
* rangetab.c (Fclear_range_table):
* rangetab.c (Fmap_range_table):
* rangetab.c (unified_range_table_bytes_needed):
* rangetab.c (unified_range_table_copy_data):
* rangetab.c (unified_range_table_lookup):
* rangetab.h:
* rangetab.h (struct range_table_entry):
* rangetab.h (struct Lisp_Range_Table):
* rangetab.h (rangetab_gap_array_at):
* symsinit.h:
Rename dynarr.c to array.c. Move gap array from extents.c to array.c.
Extract dynarr, gap array and stack-like malloc into new file array.h.
Rename GAP_ARRAY_NUM_ELS -> gap_array_length(). Add gap_array_at(),
gap_array_atp().
Rewrite range table code to use gap arrays. Make put_range_table()
smarter so that its operation is O(log n) for adding a localized
range.
* gc.c (lispdesc_block_size_1):
Don't ABORT() when two elements are located at the same place.
This will happen with a size-0 gap array -- both parts of the array
(before and after gap) are in the same place.
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Mon, 22 Mar 2010 19:12:15 -0500 |
parents | 03ab78e48ef6 |
children | ba07c880114a |
rev | line source |
---|---|
4894
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
2
diff
changeset
|
1 /* Test external widget code in Motif. |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
2
diff
changeset
|
2 Copyright (C) 1993 Ben Wing. |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
2
diff
changeset
|
3 |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
2
diff
changeset
|
4 This file is part of XEmacs. |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
2
diff
changeset
|
5 |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
2
diff
changeset
|
6 XEmacs is free software; you can redistribute it and/or modify it |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
2
diff
changeset
|
7 under the terms of the GNU General Public License as published by the |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
2
diff
changeset
|
8 Free Software Foundation; either version 2, or (at your option) any |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
2
diff
changeset
|
9 later version. |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
2
diff
changeset
|
10 |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
2
diff
changeset
|
11 XEmacs is distributed in the hope that it will be useful, but WITHOUT |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
2
diff
changeset
|
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
2
diff
changeset
|
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
2
diff
changeset
|
14 for more details. |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
2
diff
changeset
|
15 |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
2
diff
changeset
|
16 You should have received a copy of the GNU General Public License |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
2
diff
changeset
|
17 along with XEmacs; see the file COPYING. If not, write to |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
2
diff
changeset
|
18 the Free Software Foundation, Inc., 51 Franklin St - Fifth Floor, |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
2
diff
changeset
|
19 Boston, MA 02110-1301, USA. */ |
03ab78e48ef6
Add copyright and license information based on Ben's recollections.
Jerry James <james@xemacs.org>
parents:
2
diff
changeset
|
20 |
2 | 21 #include <Xm/Xm.h> |
22 #include <Xm/RowColumn.h> | |
23 #include <Xm/Scale.h> | |
24 #include <Xm/PushB.h> | |
25 #include <Xm/Label.h> | |
26 #include <Xm/Text.h> | |
27 #include <Xm/PanedW.h> | |
28 #include "ExternalClient.h" | |
29 | |
30 #ifdef TOOLTALK | |
31 #include <desktop/tt_c.h> | |
32 char *HxProcID; | |
33 #endif | |
34 | |
35 XtAppContext xt_app_con; | |
36 | |
37 void ScaleValueChangedCB(Widget scale, XtPointer app_data, XtPointer widget_data) | |
38 { | |
39 XmScaleCallbackStruct *xms = (XmScaleCallbackStruct *) widget_data; | |
40 Widget label = (Widget) app_data; | |
41 char labelarr[10]; | |
42 XmString labelstr; | |
43 #if 0 | |
44 sprintf(labelarr, "%d", xms->value); | |
45 labelstr = XmStringCreateLocalized(labelarr); | |
46 XtVaSetValues(label, XmNlabelString, labelstr, NULL); | |
47 XmStringFree(labelstr); | |
48 #endif | |
49 } | |
50 | |
51 #ifdef TOOLTALK | |
52 static void | |
53 handle_tt_input(XtPointer client_data, int *source, XtInputId *id) | |
54 { | |
55 Tt_message m = tt_message_receive(); | |
56 | |
57 if (m && !(tt_ptr_error(m))) { | |
58 tt_message_destroy(m); | |
59 } | |
60 } | |
61 | |
62 Tt_status | |
63 HxInitializeToolTalk() | |
64 { | |
65 static Boolean initialized = FALSE; | |
66 | |
67 if (!initialized) { | |
68 int fd; | |
69 Tt_status status; | |
70 | |
71 HxProcID = tt_open(); | |
72 fd = tt_fd(); | |
73 if (TT_OK != (status = tt_session_join( tt_default_session() ))) | |
74 return status; | |
75 (void)XtAppAddInput(xt_app_con, fd, (void *)XtInputReadMask, handle_tt_input, NULL); | |
76 initialized = TRUE; | |
77 } | |
78 | |
79 return TT_OK; | |
80 } | |
81 #endif | |
82 | |
83 main(int argc, char **argv) | |
84 { | |
85 Widget shell, rowcolumn, scale, pushbutton, label1, label2, text; | |
86 Widget paned, text2; | |
87 int n, i; | |
88 Widget widlist[100]; | |
89 Widget emacscli[100]; | |
90 Arg args[100]; | |
91 int no_ews = 1; | |
92 char buf[100]; | |
93 | |
94 if (argc > 1) | |
95 no_ews = atoi (argv[1]); | |
96 | |
97 shell = XtAppInitialize(&xt_app_con, "Testmotif", NULL, 0, | |
98 &argc, argv, NULL, NULL, 0); | |
99 | |
100 #ifdef TOOLTALK | |
101 HxInitializeToolTalk(); | |
102 #endif | |
103 | |
104 rowcolumn = XmCreateRowColumn(shell, "rowcolumn", NULL, 0); | |
105 XtManageChild(rowcolumn); | |
106 | |
107 n = 0; | |
108 XtSetArg(args[n], XmNtraversalOn, TRUE); n++; | |
109 #if 0 | |
110 label1 = XmCreateLabel(rowcolumn, "label1", args, n); | |
111 #endif | |
112 label1 = XtVaCreateWidget("label1", xmLabelWidgetClass, rowcolumn, | |
113 XmNwidth, 50, XmNheight, 30, | |
114 XmNtraversalOn, TRUE, NULL); | |
115 label2 = XmCreateLabel(rowcolumn, "label2", NULL, 0); | |
116 scale = XmCreateScale(rowcolumn, "scale", NULL, 0); | |
117 XtAddCallback(scale, XmNvalueChangedCallback, ScaleValueChangedCB, label1); | |
118 paned = XmCreatePanedWindow(rowcolumn, "paned", NULL, 0); | |
119 n = 0; | |
120 widlist[n++] = label1; | |
121 widlist[n++] = label2; | |
122 widlist[n++] = scale; | |
123 widlist[n++] = paned; | |
124 XtManageChildren(widlist, n); | |
125 | |
126 pushbutton = XmCreatePushButton(paned, "pushbutton", NULL, 0); | |
127 text = XmCreateText(paned, "text", NULL, 0); | |
128 for (i=0; i<no_ews; i++) { | |
129 sprintf (buf, "extcli%d", i); | |
130 emacscli[i] = XtVaCreateWidget(buf, externalClientWidgetClass, paned, | |
131 XmNwidth, 500, XmNheight, 200, | |
132 XmNtraversalOn, TRUE, | |
133 #ifdef TOOLTALK | |
134 XtNuseToolTalk, TRUE, | |
135 #endif | |
136 NULL); | |
137 } | |
138 text2 = XmCreateText(paned, "text2", NULL, 0); | |
139 n = 0; | |
140 widlist[n++] = pushbutton; | |
141 widlist[n++] = text; | |
142 for (i=0; i<no_ews; i++) | |
143 widlist[n++] = emacscli[i]; | |
144 widlist[n++] = text2; | |
145 XtManageChildren(widlist, n); | |
146 | |
147 XtRealizeWidget(shell); | |
148 | |
149 { | |
150 XmString lab; | |
151 char labarr[1000]; | |
152 char tmpbuf[50]; | |
153 | |
154 strcpy (labarr, "window:"); | |
155 for (i=0; i<no_ews; i++) { | |
156 sprintf (tmpbuf, " %d", XtWindow(emacscli[i])); | |
157 strcat (labarr, tmpbuf); | |
158 } | |
159 lab = XmStringCreateLocalized(labarr); | |
160 XtVaSetValues(label2, XmNlabelString, lab, NULL); | |
161 XmStringFree(lab); | |
162 } | |
163 | |
164 XtAppMainLoop(xt_app_con); | |
165 } |