forked from osmocom/wireshark
- More "docOMMentation" of the API
- also supress Address__ge and Address_gt because re-reading the ref manual I noticed that they are suplerfluous (Lua assumes that a > b is equivalent to b < a, which in most cases (as this) it does) - have elua_makedoc.pl hanlde docomments in more than one line and after the line where the entity s defined. svn path=/trunk/; revision=17382
This commit is contained in:
parent
060c5da876
commit
48551d9d85
|
@ -30,6 +30,9 @@
|
|||
#include <math.h>
|
||||
|
||||
ELUA_CLASS_DEFINE(PseudoHeader,NOP)
|
||||
/*
|
||||
A pseudoheader to be used to save captured frames.
|
||||
*/
|
||||
|
||||
enum lua_pseudoheader_type {
|
||||
PHDR_NONE,
|
||||
|
@ -52,27 +55,42 @@ struct lua_pseudo_header {
|
|||
union wtap_pseudo_header* wph;
|
||||
};
|
||||
|
||||
ELUA_CONSTRUCTOR PseudoHeader_none(lua_State* L) { /* creates a "no" pseudoheader */
|
||||
ELUA_CONSTRUCTOR PseudoHeader_none(lua_State* L) {
|
||||
/*
|
||||
Creates a "no" pseudoheader.
|
||||
|
||||
*/
|
||||
PseudoHeader ph = g_malloc(sizeof(struct lua_pseudo_header));
|
||||
ph->type = PHDR_NONE;
|
||||
ph->wph = NULL;
|
||||
|
||||
pushPseudoHeader(L,ph);
|
||||
ELUA_RETURN(1); /* A null pseudoheader */
|
||||
|
||||
ELUA_RETURN(1);
|
||||
/* A null pseudoheader */
|
||||
}
|
||||
|
||||
ELUA_CONSTRUCTOR PseudoHeader_eth(lua_State* L) { /* creates an ethernet pseudoheader */
|
||||
ELUA_CONSTRUCTOR PseudoHeader_eth(lua_State* L) {
|
||||
/*
|
||||
Creates an ethernet pseudoheader
|
||||
*/
|
||||
|
||||
#define ELUA_OPTARG_PseudoHeader_eth_FCSLEN 1 /* the fcs lenght */
|
||||
|
||||
PseudoHeader ph = g_malloc(sizeof(struct lua_pseudo_header));
|
||||
ph->type = PHDR_ETH;
|
||||
ph->wph = g_malloc(sizeof(union wtap_pseudo_header));
|
||||
ph->wph->eth.fcs_len = luaL_optint(L,1,-1);
|
||||
|
||||
pushPseudoHeader(L,ph);
|
||||
|
||||
ELUA_RETURN(1); /* The ethernet pseudoheader */
|
||||
}
|
||||
|
||||
ELUA_CONSTRUCTOR PseudoHeader_atm(lua_State* L) { /* Creates an ATM pseudoheader */
|
||||
ELUA_CONSTRUCTOR PseudoHeader_atm(lua_State* L) {
|
||||
/*
|
||||
Creates an ATM pseudoheader
|
||||
*/
|
||||
#define ELUA_OPTARG_PseudoHeader_atm_AAL 1 /* AAL number */
|
||||
#define ELUA_OPTARG_PseudoHeader_atm_VPI 2 /* VPI */
|
||||
#define ELUA_OPTARG_PseudoHeader_atm_VCI 3 /* VCI */
|
||||
|
@ -93,10 +111,12 @@ ELUA_CONSTRUCTOR PseudoHeader_atm(lua_State* L) { /* Creates an ATM pseudoheader
|
|||
ph->wph->atm.aal5t_len = luaL_optint(L,ELUA_OPTARG_PseudoHeader_atm_AAL5LEN,0);
|
||||
|
||||
pushPseudoHeader(L,ph);
|
||||
ELUA_RETURN(1); /* The ATM pseudoheader */
|
||||
ELUA_RETURN(1);
|
||||
/* The ATM pseudoheader */
|
||||
}
|
||||
|
||||
ELUA_CONSTRUCTOR PseudoHeader_mtp2(lua_State* L) {
|
||||
/* Creates an MTP2 PseudoHeader */
|
||||
#define ELUA_OPTARG_PseudoHeader_mtp2_SENT /* True if the packet is sent, False if received. */
|
||||
#define ELUA_OPTARG_PseudoHeader_mtp2_ANNEXA /* True if annex A is used */
|
||||
#define ELUA_OPTARG_PseudoHeader_mtp2_LINKNUM /* Link Number */
|
||||
|
@ -142,11 +162,14 @@ int PseudoHeader_register(lua_State* L) {
|
|||
|
||||
ELUA_CLASS_DEFINE(Dumper,FAIL_ON_NULL("Dumper already closed"))
|
||||
|
||||
|
||||
static GHashTable* dumper_encaps = NULL;
|
||||
#define DUMPER_ENCAP(d) GPOINTER_TO_INT(g_hash_table_lookup(dumper_encaps,d))
|
||||
|
||||
ELUA_CONSTRUCTOR Dumper_new(lua_State* L) {
|
||||
/*
|
||||
Creates a file to write packets.
|
||||
Dumper:new_for_current() will probably be a better choice.
|
||||
*/
|
||||
#define ELUA_ARG_Dumper_new_FILENAME 1 /* The name of the capture file to be created */
|
||||
#define ELUA_OPTARG_Dumper_new_FILETYPE 3 /* The type of the file to be created */
|
||||
#define ELUA_OPTARG_Dumper_new_ENCAP 3 /* The encapsulation to be used in the file to be created */
|
||||
|
@ -174,10 +197,12 @@ ELUA_CONSTRUCTOR Dumper_new(lua_State* L) {
|
|||
g_hash_table_insert(dumper_encaps,d,GINT_TO_POINTER(encap));
|
||||
|
||||
pushDumper(L,d);
|
||||
ELUA_RETURN(1); /* The newly created Dumper object */
|
||||
ELUA_RETURN(1);
|
||||
/* The newly created Dumper object */
|
||||
}
|
||||
|
||||
ELUA_METHOD Dumper_close(lua_State* L) { /* close a dumper */
|
||||
ELUA_METHOD Dumper_close(lua_State* L) {
|
||||
/* Closes a dumper */
|
||||
Dumper* dp;
|
||||
int err;
|
||||
|
||||
|
@ -185,7 +210,7 @@ ELUA_METHOD Dumper_close(lua_State* L) { /* close a dumper */
|
|||
dp = (Dumper*)luaL_checkudata(L, 1, "Dumper");
|
||||
|
||||
if (! *dp)
|
||||
ELUA_ERROR(Dumper_close,"Dumper already closed");
|
||||
ELUA_ERROR(Dumper_close,"Cannot operate on a closed dumper");
|
||||
|
||||
g_hash_table_remove(dumper_encaps,*dp);
|
||||
|
||||
|
@ -200,7 +225,10 @@ ELUA_METHOD Dumper_close(lua_State* L) { /* close a dumper */
|
|||
return 0;
|
||||
}
|
||||
|
||||
ELUA_METHOD Dumper_flush(lua_State* L) { /* writes all unsaved data of a dumper to the disk. */
|
||||
ELUA_METHOD Dumper_flush(lua_State* L) {
|
||||
/*
|
||||
Writes all unsaved data of a dumper to the disk.
|
||||
*/
|
||||
Dumper d = checkDumper(L,1);
|
||||
|
||||
if (!d) return 0;
|
||||
|
@ -210,7 +238,11 @@ ELUA_METHOD Dumper_flush(lua_State* L) { /* writes all unsaved data of a dumper
|
|||
return 0;
|
||||
}
|
||||
|
||||
ELUA_METHOD Dumper_dump(lua_State* L) { /* Dumps an arbitrary packet. Dumper:dump_current() will be better used in most occasions. */
|
||||
ELUA_METHOD Dumper_dump(lua_State* L) {
|
||||
/*
|
||||
Dumps an arbitrary packet.
|
||||
Note: Dumper:dump_current() will fit best in most cases.
|
||||
*/
|
||||
#define ELUA_ARG_Dumper_dump_TIMESTAMP 2 /* The absolute timestamp the packet will have */
|
||||
#define ELUA_ARG_Dumper_dump_PSEUDOHEADER 3 /* The Pseudoheader to use. */
|
||||
#define ELUA_ARG_Dumper_dump_BYTEARRAY 4 /* the data to be saved */
|
||||
|
@ -227,7 +259,7 @@ ELUA_METHOD Dumper_dump(lua_State* L) { /* Dumps an arbitrary packet. Dumper:dum
|
|||
ts = luaL_checknumber(L,ELUA_ARG_Dumper_dump_TIMESTAMP);
|
||||
ph = checkPseudoHeader(L,ELUA_ARG_Dumper_dump_PSEUDOHEADER);
|
||||
|
||||
if (!ph) ELUA_ARG_ERROR(Dumper_dump,TIMESTAMP,"Need a PseudoHeader");
|
||||
if (!ph) ELUA_ARG_ERROR(Dumper_dump,TIMESTAMP,"need a PseudoHeader");
|
||||
|
||||
ba = checkByteArray(L,ELUA_ARG_Dumper_dump_BYTEARRAY);
|
||||
|
||||
|
@ -248,7 +280,10 @@ ELUA_METHOD Dumper_dump(lua_State* L) { /* Dumps an arbitrary packet. Dumper:dum
|
|||
|
||||
}
|
||||
|
||||
ELUA_METHOD Dumper_new_for_current(lua_State* L) { /* Creates a capture file using the same encapsulation as the one of the cuurrent packet */
|
||||
ELUA_METHOD Dumper_new_for_current(lua_State* L) {
|
||||
/*
|
||||
Creates a capture file using the same encapsulation as the one of the cuurrent packet
|
||||
*/
|
||||
#define ELUA_OPTARG_Dumper_new_for_current_FILETYPE 2 /* The file type. Defaults to pcap. */
|
||||
Dumper d;
|
||||
const char* filename = luaL_checkstring(L,1);
|
||||
|
@ -256,7 +291,8 @@ ELUA_METHOD Dumper_new_for_current(lua_State* L) { /* Creates a capture file usi
|
|||
int encap;
|
||||
int err = 0;
|
||||
|
||||
if (! lua_pinfo ) ELUA_ERROR(Dumper_new_for_current,"cannot be used outside a tap or a dissector");
|
||||
if (! lua_pinfo )
|
||||
ELUA_ERROR(Dumper_new_for_current,"cannot be used outside a tap or a dissector");
|
||||
|
||||
encap = lua_pinfo->fd->lnk_t;
|
||||
|
||||
|
@ -281,7 +317,10 @@ ELUA_METHOD Dumper_new_for_current(lua_State* L) { /* Creates a capture file usi
|
|||
|
||||
}
|
||||
|
||||
ELUA_METHOD Dumper_dump_current(lua_State* L) { /* Dumps the current packet as it is. */
|
||||
ELUA_METHOD Dumper_dump_current(lua_State* L) {
|
||||
/*
|
||||
Dumps the current packet as it is.
|
||||
*/
|
||||
Dumper d = checkDumper(L,1);
|
||||
struct wtap_pkthdr pkthdr;
|
||||
const guchar* data;
|
||||
|
@ -310,10 +349,11 @@ ELUA_METHOD Dumper_dump_current(lua_State* L) { /* Dumps the current packet as i
|
|||
return 0;
|
||||
}
|
||||
|
||||
ELUA_METAMETHOD Dumper__gc(lua_State* L) { /* closes a dumper and releases the memory it uses */
|
||||
static int Dumper__gc(lua_State* L) {
|
||||
Dumper* dp;
|
||||
int err;
|
||||
|
||||
/* If we are Garbage Collected it means the Dumper is no longer usable. Close it */
|
||||
luaL_checktype(L,1,LUA_TUSERDATA);
|
||||
dp = (Dumper*)luaL_checkudata(L, 1, "Dumper");
|
||||
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
#!/usr/bin/perl
|
||||
#
|
||||
# elua_makedoc.pl
|
||||
# Reference Manual Generator
|
||||
# ELUA's Reference Manual Generator
|
||||
#
|
||||
# (c) 2006, Luis E. Garcia Onatnon <luis.ontanon@gmail.com>
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
@ -29,7 +31,16 @@ use strict;
|
|||
#use V2P;
|
||||
|
||||
sub deb {
|
||||
#warn $_[0] if $_[0] =~ /^>e/;
|
||||
# warn $_[0];
|
||||
}
|
||||
|
||||
sub gorolla {
|
||||
# a gorilla stays to a chimp like ... stays to chomp
|
||||
# but this one returns the shrugged string.
|
||||
my $s = shift;
|
||||
$s =~ s/^([\n]|\s)*//ms;
|
||||
$s =~ s/([\n]|\s)*$//ms;
|
||||
$s;
|
||||
}
|
||||
|
||||
my $class;
|
||||
|
@ -37,12 +48,14 @@ my %classes;
|
|||
my $function;
|
||||
my @functions;
|
||||
|
||||
|
||||
my %template = %{{
|
||||
class_header => "= %s =\n",
|
||||
class_desc => "%s\n",
|
||||
class_constructors_header => "== %s constructors ==\n",
|
||||
class_methods_header => "== %s methods ==\n",
|
||||
class_attributes_header => "== %s Attributes ==\n",
|
||||
class_attr_header => "=== %s ===\n",
|
||||
class_attr_descr => "%s\n",
|
||||
function_header => "=== %s ===\n",
|
||||
function_descr => "%s\n",
|
||||
function_arg_header => "==== %s ====\n",
|
||||
|
@ -54,73 +67,147 @@ my %template = %{{
|
|||
function_errors_header => "==== errors ====\n",
|
||||
function_errors => " * %s\n",
|
||||
non_method_functions_header => "= Non method functions =\n",
|
||||
|
||||
}};
|
||||
|
||||
|
||||
my @control = (
|
||||
|
||||
[ 'ELUA_CLASS_DEFINE\050\s*([A-Z][a-zA-Z]+)\s*,[^\051]*\051\s*(/\*(.*?)\*/)?',
|
||||
sub {
|
||||
deb ">c=$1=$2=$3=$4=$5=$6=$7=\n";
|
||||
$class = { name => $1, descr=> $3, constructors => [], methods => [] };
|
||||
$classes{$1} = $class;
|
||||
}],
|
||||
my %metamethods = %{{
|
||||
__tostring => "tostring(__)",
|
||||
__index => "__[]",
|
||||
__newindex => "__[] => ",
|
||||
__add => "__ + __",
|
||||
__sub => "__ - __",
|
||||
__mul => "__ * __",
|
||||
__div => "__ / __",
|
||||
__mod => "__ % __",
|
||||
__pow => "__ ^ __",
|
||||
__unm => "-___",
|
||||
__concat => "__ .. __",
|
||||
__len => "#__",
|
||||
__call => "()",
|
||||
__eq => "__ == __",
|
||||
__lt => "__ < __",
|
||||
__le => "__ <= __",
|
||||
}};
|
||||
|
||||
[ 'ELUA_FUNCTION\s+elua_([a-z_]+)[^\173]*\173\s*(/\*(.*?)\*/)?',
|
||||
sub {
|
||||
deb ">f=$1=$2=$3=$4=$5=$6=$7=\n";
|
||||
$function = { returns => [], arglist => [], args => {}, name => $1, descr => $3, type => 'standalone' };
|
||||
push @functions, $function;
|
||||
} ] ,
|
||||
# It's said that only perl can parse perl... my editor isn't perl...
|
||||
# if unencoded this causes my editor's autoindent to bail out so I encoded in octal
|
||||
# XXX: support \" within ""
|
||||
my $QUOTED_RE = "\042\050\133^\042\135*\051\042";
|
||||
|
||||
[ 'ELUA_CONSTRUCTOR\s+([A-Za-z]+)_([a-z_]+)[^\173]*\173\s*(/\*(.*?)\*/)?',
|
||||
sub {
|
||||
deb ">cc=$1=$2=$3=$4=$5=$6=$7=\n";
|
||||
$function = { returns => [], arglist => [], args => {}, name => "$1.$2", descr => $4, type => 'constructor' };
|
||||
push @{${$class}{constructors}}, $function;
|
||||
} ] ,
|
||||
my $TRAILING_COMMENT_RE = '((\s*|[\n\r]*)/\*(.*?)\*/)?';
|
||||
|
||||
[ 'ELUA_METHOD\s+([A-Za-z]+)_([a-z_]+)[^\173]*\173\s*(/\*(.*?)\*/)?',
|
||||
my @control =
|
||||
(
|
||||
# This will be scanned in order trying to match the re if it matches
|
||||
# the body will be executed immediatelly after.
|
||||
|
||||
[ 'ELUA_CLASS_DEFINE\050\s*([A-Z][a-zA-Z]+)\s*,.*?\051' . $TRAILING_COMMENT_RE,
|
||||
sub {
|
||||
deb ">c=$1=$2=$3=$4=$5=$6=$7=\n";
|
||||
$class = {
|
||||
name => $1,
|
||||
descr=> gorolla($4),
|
||||
constructors => [],
|
||||
methods => [],
|
||||
metamethods => [],
|
||||
attributes => []
|
||||
};
|
||||
$classes{$1} = $class;
|
||||
}],
|
||||
|
||||
[ 'ELUA_FUNCTION\s+elua_([a-z_]+)[^\173]*\173' . $TRAILING_COMMENT_RE,
|
||||
sub {
|
||||
deb ">f=$1=$2=$3=$4=$5=$6=$7=\n";
|
||||
$function = {
|
||||
returns => [],
|
||||
arglist => [],
|
||||
args => {},
|
||||
name => $1,
|
||||
descr => gorolla($4),
|
||||
type => 'standalone'
|
||||
};
|
||||
push @functions, $function;
|
||||
} ] ,
|
||||
|
||||
[ 'ELUA_CONSTRUCTOR\s+([A-Za-z]+)_([a-z_]+).*?\173' . $TRAILING_COMMENT_RE,
|
||||
sub {
|
||||
deb ">cc=$1=$2=$3=$4=$5=$6=$7=\n";
|
||||
$function = {
|
||||
returns => [],
|
||||
arglist => [],
|
||||
args => {},
|
||||
name => "$1.$2",
|
||||
descr => gorolla($5),
|
||||
type => 'constructor'
|
||||
};
|
||||
push @{${$class}{constructors}}, $function;
|
||||
} ] ,
|
||||
|
||||
[ 'ELUA_METHOD\s+([A-Za-z]+)_([a-z_]+)[^\173]*\173' . $TRAILING_COMMENT_RE,
|
||||
sub {
|
||||
deb ">cm=$1=$2=$3=$4=$5=$6=$7=\n";
|
||||
$function = { returns => [], arglist => [], args => {}, name => "$1:$2", descr => $4, type => 'method' };
|
||||
$function = {
|
||||
returns => [],
|
||||
arglist => [],
|
||||
args => {},
|
||||
name => "$1:$2",
|
||||
descr => gorolla($5),
|
||||
type => 'method'
|
||||
};
|
||||
push @{${$class}{methods}}, $function;
|
||||
} ] ,
|
||||
|
||||
[ '#define ELUA_(OPT)?ARG_([a-z_]+)_([A-Z0-9]+)\s+\d+\s*(/\*(.*?)\*/)?',
|
||||
[ 'ELUA_METAMETHOD\s+([A-Za-z]+)(__[a-z]+)[^\173]*\173' . $TRAILING_COMMENT_RE,
|
||||
sub {
|
||||
deb ">a=$1=$2=$3=$4=$5=$6=$7=\n";
|
||||
push @{${$function}{arglist}} , $3;
|
||||
${${$function}{args}}{$3} = {descr=>$5}
|
||||
} ],
|
||||
|
||||
[ '#define ELUA_(OPT)?ARG_([A-Za-z]+)_([a-z_]+)_([A-Z0-9]+)\s+\d+\s*(/\*(.*?)\*/)?',
|
||||
sub {
|
||||
deb ">ca=$1=$2=$3=$4=$5=$6=$7=\n";
|
||||
push @{${$function}{arglist}} , $4;
|
||||
${${$function}{args}}{$4} = {descr=>$6}
|
||||
} ],
|
||||
|
||||
[ 'ELUA_(FINAL_)?RETURN\050\s*.*?\s*\051\s*;\s*(/\*(.*?)\*/)?',
|
||||
sub {
|
||||
deb ">fr=$1=$2=$3=$4=$5=$6=$7=\n";
|
||||
push @{${$function}{returns}} , $3 if $3 ne '';
|
||||
} ],
|
||||
|
||||
[ 'ELUA_(OPT)?ARG_ERROR\s*\050\s*(([A-Z][A-Za-z]+)_)?([a-z_]+)\s*,\s*([A-Z0-9]+)\s*,\s*"([^"]*)"',
|
||||
sub {
|
||||
deb ">ae=$1=$2=$3=$4=$5=$6=$7=\n";
|
||||
my $errors;
|
||||
unless (exists ${${${$function}{args}}{$5}}{errors}) {
|
||||
$errors = ${${${$function}{args}}{$5}}{errors} = [];
|
||||
} else {
|
||||
$errors = ${${${$function}{args}}{$5}}{errors};
|
||||
}
|
||||
|
||||
push @{$errors}, $6;
|
||||
deb ">cm=$1=$2=$3=$4=$5=$6=$7=\n";
|
||||
my $name = $metamethods{$2};
|
||||
my ($c,$d) = ($1,$5);
|
||||
$name =~ s/__/$c/g;
|
||||
$function = {
|
||||
returns => [],
|
||||
arglist => [],
|
||||
args => {},
|
||||
name => $name,
|
||||
descr => gorolla($d),
|
||||
type => 'metamethod'
|
||||
};
|
||||
push @{${$class}{metamethods}}, $function;
|
||||
} ] ,
|
||||
[ 'ELUA_ERROR\s*\050\s*(([A-Z][A-Za-z]+)_)?([a-z_]+),"([^"]*)"',
|
||||
|
||||
[ '#define ELUA_(OPT)?ARG_([a-z_]+)_([A-Z0-9]+)\s+\d+' . $TRAILING_COMMENT_RE,
|
||||
sub {
|
||||
deb ">a=$1=$2=$3=$4=$5=$6=$7=\n";
|
||||
push @{${$function}{arglist}} , $3;
|
||||
${${$function}{args}}{$3} = {descr=>$6}
|
||||
} ],
|
||||
|
||||
[ '#define ELUA_(OPT)?ARG_([A-Za-z]+)_([a-z_]+)_([A-Z0-9]+)\s+\d+' . $TRAILING_COMMENT_RE,
|
||||
sub {
|
||||
deb ">ca=$1=$2=$3=$4=$5=$6=$7=\n";
|
||||
push @{${$function}{arglist}} , $4;
|
||||
${${$function}{args}}{$4} = {descr=>$7}
|
||||
} ],
|
||||
|
||||
[ '/\052\s+ELUA_ATTRIBUTE\s+([A-Za-z]+)_([a-z_]+)\s+([A-Z]*)\s*(.*?)\052/',
|
||||
sub {
|
||||
deb ">at=$1=$2=$3=$4=$5=$6=$7=\n";
|
||||
push @{${$class}{attributes}}, { name => $2, descr => gorolla($4), mode=>$3 };
|
||||
} ],
|
||||
|
||||
[ '/\052\s+ELUA_MOREARGS\s+([A-Za-z_]+)\s+(.*?)\052/',
|
||||
sub {
|
||||
deb ">ma=$1=$2=$3=$4=$5=$6=$7=\n";
|
||||
push @{${$function}{arglist}} , "...";
|
||||
${${$function}{args}}{"..."} = {descr=>gorolla($2)}
|
||||
} ],
|
||||
|
||||
[ 'ELUA_(FINAL_)?RETURN\050\s*.*?\s*\051\s*;' . $TRAILING_COMMENT_RE,
|
||||
sub {
|
||||
deb ">fr=$1=$2=$3=$4=$5=$6=$7=\n";
|
||||
push @{${$function}{returns}} , gorolla($4) if $4 ne '';
|
||||
} ],
|
||||
|
||||
[ 'ELUA_ERROR\s*\050\s*(([A-Z][A-Za-z]+)_)?([a-z_]+),' . $QUOTED_RE ,
|
||||
sub {
|
||||
deb ">e=$1=$2=$3=$4=$5=$6=$7=\n";
|
||||
my $errors;
|
||||
|
@ -130,19 +217,34 @@ my @control = (
|
|||
$errors = ${$function}{errors};
|
||||
}
|
||||
|
||||
push @{$errors}, $4;
|
||||
|
||||
push @{$errors}, gorolla($4);
|
||||
} ],
|
||||
|
||||
#[ 'ELUA_ATTR_GET\s+([A-Za-z]+)_get_([a-z_]+)[^\173]*\173\s*(/\*(.*?)\*/)?',
|
||||
# sub { } ] ,
|
||||
#[ 'ELUA_ATTR_SET\s+([A-Za-z]+)_set_([a-z_]+)[^\173]*\173\s*(/\*(.*?)\*/)?',
|
||||
# sub { } ] ,
|
||||
#['(.*?\n)',
|
||||
# sub { print "--->$1" } ],
|
||||
[ 'ELUA_(OPT)?ARG_ERROR\s*\050\s*(([A-Z][A-Za-z]+)_)?([a-z_]+)\s*,\s*([A-Z0-9]+)\s*,\s*' . $QUOTED_RE,
|
||||
sub {
|
||||
deb ">ae=$1=$2=$3=$4=$5=$6=$7=\n";
|
||||
my $errors;
|
||||
unless (exists ${${${$function}{args}}{$5}}{errors}) {
|
||||
$errors = ${${${$function}{args}}{$5}}{errors} = [];
|
||||
} else {
|
||||
$errors = ${${${$function}{args}}{$5}}{errors};
|
||||
}
|
||||
|
||||
push @{$errors}, gorolla($6);
|
||||
} ] ,
|
||||
);
|
||||
|
||||
my $anymatch = '(^ThIsWiLlNeVeRmAtCh$';
|
||||
for (@control) {
|
||||
$anymatch .= "|${$_}[0]";
|
||||
}
|
||||
$anymatch .= ')';
|
||||
|
||||
# for each file given in the command line args
|
||||
my $file;
|
||||
while ( $file = shift) {
|
||||
|
||||
next unless -f $file;
|
||||
|
||||
my $docfile = $file;
|
||||
$docfile =~ s/\.c$/.pod/;
|
||||
|
@ -151,41 +253,68 @@ while ( $file = shift) {
|
|||
open D, "> doc/$docfile";
|
||||
|
||||
my $b = '';
|
||||
LINE: while (<C>) {
|
||||
$b .= $_;
|
||||
$b .= $_ while (<C>);
|
||||
|
||||
while ($b =~ /$anymatch/ms ) {
|
||||
my $match = $1;
|
||||
# print "\n-----\n$match\n-----\n";
|
||||
for (@control) {
|
||||
my ($re,$f) = @{$_};
|
||||
while ( $b =~ s/$re//ms ) {
|
||||
&{$f}();
|
||||
next LINE;
|
||||
if ( $match =~ /$re/ms) {
|
||||
&{$f}();
|
||||
$b =~ s/.*?$re//ms;
|
||||
last;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for my $cname (sort keys %classes) {
|
||||
my $class = $classes{$cname};
|
||||
my $cl = $classes{$cname};
|
||||
printf D $template{class_header}, $cname;
|
||||
printf D $template{class_desc} , ${$class}{descr} if ${$class}{descr};
|
||||
printf D $template{class_desc} , ${$cl}{descr} if ${$cl}{descr};
|
||||
|
||||
if ( $#{${$class}{constructors}} >= 0) {
|
||||
if ( $#{${$cl}{constructors}} >= 0) {
|
||||
printf D $template{class_constructors_header}, $cname;
|
||||
|
||||
for my $c (@{${$class}{constructors}}) {
|
||||
for my $c (@{${$cl}{constructors}}) {
|
||||
function_descr($c);
|
||||
}
|
||||
|
||||
printf D $template{class_constructors_footer}, $cname;
|
||||
}
|
||||
|
||||
if ( $#{${$class}{methods}} >= 0) {
|
||||
if ( $#{${$cl}{methods}} >= 0) {
|
||||
printf D $template{class_methods_header}, $cname;
|
||||
|
||||
for my $m (@{${$class}{methods}}) {
|
||||
for my $m (@{${$cl}{methods}}) {
|
||||
function_descr($m);
|
||||
}
|
||||
|
||||
printf D $template{class_methods_footer}, $cname;
|
||||
}
|
||||
|
||||
if ( $#{${$cl}{metamethods}} >= 0) {
|
||||
printf D $template{class_metamethods_header}, $cname;
|
||||
|
||||
for my $m (@{${$cl}{metamethods}}) {
|
||||
function_descr($m,${$m}{name});
|
||||
}
|
||||
|
||||
printf D $template{class_metamethods_footer}, $cname;
|
||||
}
|
||||
|
||||
if ( $#{${$cl}{attributes}} >= 0) {
|
||||
printf D $template{class_attributes_header}, $cname;
|
||||
|
||||
for my $a (@{${$cl}{attributes}}) {
|
||||
printf D $template{class_attr_header}, ${$a}{name};
|
||||
printf D $template{class_attr_descr}, ${$a}{descr} if ${$a}{descr};
|
||||
printf D $template{class_attr_footer}, ${$a}{name};
|
||||
|
||||
}
|
||||
|
||||
printf D $template{class_attributes_footer}, $cname;
|
||||
}
|
||||
}
|
||||
|
||||
if ($#functions >= 0) {
|
||||
|
@ -206,17 +335,24 @@ while ( $file = shift) {
|
|||
|
||||
sub function_descr {
|
||||
my $f = $_[0];
|
||||
my $arglist = '';
|
||||
my $label = $_[1];
|
||||
|
||||
for (@{ ${$f}{arglist} }) {
|
||||
my $a = $_;
|
||||
$a =~ tr/A-Z/a-z/;
|
||||
$arglist .= "$a, ";
|
||||
}
|
||||
|
||||
$arglist =~ s/, $//;
|
||||
if (defined $label ) {
|
||||
printf D $template{function_header}, $label;
|
||||
} else {
|
||||
my $arglist = '';
|
||||
|
||||
printf D $template{function_header}, "${$f}{name}($arglist)";
|
||||
for (@{ ${$f}{arglist} }) {
|
||||
my $a = $_;
|
||||
$a =~ tr/A-Z/a-z/;
|
||||
$arglist .= "$a, ";
|
||||
}
|
||||
|
||||
$arglist =~ s/, $//;
|
||||
|
||||
printf D $template{function_header}, "${$f}{name}($arglist)";
|
||||
}
|
||||
|
||||
printf D $template{function_descr}, ${$f}{descr} if ${$f}{descr};
|
||||
|
||||
for my $argname (@{${$f}{arglist}}) {
|
||||
|
|
|
@ -202,7 +202,7 @@ ELUA_METHODS Address_methods[] = {
|
|||
{0,0}
|
||||
};
|
||||
|
||||
ELUA_METAMETHOD Address_tostring(lua_State* L) {
|
||||
ELUA_METAMETHOD Address__tostring(lua_State* L) {
|
||||
Address addr = checkAddress(L,1);
|
||||
|
||||
lua_pushstring(L,get_addr_name(addr));
|
||||
|
@ -221,33 +221,7 @@ static int Address_gc(lua_State* L) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
ELUA_METAMETHOD Address_gt(lua_State* L) {
|
||||
Address addr1 = checkAddress(L,1);
|
||||
Address addr2 = checkAddress(L,2);
|
||||
gboolean result = FALSE;
|
||||
|
||||
if (CMP_ADDRESS(addr1, addr2) > 0)
|
||||
result = TRUE;
|
||||
|
||||
lua_pushboolean(L,result);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
ELUA_METAMETHOD Address_ge(lua_State* L) {
|
||||
Address addr1 = checkAddress(L,1);
|
||||
Address addr2 = checkAddress(L,2);
|
||||
gboolean result = FALSE;
|
||||
|
||||
if (CMP_ADDRESS(addr1, addr2) >= 0)
|
||||
result = TRUE;
|
||||
|
||||
lua_pushboolean(L,result);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
ELUA_METAMETHOD Address_eq(lua_State* L) {
|
||||
ELUA_METAMETHOD Address__eq(lua_State* L) { /* compares two Addresses */
|
||||
Address addr1 = checkAddress(L,1);
|
||||
Address addr2 = checkAddress(L,2);
|
||||
gboolean result = FALSE;
|
||||
|
@ -260,7 +234,7 @@ ELUA_METAMETHOD Address_eq(lua_State* L) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
ELUA_METAMETHOD Address_le(lua_State* L) {
|
||||
ELUA_METAMETHOD Address__le(lua_State* L) { /* compares two Addresses */
|
||||
Address addr1 = checkAddress(L,1);
|
||||
Address addr2 = checkAddress(L,2);
|
||||
gboolean result = FALSE;
|
||||
|
@ -273,7 +247,7 @@ ELUA_METAMETHOD Address_le(lua_State* L) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
ELUA_METAMETHOD Address_lt(lua_State* L) {
|
||||
ELUA_METAMETHOD Address__lt(lua_State* L) { /* compares two Addresses */
|
||||
Address addr1 = checkAddress(L,1);
|
||||
Address addr2 = checkAddress(L,2);
|
||||
gboolean result = FALSE;
|
||||
|
@ -287,13 +261,11 @@ ELUA_METAMETHOD Address_lt(lua_State* L) {
|
|||
}
|
||||
|
||||
ELUA_META Address_meta[] = {
|
||||
{"__gc", Address_gc },
|
||||
{"__tostring", Address_tostring },
|
||||
{"__gt",Address_gt},
|
||||
{"__ge",Address_ge},
|
||||
{"__eq",Address_eq},
|
||||
{"__le",Address_le},
|
||||
{"__lt",Address_lt},
|
||||
{"__gc", Address__gc },
|
||||
{"__tostring", Address__tostring },
|
||||
{"__eq",Address__eq},
|
||||
{"__le",Address__le},
|
||||
{"__lt",Address__lt},
|
||||
{0,0}
|
||||
};
|
||||
|
||||
|
@ -304,7 +276,7 @@ int Address_register(lua_State *L) {
|
|||
}
|
||||
|
||||
|
||||
ELUA_CLASS_DEFINE(Column,FAIL_ON_NULL("expired column"))
|
||||
ELUA_CLASS_DEFINE(Column,FAIL_ON_NULL("expired column")) /* A Column in the packet list */
|
||||
|
||||
struct col_names_t {
|
||||
const gchar* name;
|
||||
|
@ -383,7 +355,7 @@ static const gchar* col_id_to_name(gint id) {
|
|||
}
|
||||
|
||||
|
||||
ELUA_METAMETHOD Column_tostring(lua_State *L) {
|
||||
ELUA_METAMETHOD Column__tostring(lua_State *L) {
|
||||
Column c = checkColumn(L,1);
|
||||
const gchar* name;
|
||||
|
||||
|
@ -391,14 +363,14 @@ ELUA_METAMETHOD Column_tostring(lua_State *L) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* XXX: can we format the column? */
|
||||
/* XXX: should return the column's text ! */
|
||||
name = col_id_to_name(c->col);
|
||||
lua_pushstring(L,name ? name : "Unknown Column");
|
||||
|
||||
return 1;
|
||||
ELUA_RETURN(1); /* A string representing the column */
|
||||
}
|
||||
|
||||
ELUA_METHOD Column_clear(lua_State *L) {
|
||||
ELUA_METHOD Column_clear(lua_State *L) { /* Clears a Column */
|
||||
Column c = checkColumn(L,1);
|
||||
|
||||
if (!(c && c->cinfo)) return 0;
|
||||
|
@ -409,11 +381,15 @@ ELUA_METHOD Column_clear(lua_State *L) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
ELUA_METHOD Column_set(lua_State *L) {
|
||||
Column c = checkColumn(L,1);
|
||||
const gchar* s = luaL_checkstring(L,2);
|
||||
ELUA_METHOD Column_set(lua_State *L) { /* Sets the text of a Column */
|
||||
#define ELUA_ARG_Column_set_TEXT 2 /* The text to which to set the Column */
|
||||
Column c = checkColumn(L,1);
|
||||
const gchar* s = luaL_checkstring(L,ELUA_ARG_Column_set_TEXT);
|
||||
|
||||
if (!(c && c->cinfo && s)) return 0;
|
||||
if (!(c && c->cinfo))
|
||||
return 0;
|
||||
|
||||
if (!s) ELUA_ARG_ERROR(Column_set,TEXT,"must be a string");
|
||||
|
||||
if (check_col(c->cinfo, c->col))
|
||||
col_set_str(c->cinfo, c->col, s);
|
||||
|
@ -421,31 +397,40 @@ ELUA_METHOD Column_set(lua_State *L) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
ELUA_METHOD Column_append(lua_State *L) {
|
||||
ELUA_METHOD Column_append(lua_State *L) { /* Appends text to a Column */
|
||||
#define ELUA_ARG_Column_append_TEXT 2 /* The text to append to the Column */
|
||||
Column c = checkColumn(L,1);
|
||||
const gchar* s = luaL_checkstring(L,2);
|
||||
|
||||
if (!(c && c->cinfo && s)) return 0;
|
||||
const gchar* s = luaL_checkstring(L,ELUA_ARG_Column_append_TEXT);
|
||||
|
||||
if (!(c && c->cinfo))
|
||||
return 0;
|
||||
|
||||
if (!s) ELUA_ARG_ERROR(Column_append,TEXT,"must be a string");
|
||||
|
||||
|
||||
if (check_col(c->cinfo, c->col))
|
||||
col_append_str(c->cinfo, c->col, s);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
ELUA_METHOD Column_preppend(lua_State *L) {
|
||||
ELUA_METHOD Column_preppend(lua_State *L) { /* Prepends text to a Column */
|
||||
#define ELUA_ARG_Column_prepend_TEXT 2 /* The text to prepend to the Column */
|
||||
Column c = checkColumn(L,1);
|
||||
const gchar* s = luaL_checkstring(L,2);
|
||||
|
||||
if (!(c && c->cinfo && s)) return 0;
|
||||
const gchar* s = luaL_checkstring(L,ELUA_ARG_Column_prepend_TEXT);
|
||||
|
||||
if (!(c && c->cinfo))
|
||||
return 0;
|
||||
|
||||
if (!s) ELUA_ARG_ERROR(Column_prepend,TEXT,"must be a string");
|
||||
|
||||
if (check_col(c->cinfo, c->col))
|
||||
col_prepend_fstr(c->cinfo, c->col, "%s",s);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const luaL_reg Column_methods[] = {
|
||||
ELUA_METHODS Column_methods[] = {
|
||||
{"clear", Column_clear },
|
||||
{"set", Column_set },
|
||||
{"append", Column_append },
|
||||
|
@ -454,8 +439,8 @@ static const luaL_reg Column_methods[] = {
|
|||
};
|
||||
|
||||
|
||||
static const luaL_reg Column_meta[] = {
|
||||
{"__tostring", Column_tostring },
|
||||
ELUA_META Column_meta[] = {
|
||||
{"__tostring", Column__tostring },
|
||||
{0,0}
|
||||
};
|
||||
|
||||
|
@ -470,14 +455,16 @@ int Column_register(lua_State *L) {
|
|||
|
||||
|
||||
|
||||
ELUA_CLASS_DEFINE(Columns,FAIL_ON_NULL("expired columns"))
|
||||
ELUA_CLASS_DEFINE(Columns,FAIL_ON_NULL("expired columns")) /* The Columns of the packet list. */
|
||||
|
||||
static int Columns_tostring(lua_State *L) {
|
||||
ELUA_METAMETHOD Columns__tostring(lua_State *L) {
|
||||
lua_pushstring(L,"Columns");
|
||||
return 1;
|
||||
ELUA_RETURN(1); /* A string, mostly for debugging purposes */
|
||||
}
|
||||
|
||||
ELUA_METAMETHOD Columns_newindex(lua_State *L) {
|
||||
ELUA_METAMETHOD Columns__newindex(lua_State *L) { /* Sets the text of a specific column */
|
||||
#define ELUA_ARG_Columns__newindex_COLUMN 2 /* the name of the column to set */
|
||||
#define ELUA_ARG_Columns__newindex_TEXT 2 /* the text for the column */
|
||||
Columns cols = checkColumns(L,1);
|
||||
const struct col_names_t* cn;
|
||||
const char* colname;
|
||||
|
@ -485,9 +472,8 @@ ELUA_METAMETHOD Columns_newindex(lua_State *L) {
|
|||
|
||||
if (!cols) return 0;
|
||||
|
||||
colname = luaL_checkstring(L,2);
|
||||
text = luaL_checkstring(L,3);
|
||||
|
||||
colname = luaL_checkstring(L,ELUA_ARG_Columns__newindex_COLUMN);
|
||||
text = luaL_checkstring(L,ELUA_ARG_Columns__newindex_TEXT);
|
||||
|
||||
for(cn = colnames; cn->name; cn++) {
|
||||
if( g_str_equal(cn->name,colname) ) {
|
||||
|
@ -496,6 +482,8 @@ ELUA_METAMETHOD Columns_newindex(lua_State *L) {
|
|||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
ELUA_ARG_ERROR(Columsn__newindex,COLUMN,"the column name must be a valid column");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -547,7 +535,7 @@ int Columns_register(lua_State *L) {
|
|||
}
|
||||
|
||||
|
||||
ELUA_CLASS_DEFINE(Pinfo,FAIL_ON_NULL("expired pinfo"))
|
||||
ELUA_CLASS_DEFINE(Pinfo,FAIL_ON_NULL("expired pinfo")) /* Packet information */
|
||||
|
||||
static int Pinfo_tostring(lua_State *L) { lua_pushstring(L,"a Pinfo"); return 1; }
|
||||
|
||||
|
@ -588,7 +576,6 @@ PINFO_GET_NUMBER(Pinfo_ptype,pinfo->ptype)
|
|||
PINFO_GET_NUMBER(Pinfo_src_port,pinfo->srcport)
|
||||
PINFO_GET_NUMBER(Pinfo_dst_port,pinfo->destport)
|
||||
|
||||
|
||||
PINFO_GET_STRING(Pinfo_curr_proto,pinfo->current_proto)
|
||||
|
||||
PINFO_GET_ADDRESS(Pinfo_net_src,net_src)
|
||||
|
@ -720,28 +707,71 @@ typedef struct _pinfo_method_t {
|
|||
|
||||
|
||||
static const pinfo_method_t Pinfo_methods[] = {
|
||||
|
||||
/* ELUA_ATTRIBUTE Pinfo_number RO The number of this packet in the current file */
|
||||
{"number", Pinfo_number, pushnil_param, PARAM_NONE},
|
||||
|
||||
/* ELUA_ATTRIBUTE Pinfo_len RO The length of the frame */
|
||||
{"len", Pinfo_len, pushnil_param, PARAM_NONE },
|
||||
|
||||
/* ELUA_ATTRIBUTE Pinfo_caplen RO The captured length of the frame */
|
||||
{"caplen", Pinfo_caplen, pushnil_param, PARAM_NONE },
|
||||
|
||||
/* ELUA_ATTRIBUTE Pinfo_abs_ts RO When the packet was captured */
|
||||
{"abs_ts",Pinfo_abs_ts, pushnil_param, PARAM_NONE },
|
||||
|
||||
/* ELUA_ATTRIBUTE Pinfo_rel_ts RO Number of seconds passed since beginning of capture */
|
||||
{"rel_ts",Pinfo_rel_ts, pushnil_param, PARAM_NONE },
|
||||
|
||||
/* ELUA_ATTRIBUTE Pinfo_delta_ts RO Number of seconds passed since the last packet */
|
||||
{"delta_ts",Pinfo_delta_ts, pushnil_param, PARAM_NONE },
|
||||
|
||||
/* ELUA_ATTRIBUTE Pinfo_visited RO Whether this packet hass been already visited */
|
||||
{"visited",Pinfo_visited, pushnil_param, PARAM_NONE },
|
||||
|
||||
/* ELUA_ATTRIBUTE Pinfo_src RW Source Address of this Packet */
|
||||
{"src", Pinfo_src, Pinfo_set_addr, PARAM_ADDR_SRC },
|
||||
|
||||
/* ELUA_ATTRIBUTE Pinfo_dst RW Destination Address of this Packet */
|
||||
{"dst", Pinfo_dst, Pinfo_set_addr, PARAM_ADDR_DST },
|
||||
|
||||
/* ELUA_ATTRIBUTE Pinfo_dl_src RW Data Link Source Address of this Packet */
|
||||
{"dl_src", Pinfo_dl_src, Pinfo_set_addr, PARAM_ADDR_DL_SRC },
|
||||
|
||||
/* ELUA_ATTRIBUTE Pinfo_dl_dst RW Data Link Destination Address of this Packet */
|
||||
{"dl_dst", Pinfo_dl_dst, Pinfo_set_addr, PARAM_ADDR_DL_DST },
|
||||
|
||||
/* ELUA_ATTRIBUTE Pinfo_net_src RW Network Layer Source Address of this Packet */
|
||||
{"net_src", Pinfo_net_src, Pinfo_set_addr, PARAM_ADDR_NET_SRC },
|
||||
|
||||
/* ELUA_ATTRIBUTE Pinfo_net_dst RW Network Layer Destination Address of this Packet */
|
||||
{"net_dst", Pinfo_net_dst, Pinfo_set_addr, PARAM_ADDR_NET_DST },
|
||||
{"src_port", Pinfo_src_port, Pinfo_set_int, PARAM_PORT_SRC },
|
||||
{"dst_port", Pinfo_dst_port, Pinfo_set_int, PARAM_PORT_SRC },
|
||||
{"ipproto", Pinfo_ipproto, pushnil_param, PARAM_NONE },
|
||||
{"circuit_id", Pinfo_circuit_id, Pinfo_set_int, PARAM_CIRCUIT_ID },
|
||||
|
||||
/* ELUA_ATTRIBUTE Pinfo_ptype RW Type of Port of .src_port and .dst_port */
|
||||
{"port_type", Pinfo_ptype, pushnil_param, PARAM_NONE },
|
||||
|
||||
/* ELUA_ATTRIBUTE Pinfo_src_port RW Source Port of this Packet */
|
||||
{"src_port", Pinfo_src_port, Pinfo_set_int, PARAM_PORT_SRC },
|
||||
|
||||
/* ELUA_ATTRIBUTE Pinfo_dst_port RW Source Address of this Packet */
|
||||
{"dst_port", Pinfo_dst_port, Pinfo_set_int, PARAM_PORT_SRC },
|
||||
|
||||
/* ELUA_ATTRIBUTE Pinfo_ipproto RO IP Protocol id */
|
||||
{"ipproto", Pinfo_ipproto, pushnil_param, PARAM_NONE },
|
||||
|
||||
/* ELUA_ATTRIBUTE Pinfo_circuit_id RO For circuit based protocols */
|
||||
{"circuit_id", Pinfo_circuit_id, Pinfo_set_int, PARAM_CIRCUIT_ID },
|
||||
|
||||
/* ELUA_ATTRIBUTE Pinfo_match RO Port/Data we are matching */
|
||||
{"match", Pinfo_match, pushnil_param, PARAM_NONE },
|
||||
|
||||
/* ELUA_ATTRIBUTE Pinfo_match RO Which Protocol are we dissecting */
|
||||
{"curr_proto", Pinfo_curr_proto, pushnil_param, PARAM_NONE },
|
||||
|
||||
/* ELUA_ATTRIBUTE Pinfo_columns RO Accesss to the packet list columns */
|
||||
{"cols", Pinfo_columns, pushnil_param, PARAM_NONE },
|
||||
{NULL,NULL,NULL,PARAM_NONE}
|
||||
|
||||
{NULL,NULL,NULL,PARAM_NONE}
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -40,37 +40,37 @@ ELUA_API const gchar* lua_shiftstring(lua_State* L, int i) {
|
|||
|
||||
ELUA_FUNCTION elua_format_date(lua_State* LS) { /* Formats an absolute timestamp into a human readable date */
|
||||
#define ELUA_ARG_format_date_TIMESTAMP 1 /* A timestamp value to convert. */
|
||||
lua_Number time = luaL_checknumber(LS,ELUA_ARG_format_date_TIMESTAMP);
|
||||
nstime_t then;
|
||||
gchar* str;
|
||||
lua_Number time = luaL_checknumber(LS,ELUA_ARG_format_date_TIMESTAMP);
|
||||
nstime_t then;
|
||||
gchar* str;
|
||||
|
||||
then.secs = (guint32)floor(time);
|
||||
then.nsecs = (guint32) ( (time-(double)(then.secs))*1000000000);
|
||||
str = abs_time_to_str(&then);
|
||||
lua_pushstring(LS,str);
|
||||
then.secs = (guint32)floor(time);
|
||||
then.nsecs = (guint32) ( (time-(double)(then.secs))*1000000000);
|
||||
str = abs_time_to_str(&then);
|
||||
lua_pushstring(LS,str);
|
||||
|
||||
ELUA_RETURN(1); /* a string with the formated date */
|
||||
ELUA_RETURN(1); /* a string with the formated date */
|
||||
}
|
||||
|
||||
ELUA_FUNCTION elua_format_time(lua_State* LS) { /* Formats an absolute timestamp in a human readable form */
|
||||
#define ELUA_ARG_format_time_TIMESTAMP 1 /* a timestamp value to convert */
|
||||
lua_Number time = luaL_checknumber(LS,ELUA_ARG_format_time_TIMESTAMP);
|
||||
nstime_t then;
|
||||
gchar* str;
|
||||
lua_Number time = luaL_checknumber(LS,ELUA_ARG_format_time_TIMESTAMP);
|
||||
nstime_t then;
|
||||
gchar* str;
|
||||
|
||||
then.secs = (guint32)floor(time);
|
||||
then.nsecs = (guint32) ( (time-(double)(then.secs))*1000000000);
|
||||
str = rel_time_to_str(&then);
|
||||
lua_pushstring(LS,str);
|
||||
then.secs = (guint32)floor(time);
|
||||
then.nsecs = (guint32) ( (time-(double)(then.secs))*1000000000);
|
||||
str = rel_time_to_str(&then);
|
||||
lua_pushstring(LS,str);
|
||||
|
||||
ELUA_RETURN(1); /* a string with the formated time */
|
||||
ELUA_RETURN(1); /* a string with the formated time */
|
||||
}
|
||||
|
||||
ELUA_FUNCTION elua_report_failure(lua_State* LS) { /* reports a failure to the user */
|
||||
#define ELUA_ARG_report_failure_TEXT 1 /* message */
|
||||
const gchar* s = luaL_checkstring(LS,ELUA_ARG_report_failure_TEXT);
|
||||
report_failure("%s",s);
|
||||
return 0;
|
||||
const gchar* s = luaL_checkstring(LS,ELUA_ARG_report_failure_TEXT);
|
||||
report_failure("%s",s);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int elua_log(lua_State* L, GLogLevelFlags log_level) {
|
||||
|
@ -86,7 +86,7 @@ static int elua_log(lua_State* L, GLogLevelFlags log_level) {
|
|||
lua_call(L, 1, 1);
|
||||
s = lua_tostring(L, -1); /* get result */
|
||||
if (s == NULL)
|
||||
return luaL_error(L, "`tostring' must return a string to `print'");
|
||||
return luaL_error(L, "`tostring' must return a string");
|
||||
|
||||
if (i>1) g_string_append(str,"\t");
|
||||
g_string_append(str,s);
|
||||
|
@ -102,27 +102,27 @@ static int elua_log(lua_State* L, GLogLevelFlags log_level) {
|
|||
|
||||
ELUA_FUNCTION elua_critical( lua_State* L ) { /* Will add a log entry with critical severity*/
|
||||
/* ELUA_MOREARGS critical objects to be printed */
|
||||
elua_log(L,G_LOG_LEVEL_CRITICAL);
|
||||
return 0;
|
||||
elua_log(L,G_LOG_LEVEL_CRITICAL);
|
||||
return 0;
|
||||
}
|
||||
ELUA_FUNCTION elua_warn( lua_State* L ) { /* Will add a log entry with warn severity */
|
||||
/* ELUA_MOREARGS critical objects to be printed */
|
||||
elua_log(L,G_LOG_LEVEL_WARNING);
|
||||
return 0;
|
||||
/* ELUA_MOREARGS warn objects to be printed */
|
||||
elua_log(L,G_LOG_LEVEL_WARNING);
|
||||
return 0;
|
||||
}
|
||||
ELUA_FUNCTION elua_message( lua_State* L ) { /* Will add a log entry with message severity */
|
||||
/* ELUA_MOREARGS critical objects to be printed */
|
||||
elua_log(L,G_LOG_LEVEL_MESSAGE);
|
||||
return 0;
|
||||
/* ELUA_MOREARGS message objects to be printed */
|
||||
elua_log(L,G_LOG_LEVEL_MESSAGE);
|
||||
return 0;
|
||||
}
|
||||
ELUA_FUNCTION elua_info( lua_State* L ) { /* Will add a log entry with info severity */
|
||||
/* ELUA_MOREARGS critical objects to be printed */
|
||||
elua_log(L,G_LOG_LEVEL_INFO);
|
||||
return 0;
|
||||
/* ELUA_MOREARGS info objects to be printed */
|
||||
elua_log(L,G_LOG_LEVEL_INFO);
|
||||
return 0;
|
||||
}
|
||||
ELUA_FUNCTION elua_debug( lua_State* L ) { /* Will add a log entry with debug severity */
|
||||
/* ELUA_MOREARGS critical objects to be printed */
|
||||
elua_log(L,G_LOG_LEVEL_DEBUG);
|
||||
return 0;
|
||||
/* ELUA_MOREARGS debug objects to be printed */
|
||||
elua_log(L,G_LOG_LEVEL_DEBUG);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue