plugins/include/functions.inc
author David Anderson <dvander@alliedmods.net>
Fri Jul 11 05:14:32 2008 +0000 (2008-07-11)
branchrefac-jit
changeset 2190 880e81f30b5e
parent 2168 c24a6fa957db
child 2289 44045ead61cd
permissions -rw-r--r--
GetContext() now returns 'this' as a hack (shouldn't+can't be accessed anyway)
dvander@2168
     1
/**
dvander@2168
     2
 * vim: set ts=4 :
dvander@2168
     3
 * =============================================================================
dvander@2168
     4
 * SourceMod (C)2004-2008 AlliedModders LLC.  All rights reserved.
dvander@2168
     5
 * =============================================================================
dvander@2168
     6
 *
dvander@2168
     7
 * This file is part of the SourceMod/SourcePawn SDK.
dvander@2168
     8
 *
dvander@2168
     9
 * This program is free software; you can redistribute it and/or modify it under
dvander@2168
    10
 * the terms of the GNU General Public License, version 3.0, as published by the
dvander@2168
    11
 * Free Software Foundation.
dvander@2168
    12
 * 
dvander@2168
    13
 * This program is distributed in the hope that it will be useful, but WITHOUT
dvander@2168
    14
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
dvander@2168
    15
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
dvander@2168
    16
 * details.
dvander@2168
    17
 *
dvander@2168
    18
 * You should have received a copy of the GNU General Public License along with
dvander@2168
    19
 * this program.  If not, see <http://www.gnu.org/licenses/>.
dvander@2168
    20
 *
dvander@2168
    21
 * As a special exception, AlliedModders LLC gives you permission to link the
dvander@2168
    22
 * code of this program (as well as its derivative works) to "Half-Life 2," the
dvander@2168
    23
 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
dvander@2168
    24
 * by the Valve Corporation.  You must obey the GNU General Public License in
dvander@2168
    25
 * all respects for all other code used.  Additionally, AlliedModders LLC grants
dvander@2168
    26
 * this exception to all derivative works.  AlliedModders LLC defines further
dvander@2168
    27
 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
dvander@2168
    28
 * or <http://www.sourcemod.net/license.php>.
dvander@2168
    29
 *
dvander@2168
    30
 * Version: $Id$
dvander@2168
    31
 */
dvander@2168
    32
 
dvander@2168
    33
#define SP_PARAMFLAG_BYREF	(1<<0)	/**< Internal use only. */
dvander@2168
    34
dvander@2168
    35
/**
dvander@2168
    36
 * Describes the various ways to pass parameters to functions or forwards.
dvander@2168
    37
 */
dvander@2168
    38
enum ParamType
dvander@2168
    39
{
dvander@2168
    40
	Param_Any			= 0,							/**< Any data type can be pushed */
dvander@2168
    41
	Param_Cell			= (1<<1),						/**< Only basic cells can be pushed */
dvander@2168
    42
	Param_Float			= (2<<1),						/**< Only floats can be pushed */
dvander@2168
    43
	Param_String		= (3<<1)|SP_PARAMFLAG_BYREF,	/**< Only strings can be pushed */
dvander@2168
    44
	Param_Array			= (4<<1)|SP_PARAMFLAG_BYREF,	/**< Only arrays can be pushed */
dvander@2168
    45
	Param_VarArgs		= (5<<1),						/**< Same as "..." in plugins, anything can be pushed, but it will always be byref */
dvander@2168
    46
	Param_CellByRef		= (1<<1)|SP_PARAMFLAG_BYREF,	/**< Only a cell by reference can be pushed */
dvander@2168
    47
	Param_FloatByRef	= (2<<1)|SP_PARAMFLAG_BYREF		/**< Only a float by reference can be pushed */
dvander@2168
    48
};
dvander@2168
    49
dvander@2168
    50
/**
dvander@2168
    51
 * Defines how a forward iterates through plugin functions.
dvander@2168
    52
 */
dvander@2168
    53
enum ExecType
dvander@2168
    54
{
dvander@2168
    55
	ET_Ignore	= 0,	/**< Ignore all return values, return 0 */
dvander@2168
    56
	ET_Single	= 1,	/**< Only return the last exec, ignore all others */
dvander@2168
    57
	ET_Event	= 2,	/**< Acts as an event with the Actions defined in core.inc, no mid-Stops allowed, returns highest */
dvander@2168
    58
	ET_Hook		= 3		/**< Acts as a hook with the Actions defined in core.inc, mid-Stops allowed, returns highest */
dvander@2168
    59
};
dvander@2168
    60
