upload(unsigned char tonebyte[NPATCH][NCODPARAM]) /* send sets of patch data to synth */ { int n, i; clearsc(); puts(" Upload - Send 64 patches in memory to synth.\n\n"); puts("Make sure your synth has MIDI EXCL turned on.\n"); puts("Also set the protect switch in back to the OFF position.\n"); puts(" (Hitting the ESC key will terminate transmission)\n"); putcmd(UART); /* tell MPU401 to go into simple UART mode */ for (i = 0; i < 10; i++){ /* make ten attempts to send data */ puts("Hold DATA TRANSFER key down and press BULK LOAD key on synth."); n = getexcl(); if (n == MIDRQF){ clearsc(); puts("Received request for data message, proceeding with load."); break; } else if (n == -2){ /* user hit ESC */ putcmd(SYSRESET); return(1); } else { puts("*** Did not get request for data, try again. ****"); } } if ( n != MIDRQF){ writerr("Failed ten attempts to send. Aborting transmission."); putcmd(SYSRESET); return(1); } sendexcl(MIDWSF); n = getexcl(); if (n != MIDACK) puts("Did not get ACK message after sending WSF."); n = sendtones(tonebyte); /* send all patches */ putcmd(SYSRESET); /* put MPU401 back into normal mode */ if (n == MIDACK) puts("Synth acknowledged data receipt was ok."); else if (n == -1){ /* user hit ESC key */ writerr("Upload terminated. "); return(-1); } else { puts("Synth did not acknowledge final data receipt."); puts("Check data before saving, or resend."); } writerr(" "); return(1); }
void joyinput(int press,SDL_JoyButtonEvent jbutton) { if( i_watch && press ) SJC_Write("jbutton #%d",jbutton.button); if( kwik && press ) kwikbind( INP_JBUT, jbutton.button ); else putcmd( INP_JBUT,jbutton.button,press ); }
void mouseinput(int press,SDL_MouseButtonEvent mbutton) { if( i_watch && press ) SJC_Write("mbutton #%d, x %d, y %d",mbutton.button,i_mousex,i_mousey); i_mousex = mbutton.x; i_mousey = mbutton.y; if( kwik ) kwikbind(INP_MBUT,mbutton.button); else putcmd( INP_MBUT,mbutton.button,press ); }
void kbinput(int press,SDL_keysym keysym) { SDLKey sym = keysym.sym; SDLMod mod = keysym.mod; Uint16 unicode = keysym.unicode; if( i_watch && press ) SJC_Write("key #%d, mod #%d, unicode #%d",sym,mod,unicode); if( (sym==SDLK_q && mod&(KMOD_CTRL|KMOD_META)) || (sym==SDLK_F4 && mod&KMOD_ALT) ) command("exit"); else if( press && (sym==SDLK_F11 || (sym==SDLK_f && mod&KMOD_META)) ) { if( !v_fullscreen ) command("fullscreen"); else command("window"); } else if(press && sym==SDLK_BACKQUOTE) toggleconsole(); else if(press && kwik) kwikbind( INP_KEYB, sym ); else if(console_open) { if(!press) ; //nothing on key up else if(unicode>31 && unicode<127) SJC_Put((char)unicode); else if(sym==SDLK_RETURN) { if( SJC_Submit() ) command(SJC.buf[1]); } else if(sym==SDLK_BACKSPACE || sym==SDLK_DELETE) SJC_Rub(); else if(sym==SDLK_ESCAPE && console_open) toggleconsole(); } else putcmd( INP_KEYB,sym,press ); }
download(int param[], char name[], unsigned char tonebyte[NPATCH][NCODPARAM]) /* put patch data from synth->tonebyte */ { int n, m, i; clearsc(); puts(" Download - Send all patches in ynths memory to computer."); puts(" "); puts(" "); puts("Make sure your synth has MIDI EXCL turned on."); puts(" (ESC to exit)"); puts(" "); putcmd(UART); /* tell MPU401 to go into simple UART mode */ for (i = 0; i < 10; i++){ /* make ten attempts to get data */ puts("Hold data transfer key down and press bulk dump key on synth."); sendexcl(MIDRQF); m = getexcl(); if (m == MIDWSF){ clearsc(); puts("Sending acknowledge, proceding with load."); sendexcl(MIDACK); break; } else if (m == -2){ /* user hit ESC */ putcmd(SYSRESET); return(-1); } else { puts("*** Failed load attemp, try again. ****"); } } if (m != MIDWSF){ writerr("Failed ten attempts to load. Aborting load procedure."); putcmd(SYSRESET); return(-1); } n = gettones(tonebyte); /* get all patches */ putcmd(SYSRESET); /* put MPU401 back into normal mode */ if (n == 0) puts("Data integrity check ok"); else if (n == -2) /* user hit ESC key */ return(-1); else { puts("Checksum did not match, may be data error."); puts("Check data before saving, or resend"); } puts(" "); puts("Patches received:"); for (n = 0; n < 16; n++){ m = n * 4; decode(m, param, name, tonebyte); fputs(name,stdout); fputs(" ",stdout); decode(m+1, param, name, tonebyte); fputs(name,stdout); fputs(" ",stdout); decode(m+2, param, name, tonebyte); fputs(name,stdout); fputs(" ",stdout); decode(m+3, param, name, tonebyte); fputs(name,stdout); fputc('\n',stdout); } writerr("Download complete. "); return(1); }
int mod_command(char *q, char *args) { if( q==NULL ) { ; } else if( strcmp(q, "edit")==0 ) { editmode = editmode ? 0 : 1; v_center = editmode ? 0 : 1; return 0; } else if( strcmp(q, "model")==0 ) { setmodel = safe_atoi(tok(args, " ")); // FIXME: lame hack return 0; } else if( strcmp(q, "bounds")==0 || strcmp(q, "blocksize")==0 ) { size_t n = 0; int x = safe_atoi(tok(args, " ")); int y = safe_atoi(tok(args, " ")); int z = safe_atoi(tok(args, " ")); char chr = strcmp(q, "bounds")==0 ? 'b' : 'z'; if( !x || !y || !z ) { context *co = fr[hotfr%maxframes].objs[mycontext].data; // FIXME is mycontext always set here? if( chr == 'b' ) echo("The current bounds are (X,Y,Z): %d %d %d", co->x, co->y, co->z); else echo("The current blocksize is (X,Y,Z): %d %d %d", co->bsx, co->bsy, co->bsz); return 0; } memset(&magic_c, 0, sizeof magic_c); packbytes(magic_c.data, chr, &n, 1); packbytes(magic_c.data, x, &n, 4); packbytes(magic_c.data, y, &n, 4); packbytes(magic_c.data, z, &n, 4); magic_c.datasz = n; magic_c.flags |= CMDF_DATA; magic_c.cmd = CMDT_0CON; // console command putcmd(-1, -1, -1); return 0; } else if( strcmp(q, "tilespacing")==0 ) { size_t n = 0; int tileuw = safe_atoi(tok(args, " ")); int tileuh = safe_atoi(tok(args, " ")); if( !tileuw || !tileuh ) { context *co = fr[hotfr%maxframes].objs[mycontext].data; echo("The current tilespacing is (W,H): %d %d", co->tileuw, co->tileuh); return 0; } memset(&magic_c, 0, sizeof magic_c); packbytes(magic_c.data, 't', &n, 1); packbytes(magic_c.data, tileuw, &n, 4); packbytes(magic_c.data, tileuh, &n, 4); magic_c.datasz = n; magic_c.flags |= CMDF_DATA; magic_c.cmd = CMDT_0CON; putcmd(-1, -1, -1); return 0; } else if( strcmp(q, "orthographic")==0 || strcmp(q, "dimetric")==0 ) { size_t n = 0; memset(&magic_c, 0, sizeof magic_c); packbytes(magic_c.data, q[0], &n, 1); magic_c.datasz = n; magic_c.flags |= CMDF_DATA; magic_c.cmd = CMDT_0CON; putcmd(-1, -1, -1); return 0; } else if( strcmp(q, "resprite")==0 ) { reload_sprites(); renumber_sprites(); echo("Was %d sprites, now %d sprites.", old_spr_count, spr_count); unload_sprites(old_sprites, old_spr_count); return 0; } return 1; }
void axisinput(SDL_JoyAxisEvent jaxis) { static char **axdats = NULL; static int size = 0; static const char POS_ON = 1; static const char NEG_ON = 2; if( size<=jaxis.which ) //haven't seen a joystick this high before? { axdats = realloc(axdats,sizeof(*axdats)*(jaxis.which+1)); memset(axdats+size,0,sizeof(*axdats)*(jaxis.which+1-size)); size = jaxis.which+1; } if( !axdats[jaxis.which] ) //haven't seen this exact joystick before? axdats[jaxis.which] = calloc(256,sizeof(**axdats)); char *stat = axdats[jaxis.which]+jaxis.axis; int val = jaxis.value; int ax = jaxis.axis; if( i_watch ) SJC_Write("joystick #%d, axis #%d, stat %d, value %d",jaxis.which,ax,*stat,val); if( val> 3400 && !(*stat&POS_ON) ) { *stat|= POS_ON; kwik ? kwikbind(INP_JAXP,ax) : putcmd( INP_JAXP,ax,1 ); } if( val< 3000 && (*stat&POS_ON) ) { *stat&=~POS_ON; putcmd( INP_JAXP,ax,0 ); } if( val<-3400 && !(*stat&NEG_ON) ) { *stat|= NEG_ON; kwik ? kwikbind(INP_JAXN,ax) : putcmd( INP_JAXN,ax,1 ); } if( val>-3000 && (*stat&NEG_ON) ) { *stat&=~NEG_ON; putcmd( INP_JAXN,ax,0 ); } }