os/ossrv/ssl/libcrypto/src/crypto/ui/ui.h
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
sl@0
     1
/* crypto/ui/ui.h -*- mode:C; c-file-style: "eay" -*- */
sl@0
     2
/* Written by Richard Levitte (richard@levitte.org) for the OpenSSL
sl@0
     3
 * project 2001.
sl@0
     4
 */
sl@0
     5
/* ====================================================================
sl@0
     6
 * Copyright (c) 2001 The OpenSSL Project.  All rights reserved.
sl@0
     7
 *
sl@0
     8
 * Redistribution and use in source and binary forms, with or without
sl@0
     9
 * modification, are permitted provided that the following conditions
sl@0
    10
 * are met:
sl@0
    11
 *
sl@0
    12
 * 1. Redistributions of source code must retain the above copyright
sl@0
    13
 *    notice, this list of conditions and the following disclaimer. 
sl@0
    14
 *
sl@0
    15
 * 2. Redistributions in binary form must reproduce the above copyright
sl@0
    16
 *    notice, this list of conditions and the following disclaimer in
sl@0
    17
 *    the documentation and/or other materials provided with the
sl@0
    18
 *    distribution.
sl@0
    19
 *
sl@0
    20
 * 3. All advertising materials mentioning features or use of this
sl@0
    21
 *    software must display the following acknowledgment:
sl@0
    22
 *    "This product includes software developed by the OpenSSL Project
sl@0
    23
 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
sl@0
    24
 *
sl@0
    25
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
sl@0
    26
 *    endorse or promote products derived from this software without
sl@0
    27
 *    prior written permission. For written permission, please contact
sl@0
    28
 *    openssl-core@openssl.org.
sl@0
    29
 *
sl@0
    30
 * 5. Products derived from this software may not be called "OpenSSL"
sl@0
    31
 *    nor may "OpenSSL" appear in their names without prior written
sl@0
    32
 *    permission of the OpenSSL Project.
sl@0
    33
 *
sl@0
    34
 * 6. Redistributions of any form whatsoever must retain the following
sl@0
    35
 *    acknowledgment:
sl@0
    36
 *    "This product includes software developed by the OpenSSL Project
sl@0
    37
 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
sl@0
    38
 *
sl@0
    39
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
sl@0
    40
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
sl@0
    41
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
sl@0
    42
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
sl@0
    43
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
sl@0
    44
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
sl@0
    45
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
sl@0
    46
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
sl@0
    47
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
sl@0
    48
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
sl@0
    49
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
sl@0
    50
 * OF THE POSSIBILITY OF SUCH DAMAGE.
sl@0
    51
 * ====================================================================
sl@0
    52
 *
sl@0
    53
 * This product includes cryptographic software written by Eric Young
sl@0
    54
 * (eay@cryptsoft.com).  This product includes software written by Tim
sl@0
    55
 * Hudson (tjh@cryptsoft.com).
sl@0
    56
 *
sl@0
    57
 */
sl@0
    58
/*
sl@0
    59
 © Portions copyright (c) 2006 Nokia Corporation.  All rights reserved.
sl@0
    60
 */
sl@0
    61
sl@0
    62
#ifndef HEADER_UI_H
sl@0
    63
#define HEADER_UI_H
sl@0
    64
#ifdef SYMBIAN
sl@0
    65
#include <e32def.h>
sl@0
    66
#endif
sl@0
    67
#ifndef OPENSSL_NO_DEPRECATED
sl@0
    68
#include <openssl/crypto.h>
sl@0
    69
#endif
sl@0
    70
#include <openssl/safestack.h>
sl@0
    71
#include <openssl/ossl_typ.h>
sl@0
    72
sl@0
    73
#ifdef  __cplusplus
sl@0
    74
extern "C" {
sl@0
    75
#endif
sl@0
    76
sl@0
    77
/* Declared already in ossl_typ.h */
sl@0
    78
/* typedef struct ui_st UI; */
sl@0
    79
/* typedef struct ui_method_st UI_METHOD; */
sl@0
    80
sl@0
    81
sl@0
    82
/* All the following functions return -1 or NULL on error and in some cases
sl@0
    83
   (UI_process()) -2 if interrupted or in some other way cancelled.
sl@0
    84
   When everything is fine, they return 0, a positive value or a non-NULL
sl@0
    85
   pointer, all depending on their purpose. */
sl@0
    86
sl@0
    87
/* Creators and destructor.   */
sl@0
    88
IMPORT_C UI *UI_new(void);
sl@0
    89
IMPORT_C UI *UI_new_method(const UI_METHOD *method);
sl@0
    90
IMPORT_C void UI_free(UI *ui);
sl@0
    91
sl@0
    92
/* The following functions are used to add strings to be printed and prompt
sl@0
    93
   strings to prompt for data.  The names are UI_{add,dup}_<function>_string
sl@0
    94
   and UI_{add,dup}_input_boolean.
sl@0
    95
sl@0
    96
   UI_{add,dup}_<function>_string have the following meanings:
sl@0
    97
	add	add a text or prompt string.  The pointers given to these
sl@0
    98
		functions are used verbatim, no copying is done.
sl@0
    99
	dup	make a copy of the text or prompt string, then add the copy
sl@0
   100
		to the collection of strings in the user interface.
sl@0
   101
	<function>
sl@0
   102
		The function is a name for the functionality that the given
sl@0
   103
		string shall be used for.  It can be one of:
sl@0
   104
			input	use the string as data prompt.
sl@0
   105
			verify	use the string as verification prompt.  This
sl@0
   106
				is used to verify a previous input.
sl@0
   107
			info	use the string for informational output.
sl@0
   108
			error	use the string for error output.
sl@0
   109
   Honestly, there's currently no difference between info and error for the
sl@0
   110
   moment.
sl@0
   111
sl@0
   112
   UI_{add,dup}_input_boolean have the same semantics for "add" and "dup",
sl@0
   113
   and are typically used when one wants to prompt for a yes/no response.
sl@0
   114
sl@0
   115
sl@0
   116
   All of the functions in this group take a UI and a prompt string.
sl@0
   117
   The string input and verify addition functions also take a flag argument,
sl@0
   118
   a buffer for the result to end up with, a minimum input size and a maximum
sl@0
   119
   input size (the result buffer MUST be large enough to be able to contain
sl@0
   120
   the maximum number of characters).  Additionally, the verify addition
sl@0
   121
   functions takes another buffer to compare the result against.
sl@0
   122
   The boolean input functions take an action description string (which should
sl@0
   123
   be safe to ignore if the expected user action is obvious, for example with
sl@0
   124
   a dialog box with an OK button and a Cancel button), a string of acceptable
sl@0
   125
   characters to mean OK and to mean Cancel.  The two last strings are checked
sl@0
   126
   to make sure they don't have common characters.  Additionally, the same
sl@0
   127
   flag argument as for the string input is taken, as well as a result buffer.
sl@0
   128
   The result buffer is required to be at least one byte long.  Depending on
sl@0
   129
   the answer, the first character from the OK or the Cancel character strings
sl@0
   130
   will be stored in the first byte of the result buffer.  No NUL will be
sl@0
   131
   added, so the result is *not* a string.
sl@0
   132
sl@0
   133
   On success, the all return an index of the added information.  That index
sl@0
   134
   is usefull when retrieving results with UI_get0_result(). */
sl@0
   135
IMPORT_C int UI_add_input_string(UI *ui, const char *prompt, int flags,
sl@0
   136
	char *result_buf, int minsize, int maxsize);
sl@0
   137
IMPORT_C int UI_dup_input_string(UI *ui, const char *prompt, int flags,
sl@0
   138
	char *result_buf, int minsize, int maxsize);
sl@0
   139
IMPORT_C int UI_add_verify_string(UI *ui, const char *prompt, int flags,
sl@0
   140
	char *result_buf, int minsize, int maxsize, const char *test_buf);
sl@0
   141
IMPORT_C int UI_dup_verify_string(UI *ui, const char *prompt, int flags,
sl@0
   142
	char *result_buf, int minsize, int maxsize, const char *test_buf);
sl@0
   143
IMPORT_C int UI_add_input_boolean(UI *ui, const char *prompt, const char *action_desc,
sl@0
   144
	const char *ok_chars, const char *cancel_chars,
sl@0
   145
	int flags, char *result_buf);
sl@0
   146
IMPORT_C int UI_dup_input_boolean(UI *ui, const char *prompt, const char *action_desc,
sl@0
   147
	const char *ok_chars, const char *cancel_chars,
sl@0
   148
	int flags, char *result_buf);
sl@0
   149
IMPORT_C int UI_add_info_string(UI *ui, const char *text);
sl@0
   150
IMPORT_C int UI_dup_info_string(UI *ui, const char *text);
sl@0
   151
IMPORT_C int UI_add_error_string(UI *ui, const char *text);
sl@0
   152
IMPORT_C int UI_dup_error_string(UI *ui, const char *text);
sl@0
   153
sl@0
   154
/* These are the possible flags.  They can be or'ed together. */
sl@0
   155
/* Use to have echoing of input */
sl@0
   156
#define UI_INPUT_FLAG_ECHO		0x01
sl@0
   157
/* Use a default password.  Where that password is found is completely
sl@0
   158
   up to the application, it might for example be in the user data set
sl@0
   159
   with UI_add_user_data().  It is not recommended to have more than
sl@0
   160
   one input in each UI being marked with this flag, or the application
sl@0
   161
   might get confused. */
sl@0
   162
#define UI_INPUT_FLAG_DEFAULT_PWD	0x02
sl@0
   163
sl@0
   164
/* The user of these routines may want to define flags of their own.  The core
sl@0
   165
   UI won't look at those, but will pass them on to the method routines.  They
sl@0
   166
   must use higher bits so they don't get confused with the UI bits above.
sl@0
   167
   UI_INPUT_FLAG_USER_BASE tells which is the lowest bit to use.  A good
sl@0
   168
   example of use is this:
sl@0
   169
sl@0
   170
	#define MY_UI_FLAG1	(0x01 << UI_INPUT_FLAG_USER_BASE)
sl@0
   171
sl@0
   172
*/
sl@0
   173
#define UI_INPUT_FLAG_USER_BASE	16
sl@0
   174
sl@0
   175
sl@0
   176
/* The following function helps construct a prompt.  object_desc is a
sl@0
   177
   textual short description of the object, for example "pass phrase",
sl@0
   178
   and object_name is the name of the object (might be a card name or
sl@0
   179
   a file name.
sl@0
   180
   The returned string shall always be allocated on the heap with
sl@0
   181
   OPENSSL_malloc(), and need to be free'd with OPENSSL_free().
sl@0
   182
sl@0
   183
   If the ui_method doesn't contain a pointer to a user-defined prompt
sl@0
   184
   constructor, a default string is built, looking like this:
sl@0
   185
sl@0
   186
	"Enter {object_desc} for {object_name}:"
sl@0
   187
sl@0
   188
   So, if object_desc has the value "pass phrase" and object_name has
sl@0
   189
   the value "foo.key", the resulting string is:
sl@0
   190
sl@0
   191
	"Enter pass phrase for foo.key:"
sl@0
   192
*/
sl@0
   193
IMPORT_C char *UI_construct_prompt(UI *ui_method,
sl@0
   194
	const char *object_desc, const char *object_name);
sl@0
   195
sl@0
   196
sl@0
   197
/* The following function is used to store a pointer to user-specific data.
sl@0
   198
   Any previous such pointer will be returned and replaced.
sl@0
   199
sl@0
   200
   For callback purposes, this function makes a lot more sense than using
sl@0
   201
   ex_data, since the latter requires that different parts of OpenSSL or
sl@0
   202
   applications share the same ex_data index.
sl@0
   203
sl@0
   204
   Note that the UI_OpenSSL() method completely ignores the user data.
sl@0
   205
   Other methods may not, however.  */
sl@0
   206
IMPORT_C void *UI_add_user_data(UI *ui, void *user_data);
sl@0
   207
/* We need a user data retrieving function as well.  */
sl@0
   208
IMPORT_C void *UI_get0_user_data(UI *ui);
sl@0
   209
sl@0
   210
/* Return the result associated with a prompt given with the index i. */
sl@0
   211
IMPORT_C const char *UI_get0_result(UI *ui, int i);
sl@0
   212
sl@0
   213
/* When all strings have been added, process the whole thing. */
sl@0
   214
IMPORT_C int UI_process(UI *ui);
sl@0
   215
sl@0
   216
/* Give a user interface parametrised control commands.  This can be used to
sl@0
   217
   send down an integer, a data pointer or a function pointer, as well as
sl@0
   218
   be used to get information from a UI. */
sl@0
   219
IMPORT_C int UI_ctrl(UI *ui, int cmd, long i, void *p, void (*f)(void));
sl@0
   220
sl@0
   221
/* The commands */
sl@0
   222
/* Use UI_CONTROL_PRINT_ERRORS with the value 1 to have UI_process print the
sl@0
   223
   OpenSSL error stack before printing any info or added error messages and
sl@0
   224
   before any prompting. */
sl@0
   225
#define UI_CTRL_PRINT_ERRORS		1
sl@0
   226
/* Check if a UI_process() is possible to do again with the same instance of
sl@0
   227
   a user interface.  This makes UI_ctrl() return 1 if it is redoable, and 0
sl@0
   228
   if not. */
sl@0
   229
#define UI_CTRL_IS_REDOABLE		2
sl@0
   230
sl@0
   231
sl@0
   232
/* Some methods may use extra data */
sl@0
   233
#define UI_set_app_data(s,arg)         UI_set_ex_data(s,0,arg)
sl@0
   234
#define UI_get_app_data(s)             UI_get_ex_data(s,0)
sl@0
   235
IMPORT_C int UI_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
sl@0
   236
	CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
sl@0
   237
IMPORT_C int UI_set_ex_data(UI *r,int idx,void *arg);
sl@0
   238
IMPORT_C void *UI_get_ex_data(UI *r, int idx);
sl@0
   239
sl@0
   240
/* Use specific methods instead of the built-in one */
sl@0
   241
IMPORT_C void UI_set_default_method(const UI_METHOD *meth);
sl@0
   242
IMPORT_C const UI_METHOD *UI_get_default_method(void);
sl@0
   243
IMPORT_C const UI_METHOD *UI_get_method(UI *ui);
sl@0
   244
IMPORT_C const UI_METHOD *UI_set_method(UI *ui, const UI_METHOD *meth);
sl@0
   245
sl@0
   246
/* The method with all the built-in thingies */
sl@0
   247
IMPORT_C UI_METHOD *UI_OpenSSL(void);
sl@0
   248
sl@0
   249
sl@0
   250
/* ---------- For method writers ---------- */
sl@0
   251
/* A method contains a number of functions that implement the low level
sl@0
   252
   of the User Interface.  The functions are:
sl@0
   253
sl@0
   254
	an opener	This function starts a session, maybe by opening
sl@0
   255
			a channel to a tty, or by opening a window.
sl@0
   256
	a writer	This function is called to write a given string,
sl@0
   257
			maybe to the tty, maybe as a field label in a
sl@0
   258
			window.
sl@0
   259
	a flusher	This function is called to flush everything that
sl@0
   260
			has been output so far.  It can be used to actually
sl@0
   261
			display a dialog box after it has been built.
sl@0
   262
	a reader	This function is called to read a given prompt,
sl@0
   263
			maybe from the tty, maybe from a field in a
sl@0
   264
			window.  Note that it's called wth all string
sl@0
   265
			structures, not only the prompt ones, so it must
sl@0
   266
			check such things itself.
sl@0
   267
	a closer	This function closes the session, maybe by closing
sl@0
   268
			the channel to the tty, or closing the window.
sl@0
   269
sl@0
   270
   All these functions are expected to return:
sl@0
   271
sl@0
   272
	0	on error.
sl@0
   273
	1	on success.
sl@0
   274
	-1	on out-of-band events, for example if some prompting has
sl@0
   275
		been canceled (by pressing Ctrl-C, for example).  This is
sl@0
   276
		only checked when returned by the flusher or the reader.
sl@0
   277
sl@0
   278
   The way this is used, the opener is first called, then the writer for all
sl@0
   279
   strings, then the flusher, then the reader for all strings and finally the
sl@0
   280
   closer.  Note that if you want to prompt from a terminal or other command
sl@0
   281
   line interface, the best is to have the reader also write the prompts
sl@0
   282
   instead of having the writer do it.  If you want to prompt from a dialog
sl@0
   283
   box, the writer can be used to build up the contents of the box, and the
sl@0
   284
   flusher to actually display the box and run the event loop until all data
sl@0
   285
   has been given, after which the reader only grabs the given data and puts
sl@0
   286
   them back into the UI strings.
sl@0
   287
sl@0
   288
   All method functions take a UI as argument.  Additionally, the writer and
sl@0
   289
   the reader take a UI_STRING.
sl@0
   290
*/
sl@0
   291
sl@0
   292
/* The UI_STRING type is the data structure that contains all the needed info
sl@0
   293
   about a string or a prompt, including test data for a verification prompt.
sl@0
   294
*/
sl@0
   295
DECLARE_STACK_OF(UI_STRING)
sl@0
   296
typedef struct ui_string_st UI_STRING;
sl@0
   297
sl@0
   298
/* The different types of strings that are currently supported.
sl@0
   299
   This is only needed by method authors. */
sl@0
   300
enum UI_string_types
sl@0
   301
	{
sl@0
   302
	UIT_NONE=0,
sl@0
   303
	UIT_PROMPT,		/* Prompt for a string */
sl@0
   304
	UIT_VERIFY,		/* Prompt for a string and verify */
sl@0
   305
	UIT_BOOLEAN,		/* Prompt for a yes/no response */
sl@0
   306
	UIT_INFO,		/* Send info to the user */
sl@0
   307
	UIT_ERROR		/* Send an error message to the user */
sl@0
   308
	};
sl@0
   309
sl@0
   310
/* Create and manipulate methods */
sl@0
   311
IMPORT_C UI_METHOD *UI_create_method(char *name);
sl@0
   312
IMPORT_C void UI_destroy_method(UI_METHOD *ui_method);
sl@0
   313
IMPORT_C int UI_method_set_opener(UI_METHOD *method, int (*opener)(UI *ui));
sl@0
   314
IMPORT_C int UI_method_set_writer(UI_METHOD *method, int (*writer)(UI *ui, UI_STRING *uis));
sl@0
   315
IMPORT_C int UI_method_set_flusher(UI_METHOD *method, int (*flusher)(UI *ui));
sl@0
   316
IMPORT_C int UI_method_set_reader(UI_METHOD *method, int (*reader)(UI *ui, UI_STRING *uis));
sl@0
   317
IMPORT_C int UI_method_set_closer(UI_METHOD *method, int (*closer)(UI *ui));
sl@0
   318
IMPORT_C int (*UI_method_get_opener(UI_METHOD *method))(UI*);
sl@0
   319
IMPORT_C int (*UI_method_get_writer(UI_METHOD *method))(UI*,UI_STRING*);
sl@0
   320
IMPORT_C int (*UI_method_get_flusher(UI_METHOD *method))(UI*);
sl@0
   321
IMPORT_C int (*UI_method_get_reader(UI_METHOD *method))(UI*,UI_STRING*);
sl@0
   322
IMPORT_C int (*UI_method_get_closer(UI_METHOD *method))(UI*);
sl@0
   323
sl@0
   324
/* The following functions are helpers for method writers to access relevant
sl@0
   325
   data from a UI_STRING. */
sl@0
   326
sl@0
   327
/* Return type of the UI_STRING */
sl@0
   328
IMPORT_C enum UI_string_types UI_get_string_type(UI_STRING *uis);
sl@0
   329
/* Return input flags of the UI_STRING */
sl@0
   330
IMPORT_C int UI_get_input_flags(UI_STRING *uis);
sl@0
   331
/* Return the actual string to output (the prompt, info or error) */
sl@0
   332
IMPORT_C const char *UI_get0_output_string(UI_STRING *uis);
sl@0
   333
/* Return the optional action string to output (the boolean promtp instruction) */
sl@0
   334
IMPORT_C const char *UI_get0_action_string(UI_STRING *uis);
sl@0
   335
/* Return the result of a prompt */
sl@0
   336
IMPORT_C const char *UI_get0_result_string(UI_STRING *uis);
sl@0
   337
/* Return the string to test the result against.  Only useful with verifies. */
sl@0
   338
IMPORT_C const char *UI_get0_test_string(UI_STRING *uis);
sl@0
   339
/* Return the required minimum size of the result */
sl@0
   340
IMPORT_C int UI_get_result_minsize(UI_STRING *uis);
sl@0
   341
/* Return the required maximum size of the result */
sl@0
   342
IMPORT_C int UI_get_result_maxsize(UI_STRING *uis);
sl@0
   343
/* Set the result of a UI_STRING. */
sl@0
   344
IMPORT_C int UI_set_result(UI *ui, UI_STRING *uis, const char *result);
sl@0
   345
sl@0
   346
sl@0
   347
/* A couple of popular utility functions */
sl@0
   348
IMPORT_C int UI_UTIL_read_pw_string(char *buf,int length,const char *prompt,int verify);
sl@0
   349
IMPORT_C int UI_UTIL_read_pw(char *buf,char *buff,int size,const char *prompt,int verify);
sl@0
   350
sl@0
   351
sl@0
   352
/* BEGIN ERROR CODES */
sl@0
   353
/* The following lines are auto generated by the script mkerr.pl. Any changes
sl@0
   354
 * made after this point may be overwritten when the script is next run.
sl@0
   355
 */
sl@0
   356
IMPORT_C void ERR_load_UI_strings(void);
sl@0
   357
sl@0
   358
/* Error codes for the UI functions. */
sl@0
   359
sl@0
   360
/* Function codes. */
sl@0
   361
#define UI_F_GENERAL_ALLOCATE_BOOLEAN			 108
sl@0
   362
#define UI_F_GENERAL_ALLOCATE_PROMPT			 109
sl@0
   363
#define UI_F_GENERAL_ALLOCATE_STRING			 100
sl@0
   364
#define UI_F_UI_CTRL					 111
sl@0
   365
#define UI_F_UI_DUP_ERROR_STRING			 101
sl@0
   366
#define UI_F_UI_DUP_INFO_STRING				 102
sl@0
   367
#define UI_F_UI_DUP_INPUT_BOOLEAN			 110
sl@0
   368
#define UI_F_UI_DUP_INPUT_STRING			 103
sl@0
   369
#define UI_F_UI_DUP_VERIFY_STRING			 106
sl@0
   370
#define UI_F_UI_GET0_RESULT				 107
sl@0
   371
#define UI_F_UI_NEW_METHOD				 104
sl@0
   372
#define UI_F_UI_SET_RESULT				 105
sl@0
   373
sl@0
   374
/* Reason codes. */
sl@0
   375
#define UI_R_COMMON_OK_AND_CANCEL_CHARACTERS		 104
sl@0
   376
#define UI_R_INDEX_TOO_LARGE				 102
sl@0
   377
#define UI_R_INDEX_TOO_SMALL				 103
sl@0
   378
#define UI_R_NO_RESULT_BUFFER				 105
sl@0
   379
#define UI_R_RESULT_TOO_LARGE				 100
sl@0
   380
#define UI_R_RESULT_TOO_SMALL				 101
sl@0
   381
#define UI_R_UNKNOWN_CONTROL_COMMAND			 106
sl@0
   382
sl@0
   383
#ifdef  __cplusplus
sl@0
   384
}
sl@0
   385
#endif
sl@0
   386
#endif