示例#1
0
文件: alsa.c 项目: pmyadlowsky/qmx
static SCM alsa_cards(void) {
	// compile list of available cards
	int card;
	char buf[32];
	char *pt;
	SCM list, alist;
	snd_ctl_card_info_t *info;
	snd_ctl_card_info_alloca(&info);
	card = -1;
	list = SCM_EOL;
	while (1) {
		if ((snd_card_next(&card) < 0) || (card < 0)) break;
		sprintf(buf, "hw:%d", card);
		alist = SCM_EOL;
		alist = scm_assq_set_x(alist, SYM("dev"),
					scm_from_locale_string(buf));
		snd_card_get_name(card, &pt);
		alist = scm_assq_set_x(alist, SYM("name"),
					scm_take_locale_string(pt));
		list = scm_cons(alist, list);
		scm_remember_upto_here_1(alist);
		}
	scm_remember_upto_here_1(list);
	return list;
	}
示例#2
0
static SCM decode_timestamp(const char *string) {
	const char *here;
	int year, month, day, hour, min;
	double sec;
	SCM rtn;
	here = string;
	year = atoi(here);
	here = index(here, '-') + 1;
	month = atoi(here);
	here = index(here, '-') + 1;
	day = atoi(here);
	if (index(here, ':') == NULL) hour = min = sec = 0;
	else {
		here = index(here, ' ') + 1;
		hour = atoi(here);
		here = index(here, ':') + 1;
		min = atoi(here);
		here = index(here, ':') + 1;
		sec = atof(here);
		}
	rtn = local_time_intern(year, month, day, hour, min, sec);
	if (rtn == SCM_BOOL_F) log_msg("BAD TIME: '%s' %d-%d-%d %d:%d:%f\n",
				string, year, month, day, hour, min, sec);
	scm_remember_upto_here_1(rtn);
	return rtn;
	}
示例#3
0
static SCM pg_done(SCM res) {
	struct pg_res *pgr;
	scm_assert_smob_type(pg_res_tag, res);
	pgr = (struct pg_res *)SCM_SMOB_DATA(res);
	scm_remember_upto_here_1(res);
	return (pgr->res == NULL ? SCM_BOOL_T : SCM_BOOL_F);
	}
示例#4
0
static int
bpscm_print_breakpoint_smob (SCM self, SCM port, scm_print_state *pstate)
{
    breakpoint_smob *bp_smob = (breakpoint_smob *) SCM_SMOB_DATA (self);
    struct breakpoint *b = bp_smob->bp;

    gdbscm_printf (port, "#<%s", breakpoint_smob_name);

    /* Only print what we export to the user.
       The rest are possibly internal implementation details.  */

    gdbscm_printf (port, " #%d", bp_smob->number);

    /* Careful, the breakpoint may be invalid.  */
    if (b != NULL)
    {
        gdbscm_printf (port, " %s %s %s",
                       bpscm_type_to_string (b->type),
                       bpscm_enable_state_to_string (b->enable_state),
                       b->silent ? "silent" : "noisy");

        gdbscm_printf (port, " hit:%d", b->hit_count);
        gdbscm_printf (port, " ignore:%d", b->ignore_count);

        if (b->addr_string != NULL)
            gdbscm_printf (port, " @%s", b->addr_string);
    }

    scm_puts (">", port);

    scm_remember_upto_here_1 (self);

    /* Non-zero means success.  */
    return 1;
}
示例#5
0
/*! \brief Runs a page hook.
 * \par Function Description
 * Runs a hook called \a name, which should expect the single #PAGE \a
 * page as its argument.
 *
 * \param name name of hook to run
 * \param page #PAGE argument for hook.
 */
