# 1 "main.c"

# 1 "main.c"
# 2 "midilib.c"
char _OUT_OF_STRING_SPACE[24] = "Out of string space!";
# 8 "midilib.c"
int make_sysEx( char *buf, unsigned int siz, unsigned char *dat )
{
int i, len;
char *p, tmp[8];

p = buf;
strcpy( p, "@EXCL(");
p += 6;
for ( i = 1; i < siz - 1; ++i )
{
sprintf(tmp, "%d", dat[i] & 0xFF );
strcpy(p,tmp); p += strlen(tmp);
if ( i < siz - 2 )
{
*p = ',';
++p;
}
}
*p = ')'; ++p;
*p = '\0';

return (strlen(buf));
}
# 2 "gm.c"
char *GmFuncTbl[2] =
{
"exGM_systemOn" ,
(0)
};

int GM_macroInit( char *sqr )
{
int i;

for ( i = 0; GmFuncTbl[i] != (0); ++i )
MMac_extDefine( sqr, GmFuncTbl[i], GmFuncTbl[i], (4), (0) );
MMac_extDefine( sqr, "_GM_MACRO_DEFINED", "", (0) , (0) );
return ((0));
}
# 25 "gm.c"
int exGM_systemOn( char *sqr, unsigned int bufSiz, char *buf, int argc, char **argv )
{
char dat[32], tmp[256];
unsigned siz;

dat[0] = 0xF0;
dat[1] = 0x7E;
dat[2] = 0x7F;
dat[3] = 0x09;
dat[4] = 0x01;
dat[5] = 0xF7;
siz = 6;
siz = make_sysEx(tmp, siz, dat );
if ( siz >= bufSiz )
{
MM_setErrMsg(sqr,_OUT_OF_STRING_SPACE);
return ((-1));
}
memcpy( buf, tmp, siz );
return (siz);
}
# 8 "gs.c"
int GsDeviceID = 16;

char *GsFuncTbl[32] =
{
"GS_setDeviceNumber" ,
"sysEx_gs" ,
"sysEx_sc55" ,

"exGs_reset" ,
"exGs_masterVolume" ,
"exGs_partialReserve",
"exGs_reverbMacro" ,
"exGs_reverbPara" ,
"exGs_chorusMacro" ,
"exGs_chorusPara" ,

"exGs_rxChannel" ,
"exGs_assignMode" ,
"exGs_rymMap" ,

"exGs_mod" ,
"exGs_bend" ,
"exGs_caf" ,
"exGs_paf" ,
"exGs_cc1number" ,
"exGs_cc2number" ,
"exGs_cc1control" ,
"exGs_cc2control" ,

"exSC55_msgSet" ,
"exSC55_dotSet" ,
"SC55_initDotBuffer" ,
"SC55_setDotBuffer" ,
"exSC55_dotBuffer" ,

(0)
};

int GS_macroInit( char *sqr )
{
int i;

GsDeviceID = 17 - 1;
for ( i = 0; GsFuncTbl[i] != (0); ++i )
MMac_extDefine( sqr, GsFuncTbl[i], GsFuncTbl[i], (4), (0) );
MMac_extDefine( sqr, "_GS_MACRO_DEFINED", "", (0) , (0) );
return ((0));
}
# 64 "gs.c"
int GS_setDeviceNumber( char *sqr, unsigned int bufSiz, char *buf, int argc, char **argv )
{
int n;

if ( argc < 1 )
{
_ERR: MM_setErrMsg(sqr,"[GS] device number error!");
return ((-1));
}
n = atoi(argv[0]) - 1;
if ( n < 1 || n > 32 )
goto _ERR;
GsDeviceID = n - 1;
return (0);
}
# 84 "gs.c"
int roland_excl( unsigned char *buf, int deviceID, int modelID, unsigned int adr, unsigned int siz, unsigned char *dat )
{
int i, sum;

buf[0] = 0xF0;
buf[1] = 0x41;
buf[2] = deviceID;
buf[3] = modelID;
buf[4] = 0x12;
buf[5] = (adr>>16); buf[6] = (adr>>8); buf[7] = (adr);
sum = buf[5] + buf[6] + buf[7];
for ( i = 0; i < siz; ++i )
{
buf[8+i] = dat[i];
sum += dat[i];
}
sum = (0x80 - (sum & 0x7F)) & 0x7F;
buf[8+siz] = sum;
buf[9+siz] = 0xF7;

return (siz + 10);
}

