1aae38d10SBaptiste Daroussin /****************************************************************************
2*e1865124SBaptiste Daroussin  * Copyright 2018,2020 Thomas E. Dickey                                     *
3*e1865124SBaptiste Daroussin  * Copyright 2017 Free Software Foundation, Inc.                            *
4aae38d10SBaptiste Daroussin  *                                                                          *
5aae38d10SBaptiste Daroussin  * Permission is hereby granted, free of charge, to any person obtaining a  *
6aae38d10SBaptiste Daroussin  * copy of this software and associated documentation files (the            *
7aae38d10SBaptiste Daroussin  * "Software"), to deal in the Software without restriction, including      *
8aae38d10SBaptiste Daroussin  * without limitation the rights to use, copy, modify, merge, publish,      *
9aae38d10SBaptiste Daroussin  * distribute, distribute with modifications, sublicense, and/or sell       *
10aae38d10SBaptiste Daroussin  * copies of the Software, and to permit persons to whom the Software is    *
11aae38d10SBaptiste Daroussin  * furnished to do so, subject to the following conditions:                 *
12aae38d10SBaptiste Daroussin  *                                                                          *
13aae38d10SBaptiste Daroussin  * The above copyright notice and this permission notice shall be included  *
14aae38d10SBaptiste Daroussin  * in all copies or substantial portions of the Software.                   *
15aae38d10SBaptiste Daroussin  *                                                                          *
16aae38d10SBaptiste Daroussin  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
17aae38d10SBaptiste Daroussin  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
18aae38d10SBaptiste Daroussin  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
19aae38d10SBaptiste Daroussin  * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
20aae38d10SBaptiste Daroussin  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
21aae38d10SBaptiste Daroussin  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
22aae38d10SBaptiste Daroussin  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
23aae38d10SBaptiste Daroussin  *                                                                          *
24aae38d10SBaptiste Daroussin  * Except as contained in this notice, the name(s) of the above copyright   *
25aae38d10SBaptiste Daroussin  * holders shall not be used in advertising or otherwise to promote the     *
26aae38d10SBaptiste Daroussin  * sale, use or other dealings in this Software without prior written       *
27aae38d10SBaptiste Daroussin  * authorization.                                                           *
28aae38d10SBaptiste Daroussin  ****************************************************************************/
29aae38d10SBaptiste Daroussin 
30aae38d10SBaptiste Daroussin /****************************************************************************
31aae38d10SBaptiste Daroussin  *  Author: Thomas E. Dickey                                                *
32aae38d10SBaptiste Daroussin  ****************************************************************************/
33aae38d10SBaptiste Daroussin 
34aae38d10SBaptiste Daroussin #include <curses.priv.h>
35aae38d10SBaptiste Daroussin 
36*e1865124SBaptiste Daroussin MODULE_ID("$Id: report_offsets.c,v 1.21 2020/02/02 23:34:34 tom Exp $")
37aae38d10SBaptiste Daroussin 
38aae38d10SBaptiste Daroussin #define show_size(type) \
39aae38d10SBaptiste Daroussin 	flag = 0; \
40aae38d10SBaptiste Daroussin 	last = 0; \
41aae38d10SBaptiste Daroussin 	printf("%5lu   " #type "\n", (unsigned long)sizeof(type))
42aae38d10SBaptiste Daroussin #define show_offset(type,member) \
43aae38d10SBaptiste Daroussin 	next = (unsigned long)offsetof(type,member); \
44aae38d10SBaptiste Daroussin 	if (last > next) \
45aae38d10SBaptiste Daroussin 		printf("?? incorrect order for " #type "." #member "\n"); \
46aae38d10SBaptiste Daroussin 	printf("%5lu %c " #type "." #member "\n", next, flag ? *flag : ' '); \
47aae38d10SBaptiste Daroussin 	last = next; \
48aae38d10SBaptiste Daroussin 	flag = 0
49aae38d10SBaptiste Daroussin 
50aae38d10SBaptiste Daroussin #if NCURSES_WIDECHAR && NCURSES_EXT_COLORS
51aae38d10SBaptiste Daroussin #define show_COLORS(type,member) { flag = "c"; show_offset(type,member); }
52aae38d10SBaptiste Daroussin #else
53aae38d10SBaptiste Daroussin #define show_COLORS(type,member)	/* nothing */
54aae38d10SBaptiste Daroussin #endif
55aae38d10SBaptiste Daroussin 
56aae38d10SBaptiste Daroussin #ifdef USE_TERM_DRIVER
57aae38d10SBaptiste Daroussin #define show_DRIVER(type,member) { flag = "d"; show_offset(type,member); }
58aae38d10SBaptiste Daroussin #else
59aae38d10SBaptiste Daroussin #define show_DRIVER(type,member)	/* nothing */
60aae38d10SBaptiste Daroussin #endif
61aae38d10SBaptiste Daroussin 
62aae38d10SBaptiste Daroussin #if NO_LEAKS
63aae38d10SBaptiste Daroussin #define show_MLEAKS(type,member) { flag = "L"; show_offset(type,member); }
64aae38d10SBaptiste Daroussin #else
65aae38d10SBaptiste Daroussin #define show_MLEAKS(type,member)	/* nothing */
66aae38d10SBaptiste Daroussin #endif
67aae38d10SBaptiste Daroussin 
68aae38d10SBaptiste Daroussin #ifdef USE_TERM_DRIVER
69aae38d10SBaptiste Daroussin #define show_NORMAL(type,member)	/* nothing */
70aae38d10SBaptiste Daroussin #else
71aae38d10SBaptiste Daroussin #define show_NORMAL(type,member) { flag = "n"; show_offset(type,member); }
72aae38d10SBaptiste Daroussin #endif
73aae38d10SBaptiste Daroussin 
74aae38d10SBaptiste Daroussin #define show_OPTION(type,member) { flag = "+"; show_offset(type,member); }
75aae38d10SBaptiste Daroussin 
76aae38d10SBaptiste Daroussin #if USE_REENTRANT
77aae38d10SBaptiste Daroussin #define show_REENTR(type,member) { flag = "r"; show_offset(type,member); }
78aae38d10SBaptiste Daroussin #else
79aae38d10SBaptiste Daroussin #define show_REENTR(type,member)	/* nothing */
80aae38d10SBaptiste Daroussin #endif
81aae38d10SBaptiste Daroussin 
82aae38d10SBaptiste Daroussin #if NCURSES_SP_FUNCS
83aae38d10SBaptiste Daroussin #define show_SPFUNC(type,member) { flag = "s"; show_offset(type,member); }
84aae38d10SBaptiste Daroussin #else
85aae38d10SBaptiste Daroussin #define show_SPFUNC(type,member)	/* nothing */
86aae38d10SBaptiste Daroussin #endif
87aae38d10SBaptiste Daroussin 
88aae38d10SBaptiste Daroussin #ifdef USE_PTHREADS
89aae38d10SBaptiste Daroussin #define show_THREAD(type,member) { flag = "t"; show_offset(type,member); }
90aae38d10SBaptiste Daroussin #else
91aae38d10SBaptiste Daroussin #define show_THREAD(type,member)	/* nothing */
92aae38d10SBaptiste Daroussin #endif
93aae38d10SBaptiste Daroussin 
94aae38d10SBaptiste Daroussin #ifdef TRACE
95aae38d10SBaptiste Daroussin #define show_TRACES(type,member) { flag = "T"; show_offset(type,member); }
96aae38d10SBaptiste Daroussin #else
97aae38d10SBaptiste Daroussin #define show_TRACES(type,member)	/* nothing */
98aae38d10SBaptiste Daroussin #endif
99aae38d10SBaptiste Daroussin 
100aae38d10SBaptiste Daroussin #if USE_WIDEC_SUPPORT
101aae38d10SBaptiste Daroussin #define show_WIDECH(type,member) { flag = "w"; show_offset(type,member); }
102aae38d10SBaptiste Daroussin #else
103aae38d10SBaptiste Daroussin #define show_WIDECH(type,member)	/* nothing */
104aae38d10SBaptiste Daroussin #endif
105aae38d10SBaptiste Daroussin 
106aae38d10SBaptiste Daroussin int
main(void)107aae38d10SBaptiste Daroussin main(void)
108aae38d10SBaptiste Daroussin {
109aae38d10SBaptiste Daroussin     const char *flag = 0;
110aae38d10SBaptiste Daroussin     unsigned long last, next;
111aae38d10SBaptiste Daroussin 
112aae38d10SBaptiste Daroussin     printf("Size/offsets of data structures:\n");
113aae38d10SBaptiste Daroussin 
114aae38d10SBaptiste Daroussin     show_size(attr_t);
115aae38d10SBaptiste Daroussin     show_size(chtype);
116aae38d10SBaptiste Daroussin #if USE_WIDEC_SUPPORT
117aae38d10SBaptiste Daroussin     show_size(cchar_t);
118aae38d10SBaptiste Daroussin #endif
119aae38d10SBaptiste Daroussin     show_size(mmask_t);
120aae38d10SBaptiste Daroussin     show_size(MEVENT);
121aae38d10SBaptiste Daroussin     show_size(NCURSES_BOOL);
122aae38d10SBaptiste Daroussin 
123aae38d10SBaptiste Daroussin     printf("\n");
124aae38d10SBaptiste Daroussin     show_size(SCREEN);
125aae38d10SBaptiste Daroussin     show_offset(SCREEN, _ifd);
126aae38d10SBaptiste Daroussin     show_offset(SCREEN, _fifo);
127aae38d10SBaptiste Daroussin     show_offset(SCREEN, _fifohead);
128aae38d10SBaptiste Daroussin     show_offset(SCREEN, _direct_color);
129aae38d10SBaptiste Daroussin     show_offset(SCREEN, _panelHook);
130aae38d10SBaptiste Daroussin     show_offset(SCREEN, jump);
131aae38d10SBaptiste Daroussin     show_offset(SCREEN, rsp);
132aae38d10SBaptiste Daroussin #if NCURSES_NO_PADDING
133aae38d10SBaptiste Daroussin     show_OPTION(SCREEN, _no_padding);
134aae38d10SBaptiste Daroussin #endif
135aae38d10SBaptiste Daroussin #if USE_HARD_TABS
136aae38d10SBaptiste Daroussin     show_OPTION(SCREEN, _ht_cost);
137aae38d10SBaptiste Daroussin #endif
138aae38d10SBaptiste Daroussin #if USE_ITALIC
139aae38d10SBaptiste Daroussin     show_OPTION(SCREEN, _use_ritm);
140aae38d10SBaptiste Daroussin #endif
141aae38d10SBaptiste Daroussin #if USE_KLIBC_KBD
142aae38d10SBaptiste Daroussin     show_OPTION(SCREEN, _extended_key);
143aae38d10SBaptiste Daroussin #endif
144aae38d10SBaptiste Daroussin #if NCURSES_EXT_FUNCS
145aae38d10SBaptiste Daroussin     show_OPTION(SCREEN, _assumed_color);
146aae38d10SBaptiste Daroussin #endif
147aae38d10SBaptiste Daroussin #if USE_GPM_SUPPORT
148aae38d10SBaptiste Daroussin     show_OPTION(SCREEN, _mouse_gpm_loaded);
149aae38d10SBaptiste Daroussin #ifdef HAVE_LIBDL
150aae38d10SBaptiste Daroussin     show_OPTION(SCREEN, _dlopen_gpm);
151aae38d10SBaptiste Daroussin #endif
152aae38d10SBaptiste Daroussin #endif
153aae38d10SBaptiste Daroussin #if USE_EMX_MOUSE
154aae38d10SBaptiste Daroussin     show_OPTION(SCREEN, _emxmouse_wfd);
155aae38d10SBaptiste Daroussin #endif
156aae38d10SBaptiste Daroussin #if USE_SYSMOUSE
157aae38d10SBaptiste Daroussin     show_OPTION(SCREEN, _sysmouse_fifo);
158aae38d10SBaptiste Daroussin #endif
159aae38d10SBaptiste Daroussin     show_DRIVER(SCREEN, _drv_mouse_fifo);
160aae38d10SBaptiste Daroussin #if USE_SIZECHANGE
161aae38d10SBaptiste Daroussin     show_OPTION(SCREEN, _resize);
162aae38d10SBaptiste Daroussin #endif
163aae38d10SBaptiste Daroussin     show_DRIVER(SCREEN, _windowlist);
164aae38d10SBaptiste Daroussin     show_REENTR(SCREEN, _ttytype);
165aae38d10SBaptiste Daroussin     show_SPFUNC(SCREEN, use_tioctl);
166aae38d10SBaptiste Daroussin     show_WIDECH(SCREEN, _screen_acs_fix);
167aae38d10SBaptiste Daroussin     show_COLORS(SCREEN, _ordered_pairs);
168aae38d10SBaptiste Daroussin     show_TRACES(SCREEN, tracechr_buf);
169aae38d10SBaptiste Daroussin 
170aae38d10SBaptiste Daroussin     printf("\n");
171aae38d10SBaptiste Daroussin     show_size(TERMINAL);
172aae38d10SBaptiste Daroussin     show_offset(TERMINAL, type);
173aae38d10SBaptiste Daroussin     show_offset(TERMINAL, Filedes);
174aae38d10SBaptiste Daroussin     show_offset(TERMINAL, Ottyb);
175aae38d10SBaptiste Daroussin     show_offset(TERMINAL, Nttyb);
176aae38d10SBaptiste Daroussin     show_offset(TERMINAL, _baudrate);
177aae38d10SBaptiste Daroussin     show_offset(TERMINAL, _termname);
178aae38d10SBaptiste Daroussin #if HAVE_INIT_EXTENDED_COLOR
179aae38d10SBaptiste Daroussin     show_COLORS(TERMINAL, type2);
180aae38d10SBaptiste Daroussin #endif
181aae38d10SBaptiste Daroussin 
182aae38d10SBaptiste Daroussin     printf("\n");
183aae38d10SBaptiste Daroussin     show_size(TERMTYPE);
184aae38d10SBaptiste Daroussin #if NCURSES_XNAMES
185aae38d10SBaptiste Daroussin     show_OPTION(TERMTYPE, ext_str_table);
186aae38d10SBaptiste Daroussin     show_OPTION(TERMTYPE, ext_Strings);
187aae38d10SBaptiste Daroussin #endif
188aae38d10SBaptiste Daroussin 
189aae38d10SBaptiste Daroussin     printf("\n");
190aae38d10SBaptiste Daroussin     show_size(WINDOW);
191aae38d10SBaptiste Daroussin     show_WIDECH(WINDOW, _bkgrnd);
192aae38d10SBaptiste Daroussin     show_COLORS(WINDOW, _color);
193aae38d10SBaptiste Daroussin 
194aae38d10SBaptiste Daroussin     printf("\n");
195aae38d10SBaptiste Daroussin     show_size(NCURSES_GLOBALS);
196aae38d10SBaptiste Daroussin     show_offset(NCURSES_GLOBALS, init_signals);
197aae38d10SBaptiste Daroussin     show_DRIVER(NCURSES_GLOBALS, term_driver);
198aae38d10SBaptiste Daroussin     show_NORMAL(NCURSES_GLOBALS, _nc_windowlist);
199aae38d10SBaptiste Daroussin #if USE_HOME_TERMINFO
200aae38d10SBaptiste Daroussin     show_OPTION(NCURSES_GLOBALS, home_terminfo);
201aae38d10SBaptiste Daroussin #endif
202aae38d10SBaptiste Daroussin #if !USE_SAFE_SPRINTF
203aae38d10SBaptiste Daroussin     show_OPTION(NCURSES_GLOBALS, safeprint_rows);
204aae38d10SBaptiste Daroussin #endif
205aae38d10SBaptiste Daroussin     show_THREAD(NCURSES_GLOBALS, mutex_curses);
206aae38d10SBaptiste Daroussin #if USE_PTHREADS_EINTR
207aae38d10SBaptiste Daroussin     show_THREAD(NCURSES_GLOBALS, read_thread);
208aae38d10SBaptiste Daroussin #endif
209aae38d10SBaptiste Daroussin     show_WIDECH(NCURSES_GLOBALS, key_name);
210aae38d10SBaptiste Daroussin     show_TRACES(NCURSES_GLOBALS, trace_opened);
211aae38d10SBaptiste Daroussin     show_MLEAKS(NCURSES_GLOBALS, leak_checking);
212aae38d10SBaptiste Daroussin 
213aae38d10SBaptiste Daroussin     printf("\n");
214aae38d10SBaptiste Daroussin     show_size(NCURSES_PRESCREEN);
215aae38d10SBaptiste Daroussin     show_offset(NCURSES_PRESCREEN, saved_tty);
216aae38d10SBaptiste Daroussin     show_offset(NCURSES_PRESCREEN, use_tioctl);
217aae38d10SBaptiste Daroussin     show_offset(NCURSES_PRESCREEN, _outch);
218aae38d10SBaptiste Daroussin     show_NORMAL(NCURSES_PRESCREEN, rippedoff);
219aae38d10SBaptiste Daroussin #if NCURSES_NO_PADDING
220aae38d10SBaptiste Daroussin     show_OPTION(NCURSES_PRESCREEN, _no_padding);
221aae38d10SBaptiste Daroussin #endif
222aae38d10SBaptiste Daroussin #if BROKEN_LINKER
223aae38d10SBaptiste Daroussin     show_offset(NCURSES_PRESCREEN, real_acs_map);
224aae38d10SBaptiste Daroussin #else
225aae38d10SBaptiste Daroussin     show_REENTR(NCURSES_PRESCREEN, real_acs_map);
226aae38d10SBaptiste Daroussin #endif
227aae38d10SBaptiste Daroussin 
228aae38d10SBaptiste Daroussin     return EXIT_SUCCESS;
229aae38d10SBaptiste Daroussin }
230