The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#include <blade.h>
#include "util.h"
#include "blade_run.h"
#include "blade_obj_simple_init.h"
#include "blade_theme_simple_init.h"
typedef CORBA_char CORBA_char_nodup;

static int
not_here(char *s)
{
    croak("%s not implemented on this architecture", s);
    return -1;
}

static double
constant(char *name, int arg)
{
    errno = 0;
    switch (*name) {
    }
    errno = EINVAL;
    return 0;

not_there:
    errno = ENOENT;
    return 0;
}


MODULE = BLADE		PACKAGE = BLADE

PROTOTYPES: DISABLE

double
constant(name,arg)
	char *		name
	int		arg


void
blade_hr(blade)
	blade_env * blade
	ALIAS:
		BLADE::blade_hr = 1
		blade_envPtr::hr = 2

void
blade_br(blade)
	blade_env * blade
	ALIAS:
		BLADE::blade_br = 1
		blade_envPtr::br = 2

void
blade_b(blade, start)
	blade_env * blade
	int start
	ALIAS:
		BLADE::blade_b = 1
		blade_envPtr::b = 2

void
blade_i(blade, start)
	blade_env * blade
	int start
	ALIAS:
		BLADE::blade_i = 1
		blade_envPtr::i = 2

void
blade_u(blade, start)
	blade_env * blade
	int start
	ALIAS:
		BLADE::blade_u = 1
		blade_envPtr::u = 2

void
blade_s(blade, start)
	blade_env * blade
	int start
	ALIAS:
		BLADE::blade_s = 1
		blade_envPtr::s = 2

void
blade_h1(blade, start)
	blade_env * blade
	int start
	ALIAS:
		BLADE::blade_h1 = 1
		blade_envPtr::h1 = 2

void
blade_h2(blade, start)
	blade_env * blade
	int start
	ALIAS:
		BLADE::blade_h2 = 1
		blade_envPtr::h2 = 2

void
blade_h3(blade, start)
	blade_env * blade
	int start
	ALIAS:
		BLADE::blade_h3 = 1
		blade_envPtr::h3 = 2

void
blade_h4(blade, start)
	blade_env * blade
	int start
	ALIAS:
		BLADE::blade_h4 = 1
		blade_envPtr::h4 = 2

void
blade_h5(blade, start)
	blade_env * blade
	int start
	ALIAS:
		BLADE::blade_h5 = 1
		blade_envPtr::h5 = 2

void
blade_h6(blade, start)
	blade_env * blade
	int start
	ALIAS:
		BLADE::blade_h6 = 1
		blade_envPtr::h6 = 2

void
blade_ul(blade, start)
	blade_env * blade
	int start
	ALIAS:
		BLADE::blade_ul = 1
		blade_envPtr::ul = 2

void
blade_ol(blade, start)
	blade_env * blade
	int start
	ALIAS:
		BLADE::blade_ol = 1
		blade_envPtr::ol = 2

void
blade_li(blade, start)
	blade_env * blade
	int start
	ALIAS:
		BLADE::blade_li = 1
		blade_envPtr::li = 2

void
blade_dir(blade, start)
	blade_env * blade
	int start
	ALIAS:
		BLADE::blade_dir = 1
		blade_envPtr::dir = 2

void
blade_dd(blade, start)
	blade_env * blade
	int start
	ALIAS:
		BLADE::blade_dd = 1
		blade_envPtr::dd = 2

void
blade_center(blade, start)
	blade_env * blade
	int start
	ALIAS:
		BLADE::blade_center = 1
		blade_envPtr::center = 2

void
blade_p(blade, start)
	blade_env * blade
	int start
	ALIAS:
		BLADE::blade_p = 1
		blade_envPtr::p = 2

void
blade_pre(blade, start)
	blade_env * blade
	int start
	ALIAS:
		BLADE::blade_pre = 1
		blade_envPtr::pre = 2

void
blade_big(blade, start)
	blade_env * blade
	int start
	ALIAS:
		BLADE::blade_big = 1
		blade_envPtr::big = 2

