os/graphics/egl/eglinterface/include/1.3/egl.h
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
/*
sl@0
     2
** Copyright (c) 2007-2009 The Khronos Group Inc.
sl@0
     3
**
sl@0
     4
** Permission is hereby granted, free of charge, to any person obtaining a
sl@0
     5
** copy of this software and/or associated documentation files (the
sl@0
     6
** "Materials"), to deal in the Materials without restriction, including
sl@0
     7
** without limitation the rights to use, copy, modify, merge, publish,
sl@0
     8
** distribute, sublicense, and/or sell copies of the Materials, and to
sl@0
     9
** permit persons to whom the Materials are furnished to do so, subject to
sl@0
    10
** the following conditions:
sl@0
    11
**
sl@0
    12
** The above copyright notice and this permission notice shall be included
sl@0
    13
** in all copies or substantial portions of the Materials.
sl@0
    14
**
sl@0
    15
** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
sl@0
    16
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
sl@0
    17
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
sl@0
    18
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
sl@0
    19
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
sl@0
    20
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
sl@0
    21
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
sl@0
    22
*/
sl@0
    23
sl@0
    24
#ifndef __egl_h_
sl@0
    25
#define __egl_h_
sl@0
    26
sl@0
    27
/**
sl@0
    28
@publishedAll
sl@0
    29
@released
sl@0
    30
*/
sl@0
    31
sl@0
    32
sl@0
    33
/* differences from the actual sample implemtation provided by Khronos:
sl@0
    34
- this comment
sl@0
    35
- the Doxygen comment with tag 'publishedAll', and tag 'released'
sl@0
    36
- changing platform-dependant header name from <EGL/eglplatform.h> to <EGL/egltypes.h>
sl@0
    37
- exclude via #if 0 ... #endif some native types defined in egltypes.h
sl@0
    38
 */
sl@0
    39
sl@0
    40
sl@0
    41
/* All platform-dependent types and macro boilerplate (such as EGLAPI
sl@0
    42
 * and EGLAPIENTRY) should go in egltypes.h.
sl@0
    43
 */
sl@0
    44
#include <EGL/egltypes.h>
sl@0
    45
sl@0
    46
#ifdef __cplusplus
sl@0
    47