void
g_run_hook_page (const char *name, PAGE *page)
{
  SCM args = scm_list_1 (edascm_from_page (page));
  scm_run_hook (g_get_hook_by_name (name), args);
  scm_remember_upto_here_1 (args);
}
示例#6
0
static SCM fetch_node(SCM smob, SCM args) {
	MAKE_NODE * node;
	SCM payload;
	char *buf;
	node = (MAKE_NODE *)SCM_SMOB_DATA(smob);
	scm_lock_mutex(node->mutex);
	if (!node->dirty) {
		payload = node->payload;
		scm_unlock_mutex(node->mutex);
		return payload;
		}
	//log_msg("REGENERATE %08x\n", (unsigned long)smob);
	node->dirty = 0;
	switch (node->type) {
	case TYPE_DATUM: break;
	case TYPE_FILE:
		buf = load_from_file(node->filepath);
		if (buf != NULL)
			node->payload = scm_take_locale_string(buf);
		else node->payload = SCM_BOOL_F;
		break;
	case TYPE_CHAIN:
		node->payload = scm_apply_0(node->callback, args);
		break;
		}
	payload = node->payload;
	scm_unlock_mutex(node->mutex);
	scm_remember_upto_here_2(smob, args);
	scm_remember_upto_here_1(payload);
	return payload;
	}
示例#7
0
static SCM dispatch_event(void *data) {
	SCM action = *((SCM *)data);
	scm_call_0(action);
	scm_gc_unprotect_object(action);
	scm_remember_upto_here_1(action);
	return SCM_BOOL_T;
	}
示例#8
0
static SCM gunzip(SCM smob) {
	DEFLATE_BLOB *blob;
	char *buf;
	int ret;
	SCM out;
	z_stream strm;
	blob = (DEFLATE_BLOB *)SCM_SMOB_DATA(smob);
	strm.zalloc = Z_NULL;
	strm.zfree = Z_NULL;
	strm.opaque = Z_NULL;
	strm.avail_in = 0;
	strm.next_in = Z_NULL;
	ret = inflateInit(&strm);
	if (ret != Z_OK) {
		log_msg("zlib: inflate init failed\n");
		return SCM_BOOL_F;
		}
	buf = (char *)malloc(blob->orig_len);
	strm.total_in = strm.avail_in = blob->zip_len;
	strm.total_out = strm.avail_out = blob->orig_len;
	strm.next_in = (unsigned char *)blob->payload;
	strm.next_out = (unsigned char *)buf;
	inflate(&strm, Z_FINISH);
	inflateEnd(&strm);
	out = scm_from_utf8_stringn(buf, blob->orig_len);
	free(buf);
	return out;
	scm_remember_upto_here_1(out);
	}
示例#9
0
/*! \brief Add a directory to the Guile load path.
 * \par Function Description
 * Prepends \a s_path to the Guile system '%load-path', after
 * expanding environment variables.
 *
 *  \param [in] s_path  Path to be added.
 *  \return SCM_BOOL_T.
 */
SCM g_rc_scheme_directory(SCM s_path)
{
  char *temp;
  gchar *expanded;
  SCM s_load_path_var;
  SCM s_load_path;

  SCM_ASSERT (scm_is_string (s_path), s_path,
              SCM_ARG1, "scheme-directory");

  /* take care of any shell variables */
  temp = scm_to_utf8_string (s_path);
  expanded = s_expand_env_variables (temp);
  s_path = scm_from_utf8_string (expanded);
  free (temp);
  g_free (expanded);

  s_load_path_var = scm_c_lookup ("%load-path");
  s_load_path = scm_variable_ref (s_load_path_var);
  scm_variable_set_x (s_load_path_var, scm_cons (s_path, s_load_path));

  scm_remember_upto_here_2 (s_load_path_var, s_load_path);
  scm_remember_upto_here_1 (s_path);

  return SCM_BOOL_T;
}
示例#10
0
/*! \brief Runs a object hook with a single OBJECT.
 * \par Function Description
 * Runs a hook called \a name, which should expect a list of #OBJECT
 * smobs as its argument, with a single-element list containing only \a obj.
 *
 * \see g_run_hook_object_list()
 *
 * \param name name of hook to run.
 * \param obj  #OBJECT argument for hook.
 */