int gs_genMML( char *sqr, unsigned int bufSiz, char *buf, unsigned int adr, unsigned int siz, char *dat)
{
int ret;
char excl[256], tmp[1024];

ret = roland_excl( excl, GsDeviceID, (0x42), adr, siz, dat );
ret = make_sysEx( tmp, ret, excl );
if ( ret >= bufSiz )
{
MM_setErrMsg(sqr,_OUT_OF_STRING_SPACE);
return ((-1));
}
memcpy( buf, tmp, ret );
return (ret);
}

int sc55_genMML( char *sqr, unsigned int bufSiz, char *buf, unsigned int adr, unsigned int siz, char *dat)
{
int ret;
char excl[256], tmp[1024];

ret = roland_excl( excl, GsDeviceID, (0x45), adr, siz, dat );
ret = make_sysEx( tmp, ret, excl );
if ( ret >= bufSiz )
{
MM_setErrMsg(sqr,_OUT_OF_STRING_SPACE);
return ((-1));
}
memcpy( buf, tmp, ret );
return (ret);
}
# 146 "gs.c"
int sysEx_gs( char *sqr, unsigned int bufSiz, char *buf, int argc, char **argv )
{
char dat[128];
unsigned int adr, siz;
int i, ret;

if ( argc < 3 )
{
MM_setErrMsg(sqr,"GS system exclusive error!");
return ((-1));
}
sscanf(argv[0],"%x",&adr);
siz = atoi(argv[1]);
if ( siz < 1 || argc < 2 + siz )
return ((-1));
for ( i = 0; i < siz; ++i )
dat[i] = atoi(argv[2+i]);

return gs_genMML( sqr, bufSiz, buf, adr, siz, dat );
}
# 173 "gs.c"
int sysEx_sc55( char *sqr, unsigned int bufSiz, char *buf, int argc, char **argv )
{
char dat[128];
unsigned int adr, siz;
int i, ret;

if ( argc < 3 )
{
MM_setErrMsg(sqr,"SC-55 system exclusive error!");
return ((-1));
}
sscanf(argv[0],"%x",&adr);
siz = atoi(argv[1]);
if ( siz < 1 || argc < 2 + siz )
return ((-1));
for ( i = 0; i < siz; ++i )
dat[i] = atoi(argv[2+i]);

return sc55_genMML( sqr, bufSiz, buf, adr, siz, dat );
}
# 198 "gs.c"
int exGs_reset( char *sqr, unsigned int bufSiz, char *buf, int argc, char **argv )
{
char dat[4];
int ret;

if ( argc != 0 )
{
MM_setErrMsg(sqr,"[GS] \"reset\" error!");
return((-1));
}
dat[0] = 0x00;
return gs_genMML( sqr, bufSiz, buf, 0x40007F, 1, dat );
}
# 219 "gs.c"
int exGs_masterVolume( char *sqr, unsigned int bufSiz, char *buf, int argc, char **argv )
{
char dat[4];
int ret;

if ( argc != 1 )
{
MM_setErrMsg(sqr,"[GS] Master volume error!");
return((-1));
}

dat[0] = atoi(argv[0]);
return gs_genMML( sqr, bufSiz, buf, 0x400004, 1, dat );
}
# 240 "gs.c"
int exGs_partialReserve( char *sqr, unsigned int bufSiz, char *buf, int argc, char **argv )
{
int i;
char dat[32];
int ret;

if ( argc != 16 )
{
MM_setErrMsg(sqr,"[GS] Partial reserve error!");
return((-1));
}

for ( i = 0; i < 16; ++i )
dat[i] = atoi(argv[i]);
return gs_genMML( sqr, bufSiz, buf, 0x400110, 16, dat );
}
# 263 "gs.c"
int exGs_reverbMacro( char *sqr, unsigned int bufSiz, char *buf, int argc, char **argv )
{
char dat[4];
int ret;

if ( argc != 1 )
{
MM_setErrMsg(sqr,"[GS] Reverb macro error!");
return((-1));
}

dat[0] = atoi(argv[0]);
return gs_genMML( sqr, bufSiz, buf, 0x400130, 1, dat );
}
# 284 "gs.c"
int exGs_reverbPara( char *sqr, unsigned int bufSiz, char *buf, int argc, char **argv )
{
int i;
char dat[8];
int ret;

if ( argc != 6 )
{
MM_setErrMsg(sqr,"[GS] Reverb parameter error!");
return((-1));
}

for ( i = 0; i < 6; ++i )
dat[i] = atoi(argv[i]);
return gs_genMML( sqr, bufSiz, buf, 0x400131, 6, dat );
}
# 307 "gs.c"
int exGs_chorusMacro( char *sqr, unsigned int bufSiz, char *buf, int argc, char **argv )
{
char dat[4];
int ret;

if ( argc != 1 )
{
MM_setErrMsg(sqr,"[GS] Chorus macro error!");
return((-1));
}

dat[0] = atoi(argv[0]);
return gs_genMML( sqr, bufSiz, buf, 0x400138, 1, dat );
}
# 328 "gs.c"
int exGs_chorusPara( char *sqr, unsigned int bufSiz, char *buf, int argc, char **argv )
{
int i;
char dat[8];
int ret;

if ( argc != 7 )
{
MM_setErrMsg(sqr,"[GS] Chorus parameter error!");
return((-1));
}

for ( i = 0; i < 7; ++i )
dat[i] = atoi(argv[i]);
return gs_genMML( sqr, bufSiz, buf, 0x400139, 7, dat );
}