void
blade_em(blade, start)
	blade_env * blade
	int start
	ALIAS:
		BLADE::blade_em = 1
		blade_envPtr::em = 2

void
blade_small(blade, start)
	blade_env * blade
	int start
	ALIAS:
		BLADE::blade_small = 1
		blade_envPtr::small = 2

void
blade_sub(blade, start)
	blade_env * blade
	int start
	ALIAS:
		BLADE::blade_sub = 1
		blade_envPtr::sub = 2

void
blade_sup(blade, start)
	blade_env * blade
	int start
	ALIAS:
		BLADE::blade_sup = 1
		blade_envPtr::sup = 2

void
blade_tt(blade, start)
	blade_env * blade
	int start
	ALIAS:
		BLADE::blade_tt = 1
		blade_envPtr::tt = 2

void
blade_table(blade, start, args)
	blade_env * blade
	int start
	CORBA_char * args
	ALIAS:
		BLADE::blade_table = 1
		blade_envPtr::table = 2

void
blade_tr(blade, start, args)
	blade_env * blade
	int start
	CORBA_char * args
	ALIAS:
		BLADE::blade_tr = 1
		blade_envPtr::tr = 2

void
blade_td(blade, start, args)
	blade_env * blade
	int start
	CORBA_char * args
	ALIAS:
		BLADE::blade_td = 1
		blade_envPtr::td = 2

void
blade_form(blade, start, args)
	blade_env * blade
	int start
	CORBA_char * args
	ALIAS:
		BLADE::blade_form = 1
		blade_envPtr::form = 2

void
blade_input(blade, start, type, name, value, args)
	blade_env * blade
	int start
	CORBA_char * type
	CORBA_char * name
	CORBA_char * value
	CORBA_char * args
	ALIAS:
		BLADE::blade_input = 1
		blade_envPtr::input = 2

void
blade_select(blade, start, name, args)
	blade_env * blade
	int start
	CORBA_char * name
	CORBA_char * args
	ALIAS:
		BLADE::blade_select = 1
		blade_envPtr::select = 2

void
blade_option(blade, start, value, args)
	blade_env * blade
	int start
	CORBA_char * value
	CORBA_char * args
	ALIAS:
		BLADE::blade_option = 1
		blade_envPtr::option = 2

void
blade_textarea(blade, start, name, args)
	blade_env * blade
	int start
	CORBA_char * name
	CORBA_char * args
	ALIAS:
		BLADE::blade_textarea = 1
		blade_envPtr::textarea = 2

void
blade_div(blade, start, args)
	blade_env * blade
	int start
	CORBA_char * args
	ALIAS:
		BLADE::blade_div = 1
		blade_envPtr::div = 2

void
blade_span(blade, start, args)
	blade_env * blade
	int start
	CORBA_char * args
	ALIAS:
		BLADE::blade_span = 1
		blade_envPtr::span = 2

void
blade_font(blade, start, args)
	blade_env * blade
	int start
	CORBA_char * args
	ALIAS:
		BLADE::blade_font = 1
		blade_envPtr::font = 2

void
blade_a(blade, start, args)
	blade_env * blade
	int start
	CORBA_char * args
	ALIAS:
		BLADE::blade_a = 1
		blade_envPtr::a = 2

void
blade_img(blade, src, args)
	blade_env * blade
	CORBA_char * src
	CORBA_char * args
	ALIAS:
		BLADE::blade_img = 1
		blade_envPtr::img = 2

void
blade_link(blade, start, args)
	blade_env * blade
	int start
	CORBA_char * args
	ALIAS:
		BLADE::blade_link = 1
		blade_envPtr::link = 2

void
blade_tag(blade, start, name, def)
	blade_env * blade
	int start
	CORBA_char * name
	CORBA_char * def
	ALIAS:
		BLADE::blade_tag = 1
		blade_envPtr::tag = 2

void
blade_disp(blade, string)
	blade_env * blade
	CORBA_char * string
	ALIAS:
		BLADE::blade_disp = 1
		blade_envPtr::disp = 2