void
g_run_hook_object (const char *name, OBJECT *obj)
{
  SCM args = scm_list_1 (scm_list_1 (edascm_from_object (obj)));
  scm_run_hook (g_get_hook_by_name (name), args);
  scm_remember_upto_here_1 (args);
}
示例#11
0
static int
pascm_print_param_smob (SCM self, SCM port, scm_print_state *pstate)
{
  param_smob *p_smob = (param_smob *) SCM_SMOB_DATA (self);
  SCM value;

  gdbscm_printf (port, "#<%s", param_smob_name);

  gdbscm_printf (port, " %s", p_smob->name);

  if (! pascm_is_valid (p_smob))
    scm_puts (" {invalid}", port);

  gdbscm_printf (port, " %s ", pascm_param_type_name (p_smob->type));

  value = pascm_param_value (p_smob->type, &p_smob->value,
			     GDBSCM_ARG_NONE, NULL);
  scm_display (value, port);

  scm_puts (">", port);

  scm_remember_upto_here_1 (self);

  /* Non-zero means success.  */
  return 1;
}
示例#12
0
文件: strports.c 项目: ijp/guile
/* Change the size of a port's bytevector to NEW_SIZE.  This doesn't
   change `read_buf_size'.  */
static void
st_resize_port (scm_t_port *pt, scm_t_off new_size)
{
  SCM old_stream = SCM_PACK (pt->stream);
  const signed char *src = SCM_BYTEVECTOR_CONTENTS (old_stream);
  SCM new_stream = scm_c_make_bytevector (new_size);
  signed char *dst = SCM_BYTEVECTOR_CONTENTS (new_stream);
  unsigned long int old_size = SCM_BYTEVECTOR_LENGTH (old_stream);
  unsigned long int min_size = min (old_size, new_size);

  scm_t_off offset = pt->write_pos - pt->write_buf;

  pt->write_buf_size = new_size;

  memcpy (dst, src, min_size);

  scm_remember_upto_here_1 (old_stream);

  /* reset buffer. */
  {
    pt->stream = SCM_UNPACK (new_stream);
    pt->read_buf = pt->write_buf = (unsigned char *)dst;
    pt->read_pos = pt->write_pos = pt->write_buf + offset;
    pt->write_end = pt->write_buf + pt->write_buf_size;
    pt->read_end = pt->read_buf + pt->read_buf_size;
  }
}
示例#13
0
static SCM pg_cell(SCM row, SCM col_key) {
	SCM cell;
	cell = scm_assq_ref(row, col_key);
	scm_remember_upto_here_1(cell);
	scm_remember_upto_here_2(row, col_key);
	return cell;
	}
示例#14
0
static SCM pg_fields(SCM res) {
	struct pg_res *pgr;
	scm_assert_smob_type(pg_res_tag, res);
	pgr = (struct pg_res *)SCM_SMOB_DATA(res);
	scm_remember_upto_here_1(res);
	return pgr->fields;
	}
示例#15
0
文件: main.c 项目: pmyadlowsky/qmx
static SCM body_proc(void *data) {
	SCM obj;
	char *linebuf = (char *)data;
	obj = scm_c_eval_string(linebuf);
	if (obj == SCM_UNSPECIFIED) return SCM_BOOL_T;
	scm_call_1(console_display, obj);
	scm_remember_upto_here_1(obj);
	return SCM_BOOL_T;
	}
示例#16
0
static SCM pg_clear(SCM res) {
	struct pg_res *pgr;
	scm_assert_smob_type(pg_res_tag, res);
	pgr = (struct pg_res *)SCM_SMOB_DATA(res);
	if (pgr->res != NULL) PQclear(pgr->res);
	pgr->res = NULL;
	scm_remember_upto_here_1(res);
	return SCM_UNSPECIFIED;
	}
示例#17
0
static void invalidate(MAKE_NODE *node) {
	SCM cursor;
	node->dirty = 1;
	cursor = node->ascendants;
	while (cursor != SCM_EOL) {
		invalidate((MAKE_NODE *)SCM_SMOB_DATA(SCM_CAR(cursor)));
		cursor = SCM_CDR(cursor);
		}
	scm_remember_upto_here_1(cursor);
	return;
	}