dvander@2168
    61
/**
dvander@2168
    62
 * @section Flags that are used with Call_PushArrayEx() and Call_PushStringEx()
dvander@2168
    63
 */
dvander@2168
    64
 
dvander@2168
    65
#define SM_PARAM_COPYBACK		(1<<0)		/**< Copy an array/reference back after call */
dvander@2168
    66
dvander@2168
    67
#define SM_PARAM_STRING_UTF8	(1<<0)		/**< String should be UTF-8 handled */
dvander@2168
    68
#define SM_PARAM_STRING_COPY	(1<<1)		/**< String should be copied into the plugin */
dvander@2168
    69
#define SM_PARAM_STRING_BINARY	(1<<2)		/**< Treat the string as a binary string */
dvander@2168
    70
dvander@2168
    71
/**
dvander@2168
    72
 * @endsection
dvander@2168
    73
 */
dvander@2168
    74
dvander@2168
    75
/**
dvander@2168
    76
 * @section Error codes
dvander@2168
    77
 */
dvander@2168
    78
#define SP_ERROR_NONE					0	/**< No error occurred */
dvander@2168
    79
#define SP_ERROR_FILE_FORMAT			1	/**< File format unrecognized */
dvander@2168
    80
#define SP_ERROR_DECOMPRESSOR			2	/**< A decompressor was not found */
dvander@2168
    81
#define SP_ERROR_HEAPLOW				3	/**< Not enough space left on the heap */
dvander@2168
    82
#define SP_ERROR_PARAM					4	/**< Invalid parameter or parameter type */
dvander@2168
    83
#define SP_ERROR_INVALID_ADDRESS		5	/**< A memory address was not valid */
dvander@2168
    84
#define SP_ERROR_NOT_FOUND				6	/**< The object in question was not found */
dvander@2168
    85
#define SP_ERROR_INDEX					7	/**< Invalid index parameter */
dvander@2168
    86
#define SP_ERROR_STACKLOW				8	/**< Nnot enough space left on the stack */
dvander@2168
    87
#define SP_ERROR_NOTDEBUGGING			9	/**< Debug mode was not on or debug section not found */
dvander@2168
    88
#define SP_ERROR_INVALID_INSTRUCTION	10	/**< Invalid instruction was encountered */
dvander@2168
    89
#define SP_ERROR_MEMACCESS				11	/**< Invalid memory access */
dvander@2168
    90
#define SP_ERROR_STACKMIN				12	/**< Stack went beyond its minimum value */
dvander@2168
    91
#define SP_ERROR_HEAPMIN				13  /**< Heap went beyond its minimum value */
dvander@2168
    92
#define SP_ERROR_DIVIDE_BY_ZERO			14	/**< Division by zero */
dvander@2168
    93
#define SP_ERROR_ARRAY_BOUNDS			15	/**< Array index is out of bounds */
dvander@2168
    94
#define SP_ERROR_INSTRUCTION_PARAM		16	/**< Instruction had an invalid parameter */
dvander@2168
    95
#define SP_ERROR_STACKLEAK				17  /**< A native leaked an item on the stack */
dvander@2168
    96
#define SP_ERROR_HEAPLEAK				18  /**< A native leaked an item on the heap */
dvander@2168
    97
#define SP_ERROR_ARRAY_TOO_BIG			19	/**< A dynamic array is too big */
dvander@2168
    98
#define SP_ERROR_TRACKER_BOUNDS			20	/**< Tracker stack is out of bounds */
dvander@2168
    99
#define SP_ERROR_INVALID_NATIVE			21	/**< Native was pending or invalid */
dvander@2168
   100
#define SP_ERROR_PARAMS_MAX				22	/**< Maximum number of parameters reached */
dvander@2168
   101
#define SP_ERROR_NATIVE					23	/**< Error originates from a native */
dvander@2168
   102
#define SP_ERROR_NOT_RUNNABLE			24	/**< Function or plugin is not runnable */
dvander@2168
   103
#define SP_ERROR_ABORTED				25	/**< Function call was aborted */
dvander@2168
   104
dvander@2168
   105
/**
dvander@2168
   106
 * @endsection
dvander@2168
   107
 */
dvander@2168
   108
dvander@2168
   109