CORBA_char *
blade_color(blade, name, def)
	blade_env * blade
	CORBA_char * name
	CORBA_char * def
	ALIAS:
		BLADE::blade_color = 1
		blade_envPtr::color = 2

SV *
blade_hash_new()
	PREINIT:
		blade_hash * hash;
	CODE:
		hash = blade_hash_new();
		ST(0) = sv_newmortal();
		if (!hash)
			ST(0) = &PL_sv_undef;
		else
			sv_setref_pv(ST(0),"blade_hashPtr",hash);

void
blade_hash_free(hash)
	blade_hash * hash
	ALIAS:
		BLADE::blade_hash_free = 1
		blade_hashPtr::free = 2
	CODE:
		if (ST(0) != &PL_sv_undef) {
			blade_hash_free(hash);
			sv_setsv(ST(0),&PL_sv_undef);
		}

long
blade_hash_count(hash)
	blade_hash * hash

SV *
blade_hash_dup(hash)
	blade_hash * hash
	ALIAS:
		BLADE::blade_hash_dup = 1
		blade_hashPtr::dup = 2
	PREINIT:
		blade_hash * newhash;
	CODE:
		newhash = blade_hash_dup(hash);
		ST(0) = sv_newmortal();
		if (!newhash)
			ST(0) = &PL_sv_undef;
		else
			sv_setref_pv(ST(0),"blade_hashPtr",newhash);

CORBA_char *
blade_hash_get(hash, name)
	blade_hash * hash
	CORBA_char * name
	ALIAS:
		BLADE::blade_hash_get = 1
		blade_hashPtr::get = 2

CORBA_char_nodup *
blade_hash_get_nodup(hash, name)
	blade_hash * hash
	CORBA_char * name

CORBA_char *
blade_hash_get_num(hash, number)
	blade_hash * hash
	int number
	ALIAS:
		BLADE::blade_hash_get_num = 1
		blade_hashPtr::get_num = 2

CORBA_char_nodup *
blade_hash_get_num_nodup(hash, number)
	blade_hash * hash
	int number
	ALIAS:
		BLADE::blade_hash_get_num_nodup = 1
		blade_hashPtr::get_num_nodup = 2

CORBA_char *
blade_hash_get_num_name(hash, number)
	blade_hash * hash
	int number
	ALIAS:
		BLADE::blade_hash_get_num_name = 1
		blade_hashPtr::get_num_name = 2

CORBA_char_nodup *
blade_hash_get_num_name_nodup(hash, number)
	blade_hash * hash
	int number
	ALIAS:
		BLADE::blade_hash_get_num_name_nodup = 1
		blade_hashPtr::get_num_name_nodup = 2

void
blade_hash_set(hash, name, value)
	blade_hash * hash
	CORBA_char * name
	CORBA_char * value
	ALIAS:
		BLADE::blade_hash_set = 1
		blade_hashPtr::set = 2

void
blade_hash_set_nodel(hash, name, value)
	blade_hash * hash
	CORBA_char * name
	CORBA_char * value
	ALIAS:
		BLADE::blade_hash_set_nodel = 1
		blade_hashPtr::set_nodel = 2

int
blade_hash_exists_in(hash, name)
	blade_hash * hash
	CORBA_char * name
	ALIAS:
		BLADE::blade_hash_exists_in = 1
		blade_hashPtr::exists_in = 2

int
blade_web_vars_count(blade)
	blade_env * blade
	ALIAS:
		BLADE::blade_web_vars_count = 1
		blade_envPtr::web_vars_count = 2

CORBA_char * 
blade_web_vars_get(blade, name)
	blade_env * blade
	CORBA_char * name
	ALIAS:
		BLADE::blade_web_vars_get = 1
		blade_envPtr::web_vars_get = 2

CORBA_char_nodup *
blade_web_vars_get_nodup(blade, name)
	blade_env * blade
	CORBA_char * name
	ALIAS:
		BLADE::blade_web_vars_get_nodup = 1
		blade_envPtr::web_vars_get_nodup = 2

