100 lines
4 KiB
C
100 lines
4 KiB
C
/* 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 */ |