/**
dvander@2168
   110
 * Gets a function id from a function name. 
dvander@2168
   111
 *
dvander@2168
   112
 * @param plugin			Handle of the plugin that contains the function.
dvander@2168
   113
							Pass INVALID_HANDLE to search in the calling plugin.
dvander@2168
   114
 * @param name				Name of the function.
dvander@2168
   115
 * @return 					Function id or INVALID_FUNCTION if not found.
dvander@2168
   116
 * @error					Invalid or corrupt plugin handle.
dvander@2168
   117
 */
dvander@2168
   118
native Function:GetFunctionByName(Handle:plugin, const String:name[]);
dvander@2168
   119
dvander@2168
   120
/**
dvander@2168
   121
 * Creates a global forward.
dvander@2168
   122
 *
dvander@2168
   123
 * @note The name used to create the forward is used as its public function in all target plugins.
dvander@2168
   124
 * @note This is ideal for global, static forwards that are never changed.
dvander@2168
   125
 * @note Global forwards cannot be cloned.
dvander@2168
   126
 * @note Use CloseHandle() to destroy these.
dvander@2168
   127
 *
dvander@2168
   128
 * @param name				Name of public function to use in forward.
dvander@2168
   129
 * @param type				Execution type to be used.
dvander@2168
   130
 * @param ...				Variable number of parameter types (up to 32).
dvander@2168
   131
 * @return 					Handle to new global forward.
dvander@2168
   132
 * @error					More than 32 paramater types passed.
dvander@2168
   133
 */
dvander@2168
   134
native Handle:CreateGlobalForward(const String:name[], ExecType:type, ParamType:...);
dvander@2168
   135
dvander@2168
   136
/**
dvander@2168
   137
 * Creates a private forward.
dvander@2168
   138
 *
dvander@2168
   139
 * @note No functions are automatically added. Use AddToForward() to do this.
dvander@2168
   140
 * @note Private forwards can be cloned.
dvander@2168
   141
 * @note Use CloseHandle() to destroy these.
dvander@2168
   142
 *
dvander@2168
   143
 * @param type				Execution type to be used.
dvander@2168
   144
 * @param ...				Variable number of parameter types (up to 32).
dvander@2168
   145
 * @return 					Handle to new private forward.
dvander@2168
   146
 * @error					More than 32 paramater types passed.
dvander@2168
   147
 */
dvander@2168
   148
native Handle:CreateForward(ExecType:type, ParamType:...);
dvander@2168
   149
dvander@2168
   150
/**
dvander@2168
   151
 * Returns the number of functions in a global or private forward's call list.
dvander@2168
   152
 *
dvander@2168
   153
 * @param fwd				Handle to global or private forward.
dvander@2168
   154
 * @return					Number of functions in forward.
dvander@2168
   155
 * @error					Invalid or corrupt forward handle.
dvander@2168
   156
 */
dvander@2168
   157
native GetForwardFunctionCount(Handle:fwd);
dvander@2168
   158
dvander@2168
   159
/**
dvander@2168
   160
 * Adds a function to a private forward's call list.
dvander@2168
   161
 *
dvander@2168
   162
 * @note Cannot be used during an incompleted call.
dvander@2168
   163
 *
dvander@2168
   164
 * @param fwd				Handle to private forward.
dvander@2168
   165
 * @param plugin			Handle of the plugin that contains the function.
dvander@2168
   166
 *							Pass INVALID_HANDLE to specify the calling plugin.
dvander@2168
   167
 * @param func				Function to add to forward.
dvander@2168
   168
 * @return					True on success, false otherwise.
dvander@2168
   169
 * @error					Invalid or corrupt private forward handle, invalid or corrupt plugin handle, or invalid function.
dvander@2168
   170
 */
dvander@2168
   171
native bool:AddToForward(Handle:fwd, Handle:plugin, Function:func);
dvander@2168
   172
dvander@2168
   173
/**
dvander@2168
   174
 * Removes a function from a private forward's call list.
dvander@2168
   175
 *
dvander@2168
   176
 * @note Only removes one instance.
dvander@2168
   177
 * @note Functions will be removed automatically if their parent plugin is unloaded.
dvander@2168
   178
 *
dvander@2168
   179
 * @param fwd				Handle to private forward.
dvander@2168
   180
 * @param plugin			Handle of the plugin that contains the function.
dvander@2168
   181
 *							Pass INVALID_HANDLE to specify the calling plugin.
dvander@2168
   182
 * @param func				Function to remove from forward.
dvander@2168
   183
 * @return					True on success, false otherwise.
dvander@2168
   184
 * @error					Invalid or corrupt private forward handle, invalid or corrupt plugin handle, or invalid function.
dvander@2168
   185
 */
