int server_logic(client_t *c, proto_msg_t *msg) { TRACE_MSG(msg); switch (proto_msg_type(msg)) { case MSG_HELLO: return (handle_hello(c, msg)); case MSG_OP: return (handle_op(c, msg)); case MSG_TEXT: return (handle_text(c, msg)); case MSG_NUM: return (handle_num(c, msg)); default: return (send_text_message(c, "thank you!")); } }
// Caption/abstract static void handle_2_120(deark *c, lctx *d, const struct ds_info *dsi, de_int64 pos, de_int64 len) { de_ucstring *s = NULL; dbuf *outf = NULL; int encoding; const char *fntoken; if(c->extract_level<2) { handle_text(c, d, dsi, pos, len); goto done; } // FIXME: There is currently no way to extract IPTC captions to files, // except when reading a raw IPTC file. If IPTC is embedded in some other // file (as it usually is), then the -a option will extract the entire // IPTC data, and we will never get here. fntoken = "caption.txt"; encoding = get_ds_encoding(c, d, dsi->recnum); if(encoding==DE_ENCODING_UNKNOWN) { // If the encoding is unknown, copy the raw bytes. dbuf_create_file_from_slice(c->infile, pos, len, fntoken, NULL, DE_CREATEFLAG_IS_AUX); goto done; } // If the encoding is known, convert to UTF-8. s = ucstring_create(c); dbuf_read_to_ucstring(c->infile, pos, len, s, 0, encoding); outf = dbuf_create_output_file(c, fntoken, NULL, DE_CREATEFLAG_IS_AUX); ucstring_write_as_utf8(c, s, outf, 1); done: if(outf) dbuf_close(outf); if(s) ucstring_destroy(s); }
static void handle_key(SDL_KeyboardEvent * e) { // See SDLKey man page bool shift = e->keysym.mod & KMOD_SHIFT; //bool ctrl = e->keysym.mod & KMOD_CTRL; //bool alt = e->keysym.mod & KMOD_ALT; // Currently none of these modifiers are used // If they're held down then the key probably isn't for us if (e->keysym.mod & ~(KMOD_SHIFT)) return; if(pat_entry) { switch(e->keysym.sym) { case SDLK_RETURN: for(int i=0; i<config.ui.n_patterns; i++) { if(map_selection[i] == selected) { if (deck_load_set(&deck[map_deck[i]], pat_entry_text) == 0) { for (int j = 0; j < config.ui.n_patterns; j++) { if (map_deck[j] == map_deck[selected]) redraw_pattern_ui(j); } } else if(deck_load_pattern(&deck[map_deck[i]], map_pattern[i], pat_entry_text, -1) == 0) { redraw_pattern_ui(i); } break; } } pat_entry = false; SDL_StopTextInput(); break; case SDLK_ESCAPE: pat_entry = false; SDL_StopTextInput(); break; case SDLK_BACKSPACE: if (pat_entry_text[0] != '\0') { pat_entry_text[strlen(pat_entry_text)-1] = '\0'; handle_text("\0"); } break; default: break; } } else { DEBUG("Keysym: %u '%c'", e->keysym.sym, e->keysym.sym); switch(e->keysym.sym) { case SDLK_h: case SDLK_LEFT: selected = map_left[selected]; break; case SDLK_l: case SDLK_RIGHT: selected = map_right[selected]; break; case SDLK_UP: case SDLK_k: if (shift) increment_slider(selected, +0.1); else selected = map_up[selected]; break; case SDLK_DOWN: case SDLK_j: if (shift) increment_slider(selected, -0.1); else selected = map_down[selected]; break; case SDLK_ESCAPE: selected = 0; break; case SDLK_DELETE: case SDLK_d: for(int i=0; i<config.ui.n_patterns; i++) { if(map_selection[i] == selected) { deck_unload_pattern(&deck[map_deck[i]], map_pattern[i]); break; } } break; case SDLK_BACKQUOTE: set_slider_to(selected, 0, 0); break; case SDLK_1: set_slider_to(selected, 0.1, 0); break; case SDLK_2: set_slider_to(selected, 0.2, 0); break; case SDLK_3: set_slider_to(selected, 0.3, 0); break; case SDLK_4: if(shift) { selected = map_end[selected]; } else { set_slider_to(selected, 0.4, 0); } break; case SDLK_5: set_slider_to(selected, 0.5, 0); break; case SDLK_6: if(shift) { selected = map_home[selected]; } else { set_slider_to(selected, 0.6, 0); } break; case SDLK_7: set_slider_to(selected, 0.7, 0); break; case SDLK_8: set_slider_to(selected, 0.8, 0); break; case SDLK_9: set_slider_to(selected, 0.9, 0); break; case SDLK_0: set_slider_to(selected, 1, 0); break; case SDLK_SEMICOLON: if(!shift) break; for(int i=0; i<config.ui.n_patterns; i++) { if(map_selection[i] == selected) { pat_entry = true; pat_entry_text[0] = '\0'; SDL_StartTextInput(); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, pat_entry_fb); render_textbox(pat_entry_text, config.ui.pat_entry_width, config.ui.pat_entry_height); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); } } break; case SDLK_RETURN: for(int i=0; i<config.ui.n_patterns; i++) { if(map_selection[i] == selected) { if(i < 4) { left_deck_selector = 0; } else if(i < 8) { right_deck_selector = 1; } else if(i < 12) { left_deck_selector = 2; } else if(i < 16) { right_deck_selector = 3; } } } break; case SDLK_LEFTBRACKET: if(left_deck_selector == 0) { left_deck_selector = 2; } else { left_deck_selector = 0; } break; case SDLK_RIGHTBRACKET: if(right_deck_selector == 1) { right_deck_selector = 3; } else { right_deck_selector = 1; } break; case SDLK_SPACE: selected = map_space[selected]; break; case SDLK_TAB: if(shift) { selected = map_stab[selected]; } else { selected = map_tab[selected]; } break; case SDLK_HOME: selected = map_home[selected]; break; case SDLK_END: selected = map_end[selected]; break; case SDLK_r: params_refresh(); if (shift) { midi_refresh(); output_refresh(); } break; case SDLK_w: if (shift) { for(int i=0; i<config.ui.n_patterns; i++) { if(map_selection[i] == selected) deck_save(&deck[map_deck[i]], "NAME"); } } break; case SDLK_q: switch(strip_indicator) { case STRIPS_NONE: strip_indicator = STRIPS_SOLID; break; case STRIPS_SOLID: strip_indicator = STRIPS_COLORED; break; case STRIPS_COLORED: default: strip_indicator = STRIPS_NONE; break; } break; default: break; } } }
void ui_run() { SDL_Event e; quit = false; while(!quit) { ui_render(true); while(SDL_PollEvent(&e) != 0) { if (midi_command_event != (Uint32) -1 && e.type == midi_command_event) { struct midi_event * me = e.user.data1; switch (me->type) { case MIDI_EVENT_SLIDER: set_slider_to(me->slider.index, me->slider.value, me->snap); break; case MIDI_EVENT_KEY:; SDL_KeyboardEvent fakekeyev; memset(&fakekeyev, 0, sizeof fakekeyev); fakekeyev.type = SDL_KEYDOWN; fakekeyev.state = SDL_PRESSED; fakekeyev.keysym.sym = me->key.keycode[0]; handle_key(&fakekeyev); break; } free(e.user.data1); free(e.user.data2); continue; } switch(e.type) { case SDL_QUIT: quit = true; break; case SDL_KEYDOWN: handle_key(&e.key); break; case SDL_MOUSEMOTION: mx = e.motion.x; my = e.motion.y; handle_mouse_move(); break; case SDL_MOUSEBUTTONDOWN: mx = e.button.x; my = e.button.y; switch(e.button.button) { case SDL_BUTTON_LEFT: handle_mouse_down(); break; } break; case SDL_MOUSEBUTTONUP: mx = e.button.x; my = e.button.y; switch(e.button.button) { case SDL_BUTTON_LEFT: handle_mouse_up(); break; } break; case SDL_TEXTINPUT: handle_text(e.text.text); break; } } for(int i=0; i<N_DECKS; i++) { deck_render(&deck[i]); } crossfader_render(&crossfader, deck[left_deck_selector].tex_output, deck[right_deck_selector].tex_output); ui_render(false); render_readback(&render); SDL_GL_SwapWindow(window); double cur_t = SDL_GetTicks(); double dt = cur_t - l_t; if(dt > 0) time += dt / 1000; l_t = cur_t; } }
bool Skin::setSkin (const QString& path) { DirIteratorBase *iter = DirIteratorBase::open(path); if (iter == 0) { return false; } m_path = path; m_items.clear(); m_letterMap.clear(); m_smallNumbers.clear (); m_numbers.clear(); m_pledit_txt.clear(); m_playlist.clear (); bool b_main = false, b_titlebar = false, b_posbar = false, b_volume = false; bool b_balance = false, b_cbuttons = false, b_monoster = false; bool b_playpaus = false, b_shufrep = false, b_text = false; bool b_numbers = false, b_eqmain = false, b_eq_ex = false; bool b_pledit = false, b_pledit_txt = false; QPixmap p_eq_ex; QPixmap p_numbers; QPixmap p_volume; QString entry; while (!(entry = iter->next ().toLower ()).isEmpty ()) { if ((entry = QFileInfo (entry).fileName ()).isEmpty ()) { // workaround to ignore pathes in archives continue; } if (entry.endsWith (".txt")) { QPointer<QIODevice> d = iter->entry (); if (d == 0) continue; d->setTextModeEnabled (true); if ( entry == "pledit.txt") { b_pledit_txt = handle_pledit_txt (d); } continue; } else if (entry.endsWith (".cur")) { // Cursor files are not supported yet continue; } else { entry = entry.section(".", 0, 0); if (entry == "main") { b_main = handle_main (iter->pixmapEntry ()); } else if (entry == "titlebar") { b_titlebar = handle_titlebar (iter->pixmapEntry ()); } else if (entry == "posbar" ) { b_posbar = handle_posbar (iter->pixmapEntry ()); } else if (entry == "volume") { p_volume = iter->pixmapEntry (); b_volume = handle_volume (p_volume); } else if (entry == "balance") { b_balance = handle_balance (iter->pixmapEntry ()); } else if (entry == "cbuttons") { b_cbuttons = handle_cbuttons (iter->pixmapEntry ()); } else if (entry == "monoster") { b_monoster = handle_monoster (iter->pixmapEntry ()); } else if (entry == "playpaus") { b_playpaus = handle_playpaus (iter->pixmapEntry ()); } else if (entry == "shufrep") { b_shufrep = handle_shufrep (iter->pixmapEntry ()); } else if (entry == "text") { b_text = handle_text (iter->pixmapEntry ()); } else if (entry == "nums_ex") { b_numbers = handle_numbers (iter->pixmapEntry ()); } else if (entry == "numbers") { p_numbers = iter->pixmapEntry (); } else if (entry == "eqmain") { b_eqmain = handle_eqmain (iter->pixmapEntry ()); } else if (entry == "eq_ex") { p_eq_ex = iter->pixmapEntry (); } else if (entry == "pledit") { b_pledit = handle_pledit (iter->pixmapEntry ()); } continue; } } delete iter; if (!b_balance) { // Fallback, use volume image if skin has no balance image handle_balance (p_volume); } if (!b_numbers) { // Fallback if skin has no nums_ex file b_numbers = handle_numbers (p_numbers); } // handle_eq_ex must be called after handle_eqmain if (b_eqmain) { b_eq_ex = handle_eq_ex (p_eq_ex); } if (!(b_main && b_titlebar && b_posbar && b_volume && b_cbuttons && b_monoster && b_playpaus && b_shufrep && b_text && b_numbers && b_eqmain && b_eq_ex && b_pledit && b_pledit_txt)) { // Some debug information to find out why a skin failed to load QStringList list; if (!b_main) { list << "main"; } if (!b_titlebar) { list << "titlebar"; } if (!b_posbar) { list << "posbar"; } if (!b_volume) { list << "volume"; } if (!b_cbuttons) { list << "cbuttons"; } if (!b_monoster) { list << "monoster"; } if (!b_playpaus) { list << "playpaus"; } if (!b_shufrep) { list << "shufrep"; } if (!b_text) { list << "text"; } if (!b_numbers) { list << "numbers/nums_ex"; } if (!b_eqmain) { list << "equmain"; } if (!b_eq_ex) { list << "eq_ex"; } if (!b_pledit) { list << "pledit"; } if (!b_pledit_txt) { list << "pledit.txt"; } qDebug() << "Could not load Skin" << path << ": failed to load files" << list; return false; } return true; }
static int do_dataset(deark *c, lctx *d, de_int64 ds_idx, de_int64 pos1, de_int64 *bytes_consumed) { de_byte b; de_byte recnum, dsnum; int retval = 0; de_int64 pos = pos1; de_int64 dflen; de_int64 dflen_bytes_consumed; struct ds_info dsi; int ds_known; *bytes_consumed = 0; b = de_getbyte(pos); if(b!=0x1c) { if(b==0x00 && ds_idx>0) { // Extraneous padding at the end of data? de_warn(c, "Expected %d bytes of IPTC data, only found %d\n", (int)c->infile->len, (int)pos); } else { de_err(c, "Bad IPTC tag marker (0x%02x) at %d\n", (int)b, (int)pos); } goto done; } pos++; recnum = de_getbyte(pos++); dsnum = de_getbyte(pos++); ds_known = lookup_ds_info(recnum, dsnum, &dsi); if(!read_dflen(c, c->infile, pos, &dflen, &dflen_bytes_consumed)) goto done; pos += dflen_bytes_consumed; de_dbg(c, "IPTC dataset %d:%02d (%s) dpos=%" INT64_FMT " dlen=%" INT64_FMT "\n", (int)recnum, (int)dsnum, dsi.dsname, pos, dflen); // Decode the value de_dbg_indent(c, 1); if(dsi.hfn) { dsi.hfn(c, d, &dsi, pos, dflen); } else if(dsi.flags&0x1) { handle_text(c, d, &dsi, pos, dflen); } else if(dsi.recnum==2 && !ds_known) { // Unknown record-2 datasets often contain readable text. handle_text(c, d, &dsi, pos, dflen); } pos += dflen; de_dbg_indent(c, -1); // *bytes_consumed = pos - pos1; retval = 1; done: return retval; }