void
blade_web_vars_set(blade, name, value)
	blade_env * blade
	CORBA_char * name
	CORBA_char * value
	ALIAS:
		BLADE::blade_web_vars_set = 1
		blade_envPtr::web_vars_set = 2

SV *
blade_web_vars_get_all(blade)
	blade_env * blade
	ALIAS:
		BLADE::blade_web_vars_get_all = 1
		blade_envPtr::web_vars_get_all = 2
	PREINIT:
		blade_hash * hash;
	CODE:
		hash = blade_web_vars_get_all(blade);
		ST(0) = sv_newmortal();
		if (!hash)
			ST(0) = &PL_sv_undef;
		else
			sv_setref_pv(ST(0),"blade_hashPtr",hash);

CORBA_char *
blade_web_vars_get_num(blade, number)
	blade_env * blade
	int number
	ALIAS:
		BLADE::blade_web_vars_get_num = 1
		blade_envPtr::web_vars_get_num = 2

CORBA_char_nodup *
blade_web_vars_get_num_nodup(blade, number)
	blade_env * blade
	int number
	ALIAS:
		BLADE::blade_web_vars_get_num_nodup = 1
		blade_envPtr::web_vars_get_num_nodup = 2

CORBA_char *
blade_web_vars_get_num_name(blade, number)
	blade_env * blade
	int number
	ALIAS:
		BLADE::blade_web_vars_get_num_name = 1
		blade_envPtr::web_vars_get_num_name = 2

CORBA_char_nodup *
blade_web_vars_get_num_name_nodup(blade, number)
	blade_env * blade
	int number
	ALIAS:
		BLADE::blade_web_vars_get_num_name_nodup = 1
		blade_envPtr::web_vars_get_num_name_nodup = 2

int
blade_auth(blade)
	blade_env * blade
	ALIAS:
		BLADE::blade_auth = 1
		blade_envPtr::auth = 2

CORBA_char *
blade_return_buffer(blade)
	blade_env * blade
	ALIAS:
		BLADE::blade_return_buffer = 1
		blade_envPtr::return_buffer = 2

void
blade_destroy(blade)
	blade_env * blade
	ALIAS:
		BLADE::blade_destroy = 1
		blade_envPtr::destroy = 2
	CODE:
		if (ST(0) != &PL_sv_undef) {
			unregister_blade_run_callback(blade);
			blade_destroy(blade);
			sv_setsv(ST(0),&PL_sv_undef);
		}

void
blade_destroy_no_env(blade)
	blade_env * blade
	ALIAS:
		BLADE::blade_destroy_no_env = 1
		blade_envPtr::destroy_no_env = 2
	CODE:
		if (ST(0) != &PL_sv_undef) {
			unregister_blade_run_callback(blade);
			blade_destroy_no_env(blade);
			sv_setsv(ST(0),&PL_sv_undef);
		}

void
blade_obj(blade, obj_name, name, args, activation_flags, start_args)
	blade_env * blade
	CORBA_char * obj_name
	CORBA_char * name
	CORBA_char * args
	CORBA_short activation_flags
	CORBA_char * start_args
	ALIAS:
		BLADE::blade_obj = 1
		blade_envPtr::obj = 2

void
blade_link_file(blade, name)
	blade_env * blade
	CORBA_char * name
	ALIAS:
		BLADE::blade_link_file = 1
		blade_envPtr::link_file = 2

void
blade_url_decode(string)
	CORBA_char * string

void
blade_session_set_var(blade, name, value, temp)
	blade_env * blade
	CORBA_char * name
	CORBA_char * value
	int temp
	ALIAS:
		BLADE::blade_session_set_var = 1
		blade_envPtr::session_set_var = 2

CORBA_char *
blade_session_get_var(blade, name)
	blade_env * blade
	CORBA_char * name
	ALIAS:
		BLADE::blade_session_get_var = 1
		blade_envPtr::session_get_var = 2

CORBA_char *
blade_session_get_set(blade, name, temp)
	blade_env * blade
	CORBA_char * name
	int temp
	ALIAS:
		BLADE::blade_session_get_set = 1
		blade_envPtr::session_get_set = 2

void
blade_orb_run()

