diff --git a/libs/console/menu.c b/libs/console/menu.c index cfcc214fc..2df9220b1 100644 --- a/libs/console/menu.c +++ b/libs/console/menu.c @@ -358,6 +358,8 @@ Menu_Init (void) File_Progs_Init (&menu_pr_state); InputLine_Progs_Init (&menu_pr_state); String_Progs_Init (&menu_pr_state); + Cvar_Progs_Init (&menu_pr_state); + Key_Progs_Init (&menu_pr_state); PR_Cmds_Init (&menu_pr_state); R_Progs_Init (&menu_pr_state); diff --git a/libs/gamecode/builtins/Makefile.am b/libs/gamecode/builtins/Makefile.am index afe89b935..46ca7afcd 100644 --- a/libs/gamecode/builtins/Makefile.am +++ b/libs/gamecode/builtins/Makefile.am @@ -8,4 +8,4 @@ libQFgamecode_builtins_la_LDFLAGS= -version-info 1:0:0 libQFgamecode_builtins_la_SOURCES= pr_cmds.c libQFcsqc_la_LDFLAGS= -version-info 1:0:0 -libQFcsqc_la_SOURCES= bi_init.c bi_cbuf.c bi_file.c bi_inputline.c bi_string.c +libQFcsqc_la_SOURCES= bi_init.c bi_cbuf.c bi_file.c bi_inputline.c bi_string.c bi_cvar.c bi_keys.c diff --git a/libs/gamecode/builtins/bi_cvar.c b/libs/gamecode/builtins/bi_cvar.c new file mode 100644 index 000000000..50cf00ca2 --- /dev/null +++ b/libs/gamecode/builtins/bi_cvar.c @@ -0,0 +1,62 @@ +/* + bi_cvar.c + + CSQC cvar builtins + + Copyright (C) 1996-1997 Id Software, Inc. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to: + + Free Software Foundation, Inc. + 59 Temple Place - Suite 330 + Boston, MA 02111-1307, USA + +*/ +static const char rcsid[] = + "$Id$"; + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#ifdef HAVE_STRING_H +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif + +#include "QF/cvar.h" +#include "QF/progs.h" +#include "QF/zone.h" + +/* + bi_Cvar_GetCvarString + + QC-Function for get a string from a cvar +*/ +static void +bi_Cvar_GetCvarString (progs_t *pr) +{ + const char *varname = G_STRING (pr, OFS_PARM0); + + RETURN_STRING (pr, Cvar_VariableString (varname)); +} + +void +Cvar_Progs_Init (progs_t *pr) +{ + PR_AddBuiltin (pr, "Cvar_GetCvarString", bi_Cvar_GetCvarString, -1); +} diff --git a/libs/gamecode/builtins/bi_init.c b/libs/gamecode/builtins/bi_init.c index 52703185f..09661c5da 100644 --- a/libs/gamecode/builtins/bi_init.c +++ b/libs/gamecode/builtins/bi_init.c @@ -37,6 +37,8 @@ static void (*const cbuf_progs_init)(struct progs_s *) = Cbuf_Progs_Init; static void (*const file_progs_init)(struct progs_s *) = File_Progs_Init; static void (*const inputline_progs_init)(struct progs_s *) = InputLine_Progs_Init; static void (*const string_progs_init)(struct progs_s *) = String_Progs_Init; +static void (*const cvar_progs_init)(struct progs_s *) = Cvar_Progs_Init; +static void (*const key_progs_init)(struct progs_s *) = Key_Progs_Init; void BI_Init () diff --git a/libs/gamecode/builtins/bi_keys.c b/libs/gamecode/builtins/bi_keys.c new file mode 100644 index 000000000..d8b36a6b2 --- /dev/null +++ b/libs/gamecode/builtins/bi_keys.c @@ -0,0 +1,100 @@ +/* + bi_keys.c + + CSQC key-api builtins + + Copyright (C) 1996-1997 Id Software, Inc. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to: + + Free Software Foundation, Inc. + 59 Temple Place - Suite 330 + Boston, MA 02111-1307, USA + +*/ +static const char rcsid[] = + "$Id$"; + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#ifdef HAVE_STRING_H +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif + +#include "QF/keys.h" +#include "QF/progs.h" +#include "QF/zone.h" + +/* + bi_Key_SetBinding + + QC-Function for set a binding +*/ +static void +bi_Key_SetBinding (progs_t *pr) +{ + int target = G_INT (pr, OFS_PARM0); + int keynum = G_INT (pr, OFS_PARM1); + const char *binding = G_STRING (pr, OFS_PARM2); + + if(strlen(binding) == 0 || binding[0] == '\0') { + binding = NULL; /* unbind a binding */ + } + + Key_SetBinding (target, keynum, binding); +} + +static void +bi_Key_LookupBinding (progs_t *pr) +{ + int target = G_INT (pr, OFS_PARM0); + const char *binding = G_STRING (pr, OFS_PARM1); + int i; + knum_t keynum = -1; + const char *keybind = NULL; + + for (i = 0; i < QFK_LAST; i++) { + keybind = keybindings[target][i]; + if(keybind == NULL) { continue; } + if(strcmp(keybind, binding) == 0) { + keynum = i; + } + } + + G_INT (pr, OFS_RETURN) = keynum; +}; + +static void +bi_Key_KeynumToString (progs_t *pr) +{ + int keynum = G_INT (pr, OFS_PARM0); + + RETURN_STRING (pr, Key_KeynumToString (keynum)); +}; + + +void +Key_Progs_Init (progs_t *pr) +{ + PR_AddBuiltin (pr, "Key_SetBinding", bi_Key_SetBinding, -1); + PR_AddBuiltin (pr, "Key_LookupBinding", bi_Key_LookupBinding, -1); + PR_AddBuiltin (pr, "Key_KeynumToString", bi_Key_KeynumToString, -1); +// NEED THIS ?// PR_AddBuiltin (pr, "Key_StringToKeynum", bi_Key_KeynumToString, -1); +}