naev 0.11.5
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 <math.h>
13#include <stdio.h>
14#include <stdlib.h>
15
16#include "naev.h"
19#include "nlua_var.h"
20
21#include "array.h"
22#include "log.h"
23#include "nluadef.h"
24#include "nstring.h"
25#include "nxml.h"
26#include "nlua_time.h"
27#include "lvar.h"
28
29/*
30 * variable stack
31 */
32static lvar* var_stack = NULL;
33/* externed */
34
35/* var */
36static int varL_peek( lua_State *L );
37static int varL_pop( lua_State *L );
38static int varL_push( lua_State *L );
39static const luaL_Reg var_methods[] = {
40 { "peek", varL_peek },
41 { "pop", varL_pop },
42 { "push", varL_push },
43 {0,0}
44};
51int nlua_loadVar( nlua_env env )
52{
53 nlua_register(env, "var", var_methods, 0);
54 return 0;
55}
56
60static lvar *var_get( const char *str )
61{
62 return lvar_get( var_stack, str );
63}
64
71int var_save( xmlTextWriterPtr writer )
72{
73 xmlw_startElem(writer, "vars");
74 lvar_save( var_stack, writer );
75 xmlw_endElem(writer); /* "vars" */
76 return 0;
77}
78
85int var_load( xmlNodePtr parent )
86{
87 xmlNodePtr node = parent->xmlChildrenNode;
89 do {
90 xml_onlyNodes(node);
91 if (!xml_isNode(node,"vars"))
92 continue;
93 var_stack = lvar_load( node );
94 } while (xml_nextNode(node));
95 return 0;
96}
97
105static int var_add( lvar *new_var, int sort )
106{
107 if (var_stack==NULL)
109 return lvar_addArray( &var_stack, new_var, sort );
110}
111
137int var_checkflag( const char* str )
138{
139 return var_get( str ) != NULL;
140}
141
150static int varL_peek( lua_State *L )
151{
152 const char *str = luaL_checkstring(L,1);
153 lvar *mv = var_get( str );
154 if (mv == NULL)
155 return 0;
156 return lvar_push( L, mv );
157}
158
167static int varL_pop( lua_State *L )
168{
169 const char* str = luaL_checkstring(L,1);
170 lvar *mv = var_get( str );
171 if (mv == NULL)
172 return 0;
173 lvar_rmArray( &var_stack, mv );
174 return 0;
175}
176
188static int varL_push( lua_State *L )
189{
190 const char *str = luaL_checkstring(L,1);
191 lvar var = lvar_tovar( L, str, 2 );
192 var_add( &var, 1 );
193 return 0;
194}
195
199void var_cleanup (void)
200{
202 var_stack = NULL;
203}
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:161
void lvar_rmArray(lvar **arr, lvar *rm_var)
Removes a var from a var array.
Definition lvar.c:188
lvar * lvar_get(const lvar *arr, const char *str)
Gets a lua var by name.
Definition lvar.c:39
void lvar_freeArray(lvar *arr)
Frees a variable array.
Definition lvar.c:146
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:84
int lvar_save(const lvar *arr, xmlTextWriterPtr writer)
Saves the mission variables.
Definition lvar.c:201
lvar * lvar_load(xmlNodePtr parent)
Loads the vars from XML file.
Definition lvar.c:242
int lvar_push(lua_State *L, const lvar *v)
Pushes a lua var to a lua state.
Definition lvar.c:54
Header file with generic functions and naev-specifics.
static int varL_pop(lua_State *L)
Pops a mission variable off the stack, destroying it.
Definition nlua_var.c:167
static lvar * var_get(const char *str)
Gets a mission var by name.
Definition nlua_var.c:60
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:105
int var_save(xmlTextWriterPtr writer)
Saves the mission variables.
Definition nlua_var.c:71
static int varL_push(lua_State *L)
Creates a new mission variable.
Definition nlua_var.c:188
int var_checkflag(const char *str)
Mission variable Lua bindings.
Definition nlua_var.c:137
static const luaL_Reg var_methods[]
Definition nlua_var.c:39
void var_cleanup(void)
Cleans up all the mission variables.
Definition nlua_var.c:199
int var_load(xmlNodePtr parent)
Loads the vars from XML file.
Definition nlua_var.c:85
static lvar * var_stack
Definition nlua_var.c:32
static int varL_peek(lua_State *L)
Gets the mission variable value of a certain name.
Definition nlua_var.c:150
int nlua_loadVar(nlua_env env)
Loads the mission variable Lua library.
Definition nlua_var.c:51
Contains a mission variable.
Definition lvar.h:24