Beispiel #1
0
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!"));
    }
}
Beispiel #2
0
// 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);
}
Beispiel #3
0
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;
        }
    }
}
Beispiel #4
0
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;
        }
}
Beispiel #5
0
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;
}
Beispiel #6
0
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;
}