plugins/include/sdktools_stringtables.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
#if defined _sdktools_stringtables_included
dvander@2168
    34
  #endinput
dvander@2168
    35
#endif
dvander@2168
    36
#define _sdktools_stringtables_included
dvander@2168
    37
dvander@2168
    38
#define INVALID_STRING_TABLE -1		/**< An invalid string table index */
dvander@2168
    39
#define INVALID_STRING_INDEX -1		/**< An invalid string index in a table */
dvander@2168
    40
dvander@2168
    41
/**
dvander@2168
    42
 * Searches for a string table.
dvander@2168
    43
 *
dvander@2168
    44
 * @param name			Name of string table to find.
dvander@2168
    45
 * @return				A string table index number if found, INVALID_STRING_TABLE otherwise.
dvander@2168
    46
 */
dvander@2168
    47
native FindStringTable(const String:name[]);
dvander@2168
    48
dvander@2168
    49
/**
dvander@2168
    50
 * Returns the number of string tables that currently exist.
dvander@2168
    51
 *
dvander@2168
    52
 * @return				Number of string tables that currently exist.
dvander@2168
    53
 */
dvander@2168
    54
native GetNumStringTables();
dvander@2168
    55
dvander@2168
    56
/**
dvander@2168
    57
 * Returns the number of strings that currently exist in a given string table.
dvander@2168
    58
 *
dvander@2168
    59
 * @param tableidx		A string table index.
dvander@2168
    60
 * @return				Number of strings that currently exist.
dvander@2168
    61
 * @error				Invalid string table index.
dvander@2168
    62
 */
dvander@2168
    63
native GetStringTableNumStrings(tableidx);
dvander@2168
    64
dvander@2168
    65
/**
dvander@2168
    66
 * Returns the maximum number of strings that are allowed in a given string table.
dvander@2168
    67
 *
dvander@2168
    68
 * @param tableidx		A string table index.
dvander@2168
    69
 * @return				Maximum number of strings allowed.
dvander@2168
    70
 * @error				Invalid string table index.
dvander@2168
    71
 */
dvander@2168
    72
native GetStringTableMaxStrings(tableidx);
dvander@2168
    73
dvander@2168
    74
/**
dvander@2168
    75
 * Retrieves the name of a string table.
dvander@2168
    76
 *
dvander@2168
    77
 * @param tableidx		A string table index.
dvander@2168
    78
 * @param name			Buffer to store the name of the string table.
dvander@2168
    79
 * @param maxlength		Maximum length of string buffer.
dvander@2168
    80
 * @return				Number of bytes written to the buffer (UTF-8 safe).
dvander@2168
    81
 * @error				Invalid string table index.
dvander@2168
    82
 */
dvander@2168
    83
native GetStringTableName(tableidx, String:name[], maxlength);
dvander@2168
    84
dvander@2168
    85
/**
dvander@2168
    86
 * Searches for the index of a given string in a string table.
dvander@2168
    87
 *
dvander@2168
    88
 * @param tableidx		A string table index.
dvander@2168
    89
 * @param string		String to find.
dvander@2168
    90
 * @return				String index if found, INVALID_STRING_INDEX otherwise.
dvander@2168
    91
 * @error				Invalid string table index.
dvander@2168
    92
 */
dvander@2168
    93
native FindStringIndex(tableidx, const String:str[]);
dvander@2168
    94
dvander@2168
    95
/**
dvander@2168
    96
 * Retrieves the string at a given index of a string table.
dvander@2168
    97
 *
dvander@2168
    98
 * @param tableidx		A string table index.
dvander@2168
    99
 * @param stringidx		A string index.
dvander@2168
   100
 * @param name			Buffer to store the string value.
dvander@2168
   101
 * @param maxlength		Maximum length of string buffer.
dvander@2168
   102
 * @return				Number of bytes written to the buffer (UTF-8 safe).
dvander@2168
   103
 * @error				Invalid string table index or string index.
dvander@2168
   104
 */
dvander@2168
   105
native ReadStringTable(tableidx, stringIdx, String:str[], maxlength);
dvander@2168
   106
dvander@2168
   107
