/quakeforge/branches/release_0_5_5/libs/gib/gib_init.c
C | 119 lines | 71 code | 10 blank | 38 comment | 14 complexity | fdaf46f9a6b750dff6e883318b18277d MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1, AGPL-3.0, AGPL-1.0, Unlicense
- /*
- #FILENAME#
- #DESCRIPTION#
- Copyright (C) 2002 #AUTHOR#
- Author: #AUTHOR#
- Date: #DATE#
- 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
- */
- #ifdef HAVE_CONFIG_H
- # include "config.h"
- #endif
- static __attribute__ ((unused))
- const char rcsid[] =
- "$Id: gib_init.c 10031 2003-09-11 06:03:13Z snax $";
- #include <string.h>
- #include <stdlib.h>
- #include "QF/qtypes.h"
- #include "QF/cbuf.h"
- #include "QF/quakefs.h"
- #include "QF/cmd.h"
- #include "QF/sys.h"
- #include "QF/zone.h"
- #include "QF/cvar.h"
- #include "QF/gib.h"
- #include "gib_parse.h"
- #include "gib_vars.h"
- #include "gib_regex.h"
- #include "gib_builtin.h"
- #include "gib_thread.h"
- #include "gib_handle.h"
- #include "gib_object.h"
- static void
- GIB_Exec_Override_f (void)
- {
- char *f;
- int mark;
- if (Cmd_Argc () != 2) {
- Sys_Printf ("exec <filename> : execute a script file\n");
- return;
- }
- mark = Hunk_LowMark ();
- f = (char *) QFS_LoadHunkFile (Cmd_Argv (1));
- if (!f) {
- Sys_Printf ("couldn't exec %s\n", Cmd_Argv (1));
- return;
- }
- if (!Cvar_Command ()
- && (cmd_warncmd->int_val || (developer && developer->int_val)))
- Sys_Printf ("execing %s\n", Cmd_Argv (1));
- if (!strcmp (Cmd_Argv (1) + strlen (Cmd_Argv (1)) - 4, ".gib")
- || cbuf_active->interpreter == GIB_Interpreter ()) {
- // GIB script, put it in a new buffer on the stack
- cbuf_t *sub = Cbuf_PushStack (GIB_Interpreter ());
- GIB_DATA (sub)->script = malloc (sizeof (gib_script_t));
- GIB_DATA (sub)->script->file = strdup (Cmd_Argv (1));
- GIB_DATA (sub)->script->text = strdup (f);
- GIB_DATA (sub)->script->refs = 1;
- Cbuf_AddText (sub, f);
- if (gib_parse_error && cbuf_active->interpreter == GIB_Interpreter ())
- GIB_Error ("parse", "%s: Parse error while executing %s.",
- Cmd_Argv (0), Cmd_Argv (1));
- } else
- Cbuf_InsertText (cbuf_active, f);
- Hunk_FreeToLowMark (mark);
- }
- void
- GIB_Init (qboolean sandbox)
- {
- // Override the exec command with a GIB-aware one
- if (Cmd_Exists ("exec")) {
- Cmd_RemoveCommand ("exec");
- Cmd_AddCommand ("exec", GIB_Exec_Override_f, "Execute a script file.");
- }
- // Initialize handle system
- GIB_Handle_Init ();
- // Initialize variables
- GIB_Var_Init ();
- // Initialize regex cache
- GIB_Regex_Init ();
- // Initialize builtins
- GIB_Builtin_Init (sandbox);
- // Initialize thread system;
- GIB_Thread_Init ();
- // Initialize event system
- GIB_Event_Init ();
- // Initialize object system
- GIB_Object_Init ();
- }