strbreak() added

This commit is contained in:
David Anderson 2004-04-03 03:00:57 +00:00
parent 74d424c2a3
commit 1fa97936ff
3 changed files with 69 additions and 0 deletions

View File

@ -236,6 +236,9 @@
BasicRuntimeChecks="3"/>
</FileConfiguration>
</File>
<File
RelativePath="..\amxxlog.cpp">
</File>
<File
RelativePath="..\CCmd.cpp">
<FileConfiguration

View File

@ -482,6 +482,61 @@ char* format_arguments(AMX *amx, int parm,int& len)
return *buffer;
}
//added by BAILOPAN
//Takes a string and breaks it into a 1st param and rest params
//strbreak(String[], First[], FirstLen, Rest[], RestLen)
static cell AMX_NATIVE_CALL strbreak(AMX *amx, cell *params) /* 5 param */
{
bool quote_flag = false;
bool done_flag = false;
int left_pos = 0;
int right_pos = 0;
int l=0;
unsigned int i=0;
char hold = '"';
char *string = get_amxstring(amx, params[1], 0, l);
char *left = new char[strlen(string)+1];
char *right = new char[strlen(string)+1];
int LeftMax = params[3];
int RightMax = params[5];
for (i=0; i<strlen(string); i++) {
if (string[i] == '"') {
quote_flag = true;
} else if (string[i] == '"' && quote_flag) {
quote_flag = false;
}
if ((string[i] == ' ') && !quote_flag && !done_flag) {
done_flag = true;
i++;
}
if (!done_flag && string[i]!='"') {
if (left_pos < LeftMax) {
left[left_pos] = string[i];
if (left[left_pos] = '\'') {
left[left_pos] = hold;
}
left_pos++;
}
} else {
if (right_pos < RightMax && string[i]!='"') {
right[right_pos] = string[i];
if (right[right_pos] == '\'') {
right[right_pos] = hold;
}
right_pos++;
}
}
}
left[left_pos] = '\0';
right[right_pos] = '\0';
set_amxstring(amx, params[2], left, params[3]);
set_amxstring(amx, params[4], right, params[5]);
return 1;
}
static cell AMX_NATIVE_CALL format_args(AMX *amx, cell *params)
{
int len;
@ -532,6 +587,7 @@ AMX_NATIVE_INFO string_Natives[] = {
{ "parse", parse },
{ "replace", replace },
{ "setc", setc },
{ "strbreak", strbreak},
{ "strtolower", strtolower },
{ "strtoupper", strtoupper },
{ "str_to_num", strtonum },

View File

@ -66,6 +66,16 @@ native setc(src[],len,ch);
* Function returns number of parsed parameters. */
native parse(const text[], ... );
/* Gets parameters from text one at a time
It breaks a string into the first parameter and the rest of the parameters
(A left side and right side of the string)
Example: to split text: "^"This is^" the best year",
split(text, arg1, len1, arg2, len2)
arg1="^"This is^"", arg2="the best year"
This more useful than parse() because you can keep breaking
any number of arguments */
native strbreak(const text[], Left[], leftLen, Right[], rightLen);
/* Converts all chars in string to lower case. */
native strtolower(string[]);