/*  This file can be automatically generated; changes may be lost.
**
**
**  CursesVar.c -- the variables
**
**  Copyright (c) 1994-2000  William Setzer
**
**  You may distribute under the terms of either the Artistic License
**  or the GNU General Public License, as specified in the README file.
*/

XS(XS_Curses_LINES)
{
    dXSARGS;
#ifdef C_LINES
    c_exactargs("LINES", items, 0);
    {
	ST(0) = sv_newmortal();
	sv_setiv(ST(0), (IV)LINES);
    }
    XSRETURN(1);
#else
    c_var_not_there("LINES");
    XSRETURN(0);
#endif
}

XS(XS_Curses_COLS)
{
    dXSARGS;
#ifdef C_COLS
    c_exactargs("COLS", items, 0);
    {
	ST(0) = sv_newmortal();
	sv_setiv(ST(0), (IV)COLS);
    }
    XSRETURN(1);
#else
    c_var_not_there("COLS");
    XSRETURN(0);
#endif
}

XS(XS_Curses_stdscr)
{
    dXSARGS;
#ifdef C_STDSCR
    c_exactargs("stdscr", items, 0);
    {
	ST(0) = sv_newmortal();
	c_window2sv(ST(0), stdscr);
    }
    XSRETURN(1);
#else
    c_var_not_there("stdscr");
    XSRETURN(0);
#endif
}

XS(XS_Curses_curscr)
{
    dXSARGS;
#ifdef C_CURSCR
    c_exactargs("curscr", items, 0);
    {
	ST(0) = sv_newmortal();
	c_window2sv(ST(0), curscr);
    }
    XSRETURN(1);
#else
    c_var_not_there("curscr");
    XSRETURN(0);
#endif
}

XS(XS_Curses_COLORS)
{
    dXSARGS;
#ifdef C_COLORS
    c_exactargs("COLORS", items, 0);
    {
	ST(0) = sv_newmortal();
	sv_setiv(ST(0), (IV)COLORS);
    }
    XSRETURN(1);
#else
    c_var_not_there("COLORS");
    XSRETURN(0);
#endif
}

XS(XS_Curses_COLOR_PAIRS)
{
    dXSARGS;
#ifdef C_COLOR_PAIRS
    c_exactargs("COLOR_PAIRS", items, 0);
    {
	ST(0) = sv_newmortal();
	sv_setiv(ST(0), (IV)COLOR_PAIRS);
    }
    XSRETURN(1);
#else
    c_var_not_there("COLOR_PAIRS");
    XSRETURN(0);
#endif
}


XS(XS_Curses_Vars_TIESCALAR)
{
    dXSARGS;
    c_exactargs("TIESCALAR", items, 2);
    {
	char *	pack = (char *)SvPV_nolen(ST(0));
	int	n    = (int)SvIV(ST(1));

	ST(0) = sv_newmortal();
	sv_setref_iv(ST(0), pack, n);
    }
    XSRETURN(1);
}

XS(XS_Curses_Vars_FETCH)
{
    dXSARGS;
    {
	int	num = (int)SvIV(SvRV((SV*)ST(0)));

	ST(0) = sv_newmortal();
	switch (num) {
	case 1:
#ifdef C_LINES
	    sv_setiv(ST(0), (IV)LINES);
#else
	    c_var_not_there("LINES");
#endif
	    break;
	case 2:
#ifdef C_COLS
	    sv_setiv(ST(0), (IV)COLS);
#else
	    c_var_not_there("COLS");
#endif
	    break;
	case 3:
#ifdef C_STDSCR
	    c_window2sv(ST(0), stdscr);
#else
	    c_var_not_there("stdscr");
#endif
	    break;
	case 4:
#ifdef C_CURSCR
	    c_window2sv(ST(0), curscr);
#else
	    c_var_not_there("curscr");
#endif
	    break;
	case 5:
#ifdef C_COLORS
	    sv_setiv(ST(0), (IV)COLORS);
#else
	    c_var_not_there("COLORS");
#endif
	    break;
	case 6:
#ifdef C_COLOR_PAIRS
	    sv_setiv(ST(0), (IV)COLOR_PAIRS);
#else
	    c_var_not_there("COLOR_PAIRS");
#endif
	    break;
	default:
	    croak("Curses::Vars::FETCH called with bad index");
	    /* NOTREACHED */
	}
    }
    XSRETURN(1);
}

XS(XS_Curses_Vars_STORE)
{
    dXSARGS;
    {
	int	num = (int)SvIV((SV*)SvRV(ST(0)));

	switch (num) {
	case 1:
#ifdef C_LINES
	    LINES = (int)SvIV(ST(1));
#else
	    c_var_not_there("LINES");
#endif
	    break;
	case 2:
#ifdef C_COLS
	    COLS = (int)SvIV(ST(1));
#else
	    c_var_not_there("COLS");
#endif
	    break;
	case 3:
#ifdef C_STDSCR
	    stdscr = c_sv2window(ST(1), -1);
#else
	    c_var_not_there("stdscr");
#endif
	    break;
	case 4:
#ifdef C_CURSCR
	    curscr = c_sv2window(ST(1), -1);
#else
	    c_var_not_there("curscr");
#endif
	    break;
	case 5:
#ifdef C_COLORS
	    COLORS = (int)SvIV(ST(1));
#else
	    c_var_not_there("COLORS");
#endif
	    break;
	case 6:
#ifdef C_COLOR_PAIRS
	    COLOR_PAIRS = (int)SvIV(ST(1));
#else
	    c_var_not_there("COLOR_PAIRS");
#endif
	    break;
	default:
	    croak("Curses::Vars::STORE called with bad index");
	    /* NOTREACHED */
	}
	ST(0) = &PL_sv_yes;
    }
    XSRETURN(1);
}

XS(XS_Curses_Vars_DESTROY)
{
    dXSARGS;
    {
	SV *	rv = ST(0);

	ST(0) = &PL_sv_yes;
    }
    XSRETURN(1);
}