示例#18
0
static SCM sched_has_entry(SCM tag) {
	SCM out;
	char *target = scm_to_locale_string(tag);
	scm_remember_upto_here_1(tag);
	pthread_mutex_lock(&pmutex);
	SCHED_EVENT *event = find_node(target);
	free(target);
	if (event != NULL) out = SCM_BOOL_T;
	else out = SCM_BOOL_F;
	pthread_mutex_unlock(&pmutex);
	return out;
	}
示例#19
0
static SCM sched_entry_time(SCM tag) {
	SCM out;
	char *target = scm_to_locale_string(tag);
	scm_remember_upto_here_1(tag);
	pthread_mutex_lock(&pmutex);
	SCHED_EVENT *event = find_node(target);
	free(target);
	if (event != NULL)
		out = time_at(scm_from_double(event->clock / (double)TIME_RES));
	else out = SCM_BOOL_F;
	pthread_mutex_unlock(&pmutex);
	return out;
	}
示例#20
0
/*! \brief Runs a object hook with a single OBJECT.
 * \par Function Description
 * Runs a hook called \a name, which should expect a list of #OBJECT
 * smobs as its argument, with a single-element list containing only \a obj.
 *
 * \see g_run_hook_object_list()
 *
 * \param name name of hook to run.
 * \param obj  #OBJECT argument for hook.
 */
void
g_run_hook_object (GschemToplevel *w_current, const char *name, OBJECT *obj)
{
  scm_dynwind_begin (0);
  g_dynwind_window (w_current);

  SCM expr = scm_list_3 (run_hook_sym,
                         g_get_hook_by_name (name),
                         scm_list_2 (list_sym, edascm_from_object (obj)));

  g_scm_eval_protected (expr, scm_interaction_environment ());
  scm_dynwind_end ();
  scm_remember_upto_here_1 (expr);
}
示例#21
0
static SCM sched_cancel(SCM tag) {
	SCM out;
	char *target = scm_to_locale_string(tag);
	scm_remember_upto_here_1(tag);
	pthread_mutex_lock(&pmutex);
	SCHED_EVENT *event = find_node(target);
	free(target);
	if (event != NULL) {
		event->state = STATE_CANCELED;
		out = SCM_BOOL_T;
		}
	else out = SCM_BOOL_F;
	pthread_mutex_unlock(&pmutex);
	return out;
	}
