Blame include/ntapi/nt_argv.h

dd89bb
#ifndef _NT_ARGV_H_
dd89bb
#define _NT_ARGV_H_
dd89bb
dd89bb
/******************************************************
dd89bb
 *                                                    *
dd89bb
 *   this header is REALLY NOT what you are looking   *
dd89bb
 *   for, however if you are into writing your apps   *
dd89bb
 *   using the Native API only, then you might find   *
dd89bb
 *   the below interfaces somehow useful.             *
dd89bb
 *                                                    *
dd89bb
 *****************************************************/
dd89bb
dd89bb
#include <psxtypes/psxtypes.h>
dd89bb
dd89bb
/* ntapi_tt_get_argv_envp_utf16 flag bits */
dd89bb
#define NT_GET_ARGV_ENVP_USE_INTERNAL_BUFFER	(0x0000)
dd89bb
#define NT_GET_ARGV_ENVP_USE_CALLER_BUFFER	(0x0001)
dd89bb
#define NT_GET_ARGV_ENVP_COPY_ENVIRONMENT	(0x0002)
dd89bb
#define NT_GET_ARGV_ENVP_VALIDATE_UTF16		(0x0004)
dd89bb
dd89bb
/* ntapi_tt_program_option flag bits */
dd89bb
#define NT_OPTION_SHORT			(0x0001)
dd89bb
#define NT_OPTION_LONG			(0x0002)
dd89bb
#define NT_OPTION_ALLOWED_ONCE		(0x0100)
dd89bb
#define NT_OPTION_ALLOWED_MANY		(0x0200)
dd89bb
#define NT_OPTION_REQUIRED		(0x0400)
dd89bb
#define NT_OPTION_VALUE_REQUIRED	(0x1000)
dd89bb
dd89bb
typedef struct _nt_program_option {
dd89bb
	int		option_count;
dd89bb
	wchar16_t	short_name_code;
dd89bb
	wchar16_t *	long_name;
dd89bb
	wchar16_t *	value;
dd89bb
	uint32_t	flags;
dd89bb
} nt_program_option;
dd89bb
dd89bb
dd89bb
typedef struct _nt_program_options_meta {
dd89bb
	int	idx_next_argument;
dd89bb
	int	idx_invalid_short_name;
dd89bb
	int	idx_invalid_long_name;
dd89bb
	int	idx_invalid_argument;
dd89bb
	int	idx_missing_option_value;
dd89bb
} nt_program_options_meta;
dd89bb
dd89bb
dd89bb
typedef struct _nt_env_var_meta_utf16 {
dd89bb
	wchar16_t *	name;
dd89bb
	wchar16_t *	value;
dd89bb
	int		envp_index;
dd89bb
	uint32_t	flags;
dd89bb
} nt_env_var_meta_utf16;
dd89bb
dd89bb
dd89bb
typedef struct _nt_cmd_option_meta_utf16 {
dd89bb
	wchar16_t *	short_name;
dd89bb
	uint32_t	short_name_code;
dd89bb
	wchar16_t *	long_name;
dd89bb
	wchar16_t *	value;
dd89bb
	int		argv_index;
dd89bb
	uint32_t	flags;
dd89bb
} nt_cmd_option_meta_utf16;
dd89bb
dd89bb
dd89bb
typedef struct _nt_argv_envp_block_info {
dd89bb
	wchar16_t *	cmd_line;
dd89bb
	wchar16_t **	wargv_buffer;
dd89bb
	size_t		wargv_buffer_len;
dd89bb
	wchar16_t *	wargs_buffer;
dd89bb
	size_t		wargs_buffer_len;
dd89bb
	size_t		wargs_bytes_written;
dd89bb
	wchar16_t **	wenvp_buffer;
dd89bb
	size_t		wenvp_buffer_len;
dd89bb
	wchar16_t *	wenvs_buffer;
dd89bb
	size_t		wenvs_buffer_len;
dd89bb
	size_t		wenvs_bytes_used;
dd89bb
	char *		args_buffer;
dd89bb
	size_t		args_buffer_len;
dd89bb
	size_t		args_bytes_written;
dd89bb
	char *		envs_buffer;
dd89bb
	size_t		envs_buffer_len;
dd89bb
	size_t		envs_bytes_used;
dd89bb
	uint32_t	arg_flags;
dd89bb
	uint32_t	env_flags;
dd89bb
	uint32_t	psx_flags;
dd89bb
	uint32_t	psx_padding;
dd89bb
	uint32_t	argv_envp_ptr_total;
dd89bb
	int		envc;
dd89bb
dd89bb
	int		argc;
dd89bb
	char **		argv;
dd89bb
	char **		envp;
dd89bb
} nt_argv_envp_block_info;
dd89bb
dd89bb
dd89bb
typedef struct _nt_get_argv_envp_ext_params {
dd89bb
	nt_argv_envp_block_info	argv_envp_block_info;
dd89bb
} nt_get_argv_envp_ext_params;
dd89bb
dd89bb
dd89bb
typedef wchar16_t * __stdcall	ntapi_tt_get_cmd_line_utf16(void);
dd89bb
dd89bb
dd89bb
typedef wchar16_t * __stdcall	ntapi_tt_get_peb_env_block_utf16(void);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall 	ntapi_tt_parse_cmd_line_args_utf16(
dd89bb
	__in	wchar16_t *	cmd_line,
dd89bb
	__out	int *		arg_count,
dd89bb
	__in	wchar16_t *	args_buffer,
dd89bb
	__in	size_t		args_buffer_len,
dd89bb
	__out	size_t *	args_bytes_written __optional,
dd89bb
	__in	wchar16_t **	argv_buffer,
dd89bb
	__in	size_t		argv_buffer_len,
dd89bb
	__in	uint32_t	arg_flags);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall 	ntapi_tt_get_argv_envp_utf8(
dd89bb
	__out	int *		argc,
dd89bb
	__out	char ***	argv,
dd89bb
	__out	char ***	envp,
dd89bb
	__in	uint32_t	flags,
dd89bb
	__in	void *		ext_params	__optional,
dd89bb
	__out	void *		reserved	__optional);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall 	ntapi_tt_get_argv_envp_utf16(
dd89bb
	__out	int *		argc,
dd89bb
	__out	wchar16_t ***	wargv,
dd89bb
	__out	wchar16_t ***	wenvp,
dd89bb
	__in	uint32_t	flags,
dd89bb
	__in	void *		ext_params	__optional,
dd89bb
	__out	void *		reserved	__optional);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall 	ntapi_tt_get_env_var_meta_utf16(
dd89bb
	__in	wchar16_t *		env_var_name,
dd89bb
	__in	wchar16_t **		envp,
dd89bb
	__out	nt_env_var_meta_utf16 *	env_var_meta);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall	ntapi_tt_array_copy_utf8(
dd89bb
	__out	int *			argc,
dd89bb
	__in	const char **		argv,
dd89bb
	__in	const char **		wenvp,
dd89bb
	__in	const char *		image_name	__optional,
dd89bb
	__in	const char *		interpreter	__optional,
dd89bb
	__in	const char *		optarg		__optional,
dd89bb
	__in	void *			base,
dd89bb
	__out	void *			buffer,
dd89bb
	__in	size_t			buflen,
dd89bb
	__out	size_t *		blklen);