extern "C" {
sl@0
    48
#endif
sl@0
    49
sl@0
    50
/* EGL Versioning */
sl@0
    51
#define EGL_VERSION_1_0			1
sl@0
    52
#define EGL_VERSION_1_1			1
sl@0
    53
#define EGL_VERSION_1_2			1
sl@0
    54
#define EGL_VERSION_1_3			1
sl@0
    55
sl@0
    56
/* EGL Enumerants. Bitmasks and other exceptional cases aside, most
sl@0
    57
 * enums are assigned unique values starting at 0x3000.
sl@0
    58
 */
sl@0
    59
sl@0
    60
/* EGL aliases */
sl@0
    61
#define EGL_FALSE			0
sl@0
    62
#define EGL_TRUE			1
sl@0
    63
sl@0
    64
/* Out-of-band attribute value */
sl@0
    65
#define EGL_DONT_CARE			((EGLint)-1)
sl@0
    66
sl@0
    67
/* Errors / GetError return values */
sl@0
    68
#define EGL_SUCCESS			0x3000
sl@0
    69
#define EGL_NOT_INITIALIZED		0x3001
sl@0
    70
#define EGL_BAD_ACCESS			0x3002
sl@0
    71
#define EGL_BAD_ALLOC			0x3003
sl@0
    72
#define EGL_BAD_ATTRIBUTE		0x3004
sl@0
    73
#define EGL_BAD_CONFIG			0x3005
sl@0
    74
#define EGL_BAD_CONTEXT			0x3006
sl@0
    75
#define EGL_BAD_CURRENT_SURFACE		0x3007
sl@0
    76
#define EGL_BAD_DISPLAY			0x3008
sl@0
    77
#define EGL_BAD_MATCH			0x3009
sl@0
    78
#define EGL_BAD_NATIVE_PIXMAP		0x300A
sl@0
    79
#define EGL_BAD_NATIVE_WINDOW		0x300B
sl@0
    80
#define EGL_BAD_PARAMETER		0x300C
sl@0
    81
#define EGL_BAD_SURFACE			0x300D
sl@0
    82
#define EGL_CONTEXT_LOST		0x300E	/* EGL 1.1 - IMG_power_management */
sl@0
    83
sl@0
    84
/* Reserved 0x300F-0x301F for additional errors */
sl@0
    85
sl@0
    86
/* Config attributes */
sl@0
    87
#define EGL_BUFFER_SIZE			0x3020
sl@0
    88
#define EGL_ALPHA_SIZE			0x3021
sl@0
    89
#define EGL_BLUE_SIZE			0x3022
sl@0
    90
#define EGL_GREEN_SIZE			0x3023
sl@0
    91
#define EGL_RED_SIZE			0x3024
sl@0
    92
#define EGL_DEPTH_SIZE			0x3025
sl@0
    93
#define EGL_STENCIL_SIZE		0x3026
sl@0
    94
#define EGL_CONFIG_CAVEAT		0x3027
sl@0
    95
#define EGL_CONFIG_ID			0x3028
sl@0
    96
#define EGL_LEVEL			0x3029
sl@0
    97
#define EGL_MAX_PBUFFER_HEIGHT		0x302A
sl@0
    98
#define EGL_MAX_PBUFFER_PIXELS		0x302B
sl@0
    99
#define EGL_MAX_PBUFFER_WIDTH		0x302C
sl@0
   100
#define EGL_NATIVE_RENDERABLE		0x302D
sl@0
   101
#define EGL_NATIVE_VISUAL_ID		0x302E
sl@0
   102
#define EGL_NATIVE_VISUAL_TYPE		0x302F
sl@0
   103
#define EGL_PRESERVED_RESOURCES		0x3030
sl@0
   104
#define EGL_SAMPLES			0x3031
sl@0
   105
#define EGL_SAMPLE_BUFFERS		0x3032
sl@0
   106
#define EGL_SURFACE_TYPE		0x3033
sl@0
   107
#define EGL_TRANSPARENT_TYPE		0x3034
sl@0
   108
#define EGL_TRANSPARENT_BLUE_VALUE	0x3035
sl@0
   109
#define EGL_TRANSPARENT_GREEN_VALUE	0x3036
sl@0
   110
#define EGL_TRANSPARENT_RED_VALUE	0x3037
sl@0
   111
#define EGL_NONE			0x3038	/* Attrib list terminator */
sl@0
   112
#define EGL_BIND_TO_TEXTURE_RGB		0x3039
sl@0
   113
#define EGL_BIND_TO_TEXTURE_RGBA	0x303A
sl@0
   114
#define EGL_MIN_SWAP_INTERVAL		0x303B
sl@0
   115
#define EGL_MAX_SWAP_INTERVAL		0x303C
sl@0
   116
#define EGL_LUMINANCE_SIZE		0x303D
sl@0
   117
#define EGL_ALPHA_MASK_SIZE		0x303E
sl@0
   118
#define EGL_COLOR_BUFFER_TYPE		0x303F
sl@0
   119
#define EGL_RENDERABLE_TYPE		0x3040
sl@0
   120
#define EGL_MATCH_NATIVE_PIXMAP		0x3041	/* Pseudo-attribute (not queryable) */
sl@0
   121
#define EGL_CONFORMANT			0x3042
sl@0
   122
sl@0
   123
/* Reserved 0x3041-0x304F for additional config attributes */
sl@0
   124
sl@0
   125
/* Config attribute values */
sl@0
   126
#define EGL_SLOW_CONFIG			0x3050	/* EGL_CONFIG_CAVEAT value */
sl@0
   127
#define EGL_NON_CONFORMANT_CONFIG	0x3051	/* EGL_CONFIG_CAVEAT value */
sl@0
   128
#define EGL_TRANSPARENT_RGB		0x3052	/* EGL_TRANSPARENT_TYPE value */
sl@0
   129
#define EGL_RGB_BUFFER			0x308E	/* EGL_COLOR_BUFFER_TYPE value */
sl@0
   130
#define EGL_LUMINANCE_BUFFER		0x308F	/* EGL_COLOR_BUFFER_TYPE value */
sl@0
   131
sl@0
   132
/* More config attribute values, for EGL_TEXTURE_FORMAT */
sl@0
   133
#define EGL_NO_TEXTURE			0x305C
sl@0
   134
#define EGL_TEXTURE_RGB			0x305D
sl@0
   135
#define EGL_TEXTURE_RGBA		0x305E
sl@0
   136
#define EGL_TEXTURE_2D			0x305F
sl@0
   137
sl@0
   138
/* Config attribute mask bits */
sl@0
   139
#define EGL_PBUFFER_BIT			0x0001	/* EGL_SURFACE_TYPE mask bits */
sl@0
   140
#define EGL_PIXMAP_BIT			0x0002	/* EGL_SURFACE_TYPE mask bits */
sl@0
   141
#define EGL_WINDOW_BIT			0x0004	/* EGL_SURFACE_TYPE mask bits */
sl@0
   142
#define EGL_VG_COLORSPACE_LINEAR_BIT	0x0020	/* EGL_SURFACE_TYPE mask bits */
sl@0
   143
#define EGL_VG_ALPHA_FORMAT_PRE_BIT	0x0040	/* EGL_SURFACE_TYPE mask bits */
sl@0
   144
sl@0
   145
#define EGL_OPENGL_ES_BIT		0x0001	/* EGL_RENDERABLE_TYPE mask bits */
sl@0
   146
#define EGL_OPENVG_BIT			0x0002	/* EGL_RENDERABLE_TYPE mask bits */
sl@0
   147
#define EGL_OPENGL_ES2_BIT		0x0004	/* EGL_RENDERABLE_TYPE mask bits */
sl@0
   148
sl@0
   149
/* QueryString targets */
sl@0
   150
#define EGL_VENDOR			0x3053
sl@0
   151
#define EGL_VERSION			0x3054
sl@0
   152
#define EGL_EXTENSIONS			0x3055
sl@0
   153
#define EGL_CLIENT_APIS			0x308D
sl@0
   154
sl@0
   155
/* QuerySurface / CreatePbufferSurface targets */
sl@0
   156
#define EGL_HEIGHT			0x3056
sl@0
   157
#define EGL_WIDTH			0x3057
sl@0
   158
#define EGL_LARGEST_PBUFFER		0x3058
sl@0
   159
#define EGL_TEXTURE_FORMAT		0x3080
sl@0
   160
#define EGL_TEXTURE_TARGET		0x3081
sl@0
   161
#define EGL_MIPMAP_TEXTURE		0x3082
sl@0
   162
#define EGL_MIPMAP_LEVEL		0x3083
sl@0
   163
#define EGL_RENDER_BUFFER		0x3086
sl@0
   164
#define EGL_VG_COLORSPACE		0x3087
sl@0
   165
#define EGL_VG_ALPHA_FORMAT		0x3088
sl@0
   166
#define EGL_HORIZONTAL_RESOLUTION	0x3090
sl@0
   167
#define EGL_VERTICAL_RESOLUTION		0x3091
sl@0
   168
#define EGL_PIXEL_ASPECT_RATIO		0x3092
sl@0
   169
#define EGL_SWAP_BEHAVIOR		0x3093
sl@0
   170
sl@0
   171
/* EGL_RENDER_BUFFER values / BindTexImage / ReleaseTexImage buffer targets */
sl@0
   172
#define EGL_BACK_BUFFER			0x3084
sl@0
   173
#define EGL_SINGLE_BUFFER		0x3085
sl@0
   174
sl@0
   175
/* OpenVG color spaces */
sl@0
   176
#define EGL_VG_COLORSPACE_sRGB		0x3089	/* EGL_VG_COLORSPACE value */
sl@0
   177
#define EGL_VG_COLORSPACE_LINEAR	0x308A	/* EGL_VG_COLORSPACE value */
sl@0
   178
sl@0
   179
/* OpenVG alpha formats */
sl@0
   180
#define EGL_VG_ALPHA_FORMAT_NONPRE	0x308B	/* EGL_ALPHA_FORMAT value */
sl@0
   181
#define EGL_VG_ALPHA_FORMAT_PRE		0x308C	/* EGL_ALPHA_FORMAT value */
sl@0
   182
sl@0
   183
/* Constant scale factor by which fractional display resolutions &
sl@0
   184
 * aspect ratio are scaled when queried as integer values.
sl@0
   185
 */
sl@0
   186
#define EGL_DISPLAY_SCALING		10000
sl@0
   187
sl@0
   188
/* Unknown display resolution/aspect ratio */
sl@0
   189
#define EGL_UNKNOWN			((EGLint)-1)
sl@0
   190
sl@0
   191
/* Back buffer swap behaviors */
sl@0
   192
#define EGL_BUFFER_PRESERVED		0x3094	/* EGL_SWAP_BEHAVIOR value */
sl@0
   193
#define EGL_BUFFER_DESTROYED		0x3095	/* EGL_SWAP_BEHAVIOR value */
sl@0
   194
sl@0
   195
/* CreatePbufferFromClientBuffer buffer types */
sl@0
   196
#define EGL_OPENVG_IMAGE		0x3096
sl@0
   197
sl@0
   198
/* QueryContext targets */
sl@0
   199
#define EGL_CONTEXT_CLIENT_TYPE		0x3097
sl@0
   200
sl@0
   201
/* CreateContext attributes */
sl@0
   202
#define EGL_CONTEXT_CLIENT_VERSION	0x3098
sl@0
   203
sl@0
   204
/* BindAPI/QueryAPI targets */
sl@0
   205
#define EGL_OPENGL_ES_API		0x30A0
sl@0
   206
#define EGL_OPENVG_API			0x30A1
sl@0
   207
sl@0
   208
/* GetCurrentSurface targets */
sl@0
   209
#define EGL_DRAW			0x3059
sl@0
   210
#define EGL_READ			0x305A
sl@0
   211
sl@0
   212
/* WaitNative engines */
sl@0
   213
#define EGL_CORE_NATIVE_ENGINE		0x305B
sl@0
   214
sl@0
   215
/* eglCreateImageKHR buffer types */
sl@0
   216
#define EGL_NATIVE_PIXMAP_KHR		0x30B0
sl@0
   217
sl@0
   218
/* eglCreateImageKHR behavioural attribute */
sl@0
   219
#define EGL_IMAGE_PRESERVED_SYMBIAN		0x30D2
sl@0
   220
sl@0
   221
/* Accepted by the <type> parameter of eglCreateSyncKHR, and returned in <value> 
sl@0
   222
   when eglGetSyncAttribKHR is called with <attribute> EGL_SYNC_TYPE_KHR */
sl@0
   223
sl@0
   224
#define EGL_SYNC_REUSABLE_KHR           0x30FA
sl@0
   225
sl@0
   226
/* Accepted by the <attribute> parameter of eglGetSyncAttribKHR */
sl@0
   227
sl@0
   228
#define EGL_SYNC_TYPE_KHR               0x30F7
sl@0
   229
#define EGL_SYNC_STATUS_KHR				0x30F1
sl@0
   230
sl@0
   231
/* Accepted by the <mode> parameter of eglSignalSyncKHR and returned in <value> 
sl@0
   232
   when eglGetSyncAttribKHR is called with <attribute> EGL_SYNC_STATUS_KHR */
sl@0
   233
sl@0
   234
#define EGL_SIGNALED_KHR				0x30F2
sl@0
   235
#define EGL_UNSIGNALED_KHR				0x30F3
sl@0
   236
sl@0
   237
/* Accepted as in <flags> parameter of eglClientWaitSyncKHR */
sl@0
   238
#define EGL_SYNC_FLUSH_COMMANDS_BIT_KHR				0x0001
sl@0
   239
sl@0
   240
/* Accepted in the <timeout> parameter of eglClientWaitSyncKHR */
sl@0
   241
#define EGL_FOREVER_KHR				0xFFFFFFFFFFFFFFFFull
sl@0
   242
sl@0
   243
/* Error code returned by eglClientWaitSyncKHR */
sl@0
   244
sl@0
   245
#define EGL_TIMEOUT_EXPIRED_KHR			0x30F5  
sl@0
   246
#define EGL_CONDITION_SATISFIED_KHR		0x30F6 
sl@0
   247
sl@0
   248
/* Returned by eglCreateSyncKHR in the event of an error*/
sl@0
   249
sl@0
   250
#define EGL_NO_SYNC_KHR ((EGLSyncKHR)0) 
sl@0
   251
sl@0
   252
/* EGL 1.2 tokens renamed for consistency in EGL 1.3 */
sl@0
   253
#define EGL_COLORSPACE			EGL_VG_COLORSPACE
sl@0
   254
#define EGL_ALPHA_FORMAT		EGL_VG_ALPHA_FORMAT
sl@0
   255
#define EGL_COLORSPACE_sRGB		EGL_VG_COLORSPACE_sRGB
sl@0
   256
#define EGL_COLORSPACE_LINEAR		EGL_VG_COLORSPACE_LINEAR
sl@0
   257
#define EGL_ALPHA_FORMAT_NONPRE		EGL_VG_ALPHA_FORMAT_NONPRE
sl@0
   258
#define EGL_ALPHA_FORMAT_PRE		EGL_VG_ALPHA_FORMAT_PRE
sl@0
   259
sl@0
   260
/* EGL extensions must request enum blocks from the Khronos
sl@0
   261
 * API Registrar, who maintains the enumerant registry. Submit
sl@0
   262
 * a bug in Khronos Bugzilla against task "Registry".
sl@0
   263
 */
sl@0
   264
sl@0
   265
sl@0
   266
sl@0
   267
/* EGL Functions */
sl@0
   268
sl@0
   269
EGLAPI EGLint EGLAPIENTRY eglGetError(void);
sl@0
   270
sl@0
   271
EGLAPI EGLDisplay EGLAPIENTRY eglGetDisplay(EGLNativeDisplayType display_id);
sl@0
   272
EGLAPI EGLBoolean EGLAPIENTRY eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor);
sl@0
   273
