Home | History | Annotate | Line # | Download | only in dist
      1 /* $XTermId: trace.h,v 1.97 2024/12/01 19:54:13 tom Exp $ */
      2 
      3 /*
      4  * Copyright 1997-2022,2024 by Thomas E. Dickey
      5  *
      6  *                         All Rights Reserved
      7  *
      8  * Permission is hereby granted, free of charge, to any person obtaining a
      9  * copy of this software and associated documentation files (the
     10  * "Software"), to deal in the Software without restriction, including
     11  * without limitation the rights to use, copy, modify, merge, publish,
     12  * distribute, sublicense, and/or sell copies of the Software, and to
     13  * permit persons to whom the Software is furnished to do so, subject to
     14  * the following conditions:
     15  *
     16  * The above copyright notice and this permission notice shall be included
     17  * in all copies or substantial portions of the Software.
     18  *
     19  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
     20  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     21  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
     22  * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
     23  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
     24  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
     25  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     26  *
     27  * Except as contained in this notice, the name(s) of the above copyright
     28  * holders shall not be used in advertising or otherwise to promote the
     29  * sale, use or other dealings in this Software without prior written
     30  * authorization.
     31  */
     32 
     33 /*
     34  * Common/useful definitions for XTERM application
     35  */
     36 #ifndef	included_trace_h
     37 #define	included_trace_h
     38 /* *INDENT-OFF* */
     39 
     40 #include <xterm.h>
     41 
     42 #if OPT_TRACE
     43 
     44 #include <stdarg.h>
     45 
     46 extern	void	Trace ( const char *, ... ) GCC_PRINTFLIKE(1,2);
     47 extern	void	TraceVA ( const char *fmt, va_list ap );
     48 extern	void	TraceXError (Display *d, XErrorEvent *ev);
     49 
     50 #undef  if_TRACE
     51 #define if_TRACE(stmt)		stmt
     52 
     53 #undef  TRACE
     54 #define TRACE(p) Trace p
     55 
     56 #undef  TRACE_VA
     57 #define TRACE_VA(p) TraceVA p
     58 #define TRACE_X_ERR(d,e) TraceXError(d,e)
     59 
     60 extern	void	TraceClose (void);
     61 
     62 #undef  TRACE_CLOSE
     63 #define TRACE_CLOSE TraceClose
     64 
     65 #if OPT_TRACE > 1
     66 #define TRACE2(p) Trace p
     67 #endif
     68 
     69 #define TRACE_L "{{"
     70 #define TRACE_R "}}"
     71 
     72 extern	const char * visibleChars(const Char * /* buf */, size_t /* len */);
     73 extern	const char * visibleEventMode(EventMode);
     74 extern	const char * visibleIChars(const IChar * /* buf */, size_t /* len */);
     75 extern	const char * visibleUChar(unsigned);
     76 extern	const char * visibleDblChrset(unsigned /* chrset */);
     77 extern	const char * visibleEventType (int);
     78 extern	const char * visibleMappingMode (int);
     79 extern	const char * visibleNotifyDetail(int /* code */);
     80 extern	const char * visibleNotifyMode (int /* code */);
     81 extern	const char * visibleScsCode(DECNRCM_codes /* chrset */);
     82 extern	const char * visibleSelectionTarget(Display * /* d */, Atom /* a */);
     83 extern	const char * visibleTekparse (int);
     84 extern	const char * visibleVTparse (int);
     85 extern	const char * visibleXError (int /* code */);
     86 
     87 extern	const char * TraceAtomName(Display * /* d */, Atom /* a */);
     88 
     89 extern	void	TraceArgv(const char * /* tag */, char ** /* argv */);
     90 #undef  TRACE_ARGV
     91 #define	TRACE_ARGV(tag,argv) TraceArgv(tag,argv)
     92 
     93 extern	const	char *trace_who;
     94 #undef  TRACE_CHILD
     95 #define TRACE_CHILD int tracing_child = (trace_who = "child") != NULL; (void) tracing_child
     96 
     97 extern	void	TraceEvent(const char *, XEvent *, String *, const Cardinal *);
     98 #undef  TRACE_EVENT
     99 #define	TRACE_EVENT(t,e,s,n) TraceEvent(t, (XEvent *)e, s, n)
    100 
    101 #undef  TRACE_FALLBACK
    102 #if OPT_RENDERFONT && OPT_WIDE_CHARS
    103 extern	void	TraceFallback(XtermWidget, const char *, unsigned, int, XftFont *);
    104 #define TRACE_FALLBACK(w,t,c,n,f) TraceFallback(w, t, c, n, f)
    105 #else
    106 #define TRACE_FALLBACK(w,t,c,n,f) /*nothing*/
    107 #endif
    108 
    109 extern	void	TraceFocus(Widget, XEvent *);
    110 #undef  TRACE_FOCUS
    111 #define	TRACE_FOCUS(w,e) TraceFocus((Widget)w, (XEvent *)e)
    112 
    113 extern	void	TraceSizeHints(XSizeHints *);
    114 #undef  TRACE_HINTS
    115 #define	TRACE_HINTS(hints) TraceSizeHints(hints)
    116 
    117 extern	void	TraceIds(const char * /* fname */, int  /* lnum */);
    118 #undef  TRACE_IDS
    119 #define	TRACE_IDS TraceIds(__FILE__, __LINE__)
    120 
    121 extern	void	TraceTime(const char * /* fname */, int  /* lnum */);
    122 #undef  TRACE_TIME
    123 #define	TRACE_TIME TraceTime(__FILE__, __LINE__)
    124 
    125 extern	void	TraceOptions(OptionHelp * /* options */, XrmOptionDescRec * /* resources */, Cardinal  /* count */);
    126 #undef  TRACE_OPTS
    127 #define	TRACE_OPTS(opts,ress,lens) TraceOptions(opts,ress,lens)
    128 
    129 extern	void	TraceTranslations(const char *, Widget);
    130 #undef  TRACE_TRANS
    131 #define	TRACE_TRANS(name,w) TraceTranslations(name,w)
    132 
    133 extern	void	TraceWindowAttributes(XWindowAttributes *);
    134 #undef  TRACE_WIN_ATTRS
    135 #define	TRACE_WIN_ATTRS(a) TraceWindowAttributes(a)
    136 
    137 extern	void	TraceWMSizeHints(XtermWidget);
    138 #undef  TRACE_WM_HINTS
    139 #define	TRACE_WM_HINTS(w) TraceWMSizeHints(w)
    140 
    141 extern	void	TraceXtermResources(void);
    142 #undef  TRACE_XRES
    143 #define	TRACE_XRES() TraceXtermResources()
    144 
    145 extern	XtGeometryResult TraceResizeRequest(const char * /* fn */, int  /* ln */, Widget  /* w */, unsigned  /* reqwide */, unsigned  /* reqhigh */, Dimension * /* gotwide */, Dimension * /* gothigh */);
    146 #undef  REQ_RESIZE
    147 #define REQ_RESIZE(w, reqwide, reqhigh, gotwide, gothigh) \
    148 	TraceResizeRequest(__FILE__, __LINE__, w, \
    149 			   (reqwide), (reqhigh), \
    150 			   (gotwide), (gothigh))
    151 
    152 extern const char * ModifierName(unsigned /* modifier */);
    153 #define FMT_MODIFIER_NAMES "%s%s%s%s%s%s%s%s"
    154 #define ARG_MODIFIER_NAMES(state) \
    155 	   ModifierName(state & ShiftMask), \
    156 	   ModifierName(state & LockMask), \
    157 	   ModifierName(state & ControlMask), \
    158 	   ModifierName(state & Mod1Mask), \
    159 	   ModifierName(state & Mod2Mask), \
    160 	   ModifierName(state & Mod3Mask), \
    161 	   ModifierName(state & Mod4Mask), \
    162 	   ModifierName(state & Mod5Mask)
    163 
    164 #else
    165 
    166 #define REQ_RESIZE(w, reqwide, reqhigh, gotwide, gothigh) \
    167 	XtMakeResizeRequest((Widget) (w), \
    168 			    (Dimension) (reqwide), (Dimension) (reqhigh), \
    169 			    (gotwide), (gothigh))
    170 
    171 #define if_TRACE(stmt)		/*nothing*/
    172 #define TRACE(p)		/*nothing*/
    173 #define TRACE_CLOSE()		/*nothing*/
    174 #define TRACE_ARGV(tag,argv)	/*nothing*/
    175 #define TRACE_CHILD		/*nothing*/
    176 #define TRACE_EVENT(t,e,s,n)	/*nothing*/
    177 #define TRACE_FALLBACK(w,t,c,n,f) /*nothing*/
    178 #define TRACE_FOCUS(w,e)	/*nothing*/
    179 #define TRACE_HINTS(hints)	/*nothing*/
    180 #define TRACE_IDS		/*nothing*/
    181 #define TRACE_OPTS(opts,ress,lens) /*nothing*/
    182 #define TRACE_TRANS(name,w)	/*nothing*/
    183 #define TRACE_WIN_ATTRS(w)	/*nothing*/
    184 #define TRACE_WM_HINTS(w)	/*nothing*/
    185 #define TRACE_X_ERR(d,e)	/*nothing*/
    186 #define TRACE_XRES()		/*nothing*/
    187 
    188 #endif
    189 
    190 #ifndef TRACE2
    191 #define TRACE2(p)		/*nothing*/
    192 #endif
    193 
    194 extern void TraceScreen(XtermWidget /* xw */, int /* whichBuf */);
    195 
    196 /*
    197  * The whole wnew->screen struct is zeroed in VTInitialize.  Use these macros
    198  * where applicable for copying the pieces from the request widget into the
    199  * new widget.  We do not have to use them for wnew->misc, but the associated
    200  * traces are very useful for debugging.
    201  */
    202 #if OPT_TRACE
    203 #define init_Bres(name) \
    204 	TRACE(("init " #name " = %s\n", \
    205 		BtoS(wnew->name = request->name)))
    206 #define init_Dres(name) \
    207 	TRACE(("init " #name " = %f\n", \
    208 		wnew->name = request->name))
    209 #define init_Dres2(name,i) \
    210 	TRACE(("init " #name "[%d] = %f\n", i, \
    211 		wnew->name[i] = request->name[i]))
    212 #define init_Ires(name) \
    213 	TRACE(("init " #name " = %d\n", \
    214 		wnew->name = request->name))
    215 #define init_Mres(name) \
    216 	TRACE(("init " #name " = %s\n", \
    217 		MtoS(wnew->name = request->name)))
    218 #define init_Sres(name) \
    219 	TRACE(("init " #name " = \"%s\"\n", \
    220 		(wnew->name = x_strtrim(request->name)) != NULL \
    221 			? wnew->name : "<null>"))
    222 #define init_Sres2(name,i) \
    223 	TRACE(("init " #name "[%d] = \"%s\"\n", i, \
    224 		(wnew->name(i) = x_strtrim(request->name(i))) != NULL \
    225 			? wnew->name(i) : "<null>"))
    226 #define init_Tres(offset) \
    227 	TRACE(("init screen.Tcolors[" #offset "] = %#lx\n", \
    228 		fill_Tres(wnew, request, offset)))
    229 #else
    230 #define init_Bres(name)    wnew->name = request->name
    231 #define init_Dres(name)    wnew->name = request->name
    232 #define init_Dres2(name,i) wnew->name[i] = request->name[i]
    233 #define init_Ires(name)    wnew->name = request->name
    234 #define init_Mres(name)    wnew->name = request->name
    235 #define init_Sres(name)    wnew->name = x_strtrim(request->name)
    236 #define init_Sres2(name,i) wnew->name(i) = x_strtrim(request->name(i))
    237 #define init_Tres(offset)  fill_Tres(wnew, request, offset)
    238 #endif
    239 
    240 /* *INDENT-ON* */
    241 
    242 #endif /* included_trace_h */
    243