dvander@2168
   186
native bool:RemoveFromForward(Handle:fwd, Handle:plugin, Function:func);
dvander@2168
   187
dvander@2168
   188
/**
dvander@2168
   189
 * Removes all instances of a plugin from a private forward's call list.
dvander@2168
   190
 *
dvander@2168
   191
 * @note Functions will be removed automatically if their parent plugin is unloaded.
dvander@2168
   192
 *
dvander@2168
   193
 * @param fwd				Handle to private forward.
dvander@2168
   194
 * @param plugin			Handle of the plugin to remove instances of.
dvander@2168
   195
 *							Pass INVALID_HANDLE to specify the calling plugin.
dvander@2168
   196
 * @return					Number of functions removed from forward.
dvander@2168
   197
 * @error					Invalid or corrupt private forward handle or invalid or corrupt plugin handle.
dvander@2168
   198
 */
dvander@2168
   199
native RemoveAllFromForward(Handle:fwd, Handle:plugin);
dvander@2168
   200
dvander@2168
   201
/**
dvander@2168
   202
 * Starts a call to functions in a forward's call list.
dvander@2168
   203
 *
dvander@2168
   204
 * @note Cannot be used during an incompleted call.
dvander@2168
   205
 *
dvander@2168
   206
 * @param fwd				Handle to global or private forward.
dvander@2168
   207
 * @noreturn
dvander@2168
   208
 * @error					Invalid or corrupt forward handle or called before another call has completed.
dvander@2168
   209
 */
dvander@2168
   210
native Call_StartForward(Handle:fwd);
dvander@2168
   211
dvander@2168
   212
/**
dvander@2168
   213
 * Starts a call to a function.
dvander@2168
   214
 *
dvander@2168
   215
 * @note Cannot be used during an incompleted call.
dvander@2168
   216
 *
dvander@2168
   217
 * @param plugin			Handle of the plugin that contains the function.
dvander@2168
   218
 *							Pass INVALID_HANDLE to specify the calling plugin.
dvander@2168
   219
 * @param func				Function to call.
dvander@2168
   220
 * @noreturn
dvander@2168
   221
 * @error					Invalid or corrupt plugin handle, invalid function, or called before another call has completed.
dvander@2168
   222
 */
dvander@2168
   223
native Call_StartFunction(Handle:plugin, Function:func);
dvander@2168
   224
dvander@2168
   225
/**
dvander@2168
   226
 * Pushes a cell onto the current call.
dvander@2168
   227
 *
dvander@2168
   228
 * @note Cannot be used before a call has been started.
dvander@2168
   229
 *
dvander@2168
   230
 * @param value				Cell value to push.
dvander@2168
   231
 * @noreturn
dvander@2168
   232
 * @error					Called before a call has been started.
dvander@2168
   233
 */
dvander@2168
   234
native Call_PushCell(any:value);
dvander@2168
   235
dvander@2168
   236
/**
dvander@2168
   237
 * Pushes a cell by reference onto the current call.
dvander@2168
   238
 *
dvander@2168
   239
 * @note Cannot be used before a call has been started.
dvander@2168
   240
 *
dvander@2168
   241
 * @param value				Cell reference to push.
dvander@2168
   242
 * @noreturn
dvander@2168
   243
 * @error					Called before a call has been started.
dvander@2168
   244
 */
dvander@2168
   245
native Call_PushCellRef(&any:value);
dvander@2168
   246
dvander@2168
   247
/**
dvander@2168
   248
 * Pushes a float onto the current call.
dvander@2168
   249
 *
dvander@2168
   250
 * @note Cannot be used before a call has been started.
dvander@2168
   251
 *
dvander@2168
   252
 * @param value				Floating point value to push.
dvander@2168
   253
 * @noreturn
dvander@2168
   254
 * @error					Called before a call has been started.
dvander@2168
   255
 */
dvander@2168
   256
native Call_PushFloat(Float:value);
dvander@2168
   257
dvander@2168
   258
/**
dvander@2168
   259
 * Pushes a float by reference onto the current call.
dvander@2168
   260
 *
dvander@2168
   261
 * @note Cannot be used before a call has been started.
dvander@2168
   262
 *
dvander@2168
   263
 * @param value				Floating point reference to push.
dvander@2168
   264
 * @noreturn
dvander@2168
   265
 * @error					Called before a call has been started.
dvander@2168
   266
 */
dvander@2168
   267
native Call_PushFloatRef(&Float:value);
dvander@2168
   268
dvander@2168
   269
/**
dvander@2168
   270
 * Pushes an array onto the current call.
dvander@2168
   271
 *
dvander@2168
   272
 * @note Changes to array are not copied back to caller. Use PushArrayEx() to do this.
dvander@2168
   273
 * @note Cannot be used before a call has been started.
dvander@2168
   274
 *
dvander@2168
   275
 * @param value				Array to push.
dvander@2168
   276
 * @param size				Size of array.
dvander@2168
   277
 * @noreturn
dvander@2168
   278
 * @error					Called before a call has been started.
dvander@2168
   279
 */
dvander@2168
   280
native Call_PushArray(const any:value[], size);
dvander@2168
   281
dvander@2168
   282
/**
dvander@2168
   283
 * Pushes an array onto the current call.
dvander@2168
   284
 *
dvander@2168
   285
 * @note Cannot be used before a call has been started.
dvander@2168
   286
 *
dvander@2168
   287
 * @param value				Array to push.
dvander@2168
   288
 * @param size				Size of array.
dvander@2168
   289
 * @param cpflags			Whether or not changes should be copied back to the input array.
dvander@2168
   290
 *							See SP_PARAM_* constants for details.
dvander@2168
   291
 * @noreturn
dvander@2168
   292
 * @error					Called before a call has been started.
dvander@2168
   293
 */
dvander@2168
   294
native Call_PushArrayEx(any:value[], size, cpflags);
dvander@2168
   295
dvander@2168
   296
/**
dvander@2168
   297
 * Pushes a string onto the current call.
dvander@2168
   298
 *
dvander@2168
   299
 * @note Changes to string are not copied back to caller. Use PushStringEx() to do this.
dvander@2168
   300
 * @note Cannot be used before a call has been started.
dvander@2168
   301
 *
dvander@2168
   302
 * @param value				String to push.
dvander@2168
   303
 * @noreturn
dvander@2168
   304
 * @error					Called before a call has been started.
dvander@2168
   305
 */
dvander@2168
   306
native Call_PushString(const String:value[]);
dvander@2168
   307
dvander@2168
   308
/**
dvander@2168
   309
 * Pushes a string onto the current call.
dvander@2168
   310
 *
dvander@2168
   311
 * @note Cannot be used before a call has been started.
dvander@2168
   312
 *
dvander@2168
   313
 * @param value				String to push.
dvander@2168
   314
 * @param length			Length of string buffer.
dvander@2168
   315
 * @param szflags			Flags determining how string should be handled.
dvander@2168
   316
 *							See SP_PARAM_STRING_* constants for details.
dvander@2168
   317
 *							The default (0) is to push ASCII.
dvander@2168
   318
 * @param cpflags			Whether or not changes should be copied back to the input array.
dvander@2168
   319
 *							See SP_PARAM_* constants for details.		
dvander@2168
   320
 * @noreturn
dvander@2168
   321
 * @error					Called before a call has been started.
dvander@2168
   322
 */
dvander@2168
   323
native Call_PushStringEx(String:value[], length, szflags, cpflags);
dvander@2168
   324
dvander@2168
   325
/**
dvander@2168
   326
 * Completes a call to a function or forward's call list.
dvander@2168
   327
 *
dvander@2168
   328
 * @note Cannot be used before a call has been started.
dvander@2168
   329
 *
dvander@2168
   330
 * @param result			Return value of function or forward's call list.		
dvander@2168
   331
 * @return					SP_ERROR_NONE on success, any other integer on failure.
dvander@2168
   332
 * @error					Called before a call has been started.
dvander@2168
   333
 */
dvander@2168
   334
native Call_Finish(&any:result=0);
dvander@2168
   335
dvander@2168
   336
/**
dvander@2168
   337
 * Cancels a call to a function or forward's call list.
dvander@2168
   338
 *
dvander@2168
   339
 * @note Cannot be used before a call has been started.
dvander@2168
   340
 *		
dvander@2168
   341
 * @noreturn
dvander@2168
   342
 * @error					Called before a call has been started.
dvander@2168
   343
 */