EGLAPI EGLBoolean EGLAPIENTRY eglTerminate(EGLDisplay dpy);
sl@0
   274
sl@0
   275
EGLAPI const char * EGLAPIENTRY eglQueryString(EGLDisplay dpy, EGLint name);
sl@0
   276
sl@0
   277
EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigs(EGLDisplay dpy, EGLConfig *configs,
sl@0
   278
			 EGLint config_size, EGLint *num_config);
sl@0
   279
EGLAPI EGLBoolean EGLAPIENTRY eglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list,
sl@0
   280
			   EGLConfig *configs, EGLint config_size,
sl@0
   281
			   EGLint *num_config);
sl@0
   282
EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config,
sl@0
   283
			      EGLint attribute, EGLint *value);
sl@0
   284
sl@0
   285
EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config,
sl@0
   286
				  EGLNativeWindowType win,
sl@0
   287
				  const EGLint *attrib_list);
sl@0
   288
EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config,
sl@0
   289
				   const EGLint *attrib_list);
sl@0
   290
EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config,
sl@0
   291
				  EGLNativePixmapType pixmap,
sl@0
   292
				  const EGLint *attrib_list);
sl@0
   293
EGLAPI EGLBoolean EGLAPIENTRY eglDestroySurface(EGLDisplay dpy, EGLSurface surface);
sl@0
   294
EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface(EGLDisplay dpy, EGLSurface surface,
sl@0
   295
			   EGLint attribute, EGLint *value);
sl@0
   296
sl@0
   297
EGLAPI EGLBoolean EGLAPIENTRY eglBindAPI(EGLenum api);
sl@0
   298
EGLAPI EGLenum EGLAPIENTRY eglQueryAPI(void);
sl@0
   299
sl@0
   300
EGLAPI EGLBoolean EGLAPIENTRY eglWaitClient(void);
sl@0
   301
sl@0
   302
EGLAPI EGLBoolean EGLAPIENTRY eglReleaseThread(void);
sl@0
   303
sl@0
   304
EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer(
sl@0
   305
	      EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer,
sl@0
   306
	      EGLConfig config, const EGLint *attrib_list);
sl@0
   307
sl@0
   308
EGLAPI EGLBoolean EGLAPIENTRY eglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface,
sl@0
   309
			    EGLint attribute, EGLint value);
sl@0
   310
EGLAPI EGLBoolean EGLAPIENTRY eglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer);
sl@0
   311
EGLAPI EGLBoolean EGLAPIENTRY eglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer);
sl@0
   312
sl@0
   313
sl@0
   314
EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval(EGLDisplay dpy, EGLint interval);
sl@0
   315
