Xmms-Perl

 view release on metacpan or  search on metacpan

Remote/Remote.xs  view on Meta::CPAN

#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#include "fcntl.h"

#undef list

#include "xmms/xmmsctrl.h"

typedef gint Xmms__Remote;

#define PUSHgint(g) PUSHs(sv_2mortal(newSViv(g)))

#define CURRENT_POS \
xmms_remote_get_playlist_pos(session)

static gint xmms_session = 0;

#define xmms_remote_prefs_win_toggle(session, show) \
xmms_remote_show_prefs_box(session)

#ifndef HAS_ADD_URL
#define xmms_remote_playlist_add_url_string(session, string) \
        croak("playlist_add_url not available")
#endif

#define xmms_remote_playlist_add_url \
        xmms_remote_playlist_add_url_string

#ifndef HAS_DELETE
#define xmms_remote_playlist_delete(session, pos) \
        croak("playlist_delete not available")
#endif

static AV *svrv_2av(SV *avrv)
{
    if (!(SvROK(avrv) && SvTYPE(SvRV(avrv)) == SVt_PVAV)) {
	croak("not an ARRAY reference");
    }
    return (AV*)SvRV(avrv);
}

static GList *avrv_2glist(SV *avrv)
{
    AV *av = svrv_2av(avrv);
    STRLEN n_a;
    I32 i;
    GList *list = 0;

    for (i=0; i<=AvFILL(av); i++) {
	list = g_list_append(list, SvPV(*av_fetch(av, i, FALSE), n_a));
    }

    return list;
}

static gchar **avrv_2gchar_list(SV *avrv, gint *num)
{
    AV *av = svrv_2av(avrv);
    STRLEN n_a;
    I32 i;
    gchar **list;

    *num = (gint)AvFILL(av)+1;
    list = (gchar **)g_malloc0(*num * sizeof(gchar *));

    for (i=0; i<=AvFILL(av); i++) {
	list[i] = (gchar *)SvPV(*av_fetch(av, i, FALSE), n_a);
    }
    
    return list;
}

typedef gchar * (*playlist_do_func)(gint, gint);

static AV *playlist_do(gint session, playlist_do_func func)
{
    gint i;
    AV *av = newAV();

Remote/Remote.xs  view on Meta::CPAN

xmms_remote_get_playlist_titles(session)
    Xmms::Remote session

    CODE:
    RETVAL = playlist_do(session, xmms_remote_get_playlist_title);

    OUTPUT:
    RETVAL

gint 
xmms_remote_get_playlist_time(session, pos=CURRENT_POS)
    Xmms::Remote session
    gint pos

SV *
xmms_remote_get_playlist_timestr(session, pos=CURRENT_POS)
    Xmms::Remote session
    gint pos

    PREINIT:
    gint length;

    CODE:
    length = xmms_remote_get_playlist_time(session, pos);
    RETVAL = newSV(5);
    sv_setpvf(RETVAL, "%d:%-2.2d", length/60000, (length/1000) % 60);

    OUTPUT:
    RETVAL

void 
xmms_remote_get_info(session)
    Xmms::Remote session

    PREINIT:
    gint rate, freq, nch;

    PPCODE:
    xmms_remote_get_info(session, &rate, &freq, &nch);
    EXTEND(sp, 3);
    PUSHgint(rate);
    PUSHgint(freq);
    PUSHgint(nch);

void 
xmms_remote_main_win_toggle(session, show)
    Xmms::Remote session
    gboolean show

void 
xmms_remote_pl_win_toggle(session, show)
    Xmms::Remote session
    gboolean show

void 
xmms_remote_eq_win_toggle(session, show)
    Xmms::Remote session
    gboolean show

void 
xmms_remote_prefs_win_toggle(session, show)
    Xmms::Remote session
    gboolean show

void 
xmms_remote_show_prefs_box(session)
    Xmms::Remote session

void 
xmms_remote_toggle_aot(session, ontop)
    Xmms::Remote session
    gboolean ontop

gboolean
xmms_remote_is_main_win(session)
    Xmms::Remote session

gboolean
xmms_remote_is_pl_win(session)
    Xmms::Remote session

gboolean
xmms_remote_is_eq_win(session)
    Xmms::Remote session

void 
xmms_remote_eject(session)
    Xmms::Remote session

void 
xmms_remote_playlist_prev(session)
    Xmms::Remote session

void 
xmms_remote_playlist_next(session)
    Xmms::Remote session

gboolean 
xmms_remote_is_running(session)
    Xmms::Remote session

void 
xmms_remote_toggle_repeat(session)
    Xmms::Remote session

void 
xmms_remote_toggle_shuffle(session)
    Xmms::Remote session

gint
xmms_remote_is_repeat(session)
    Xmms::Remote session

gint
xmms_remote_is_shuffle(session)
    Xmms::Remote session

void
xmms_remote_get_eq(session)
    Xmms::Remote session

    PREINIT:
    gfloat preamp;
    gfloat *bands;

    PPCODE:



( run in 0.885 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )