static gboolean cmdline_key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer user_data) { bool is_shift = event->state & GDK_SHIFT_MASK; bool is_ctl = event->state & GDK_CONTROL_MASK; #ifdef DEBUG g_printf("KEY \"%s\" (%d) SHIFT=%d CNTRL=%d\n", event->string, *event->string, event->state & GDK_SHIFT_MASK, event->state & GDK_CONTROL_MASK); #endif switch (event->keyval) { case GDK_BackSpace: cmdline_keypress('\b'); break; case GDK_Tab: cmdline_keypress('\t'); break; case GDK_Return: cmdline_keypress(get_eol()); break; /* * Function key macros */ #define FN(KEY, MACRO) \ case GDK_##KEY: cmdline_fnmacro(#MACRO); break #define FNS(KEY, MACRO) \ case GDK_##KEY: cmdline_fnmacro(is_shift ? "S" #MACRO : #MACRO); break FN(Down, DOWN); FN(Up, UP); FNS(Left, LEFT); FNS(Right, RIGHT); FN(KP_Down, DOWN); FN(KP_Up, UP); FNS(KP_Left, LEFT); FNS(KP_Right, RIGHT); FNS(Home, HOME); case GDK_F1...GDK_F35: { gchar macro_name[3+1]; g_snprintf(macro_name, sizeof(macro_name), "F%d", event->keyval - GDK_F1 + 1); cmdline_fnmacro(macro_name); break; } FNS(Delete, DC); FNS(Insert, IC); FN(Page_Down, NPAGE); FN(Page_Up, PPAGE); FNS(Print, PRINT); FN(KP_Home, A1); FN(KP_Prior, A3); FN(KP_Begin, B2); FN(KP_End, C1); FN(KP_Next, C3); FNS(End, END); FNS(Help, HELP); #undef FNS #undef FN /* * Control keys and keys with printable representation */ default: gunichar u = gdk_keyval_to_unicode(event->keyval); if (u && g_unichar_to_utf8(u, NULL) == 1) { gchar key; g_unichar_to_utf8(u, &key); if (key > 0x7F) break; if (is_ctl) key = CTL_KEY(g_ascii_toupper(key)); cmdline_keypress(key); } } return TRUE; }
default: return 1<<SHIFT; } return (slot->EG.volume>>EG_SHIFT)<<(SHIFT-10); } static data32_t SCSP_Step(struct _SLOT *slot) { int octave=OCT(slot); int Fo=44100; int Fn; if(octave&8) Fo>>=(16-octave); else Fo<<=octave; Fn=Fo*(((FNS(slot))<<(SHIFT-10))|(1<<SHIFT)); return Fn/(44100); } static void Compute_LFO(struct _SLOT *slot) { if(PLFOS(slot)!=0) LFO_ComputeStep(&(slot->PLFO),LFOF(slot),PLFOWS(slot),PLFOS(slot),0); if(ALFOS(slot)!=0) LFO_ComputeStep(&(slot->ALFO),LFOF(slot),ALFOWS(slot),ALFOS(slot),1); } static void SCSP_StartSlot(struct _SLOT *slot) { slot->active=1; slot->base=SCSP->SCSPRAM+SA(slot);