sl@0
   316
sl@0
   317
EGLAPI EGLContext EGLAPIENTRY eglCreateContext(EGLDisplay dpy, EGLConfig config,
sl@0
   318
			    EGLContext share_context,
sl@0
   319
			    const EGLint *attrib_list);
sl@0
   320
EGLAPI EGLBoolean EGLAPIENTRY eglDestroyContext(EGLDisplay dpy, EGLContext ctx);
sl@0
   321
EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent(EGLDisplay dpy, EGLSurface draw,
sl@0
   322
			  EGLSurface read, EGLContext ctx);
sl@0
   323
sl@0
   324
EGLAPI EGLContext EGLAPIENTRY eglGetCurrentContext(void);
sl@0
   325
EGLAPI EGLSurface EGLAPIENTRY eglGetCurrentSurface(EGLint readdraw);
sl@0
   326
EGLAPI EGLDisplay EGLAPIENTRY eglGetCurrentDisplay(void);
sl@0
   327
EGLAPI EGLBoolean EGLAPIENTRY eglQueryContext(EGLDisplay dpy, EGLContext ctx,
sl@0
   328
			   EGLint attribute, EGLint *value);
sl@0
   329
sl@0
   330
EGLAPI EGLBoolean EGLAPIENTRY eglWaitGL(void);
sl@0
   331
EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative(EGLint engine);
sl@0
   332
EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay dpy, EGLSurface surface);
sl@0
   333
EGLAPI EGLBoolean EGLAPIENTRY eglCopyBuffers(EGLDisplay dpy, EGLSurface surface,
sl@0
   334
			  EGLNativePixmapType target);
sl@0
   335
sl@0
   336
#ifdef __cplusplus
sl@0
   337
EGLAPI void (* EGLAPIENTRY eglGetProcAddress (const char *procname))(...);
sl@0
   338
#else
sl@0
   339
EGLAPI void (* EGLAPIENTRY eglGetProcAddress (const char *procname))();
sl@0
   340
#endif
sl@0
   341
sl@0
   342
#ifdef __cplusplus
sl@0
   343
}
sl@0
   344
#endif
sl@0
   345
sl@0
   346
#endif /* __egl_h_ */