Black's menu.dat works a bit better now. :) Still not perfect. :(
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@879 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
2c3c36f906
commit
be0a53b5d8
1 changed files with 212 additions and 10 deletions
|
@ -18,6 +18,7 @@ typedef struct menuedict_s
|
|||
|
||||
#define RETURN_SSTRING(s) (*(char **)&((int *)pr_globals)[OFS_RETURN] = PR_SetString(prinst, s)) //static - exe will not change it.
|
||||
char *PF_TempStr(void);
|
||||
#define MAXTEMPBUFFERLEN 4096
|
||||
|
||||
int menuentsize;
|
||||
|
||||
|
@ -808,6 +809,45 @@ void PF_gethostcachestring (progfuncs_t *prinst, struct globalvars_s *pr_globals
|
|||
G_INT(OFS_RETURN) = 0;
|
||||
}
|
||||
|
||||
//void resethostcachemasks(void) = #615;
|
||||
void PF_M_resethostcachemasks(progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||
{
|
||||
}
|
||||
//void sethostcachemaskstring(float mask, float fld, string str, float op) = #616;
|
||||
void PF_M_sethostcachemaskstring(progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||
{
|
||||
}
|
||||
//void sethostcachemasknumber(float mask, float fld, float num, float op) = #617;
|
||||
void PF_M_sethostcachemasknumber(progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||
{
|
||||
}
|
||||
//void resorthostcache(void) = #618;
|
||||
void PF_M_resorthostcache(progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||
{
|
||||
}
|
||||
//void sethostcachesort(float fld, float descending) = #619;
|
||||
void PF_M_sethostcachesort(progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||
{
|
||||
}
|
||||
//void refreshhostcache(void) = #620;
|
||||
void PF_M_refreshhostcache(progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||
{
|
||||
}
|
||||
//float gethostcachenumber(float fld, float hostnr) = #621;
|
||||
void PF_M_gethostcachenumber(progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||
{
|
||||
}
|
||||
//float gethostcacheindexforkey(string key) = #622;
|
||||
void PF_M_gethostcacheindexforkey(progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||
{
|
||||
}
|
||||
//void addwantedhostcachekey(string key) = #623;
|
||||
void PF_M_addwantedhostcachekey(progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
void PF_localsound (progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||
{
|
||||
char *soundname = PR_GetStringOfs(prinst, OFS_PARM0);
|
||||
|
@ -911,10 +951,157 @@ void PF_ftoe(progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
|||
RETURN_EDICT(prinst, EDICT_NUM(prinst, entnum));
|
||||
}
|
||||
|
||||
void PF_IsNull(progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||
void PF_IsNotNull(progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||
{
|
||||
int str = G_INT(OFS_PARM0);
|
||||
G_FLOAT(OFS_RETURN) = !str;
|
||||
G_FLOAT(OFS_RETURN) = !!str;
|
||||
}
|
||||
|
||||
void PF_StringToKeyNum(progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||
{
|
||||
int i;
|
||||
int modifier;
|
||||
char *s;
|
||||
|
||||
s = PR_GetStringOfs(prinst, OFS_PARM1);
|
||||
i = Key_StringToKeynum(s, &modifier);
|
||||
if (i < 0 || modifier != ~0)
|
||||
{
|
||||
G_FLOAT(OFS_RETURN) = -1;
|
||||
return;
|
||||
}
|
||||
i = MP_TranslateFTEtoDPCodes(i);
|
||||
G_FLOAT(OFS_RETURN) = i;
|
||||
}
|
||||
|
||||
|
||||
//float altstr_count(string str) = #82;
|
||||
//returns number of single quoted strings in the string.
|
||||
void PF_altstr_count(progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||
{
|
||||
char *s;
|
||||
int count = 0;
|
||||
s = PR_GetStringOfs(prinst, OFS_PARM0);
|
||||
for (;*s;s++)
|
||||
{
|
||||
if (*s == '\\')
|
||||
{
|
||||
if (!*++s)
|
||||
break;
|
||||
}
|
||||
else if (*s == '\'')
|
||||
count++;
|
||||
}
|
||||
G_FLOAT(OFS_RETURN) = count/2;
|
||||
}
|
||||
//string altstr_prepare(string str) = #83;
|
||||
void PF_altstr_prepare(progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||
{
|
||||
char *outstr, *out;
|
||||
char *instr, *in;
|
||||
int size;
|
||||
|
||||
// VM_SAFEPARMCOUNT( 1, VM_altstr_prepare );
|
||||
|
||||
instr = PR_GetStringOfs(prinst, OFS_PARM0 );
|
||||
//VM_CheckEmptyString( instr );
|
||||
outstr = PF_TempStr();
|
||||
|
||||
for( out = outstr, in = instr, size = MAXTEMPBUFFERLEN - 1 ; size && *in ; size--, in++, out++ )
|
||||
if( *in == '\'' ) {
|
||||
*out++ = '\\';
|
||||
*out = '\'';
|
||||
size--;
|
||||
} else
|
||||
*out = *in;
|
||||
*out = 0;
|
||||
|
||||
G_INT( OFS_RETURN ) = (int)PR_SetString( prinst, outstr );
|
||||
}
|
||||
//string altstr_get(string str, float num) = #84;
|
||||
void PF_altstr_get(progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||
{
|
||||
char *altstr, *pos, *outstr, *out;
|
||||
int count, size;
|
||||
|
||||
// VM_SAFEPARMCOUNT( 2, VM_altstr_get );
|
||||
|
||||
altstr = PR_GetStringOfs(prinst, OFS_PARM0 );
|
||||
//VM_CheckEmptyString( altstr );
|
||||
|
||||
count = G_FLOAT( OFS_PARM1 );
|
||||
count = count * 2 + 1;
|
||||
|
||||
for( pos = altstr ; *pos && count ; pos++ )
|
||||
if( *pos == '\\' && !*++pos )
|
||||
break;
|
||||
else if( *pos == '\'' )
|
||||
count--;
|
||||
|
||||
if( !*pos ) {
|
||||
G_INT( OFS_RETURN ) = (int)PR_SetString( prinst, "" );
|
||||
return;
|
||||
}
|
||||
|
||||
outstr = PF_TempStr();
|
||||
for( out = outstr, size = MAXTEMPBUFFERLEN - 1 ; size && *pos ; size--, pos++, out++ )
|
||||
if( *pos == '\\' ) {
|
||||
if( !*++pos )
|
||||
break;
|
||||
*out = *pos;
|
||||
size--;
|
||||
} else if( *pos == '\'' )
|
||||
break;
|
||||
else
|
||||
*out = *pos;
|
||||
|
||||
*out = 0;
|
||||
G_INT( OFS_RETURN ) = (int)PR_SetString( prinst, outstr );
|
||||
}
|
||||
//string altstr_set(string str, float num, string set) = #85
|
||||
void PF_altstr_set(progfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||
{
|
||||
int num;
|
||||
char *altstr, *str;
|
||||
char *in;
|
||||
char *outstr, *out;
|
||||
|
||||
// VM_SAFEPARMCOUNT( 3, VM_altstr_set );
|
||||
|
||||
altstr = PR_GetStringOfs(prinst, OFS_PARM0 );
|
||||
//VM_CheckEmptyString( altstr );
|
||||
|
||||
num = G_FLOAT( OFS_PARM1 );
|
||||
|
||||
str = PR_GetStringOfs(prinst, OFS_PARM2 );
|
||||
//VM_CheckEmptyString( str );
|
||||
|
||||
outstr = out = PF_TempStr();
|
||||
for( num = num * 2 + 1, in = altstr; *in && num; *out++ = *in++ )
|
||||
if( *in == '\\' && !*++in )
|
||||
break;
|
||||
else if( *in == '\'' )
|
||||
num--;
|
||||
|
||||
if( !in ) {
|
||||
G_INT( OFS_RETURN ) = (int)PR_SetString( prinst, "" );
|
||||
return;
|
||||
}
|
||||
// copy set in
|
||||
for( ; *str; *out++ = *str++ );
|
||||
// now jump over the old contents
|
||||
for( ; *in ; in++ )
|
||||
if( *in == '\'' || (*in == '\\' && !*++in) )
|
||||
break;
|
||||
|
||||
if( !in ) {
|
||||
G_INT( OFS_RETURN ) = (int)PR_SetString( prinst, "" );
|
||||
return;
|
||||
}
|
||||
|
||||
strcpy( out, in );
|
||||
G_INT( OFS_RETURN ) = (int)PR_SetString( prinst, outstr );
|
||||
|
||||
}
|
||||
|
||||
builtin_t menu_builtins[] = {
|
||||
|
@ -1009,11 +1196,14 @@ builtin_t menu_builtins[] = {
|
|||
PF_etof,//9 //float etof(entity ent) = #79;
|
||||
//80
|
||||
PF_ftoe,//10
|
||||
PF_IsNull,
|
||||
skip1
|
||||
skip1
|
||||
skip1
|
||||
skip1
|
||||
PF_IsNotNull,
|
||||
|
||||
|
||||
PF_altstr_count, //float altstr_count(string str) = #82;
|
||||
PF_altstr_prepare, //string altstr_prepare(string str) = #83;
|
||||
PF_altstr_get, //string altstr_get(string str, float num) = #84;
|
||||
PF_altstr_set, //string altstr_set(string str, float num, string set) = #85
|
||||
|
||||
skip1
|
||||
skip1
|
||||
skip1
|
||||
|
@ -1073,7 +1263,19 @@ builtin_t menu_builtins[] = {
|
|||
PF_CL_findkeysforcommand,
|
||||
PF_gethostcachevalue,
|
||||
PF_gethostcachestring,
|
||||
PF_parseentitydata //void parseentitydata(entity ent, string data) = #613;
|
||||
PF_parseentitydata, //void parseentitydata(entity ent, string data) = #613;
|
||||
|
||||
PF_StringToKeyNum,
|
||||
|
||||
PF_M_resethostcachemasks,
|
||||
PF_M_sethostcachemaskstring,
|
||||
PF_M_sethostcachemasknumber,
|
||||
PF_M_resorthostcache,
|
||||
PF_M_sethostcachesort,
|
||||
PF_M_refreshhostcache,
|
||||
PF_M_gethostcachenumber,
|
||||
PF_M_gethostcacheindexforkey,
|
||||
PF_M_addwantedhostcachekey
|
||||
};
|
||||
int menu_numbuiltins = sizeof(menu_builtins)/sizeof(menu_builtins[0]);
|
||||
|
||||
|
@ -1232,11 +1434,11 @@ void MP_Init (void)
|
|||
if (mp_time)
|
||||
*mp_time = Sys_DoubleTime();
|
||||
|
||||
menuentsize = PR_InitEnts(menuprogs, 512);
|
||||
menuentsize = PR_InitEnts(menuprogs, 8192);
|
||||
|
||||
|
||||
//'world' edict
|
||||
EDICT_NUM(menuprogs, 0)->readonly = true;
|
||||
// EDICT_NUM(menuprogs, 0)->readonly = true;
|
||||
EDICT_NUM(menuprogs, 0)->isfree = false;
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue