home *** CD-ROM | disk | FTP | other *** search
- /* wildargs.h
-
- Support for overriding the built-in wild card handling routines
- or the entire command line processing routines.
-
- */
-
- /*
- * C/C++ Run Time Library - Version 10.0
- *
- * Copyright (c) 1999, 2000 by Inprise Corporation
- * All Rights Reserved.
- *
- */
-
- /* $Revision: 9.3 $ */
-
- #ifndef __WILDARGS_H
- #define __WILDARGS_H
-
- #include <stddef.h>
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- /* _PFN_ADDARG: Typedef for the addarg function pointer. This pfn parameter
- to the wild card processing routines will contain the function to call to
- add an argument into the argv[] array. The second parameter: _makecopy is
- a bool that specifies to the RTL whether or not this argument should have
- new memory allocated for it and then be copied into.
- */
- typedef void _RTLENTRY (* _PFN_ADDARG)(void *_arg, int _makecopy);
-
-
- /* _argv_expand_ptr: Pointer to wildcard expansion function. Normally it
- points to a function that simply adds an argument without expansion. To
- cause the built-in wild card expander to be used, simply point this to
- the equivalent version of _expand_wild. You can also point it to your
- own function and it will be called for every wild card parameter the
- start up code finds. You can then expand it however you wish, calling
- the passed-in pointer _pfn_addarg() to insert each of the expanded items.
- */
- extern void _RTLENTRY (* _RTLENTRY _argv_expand_ptr)(char *_arg, _PFN_ADDARG _pfn_addarg);
- extern void _RTLENTRY (* _RTLENTRY _wargv_expand_ptr)(wchar_t *_arg, _PFN_ADDARG _pfn_addarg);
-
-
- /* _expand_wild: Built-in handler for expanding wild cards. This is the
- internal function to which _argv_expand_ptr can be pointed in order to
- have wild card arguments expanded.
- */
- void _RTLENTRY _EXPFUNC _expand_wild(char *_arg, _PFN_ADDARG _pfn_addarg);
- void _RTLENTRY _EXPFUNC _wexpand_wild(wchar_t *_arg, _PFN_ADDARG _pfn_addarg);
-
-
- /* _handle_setargv: Built-in handler for processing the entire command line.
- This is the name of the function that handles the processing of the
- entire command line. You can implement this function to get control of
- the entire command line argument process. The exe name (for argv[0]) has
- already been allocated and formatted for you and is passed in as _argv0.
- You simply need to call _pfn_addarg(_argv0,0) on it to add it in. The
- RTL will manage and free the memory assocated with _argv0. Next the
- entire command line is passed in as _cmdline. You should handle quotes
- and wild cards however you wish. For each parameter that you isolate into
- a separate string, you should call through the passed-in pointer
- _pfn_addarg() to have it added to the argv[] list. The second parameter
- to _pfn_addarg() is a bool that specifies to the RTL whether or not this
- argument should have new memory allocated for it and then be copied into.
- Regardless of who allocates the memory for it (you or _pfn_addarg), you
- will be responsible for freeing it. This should be done from the
- _handle_exitargv() routine.
-
- The return value should be zero for failure (which will cause NULL
- parameters to be passed to main) or non-zero for success.
-
- For an example of this handler see the source for the RTL's default
- version in: CBuilder/Source/rtl/source/process/hsargv.c
-
- NOTE: Only the RTL's internal version of this function will call out
- through _argv_expand_ptr upon each wild card argument found. If you
- replace _handle_setargv then you'll have to do everything yourself.
- */
- int _RTLENTRY _handle_setargv(char *_argv0, char *_cmdline, _PFN_ADDARG _pfn_addarg);
- int _RTLENTRY _handle_wsetargv(wchar_t *_argv0, wchar_t *_cmdline, _PFN_ADDARG _pfn_addarg);
-
-
- /* _handle_exitargv: Built-in cleanup handler for the entire command line
- processor. Here is where all memory should be freed that you directly
- (or indirectly via _pfn_addarg) caused to be allocated during the
- _handle_setargv routine.
- */
- void _RTLENTRY _handle_exitargv(void);
- void _RTLENTRY _handle_wexitargv(void);
-
-
- #ifdef __cplusplus
- } // "C"
- #endif
-
- #endif /* __WILDARGS_H */