naev 0.12.6
nlua_var.c
Go to the documentation of this file.
1/*
2 * See Licensing and Copyright notice in naev.h
3 */
10#include <lauxlib.h>
11#include <lua.h>
12#include <stdio.h>
13#include <stdlib.h>
14
16
17#include "nlua_var.h"
18
19#include "array.h"
20#include "lvar.h"
21#include "nxml.h"
22
23/*
24 * variable stack
25 */
26static lvar *var_stack = NULL;
27/* externed */
28
29/* var */
30static int varL_peek( lua_State *L );
31static int varL_pop( lua_State *L );
32static int varL_push( lua_State *L );
33
34static const luaL_Reg var_methods[] = {
35 { "peek", varL_peek },
36 { "pop", varL_pop },
37 { "push", varL_push },
38 { 0, 0 } };
39
45int nlua_loadVar( nlua_env env )
46{
47 nlua_register( env, "var", var_methods, 0 );
48 return 0;
49}
50
54static lvar *var_get( const char *str )
55{
56 return lvar_get( var_stack, str );
57}
58
65int var_save( xmlTextWriterPtr writer )
66{
67 xmlw_startElem( writer, "vars" );
68 lvar_save( var_stack, writer );
69 xmlw_endElem( writer ); /* "vars" */
70 return 0;
71}
72
79int var_load( xmlNodePtr parent )
80{
81 xmlNodePtr node = parent->xmlChildrenNode;
83 do {
84 xml_onlyNodes( node );
85 if ( !xml_isNode( node, "vars" ) )
86 continue;
87 var_stack = lvar_load( node );
88 } while ( xml_nextNode( node ) );
89 return 0;
90}
91
99static int var_add( lvar *new_var, int sort )
100{
101 if ( var_stack == NULL )
103 return lvar_addArray( &var_stack, new_var, sort );
104}
105
131int var_checkflag( const char *str )
132{
133 return var_get( str ) != NULL;
134}
135
144static int varL_peek( lua_State *L )
145{
146 const char *str = luaL_checkstring( L, 1 );
147 lvar *mv = var_get( str );
148 if ( mv == NULL )
149 return 0;
150 return lvar_push( L, mv );
151}
152
162static int varL_pop( lua_State *L )
163{
164 const char *str = luaL_checkstring( L, 1 );
165 lvar *mv = var_get( str );
166 if ( mv == NULL )
167 return 0;
168 lvar_rmArray( &var_stack, mv );
169 return 0;
170}
171
183static int varL_push( lua_State *L )
184{
185 const char *str = luaL_checkstring( L, 1 );
186 lvar var = lvar_tovar( L, str, 2 );
187 var_add( &var, 1 );
188 return 0;
189}
190
194void var_cleanup( void )
195{
197 var_stack = NULL;
198}
Provides macros to work with dynamic arrays.
#define array_create(basic_type)
Creates a new dynamic array of ‘basic_type’.
Definition array.h:93
int lvar_addArray(lvar **arr, const lvar *new_var, int sort)
Adds a var to a var array.
Definition lvar.c:160
void lvar_rmArray(lvar **arr, lvar *rm_var)
Removes a var from a var array.
Definition lvar.c:187
lvar * lvar_get(const lvar *arr, const char *str)
Gets a lua var by name.
Definition lvar.c:41
void lvar_freeArray(lvar *arr)
Frees a variable array.
Definition lvar.c:145
lvar lvar_tovar(lua_State *L, const char *name, int idx)
Gets a lua variable from an index from a lua state.
Definition lvar.c:86
int lvar_save(const lvar *arr, xmlTextWriterPtr writer)
Saves the mission variables.
Definition lvar.c:200
lvar * lvar_load(xmlNodePtr parent)
Loads the vars from XML file.
Definition lvar.c:241
int lvar_push(lua_State *L, const lvar *v)
Pushes a lua var to a lua state.
Definition lvar.c:56
static int varL_pop(lua_State *L)
Pops a mission variable off the stack, destroying it.
Definition nlua_var.c:162
static lvar * var_get(const char *str)
Gets a mission var by name.
Definition nlua_var.c:54
static int var_add(lvar *new_var, int sort)
Adds a var to the stack, strings will be SHARED, don't free.
Definition nlua_var.c:99
int var_save(xmlTextWriterPtr writer)
Saves the mission variables.
Definition nlua_var.c:65
static int varL_push(lua_State *L)
Creates a new mission variable.
Definition nlua_var.c:183
int var_checkflag(const char *str)
Mission variable Lua bindings.
Definition nlua_var.c:131
static const luaL_Reg var_methods[]
Definition nlua_var.c:34
void var_cleanup(void)
Cleans up all the mission variables.
Definition nlua_var.c:194
int var_load(xmlNodePtr parent)
Loads the vars from XML file.
Definition nlua_var.c:79
static lvar * var_stack
Definition nlua_var.c:26
static int varL_peek(lua_State *L)
Gets the mission variable value of a certain name.
Definition nlua_var.c:144
int nlua_loadVar(nlua_env env)
Loads the mission variable Lua library.
Definition nlua_var.c:45
Contains a mission variable.
Definition lvar.h:24