dvander@2168
   344
native Call_Cancel();
dvander@2168
   345
dvander@2168
   346
/**
dvander@2168
   347
 * Defines a native function.
dvander@2168
   348
 *
dvander@2168
   349
 * It is not necessary to validate the parameter count 
dvander@2168
   350
 *
dvander@2168
   351
 * @param plugin			Handle of the calling plugin.
dvander@2168
   352
 * @param numParams			Number of parameters passed to the native.
dvander@2168
   353
 * @return 					Value for the native call to return.
dvander@2168
   354
 */
dvander@2168
   355
functag NativeCall public(Handle:plugin, numParams);
dvander@2168
   356
dvander@2168
   357
/**
dvander@2168
   358
 * Creates a dynamic native.  This should only be called in AskPluginLoad(), or 
dvander@2168
   359
 * else you risk not having your native shared with other plugins.
dvander@2168
   360
 *
dvander@2168
   361
 * @param name				Name of the dynamic native; must be unique amongst
dvander@2168
   362
 *							all other registered dynamic natives.
dvander@2168
   363
 * @param func				Function to use as the dynamic native.
dvander@2168
   364
 * @noreturn
dvander@2168
   365
 */
dvander@2168
   366
native CreateNative(const String:name[], NativeCall:func);
dvander@2168
   367
dvander@2168
   368
/**
dvander@2168
   369
 * Throws an error in the calling plugin of a native, instead of your own plugin.
dvander@2168
   370
 *
dvander@2168
   371
 * @param error				Error code to use.
dvander@2168
   372
 * @param fmt				Error message format.
dvander@2168
   373
 * @param ...				Format arguments.
dvander@2168
   374
 */
dvander@2168
   375
native ThrowNativeError(error, const String:fmt[], any:...);
dvander@2168
   376
dvander@2168
   377
/**
dvander@2168
   378
 * Retrieves the string length from a native parameter string.  This is useful 
dvander@2168
   379
 * fetching the entire string using dynamic arrays.
dvander@2168
   380
 * @note If this function succeeds, Get/SetNativeString will also succeed.
dvander@2168
   381
 *
dvander@2168
   382
 * @param param				Parameter number, starting from 1.
dvander@2168
   383
 * @param length			Stores the length of the string.
dvander@2168
   384
 * @return					SP_ERROR_NONE on success, any other integer on failure.
dvander@2168
   385
 * @error					Invalid parameter number or calling from a non-native function.
dvander@2168
   386
 */
dvander@2168
   387
native GetNativeStringLength(param, &length);
dvander@2168
   388
dvander@2168
   389
/**
dvander@2168
   390
 * Retrieves a string from a native parameter.
dvander@2168
   391
 * @note Output conditions are undefined on failure.
dvander@2168
   392
 *
dvander@2168
   393
 * @param param				Parameter number, starting from 1.
dvander@2168
   394
 * @param buffer			Buffer to store the string in.
dvander@2168
   395
 * @param maxlength			Maximum length of the buffer.
dvander@2168
   396
 * @param bytes				Optionally store the number of bytes written.
dvander@2168
   397
 * @return					SP_ERROR_NONE on success, any other integer on failure.
dvander@2168
   398
 * @error					Invalid parameter number or calling from a non-native function.
dvander@2168
   399
 */
dvander@2168
   400
native GetNativeString(param, String:buffer[], maxlength, &bytes=0);
dvander@2168
   401
dvander@2168
   402
/**
dvander@2168
   403
 * Sets a string in a native parameter.
dvander@2168
   404
 * @note Output conditions are undefined on failure.
dvander@2168
   405
 *
dvander@2168
   406
 * @param param				Parameter number, starting from 1.
dvander@2168
   407
 * @param source			Source string to use.
dvander@2168
   408
 * @param maxlength			Maximum number of bytes to write.
dvander@2168
   409
 * @param utf8				If false, string will not be written
dvander@2168
   410
 *							with UTF8 safety.
dvander@2168
   411
 * @param bytes				Optionally store the number of bytes written.
dvander@2168
   412
 * @return					SP_ERROR_NONE on success, any other integer on failure.
dvander@2168
   413
 * @error					Invalid parameter number or calling from a non-native function.
dvander@2168
   414
 */
dvander@2168
   415