SV *
blade_page_init(args_ref, context, lang)
	SV * args_ref
	CORBA_char * context
	CORBA_char * lang
	PREINIT:
		int argc;
		char **argv;
		blade_env * blade;
	CODE:

	if (args_ref != &PL_sv_undef && (!SvROK(args_ref) || SvTYPE(SvRV(args_ref)) != SVt_PVAV))
		croak("blade_page_init() - first argument must be undef or array ref");

	move_to_argv(args_ref, &argc, &argv);
	blade = blade_page_init(&argc,argv,context,lang);
	move_to_array(args_ref, argc, argv);

	ST(0) = sv_newmortal();
	if (!blade)
		ST(0) = &PL_sv_undef;
	else
		sv_setref_pv(ST(0),"blade_envPtr",blade);


int
blade_run(blade, code, bar_title, page_title, head, right_name, accept_unlisted)
	blade_env * blade
	SV * code
	char * bar_title
	char * page_title
	char * head
	char * right_name
	int accept_unlisted
	ALIAS:
		BLADE::blade_run = 1
		blade_envPtr::run = 2
	CODE:
	if (SvROK(code) && SvTYPE(SvRV(code)) == SVt_PVCV) {
		register_blade_run_callback(blade, SvRV(code));
		RETVAL = blade_run(blade,blade_run_wrapper,bar_title,page_title,head,right_name,accept_unlisted);

	}
	else
		croak("blade_run() - second argument must be a code reference");
	OUTPUT:
		RETVAL

int
blade_obj_simple_init(args_ref, code, data)
	SV * args_ref
	SV * code
	SV * data
	PREINIT:
		int argc;
		char **argv;
	CODE:

	if (SvROK(code) && SvTYPE(SvRV(code)) == SVt_PVCV) {
		if (args_ref != &PL_sv_undef && (!SvROK(args_ref) || SvTYPE(SvRV(args_ref)) != SVt_PVAV))
			croak("blade_obj_simple_init() - first argument must be undef or array ref");

		move_to_argv(args_ref, &argc, &argv);
		register_blade_obj_simple_init_callback(SvRV(code), data);
		RETVAL = blade_obj_simple_init(&argc,argv,blade_obj_simple_init_wrapper,NULL);
		move_to_array(args_ref, argc, argv);

	}
	else
		croak("blade_obj_simple_init() - second argument must be a code reference");
	OUTPUT:
		RETVAL

int
blade_theme_simple_init(args_ref, start_code, end_code, init_code, data)
	SV * args_ref
	SV * start_code
	SV * end_code
	SV * init_code
	SV * data
	PREINIT:
		int argc;
		char **argv;
	CODE:

	if ( SvROK(start_code) && SvTYPE(SvRV(start_code)) == SVt_PVCV &&
	     SvROK(end_code) && SvTYPE(SvRV(end_code)) == SVt_PVCV &&
	     SvROK(init_code) && SvTYPE(SvRV(init_code)) == SVt_PVCV) {
		if (args_ref != &PL_sv_undef && (!SvROK(args_ref) || SvTYPE(SvRV(args_ref)) != SVt_PVAV))
			croak("blade_theme_simple_init() - first argument must be undef or array ref");

		move_to_argv(args_ref, &argc, &argv);
		register_blade_theme_simple_init_callbacks(SvRV(start_code), SvRV(end_code), SvRV(init_code), data);
		RETVAL = blade_theme_simple_init(&argc,argv,
		   blade_theme_simple_init_start_wrapper,
		   blade_theme_simple_init_end_wrapper,
		   blade_theme_simple_init_init_wrapper,
		   NULL
		);
		move_to_array(args_ref, argc, argv);

	}
	else
		croak("blade_theme_simple_init() - second, third and fourth arguments must be code references");
	OUTPUT:
		RETVAL

MODULE = BLADE		PACKAGE = blade_hashPtr

void
DESTROY(hash)
	blade_hash * hash
	CODE:
		if (ST(0) != &PL_sv_undef) {
			blade_hash_free(hash);
			sv_setsv(ST(0),&PL_sv_undef);
		}