/**
dvander@2168
   108
 * Returns the length of the user data associated with a given string index.
dvander@2168
   109
 *
dvander@2168
   110
 * @param tableidx		A string table index.
dvander@2168
   111
 * @param stringidx		A string index.
dvander@2168
   112
 * @return				Length of user data. This will be 0 if there is no user data.
dvander@2168
   113
 * @error				Invalid string table index or string index.
dvander@2168
   114
 */
dvander@2168
   115
native GetStringTableDataLength(tableidx, stringidx);
dvander@2168
   116
dvander@2168
   117
/**
dvander@2168
   118
 * Retrieves the user data associated with a given string index.
dvander@2168
   119
 *
dvander@2168
   120
 * @param tableidx		A string table index.
dvander@2168
   121
 * @param stringidx		A string index.
dvander@2168
   122
 * @param userdata		Buffer to store the user data. This will be set to "" if there is no user data.
dvander@2168
   123
 * @param maxlength		Maximum length of string buffer.
dvander@2168
   124
 * @return				Number of bytes written to the buffer (UTF-8 safe).
dvander@2168
   125
 * @error				Invalid string table index or string index.
dvander@2168
   126
 */
dvander@2168
   127
native GetStringTableData(tableidx, stringIdx, String:userdata[], maxlength);
dvander@2168
   128
dvander@2168
   129
/**
dvander@2168
   130
 * Sets the user data associated with a given string index.
dvander@2168
   131
 *
dvander@2168
   132
 * @param tableidx		A string table index.
dvander@2168
   133
 * @param stringidx		A string index.
dvander@2168
   134
 * @param userdata		User data string that will be set.
dvander@2168
   135
 * @param length		Length of user data string. This should include the null terminator.
dvander@2168
   136
 * @return				Number of bytes written to the buffer (UTF-8 safe).
dvander@2168
   137
 * @error				Invalid string table index or string index.
dvander@2168
   138
 */
dvander@2168
   139
native SetStringTableData(tableidx, stringIdx, const String:userdata[], length);
dvander@2168
   140
dvander@2168
   141
/**
dvander@2168
   142
 * Adds a string to a given string table.
dvander@2168
   143
 *
dvander@2168
   144
 * @param tableidx		A string table index.
dvander@2168
   145
 * @param string		String to add.
dvander@2168
   146
 * @param userdata		An optional user data string.
dvander@2168
   147
 * @param length		Length of user data string. This should include the null terminator.
dvander@2168
   148
 *						If set to -1, then user data will be not be altered if the specified string
dvander@2168
   149
 *						already exists in the string table.
dvander@2168
   150
 */
dvander@2168
   151
native AddToStringTable(tableidx, const String:str[], const String:userdata[]="", length=-1);
dvander@2168
   152
dvander@2168
   153
/**
dvander@2168
   154
 * Locks or unlocks the network string tables.
dvander@2168
   155
 *
dvander@2168
   156
 * @param lock			Determines whether network string tables should be locked.
dvander@2168
   157
 *						True means the tables should be locked for writing; false means unlocked.
dvander@2168
   158
 * @return				Previous lock state.
dvander@2168
   159
 */
dvander@2168
   160
native bool:LockStringTables(bool:lock);
dvander@2168
   161
dvander@2168
   162
/**
dvander@2168
   163
 * Adds a file to the downloadables network string table.
dvander@2168
   164
 * This forces a client to download the file if they do not already have it.
dvander@2168
   165
 *
dvander@2168
   166
 * @param filename		File that will be added to downloadables table.
dvander@2168
   167
 */
dvander@2168
   168
stock AddFileToDownloadsTable(const String:filename[])
dvander@2168
   169
{
dvander@2168
   170
	static table = INVALID_STRING_TABLE;
dvander@2168
   171
	
dvander@2168
   172
	if (table == INVALID_STRING_TABLE)
dvander@2168
   173
	{
dvander@2168
   174
		table = FindStringTable("downloadables");
dvander@2168
   175
	}
dvander@2168
   176
	
dvander@2168
   177
	new bool:save = LockStringTables(false);
dvander@2168
   178
	AddToStringTable(table, filename);
dvander@2168
   179
	LockStringTables(save);
dvander@2168
   180
}