int GsPartTbl[16] = {1,2,3,4,5,6,7,8,9,0,10,11,12,13,14,15};

int gs_getpart_n( int part )
{
if ( part < 1 || part > 16 )
return (-1);
return (GsPartTbl[part-1]);
}
# 361 "gs.c"
int exGs_rxChannel( char *sqr, unsigned int bufSiz, char *buf, int argc, char **argv )
{
int i, part, ch;
char dat[4];
int ret;

if ( argc != 2 )
{
_PARA_ERR:
MM_setErrMsg(sqr,"[GS] 'Rx.channel' error!");
return((-1));
}

if ( (part = gs_getpart_n(atoi(argv[0]))) < 0 )
goto _PARA_ERR;
ch = atoi(argv[1]);
if ( ch < 0 || ch > 16 )
goto _PARA_ERR;
if ( ch > 0 )
--ch;
else
ch = 0;
dat[0] = ch;
return gs_genMML( sqr, bufSiz, buf, ((0x401002)+((part)<<8)), 1, dat );
}
# 393 "gs.c"
int exGs_assignMode( char *sqr, unsigned int bufSiz, char *buf, int argc, char **argv )
{
int i, part;
char dat[4];
int ret;

if ( argc != 2 )
{
_PARA_ERR:
MM_setErrMsg(sqr,"[GS] 'Assign mode' error!");
return((-1));
}

if ( (part = gs_getpart_n(atoi(argv[0]))) < 0 )
goto _PARA_ERR;
dat[0] = atoi(argv[1]);
return gs_genMML( sqr, bufSiz, buf, ((0x401014)+((part)<<8)), 1, dat );
}
# 14 "gs_cc.c"
int exGs_mod( char *sqr, unsigned int bufSiz, char *buf, int argc, char **argv )
{
int part, v;
char dat[16];
int ret;

if ( argc != 12 )
{
_PARA_ERR:
MM_setErrMsg(sqr,"[GS] 'MOD control' error!");
return((-1));
}

if ( (part = gs_getpart_n(atoi(argv[0]))) < 0 )
goto _PARA_ERR;


v = atoi(argv[1]);
if ( v < -24 || v > 24 )
goto _PARA_ERR;
dat[0] = v + 0x40;


v = atoi(argv[2]);
if ( v < -64 || v > 63 )
goto _PARA_ERR;
dat[1] = v + 0x40;


v = atoi(argv[3]);
if ( v < -64 || v > 63 )
goto _PARA_ERR;
dat[2] = v + 0x40;


v = atoi(argv[4]);
if ( v < -64 || v > 63 )
goto _PARA_ERR;
dat[3] = v + 0x40;


v = atoi(argv[5]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[4] = v;


v = atoi(argv[6]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[5] = v;


v = atoi(argv[7]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[6] = v;


v = atoi(argv[8]);
if ( v < -64 || v > 63 )
goto _PARA_ERR;
dat[7] = v + 0x40;


v = atoi(argv[9]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[8] = v;


v = atoi(argv[10]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[9] = v;


v = atoi(argv[11]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[10] = v;
return gs_genMML( sqr, bufSiz, buf, ((0x402000)+((part)<<8)), 11, dat );
}
# 107 "gs_cc.c"
int exGs_bend( char *sqr, unsigned int bufSiz, char *buf, int argc, char **argv )
{
int part, v;
char dat[16];
int ret;

if ( argc != 12 )
{
_PARA_ERR:
MM_setErrMsg(sqr,"[GS] 'Pitch control' error!");
return((-1));
}

if ( (part = gs_getpart_n(atoi(argv[0]))) < 0 )
goto _PARA_ERR;


v = atoi(argv[1]);
if ( v < 0 || v > 24 )
goto _PARA_ERR;
dat[0] = v + 0x40;


v = atoi(argv[2]);
if ( v < -64 || v > 63 )
goto _PARA_ERR;
dat[1] = v + 0x40;


v = atoi(argv[3]);
if ( v < -64 || v > 63 )
goto _PARA_ERR;
dat[2] = v + 0x40;


v = atoi(argv[4]);
if ( v < -64 || v > 63 )
goto _PARA_ERR;
dat[3] = v + 0x40;


v = atoi(argv[5]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[4] = v;


v = atoi(argv[6]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[5] = v;


v = atoi(argv[7]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[6] = v;


v = atoi(argv[8]);
if ( v < -64 || v > 63 )
goto _PARA_ERR;
dat[7] = v + 0x40;


v = atoi(argv[9]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[8] = v;


v = atoi(argv[10]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[9] = v;


v = atoi(argv[11]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[10] = v;
return gs_genMML( sqr, bufSiz, buf, ((0x402010)+((part)<<8)), 11, dat );
}
# 200 "gs_cc.c"
int exGs_caf( char *sqr, unsigned int bufSiz, char *buf, int argc, char **argv )
{
int part, v;
char dat[16];
int ret;

if ( argc != 12 )
{
_PARA_ERR:
MM_setErrMsg(sqr,"[GS] 'CAf control' error!");
return((-1));
}

if ( (part = gs_getpart_n(atoi(argv[0]))) < 0 )
goto _PARA_ERR;


v = atoi(argv[1]);
if ( v < -24 || v > 24 )
goto _PARA_ERR;
dat[0] = v + 0x40;


v = atoi(argv[2]);
if ( v < -64 || v > 63 )
goto _PARA_ERR;
dat[1] = v + 0x40;


v = atoi(argv[3]);
if ( v < -64 || v > 63 )
goto _PARA_ERR;
dat[2] = v + 0x40;


v = atoi(argv[4]);
if ( v < -64 || v > 63 )
goto _PARA_ERR;
dat[3] = v + 0x40;


v = atoi(argv[5]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[4] = v;


v = atoi(argv[6]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[5] = v;


v = atoi(argv[7]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[6] = v;


v = atoi(argv[8]);
if ( v < -64 || v > 63 )
goto _PARA_ERR;
dat[7] = v + 0x40;


v = atoi(argv[9]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[8] = v;


v = atoi(argv[10]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[9] = v;


v = atoi(argv[11]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[10] = v;
return gs_genMML( sqr, bufSiz, buf, ((0x402020)+((part)<<8)), 11, dat );
}
# 293 "gs_cc.c"
int exGs_paf( char *sqr, unsigned int bufSiz, char *buf, int argc, char **argv )
{
int part, v;
char dat[16];
int ret;

if ( argc != 12 )
{
_PARA_ERR:
MM_setErrMsg(sqr,"[GS] 'PAf control' error!");
return((-1));
}

if ( (part = gs_getpart_n(atoi(argv[0]))) < 0 )
goto _PARA_ERR;


v = atoi(argv[1]);
if ( v < -24 || v > 24 )
goto _PARA_ERR;
dat[0] = v + 0x40;


v = atoi(argv[2]);
if ( v < -64 || v > 63 )
goto _PARA_ERR;
dat[1] = v + 0x40;


v = atoi(argv[3]);
if ( v < -64 || v > 63 )
goto _PARA_ERR;
dat[2] = v + 0x40;


v = atoi(argv[4]);
if ( v < -64 || v > 63 )
goto _PARA_ERR;
dat[3] = v + 0x40;


v = atoi(argv[5]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[4] = v;


v = atoi(argv[6]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[5] = v;


v = atoi(argv[7]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[6] = v;


v = atoi(argv[8]);
if ( v < -64 || v > 63 )
goto _PARA_ERR;
dat[7] = v + 0x40;


v = atoi(argv[9]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[8] = v;


v = atoi(argv[10]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[9] = v;


v = atoi(argv[11]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[10] = v;
return gs_genMML( sqr, bufSiz, buf, ((0x402030)+((part)<<8)), 11, dat );
}
# 384 "gs_cc.c"
int exGs_cc1number( char *sqr, unsigned int bufSiz, char *buf, int argc, char **argv )
{
int i, part;
char dat[4];
int ret;

if ( argc != 2 )
{
_PARA_ERR:
MM_setErrMsg(sqr,"[GS] 'CC1 controller number' error!");
return((-1));
}

if ( (part = gs_getpart_n(atoi(argv[0]))) < 0 )
goto _PARA_ERR;
dat[0] = atoi(argv[1]);
return gs_genMML( sqr, bufSiz, buf, ((0x40101F)+((part)<<8)), 1, dat );
}
# 409 "gs_cc.c"
int exGs_cc2number( char *sqr, unsigned int bufSiz, char *buf, int argc, char **argv )
{
int i, part;
char dat[4];
int ret;

if ( argc != 2 )
{
_PARA_ERR:
MM_setErrMsg(sqr,"[GS] 'CC2 controller number' error!");
return((-1));
}

if ( (part = gs_getpart_n(atoi(argv[0]))) < 0 )
goto _PARA_ERR;
dat[0] = atoi(argv[1]);
return gs_genMML( sqr, bufSiz, buf, ((0x401020)+((part)<<8)), 1, dat );
}
# 438 "gs_cc.c"
int exGs_cc1control( char *sqr, unsigned int bufSiz, char *buf, int argc, char **argv )
{
int part, v;
char dat[16];
int ret;

if ( argc != 12 )
{
_PARA_ERR:
MM_setErrMsg(sqr,"[GS] 'CC1 control' error!");
return((-1));
}

if ( (part = gs_getpart_n(atoi(argv[0]))) < 0 )
goto _PARA_ERR;


v = atoi(argv[1]);
if ( v < -24 || v > 24 )
goto _PARA_ERR;
dat[0] = v + 0x40;


v = atoi(argv[2]);
if ( v < -64 || v > 63 )
goto _PARA_ERR;
dat[1] = v + 0x40;


v = atoi(argv[3]);
if ( v < -64 || v > 63 )
goto _PARA_ERR;
dat[2] = v + 0x40;


v = atoi(argv[4]);
if ( v < -64 || v > 63 )
goto _PARA_ERR;
dat[3] = v + 0x40;


v = atoi(argv[5]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[4] = v;


v = atoi(argv[6]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[5] = v;


v = atoi(argv[7]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[6] = v;


v = atoi(argv[8]);
if ( v < -64 || v > 63 )
goto _PARA_ERR;
dat[7] = v + 0x40;


v = atoi(argv[9]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[8] = v;


v = atoi(argv[10]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[9] = v;


v = atoi(argv[11]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[10] = v;
return gs_genMML( sqr, bufSiz, buf, ((0x402040)+((part)<<8)), 11, dat );
}
# 531 "gs_cc.c"
int exGs_cc2control( char *sqr, unsigned int bufSiz, char *buf, int argc, char **argv )
{
int part, v;
char dat[16];
int ret;

if ( argc != 12 )
{
_PARA_ERR:
MM_setErrMsg(sqr,"[GS] 'CC2 control' error!");
return((-1));
}

if ( (part = gs_getpart_n(atoi(argv[0]))) < 0 )
goto _PARA_ERR;


v = atoi(argv[1]);
if ( v < -24 || v > 24 )
goto _PARA_ERR;
dat[0] = v + 0x40;


v = atoi(argv[2]);
if ( v < -64 || v > 63 )
goto _PARA_ERR;
dat[1] = v + 0x40;


v = atoi(argv[3]);
if ( v < -64 || v > 63 )
goto _PARA_ERR;
dat[2] = v + 0x40;


v = atoi(argv[4]);
if ( v < -64 || v > 63 )
goto _PARA_ERR;
dat[3] = v + 0x40;


v = atoi(argv[5]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[4] = v;


v = atoi(argv[6]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[5] = v;


v = atoi(argv[7]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[6] = v;


v = atoi(argv[8]);
if ( v < -64 || v > 63 )
goto _PARA_ERR;
dat[7] = v + 0x40;


v = atoi(argv[9]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[8] = v;


v = atoi(argv[10]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[9] = v;


v = atoi(argv[11]);
if ( v < 0 || v > 127 )
goto _PARA_ERR;
dat[10] = v;

return gs_genMML( sqr, bufSiz, buf, ((0x402050)+((part)<<8)), 11, dat );
}
# 7 "gs_drum.c"
int exGs_rymMap( char *sqr, unsigned int bufSiz, char *buf, int argc, char **argv )
{
int i, part;
char dat[4];
int ret;

if ( argc != 2 )
{
_PARA_ERR:
MM_setErrMsg(sqr,"[GS] 'rhythm map' error!");
return((-1));
}

if ( (part = gs_getpart_n(atoi(argv[0]))) < 0 )
goto _PARA_ERR;
dat[0] = atoi(argv[1]);
return gs_genMML( sqr, bufSiz, buf, ((0x401015)+((part)<<8)), 1, dat );
}
# 18 "main.c"
int HE386_start( char *sqr )
{
GM_macroInit(sqr);
GS_macroInit(sqr);
# 33 "main.c"
return ((0));
}
