#include <stdio.h>
#include "ruby.h"

VALUE mDCL;
VALUE mNumRu;

void init_grph1_csgi(VALUE mDCL);
void init_grph1_scpack(VALUE mDCL);
void init_grph1_sgpack(VALUE mDCL);
void init_grph1_slpack(VALUE mDCL);
void init_grph1_stpack(VALUE mDCL);
void init_grph1_swpack(VALUE mDCL);
void init_grph1_zgpack(VALUE mDCL);
void init_grph2_grpack(VALUE mDCL);
void init_grph2_ucpack(VALUE mDCL);
void init_grph2_udpack(VALUE mDCL);
void init_grph2_uepack(VALUE mDCL);
void init_grph2_ugpack(VALUE mDCL);
void init_grph2_uhpack(VALUE mDCL);
void init_grph2_ulpack(VALUE mDCL);
void init_grph2_umpack(VALUE mDCL);
void init_grph2_uspack(VALUE mDCL);
void init_grph2_uupack(VALUE mDCL);
void init_grph2_uvpack(VALUE mDCL);
void init_grph2_uwpack(VALUE mDCL);
void init_grph2_uxpack(VALUE mDCL);
void init_grph2_uypack(VALUE mDCL);
void init_grph2_uzpack(VALUE mDCL);
void init_math1_blklib(VALUE mDCL);
void init_math1_chrlib(VALUE mDCL);
void init_math1_fnclib(VALUE mDCL);
void init_math1_gnmlib(VALUE mDCL);
void init_math1_ifalib(VALUE mDCL);
void init_math1_indxlib(VALUE mDCL);
void init_math1_intlib(VALUE mDCL);
void init_math1_lrllib(VALUE mDCL);
void init_math1_oslib(VALUE mDCL);
void init_math1_rfalib(VALUE mDCL);
void init_math1_rfblib(VALUE mDCL);
void init_math1_sublib(VALUE mDCL);
void init_math1_syslib(VALUE mDCL);
void init_math1_vialib(VALUE mDCL);
void init_math1_viblib(VALUE mDCL);
void init_math1_vralib(VALUE mDCL);
void init_math1_vrblib(VALUE mDCL);
void init_math1_xfclib(VALUE mDCL);
void init_math2_fftlib(VALUE mDCL);
void init_math2_intrlib(VALUE mDCL);
/*
void init_math2_odelib(VALUE mDCL);
*/
void init_math2_rnmlib(VALUE mDCL);
void init_math2_shtlib(VALUE mDCL);
void init_math2_vstlib(VALUE mDCL);
void init_misc1_chnlib(VALUE mDCL);
void init_misc1_datelib(VALUE mDCL);
void init_misc1_fmtlib(VALUE mDCL);
void init_misc1_misclib(VALUE mDCL);
void init_misc1_randlib(VALUE mDCL);
void init_misc1_timelib(VALUE mDCL);


static int ruby_msgdmp_err_func(char *csub, char *cmsg, 
			      int csub_len, int cmsg_len)
{
    int lmsg, lsub, i;
    char msg[300];
    lsub = lenc_(csub, csub_len);
    if (lsub > 32) {lsub=32;}
    lmsg = lenc_(cmsg, cmsg_len);
    if (lmsg > 200) {lmsg=200;}
    msg[0]='[';
    strncpy(msg+1,csub,lsub);
    msg[lsub+1]=']';
    msg[lsub+2]=' ';
    strncpy(msg+lsub+3,cmsg,lmsg);
    for(i=lsub+3+lmsg;i<300;i++){msg[i]='\0';}
    rb_raise(rb_eRuntimeError, msg);
    return(0);
}

void
Init_dcl_raw()
{
    set_msgdmp_err_func(ruby_msgdmp_err_func);
    mNumRu = rb_define_module("NumRu");

    mDCL = rb_define_module_under(mNumRu, "DCL");

    init_grph1_csgi(mDCL);
    init_grph1_scpack(mDCL);
    init_grph1_sgpack(mDCL);
    init_grph1_slpack(mDCL);
    init_grph1_stpack(mDCL);
    init_grph1_swpack(mDCL);
    init_grph1_zgpack(mDCL);
    init_grph2_grpack(mDCL);
    init_grph2_ucpack(mDCL);
    init_grph2_udpack(mDCL);
    init_grph2_uepack(mDCL);
    init_grph2_ugpack(mDCL);
    init_grph2_uhpack(mDCL);
    init_grph2_ulpack(mDCL);
    init_grph2_umpack(mDCL);
    init_grph2_uspack(mDCL);
    init_grph2_uupack(mDCL);
    init_grph2_uvpack(mDCL);
    init_grph2_uwpack(mDCL);
    init_grph2_uxpack(mDCL);
    init_grph2_uypack(mDCL);
    init_grph2_uzpack(mDCL);
    init_math1_blklib(mDCL);
    init_math1_chrlib(mDCL);
    init_math1_fnclib(mDCL);
    init_math1_gnmlib(mDCL);
    init_math1_ifalib(mDCL);
    init_math1_indxlib(mDCL);
    init_math1_intlib(mDCL);
    init_math1_lrllib(mDCL);
    init_math1_oslib(mDCL);
    init_math1_rfalib(mDCL);
    init_math1_rfblib(mDCL);
    init_math1_sublib(mDCL);
    init_math1_syslib(mDCL);
    init_math1_vialib(mDCL);
    init_math1_viblib(mDCL);
    init_math1_vralib(mDCL);
    init_math1_vrblib(mDCL);
    init_math1_xfclib(mDCL);
    init_math2_fftlib(mDCL);
    init_math2_intrlib(mDCL);
/*
    init_math2_odelib(mDCL);
*/
    init_math2_rnmlib(mDCL);
    init_math2_shtlib(mDCL);
    init_math2_vstlib(mDCL);
    init_misc1_chnlib(mDCL);
    init_misc1_datelib(mDCL);
    init_misc1_fmtlib(mDCL);
    init_misc1_misclib(mDCL);
    init_misc1_randlib(mDCL);
    init_misc1_timelib(mDCL);
}
