1 /*
2  * tclExtend.h
3  *
4  *    External declarations for the extended Tcl library.
5  *-----------------------------------------------------------------------------
6  * Copyright 1991-1999 Karl Lehenbauer and Mark Diekhans.
7  *
8  * Permission to use, copy, modify, and distribute this software and its
9  * documentation for any purpose and without fee is hereby granted, provided
10  * that the above copyright notice appear in all copies.  Karl Lehenbauer and
11  * Mark Diekhans make no representations about the suitability of this
12  * software for any purpose.  It is provided "as is" without express or
13  * implied warranty.
14  *-----------------------------------------------------------------------------
15  * $Id: tclExtend.h,v 1.5 2002/09/26 00:23:29 hobbs Exp $
16  *-----------------------------------------------------------------------------
17  */
18 
19 #ifndef TCLEXTEND_H
20 #define TCLEXTEND_H
21 
22 #include <stdio.h>
23 #include "tcl.h"
24 
25 /*
26  * The following is needed on Windows to deal with export/import of DLL
27  * functions.  See tcl???/win/README.
28  */
29 #if defined(BUILD_tclx) || defined(BUILD_TCLX)
30 # undef TCL_STORAGE_CLASS
31 # define TCL_STORAGE_CLASS DLLEXPORT
32 #endif
33 
34 #ifndef CONST84
35 #  define CONST84
36 #endif
37 
38 /*
39  * The TCLX_DEBUG flag turns on asserts etc.  Its an internal flag, however
40  * its normally true for alpha and beta release and false for final releases,
41  * so we put the flag right by the version numbers in hopes that we will
42  * remember to change it.
43 #define TCLX_DEBUG
44  */
45 
46 #define TCLX_PATCHLEVEL		0
47 
48 /*
49  * Generic void pointer.
50  */
51 typedef void *void_pt;
52 
53 /*
54  * Flags to command loop functions.
55  */
56 #define TCLX_CMDL_INTERACTIVE	(1<<0)
57 #define TCLX_CMDL_EXIT_ON_EOF	(1<<1)
58 
59 /*
60  * Application signal error handler.  Called after normal signal processing,
61  * when a signal results in an error.	Its main purpose in life is to allow
62  * interactive command loops to clear their input buffer on SIGINT.  This is
63  * not currently a generic interface, but should be. Only one maybe active.
64  * This is an undocumented interface.  Its in the external file in case
65  * someone needs this facility.	 It might change in the future.	 Let us
66  * know if you need this functionality.
67  */
68 typedef int
69 (*TclX_AppSignalErrorHandler) _ANSI_ARGS_((Tcl_Interp *interp,
70 					   ClientData  clientData,
71 					   int	       background,
72 					   int	       signalNum));
73 
74 /*
75  * Exported TclX initialization functions.
76  */
77 
78 EXTERN int	Tclx_Init _ANSI_ARGS_((Tcl_Interp *interp));
79 
80 EXTERN int	Tclx_SafeInit _ANSI_ARGS_((Tcl_Interp *interp));
81 
82 EXTERN int	Tclx_InitStandAlone _ANSI_ARGS_((Tcl_Interp *interp));
83 
84 EXTERN void	TclX_PrintResult _ANSI_ARGS_((Tcl_Interp *interp,
85 			      int	  intResult,
86 			      char	 *checkCmd));
87 
88 EXTERN void	TclX_SetupSigInt _ANSI_ARGS_((void));
89 
90 EXTERN void	TclX_SetAppSignalErrorHandler _ANSI_ARGS_((
91 	TclX_AppSignalErrorHandler errorFunc, ClientData clientData));
92 
93 EXTERN void	TclX_SetAppInfo _ANSI_ARGS_((int   defaultValues,
94 			     char *appName,
95 			     char *appLongName,
96 			     char *appVersion,
97 			     int   appPatchlevel));
98 
99 EXTERN void	TclX_SplitWinCmdLine _ANSI_ARGS_((int *argcPtr,
100 	char ***argvPtr));
101 
102 /*
103  * Exported utility functions.
104  */
105 EXTERN void	TclX_AppendObjResult _ANSI_ARGS_(TCL_VARARGS_DEF(Tcl_Interp *, interpArg));
106 
107 EXTERN char *	TclX_DownShift _ANSI_ARGS_((char *targetStr, CONST char *sourceStr));
108 
109 EXTERN int	TclX_StrToInt _ANSI_ARGS_((CONST char *string, int base, int *intPtr));
110 
111 EXTERN int	TclX_StrToUnsigned _ANSI_ARGS_((CONST char *string,
112 				int	    base,
113 				unsigned   *unsignedPtr));
114 
115 EXTERN char *	TclX_UpShift _ANSI_ARGS_((char	     *targetStr,
116 			  CONST char *sourceStr));
117 
118 /*
119  * Exported keyed list object manipulation functions.
120  */
121 EXTERN Tcl_Obj * TclX_NewKeyedListObj _ANSI_ARGS_((void));
122 
123 EXTERN int	TclX_KeyedListGet _ANSI_ARGS_((Tcl_Interp *interp,
124 			       Tcl_Obj	  *keylPtr,
125 			       const char *key,
126 			       Tcl_Obj	 **valuePtrPtr));
127 
128 EXTERN int	TclX_KeyedListSet _ANSI_ARGS_((Tcl_Interp *interp,
129 			       Tcl_Obj	  *keylPtr,
130 			       const char *key,
131 			       Tcl_Obj	  *valuePtr));
132 
133 EXTERN int	TclX_KeyedListDelete _ANSI_ARGS_((Tcl_Interp *interp,
134 				  Tcl_Obj    *keylPtr,
135 				  const char *key));
136 
137 EXTERN int	TclX_KeyedListGetKeys _ANSI_ARGS_((Tcl_Interp *interp,
138 				   Tcl_Obj    *keylPtr,
139 				   const char *key,
140 				   Tcl_Obj   **listObjPtrPtr));
141 
142 /*
143  * Exported handle table manipulation functions.
144  */
145 EXTERN void_pt	TclX_HandleAlloc _ANSI_ARGS_((void_pt	headerPtr,
146 			      char     *handlePtr));
147 
148 EXTERN void	TclX_HandleFree _ANSI_ARGS_((void_pt  headerPtr,
149 			     void_pt  entryPtr));
150 
151 EXTERN void_pt	TclX_HandleTblInit _ANSI_ARGS_((CONST char *handleBase,
152 				int	    entrySize,
153 				int	    initEntries));
154 
155 EXTERN void	TclX_HandleTblRelease _ANSI_ARGS_((void_pt headerPtr));
156 
157 EXTERN int	TclX_HandleTblUseCount _ANSI_ARGS_((void_pt headerPtr,
158 				    int	    amount));
159 
160 EXTERN void_pt	TclX_HandleWalk _ANSI_ARGS_((void_pt   headerPtr,
161 			    int	     *walkKeyPtr));
162 
163 EXTERN void	TclX_WalkKeyToHandle _ANSI_ARGS_((void_pt   headerPtr,
164 				 int	   walkKey,
165 				 char	  *handlePtr));
166 
167 EXTERN void_pt	TclX_HandleXlate _ANSI_ARGS_((Tcl_Interp  *interp,
168 			     void_pt	  headerPtr,
169 			     CONST  char *handle));
170 
171 EXTERN void_pt	TclX_HandleXlateObj _ANSI_ARGS_((Tcl_Interp    *interp,
172 				void_pt	       headerPtr,
173 				Tcl_Obj	      *handleObj));
174 /*
175  * Command loop functions.
176  */
177 EXTERN int	TclX_CommandLoop _ANSI_ARGS_((Tcl_Interp *interp,
178 			      int	  options,
179 			      char	 *endCommand,
180 			      char	 *prompt1,
181 			      char	 *prompt2));
182 
183 EXTERN int	TclX_AsyncCommandLoop _ANSI_ARGS_((Tcl_Interp *interp,
184 				int	       options,
185 				char	      *endCommand,
186 				char	      *prompt1,
187 				char	      *prompt2));
188 
189 #undef TCL_STORAGE_CLASS
190 #define TCL_STORAGE_CLASS DLLIMPORT
191 
192 #endif
193