native SetNativeString(param, const String:source[], maxlength, bool:utf8=true, &bytes=0);
dvander@2168
   416
dvander@2168
   417
/**
dvander@2168
   418
 * Gets a cell from a native parameter.
dvander@2168
   419
 *
dvander@2168
   420
 * @param param				Parameter number, starting from 1.
dvander@2168
   421
 * @return					Cell value at the parameter number.
dvander@2168
   422
 * @error					Invalid parameter number or calling from a non-native function.
dvander@2168
   423
 */
dvander@2168
   424
native any:GetNativeCell(param);
dvander@2168
   425
dvander@2168
   426
/**
dvander@2168
   427
 * Gets a cell from a native parameter, by reference.
dvander@2168
   428
 *
dvander@2168
   429
 * @param param				Parameter number, starting from 1.
dvander@2168
   430
 * @return					Cell value at the parameter number.
dvander@2168
   431
 * @error					Invalid parameter number or calling from a non-native function.
dvander@2168
   432
 */
dvander@2168
   433
native any:GetNativeCellRef(param);
dvander@2168
   434
dvander@2168
   435
/**
dvander@2168
   436
 * Sets a cell from a native parameter, by reference.
dvander@2168
   437
 *
dvander@2168
   438
 * @param param				Parameter number, starting from 1.
dvander@2168
   439
 * @param value				Cell value at the parameter number to set by reference.
dvander@2168
   440
 * @noreturn
dvander@2168
   441
 * @error					Invalid parameter number or calling from a non-native function.
dvander@2168
   442
 */
dvander@2168
   443
native SetNativeCellRef(param, any:value);
dvander@2168
   444
dvander@2168
   445
/**
dvander@2168
   446
 * Gets an array from a native parameter (always by reference).
dvander@2168
   447
 *
dvander@2168
   448
 * @param param				Parameter number, starting from 1.
dvander@2168
   449
 * @param local				Local array to copy into.
dvander@2168
   450
 * @param size				Maximum size of local array.
dvander@2168
   451
 * @return					SP_ERROR_NONE on success, anything else on failure.
dvander@2168
   452
 * @error					Invalid parameter number or calling from a non-native function.
dvander@2168
   453
 */
dvander@2168
   454
native GetNativeArray(param, any:local[], size);
dvander@2168
   455
dvander@2168
   456
/**
dvander@2168
   457
 * Copies a local array into a native parameter array (always by reference).
dvander@2168
   458
 * 
dvander@2168
   459
 * @param param				Parameter number, starting from 1.
dvander@2168
   460
 * @param local				Local array to copy from.
dvander@2168
   461
 * @param size				Size of the local array to copy.
dvander@2168
   462
 * @return					SP_ERROR_NONE on success, anything else on failure.
dvander@2168
   463
 * @error					Invalid parameter number or calling from a non-native function.
dvander@2168
   464
 */
dvander@2168
   465
native SetNativeArray(param, const any:local[], size);
dvander@2168
   466
dvander@2168
   467
/**
dvander@2168
   468
 * Formats a string using parameters from a native.
dvander@2168
   469
 *
dvander@2168
   470
 * @note All parameter indexes start at 1.
dvander@2168
   471
 * @note If the input and output buffers overlap, the contents
dvander@2168
   472
 *  of the output buffer at the end is undefined.
dvander@2168
   473
 *
dvander@2168
   474
 * @param out_param			Output parameter number to write to.  If 0, out_string is used.
dvander@2168
   475
 * @param fmt_param			Format parameter number.  If 0, fmt_string is used.
dvander@2168
   476
 * @param vararg_param		First variable parameter number.
dvander@2168
   477
 * @param out_len			Output string buffer maximum length (always required).
dvander@2168
   478
 * @param written			Optionally stores the number of bytes written.
dvander@2168
   479
 * @param out_string		Output string buffer to use if out_param is not used.
dvander@2168
   480
 * @param fmt_string		Format string to use if fmt_param is not used.
dvander@2168
   481
 * @return					SP_ERROR_NONE on success, anything else on failure.
dvander@2168
   482
 */
dvander@2168
   483
native FormatNativeString(out_param, 
dvander@2168
   484
						  fmt_param, 
dvander@2168
   485
						  vararg_param, 
dvander@2168
   486
						  out_len,
dvander@2168
   487
						  &written=0,
dvander@2168
   488
						  String:out_string[]="",
dvander@2168
   489
						  const String:fmt_string[]="");