void ibmasm_handle_mouse_interrupt(struct service_processor *sp) { unsigned long reader; unsigned long writer; struct remote_input input; reader = get_queue_reader(sp); writer = get_queue_writer(sp); while (reader != writer) { memcpy_fromio(&input, get_queue_entry(sp, reader), sizeof(struct remote_input)); print_input(&input); if (input.type == INPUT_TYPE_MOUSE) { send_mouse_event(sp->remote.mouse_dev, &input); } else if (input.type == INPUT_TYPE_KEYBOARD) { send_keyboard_event(sp->remote.keybd_dev, &input); } else break; reader = advance_queue_reader(sp, reader); writer = get_queue_writer(sp); } }
static int script_queue_set(char *qname, char *next, int num, char *msg) { queue_entry_t *q; get_queue_entry(qname, next, num, NULL, &q); if (!q) return(-1); queue_entry_from_text(q, msg); return(0); }
static char *script_queue_get(char *qname, char *next, int num) { queue_entry_t *q; char buf[1024]; int remaining; get_queue_entry(qname, next, num, NULL, &q); if (!q) return(NULL); remaining = sizeof(buf); queue_entry_to_text(q, buf, &remaining); if (remaining < sizeof(buf)) buf[sizeof(buf)-remaining-1] = 0; else buf[0] = 0; return strdup(buf); }
static int script_queue_insert(char *qname, char *next, int num, char *msg) { queue_t *queue; queue_entry_t *q, *newq; get_queue_entry(qname, next, num, &queue, &q); newq = queue_new(msg); if (!q) queue_append(queue, newq); else { queue->len++; newq->next = q; newq->prev = q->prev; if (q->prev) q->prev->next = newq; else queue->queue_head = newq; q->prev = q; } return(0); }
void playqueue_display (int argc, char * * argv) { int qlength = get_queue_length (); audtool_report ("%d queued tracks.", qlength); int total = 0; for (int qpos = 0; qpos < qlength; qpos ++) { int pos = get_queue_entry (qpos); char * title = get_entry_title (pos); int length = get_entry_length (pos) / 1000; total += length; /* adjust width for multi byte characters */ int column = 60; for (const char * p = title; * p; p = g_utf8_next_char (p)) { int stride = g_utf8_next_char (p) - p; if (g_unichar_iswide (g_utf8_get_char (p)) || g_unichar_iswide_cjk (g_utf8_get_char (p))) column += (stride - 2); else column += (stride - 1); } char * fmt = g_strdup_printf ("%%4d | %%4d | %%-%ds | %%d:%%.2d", column); audtool_report (fmt, qpos + 1, pos + 1, title, length / 60, length % 60); g_free (fmt); } audtool_report ("Total length: %d:%.2d", total / 60, total % 60); }
void playqueue_get_list_position (int argc, char * * argv) { int qpos = check_args_playlist_pos (argc, argv); audtool_report ("%d", get_queue_entry (qpos - 1) + 1); }