/* 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 #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 */