dd89bb
dd89bb
typedef int32_t __stdcall	ntapi_tt_array_copy_utf16(
dd89bb
	__out	int *			argc,
dd89bb
	__in	const wchar16_t **	wargv,
dd89bb
	__in	const wchar16_t **	wenvp,
dd89bb
	__in	const wchar16_t *	image_name	__optional,
dd89bb
	__in	const wchar16_t *	interpreter	__optional,
dd89bb
	__in	const wchar16_t *	optarg		__optional,
dd89bb
	__in	void *			base,
dd89bb
	__out	void *			buffer,
dd89bb
	__in	size_t			buflen,
dd89bb
	__out	size_t *		blklen);
dd89bb
dd89bb
typedef int32_t __stdcall	ntapi_tt_array_convert_utf8_to_utf16(
dd89bb
	__in		char **		arrv,
dd89bb
	__in		wchar16_t **	arra,
dd89bb
	__in		void *		base,
dd89bb
	__in		wchar16_t *	buffer,
dd89bb
	__in		size_t		buffer_len,
dd89bb
	__out		size_t *	bytes_written);
dd89bb
dd89bb
typedef int32_t __stdcall	ntapi_tt_array_convert_utf16_to_utf8(
dd89bb
	__in		wchar16_t **	warrv,
dd89bb
	__in		char **		arra,
dd89bb
	__in		void *		base,
dd89bb
	__in		char *		buffer,
dd89bb
	__in		size_t		buffer_len,
dd89bb
	__out		size_t *	bytes_written);
dd89bb
dd89bb
#endif