示例#22
0
static int
arscm_print_arch_smob (SCM self, SCM port, scm_print_state *pstate)
{
  arch_smob *a_smob = (arch_smob *) SCM_SMOB_DATA (self);
  struct gdbarch *gdbarch = a_smob->gdbarch;

  gdbscm_printf (port, "#<%s", arch_smob_name);
  gdbscm_printf (port, " %s", gdbarch_bfd_arch_info (gdbarch)->printable_name);
  scm_puts (">", port);

  scm_remember_upto_here_1 (self);

  /* Non-zero means success.  */
  return 1;
}
static int
ppscm_print_pretty_printer_smob (SCM self, SCM port, scm_print_state *pstate)
{
  pretty_printer_smob *pp_smob = (pretty_printer_smob *) SCM_SMOB_DATA (self);

  gdbscm_printf (port, "#<%s ", pretty_printer_smob_name);
  scm_write (pp_smob->name, port);
  scm_puts (gdbscm_is_true (pp_smob->enabled) ? " enabled" : " disabled",
	    port);
  scm_puts (">", port);

  scm_remember_upto_here_1 (self);

  /* Non-zero means success.  */
  return 1;
}
示例#24
0
static int
exscm_print_exception_smob (SCM self, SCM port, scm_print_state *pstate)
{
  exception_smob *e_smob = (exception_smob *) SCM_SMOB_DATA (self);

  gdbscm_printf (port, "#<%s ", exception_smob_name);
  scm_write (e_smob->key, port);
  scm_puts (" ", port);
  scm_write (e_smob->args, port);
  scm_puts (">", port);

  scm_remember_upto_here_1 (self);

  /* Non-zero means success.  */
  return 1;
}
示例#25
0
static int
stscm_print_symtab_smob (SCM self, SCM port, scm_print_state *pstate)
{
  symtab_smob *st_smob = (symtab_smob *) SCM_SMOB_DATA (self);

  gdbscm_printf (port, "#<%s ", symtab_smob_name);
  gdbscm_printf (port, "%s",
		 st_smob->symtab != NULL
		 ? symtab_to_filename_for_display (st_smob->symtab)
		 : "<invalid>");
  scm_puts (">", port);

  scm_remember_upto_here_1 (self);

  /* Non-zero means success.  */
  return 1;
}
示例#26
0
static int
stscm_print_sal_smob (SCM self, SCM port, scm_print_state *pstate)
{
  sal_smob *s_smob = (sal_smob *) SCM_SMOB_DATA (self);
  symtab_smob *st_smob = (symtab_smob *) SCM_SMOB_DATA (s_smob->symtab_scm);

  gdbscm_printf (port, "#<%s ", symtab_smob_name);
  scm_write (s_smob->symtab_scm, port);
  if (s_smob->sal.line != 0)
    gdbscm_printf (port, " line %d", s_smob->sal.line);
  scm_puts (">", port);

  scm_remember_upto_here_1 (self);

  /* Non-zero means success.  */
  return 1;
}
static int
lsscm_print_lazy_string_smob (SCM self, SCM port, scm_print_state *pstate)
{
    lazy_string_smob *ls_smob = (lazy_string_smob *) SCM_SMOB_DATA (self);

    gdbscm_printf (port, "#<%s", lazy_string_smob_name);
    gdbscm_printf (port, " @%s", hex_string (ls_smob->address));
    if (ls_smob->length >= 0)
        gdbscm_printf (port, " length %d", ls_smob->length);
    if (ls_smob->encoding != NULL)
        gdbscm_printf (port, " encoding %s", ls_smob->encoding);
    scm_puts (">", port);

    scm_remember_upto_here_1 (self);

    /* Non-zero means success.  */
    return 1;
}
示例#28
0
static int
syscm_print_symbol_smob (SCM self, SCM port, scm_print_state *pstate)
{
    symbol_smob *s_smob = (symbol_smob *) SCM_SMOB_DATA (self);

    if (pstate->writingp)
        gdbscm_printf (port, "#<%s ", symbol_smob_name);
    gdbscm_printf (port, "%s",
                   s_smob->symbol != NULL
                   ? SYMBOL_PRINT_NAME (s_smob->symbol)
                   : "<invalid>");
    if (pstate->writingp)
        scm_puts (">", port);

    scm_remember_upto_here_1 (self);

    /* Non-zero means success.  */
    return 1;
}
static int
ppscm_print_pretty_printer_worker_smob (SCM self, SCM port,
					scm_print_state *pstate)
{
  pretty_printer_worker_smob *w_smob
    = (pretty_printer_worker_smob *) SCM_SMOB_DATA (self);

  gdbscm_printf (port, "#<%s ", pretty_printer_worker_smob_name);
  scm_write (w_smob->display_hint, port);
  scm_puts (" ", port);
  scm_write (w_smob->to_string, port);
  scm_puts (" ", port);
  scm_write (w_smob->children, port);
  scm_puts (">", port);

  scm_remember_upto_here_1 (self);

  /* Non-zero means success.  */
  return 1;
}
示例#30
0
static int
cmdscm_print_command_smob (SCM self, SCM port, scm_print_state *pstate)
{
  command_smob *c_smob = (command_smob *) SCM_SMOB_DATA (self);

  gdbscm_printf (port, "#<%s", command_smob_name);

  gdbscm_printf (port, " %s",
		 c_smob->name != NULL ? c_smob->name : "{unnamed}");

  if (! cmdscm_is_valid (c_smob))
    scm_puts (" {invalid}", port);

  scm_puts (">", port);

  scm_remember_upto_here_1 (self);

  /* Non-zero means success.  */
  return 1;
}