Exemple #1
0
SCM
gmk_scm_from_vector2 (GmkVector2 v)
{
    SCM smob;
    GmkVector2 *new_v = (GmkVector2 *) scm_gc_malloc (sizeof (GmkVector2), "vector2");

    *new_v = v;

    SCM_NEWSMOB (smob, vector2_tag, new_v);

    return smob;
}
Exemple #2
0
SCM
gshmup_scm_from_vector2 (GshmupVector2 v)
{
    SCM smob;
    GshmupVector2 *new_v = (GshmupVector2 *) malloc (sizeof (GshmupVector2));

    *new_v = v;

    SCM_NEWSMOB (smob, vector2_tag, new_v);

    return smob;
}
Exemple #3
0
/*! \brief Create a new bindable key object.
 * \par Function Description
 * Create and return a new gschem key object from a \a keyval and a
 * set of \a modifiers.  If the key combination is invalid, return
 * SCM_BOOL_F.
 *
 * \param keyval     the pressed key.
 * \param modifiers  the active modifiers for the key.
 *
 * \return a new bindable key object, or SCM_BOOL_F.
 */
static SCM
g_make_key (guint keyval, GdkModifierType modifiers)
{
    SCM result = SCM_BOOL_F;
    if (g_key_is_valid (keyval, modifiers)) {
        GschemKey *k = g_new0 (GschemKey, 1);
        k->keyval = keyval;
        k->modifiers = modifiers & GDK_MODIFIER_MASK;
        SCM_NEWSMOB (result, g_key_smob_tag, k);
    }
    return result;
}
Exemple #4
0
SCM
_scm_from_ssh_key (ssh_key key, SCM parent)
{
  struct key_data *key_data;
  SCM key_smob;
  key_data = (struct key_data *) scm_gc_malloc (sizeof (struct key_data),
                                                "ssh key");
  key_data->ssh_key = key;
  key_data->parent = parent;
  SCM_NEWSMOB (key_smob, key_tag, key_data);
  return key_smob;
}
Exemple #5
0
SCM make_llvm_basic_block(SCM scm_function, SCM scm_name)
{
  SCM retval;
  struct llvm_function_t *function = get_llvm_function(scm_function);
  struct llvm_basic_block_t *self;
  self = (struct llvm_basic_block_t *)scm_gc_calloc(sizeof(struct llvm_basic_block_t), "llvm basic block");
  SCM_NEWSMOB(retval, llvm_basic_block_tag, self);
  char *name = scm_to_locale_string(scm_name);
  self->basic_block = LLVMAppendBasicBlock(function->function, name);
  free(name);
  return retval;
}
Exemple #6
0
static SCM scm_all_clients(void)
{
    SCM clients = SCM_EOL;
    SCM smob;
    client_t *client = client_list;
    while (client) {
        SCM_NEWSMOB(smob, client_tag, client);
        clients = scm_append(scm_list_2(clients, scm_list_1(smob)));
        client = client->next;
    }
    return clients;
}
Exemple #7
0
SCM make_description(SCM scm_graph, SCM scm_op, SCM scm_name)
{
  SCM retval;
  struct tf_graph_t *graph = get_tf_graph(scm_graph);
  struct tf_description_t *self = (struct tf_description_t *)scm_gc_calloc(sizeof(struct tf_description_t), "make-description");
  SCM_NEWSMOB(retval, tf_description_tag, self);
  char *op = scm_to_locale_string(scm_op);
  char *name = scm_to_locale_string(scm_name);
  self->description = TF_NewOperation(graph->graph, op, name);
  free(name);
  free(op);
  return retval;
}
Exemple #8
0
SCM
_scm_from_plparams (plPlotterParams * x)
{
  SCM s_plparams;

  assert (x != NULL);

  SCM_NEWSMOB (s_plparams, plparams_tag, x);

  assert (x == (plPlotterParams *) SCM_SMOB_DATA (s_plparams));

  return (s_plparams);
}
Exemple #9
0
SCM
_scm_from_plotter (plPlotter * x)
{
  SCM s_plotter;

  assert (x != NULL);

  SCM_NEWSMOB (s_plotter, plotter_tag, x);

  assert (x == (plPlotter *) SCM_SMOB_DATA (s_plotter));

  return (s_plotter);
}
Exemple #10
0
SCM make_tf_session(SCM scm_graph)
{
  SCM retval;
  struct tf_session_t *self = (struct tf_session_t *)scm_gc_calloc(sizeof(struct tf_session_t), "make-tf-session");
  SCM_NEWSMOB(retval, tf_session_tag, self);
  self->graph = get_tf_graph(scm_graph);
  TF_SessionOptions *options = TF_NewSessionOptions();
  self->session = TF_NewSession(self->graph->graph, options, status());
  TF_DeleteSessionOptions(options);
  if (TF_GetCode(_status) != TF_OK)
    scm_misc_error("make-tf-session", TF_Message(_status), SCM_EOL);
  return retval;
}
Exemple #11
0
SCM llvm_build_select(SCM scm_function, SCM scm_condition, SCM scm_value_if, SCM scm_value_else)
{
  SCM retval;
  struct llvm_value_t *self;
  self = (struct llvm_value_t *)scm_gc_calloc(sizeof(struct llvm_value_t), "llvm value");
  SCM_NEWSMOB(retval, llvm_value_tag, self);
  struct llvm_function_t *function = get_llvm_function(scm_function);
  struct llvm_value_t *condition = get_llvm_value(scm_condition);
  struct llvm_value_t *value_if   = get_llvm_value(scm_value_if  );
  struct llvm_value_t *value_else = get_llvm_value(scm_value_else);
  self->value = LLVMBuildSelect(function->builder, condition->value, value_if->value, value_else->value, "x");
  return retval;
}
Exemple #12
0
/*! \brief Get a smob for a page.
 * \ingroup guile_c_iface
 * \par Function Description
 * Create a new smob representing \a page.
 *
 * \param page #PAGE to create a smob for.
 * \return a smob representing \a page.
 */
SCM
edascm_from_page (PAGE *page)
{
  SCM smob;

  SCM_NEWSMOB (smob, geda_smob_tag, page);
  SCM_SET_SMOB_FLAGS (smob, GEDA_SMOB_PAGE);

  /* Set weak reference */
  s_page_weak_ref (page, smob_weakref_notify, smob);

  return smob;
}
Exemple #13
0
/*! \brief Get a smob for a configuration context.
 * \ingroup guile_c_iface
 * \par Function Description
 * Create a new smob representing \a cfg.
 *
 * \param cfg Configuration context to create a smob for.
 * \return a smob representing \a cfg.
 */
SCM
edascm_from_config (EdaConfig *cfg)
{
  SCM smob = smob_cache_lookup (cfg);

  if (EDASCM_CONFIGP (smob)) {
    return smob;
  }

  SCM_NEWSMOB (smob, geda_smob_tag, g_object_ref (cfg));
  SCM_SET_SMOB_FLAGS (smob, GEDA_SMOB_CONFIG);
  return smob;
}
Exemple #14
0
/*! \brief Get the smob for a TOPLEVEL.
 * \ingroup guile_c_iface
 * \par Function Description
 * Create a new smob representing \a toplevel.
 *
 * \param toplevel #TOPLEVEL to create a smob for.
 * \return a smob representing \a toplevel.
 */
SCM
edascm_from_toplevel (TOPLEVEL *toplevel)
{
  SCM smob;

  SCM_NEWSMOB (smob, geda_smob_tag, toplevel);
  SCM_SET_SMOB_FLAGS (smob, GEDA_SMOB_TOPLEVEL);

  /* Set weak reference */
  s_toplevel_weak_ref (toplevel, smob_weakref_notify, smob);

  return smob;
}
Exemple #15
0
SCM make_ffmpeg_input(SCM scm_file_name, SCM scm_debug)
{
  SCM retval;
  struct ffmpeg_t *self;
  scm_dynwind_begin(0);
  const char *file_name = scm_to_locale_string(scm_file_name);
  scm_dynwind_free(file_name);
  self = (struct ffmpeg_t *)scm_gc_calloc(sizeof(struct ffmpeg_t), "ffmpeg");
  self->video_stream_idx = -1;
  self->audio_stream_idx = -1;
  SCM_NEWSMOB(retval, ffmpeg_tag, self);

  int err;
  err = avformat_open_input(&self->fmt_ctx, file_name, NULL, NULL);
  if (err < 0) {
    ffmpeg_destroy(retval);
    scm_misc_error("make-ffmpeg-input", "Error opening file '~a': ~a", scm_list_2(scm_file_name, get_error_text(err)));
  };

  err = avformat_find_stream_info(self->fmt_ctx, NULL);
  if (err < 0) {
    ffmpeg_destroy(retval);
    scm_misc_error("make-ffmpeg-input", "No stream information in file '~a': ~a", scm_list_2(scm_file_name, get_error_text(err)));
  };

  // TODO: only open desired streams
  // Open video stream
  self->video_stream_idx = av_find_best_stream(self->fmt_ctx, AVMEDIA_TYPE_VIDEO, -1, -1, NULL, 0);
  if (self->video_stream_idx >= 0)
    self->video_codec_ctx = open_decoder(retval, scm_file_name, video_stream(self), "video");

  // Open audio stream
  self->audio_stream_idx = av_find_best_stream(self->fmt_ctx, AVMEDIA_TYPE_AUDIO, -1, -1, NULL, 0);
  if (self->audio_stream_idx >= 0)
    self->audio_codec_ctx = open_decoder(retval, scm_file_name, audio_stream(self), "audio");

  // Print debug information
  if (scm_is_true(scm_debug)) av_dump_format(self->fmt_ctx, 0, file_name, 0);

  // Allocate input frames
  self->video_target_frame = allocate_frame(retval);
  self->audio_target_frame = allocate_frame(retval);

  // Initialise data packet
  av_init_packet(&self->pkt);
  self->pkt.data = NULL;
  self->pkt.size = 0;

  scm_dynwind_end();
  return retval;
}
Exemple #16
0
SCM Display::scm_load_image(SCM file) {
	SCM smob;
#ifdef WITH_SDL
	struct image *img = (struct image *) scm_gc_malloc(sizeof(struct image), "image");

	img->surface = IMG_Load(scm_to_locale_string(file));
	if (!img->surface) {
		std::cout << "Error loading image : "
							<< IMG_GetError() << std::endl;
	}
#endif
	SCM_NEWSMOB(smob, get()->m_tImageTag, img);
	return smob;
}
Exemple #17
0
SCM make_llvm_function(SCM scm_llvm, SCM scm_return_type, SCM scm_name, SCM scm_argument_types)
{
  SCM retval;
  struct llvm_module_t *llvm = get_llvm(scm_llvm);
  struct llvm_function_t *self;
  self = (struct llvm_function_t *)scm_gc_calloc(sizeof(struct llvm_function_t), "llvm function");
  SCM_NEWSMOB(retval, llvm_function_tag, self);
  self->builder = LLVMCreateBuilder();
  char *name = scm_to_locale_string(scm_name);
  self->function = LLVMAddFunction(llvm->module, name, function_type(scm_return_type, scm_argument_types));
  LLVMSetFunctionCallConv(self->function, LLVMCCallConv);
  free(name);
  return retval;
}
Exemple #18
0
static SCM
make_x ()
{
  static int i = 0;
  SCM s_x;
  x_t *c_x;

  i++;
  c_x = (x_t *) scm_gc_malloc (sizeof (x_t), "x");
  c_x->scm_value = scm_from_int (i);
  c_x->c_value = i;
  SCM_NEWSMOB (s_x, x_tag, c_x);
  return s_x;
}
Exemple #19
0
SCM make_tensor(SCM scm_type, SCM scm_shape, SCM scm_size, SCM scm_source)
{
  SCM retval;
  struct tf_tensor_t *self = (struct tf_tensor_t *)scm_gc_calloc(sizeof(struct tf_tensor_t), "make-tensor");
  SCM_NEWSMOB(retval, tf_tensor_tag, self);
  int type = scm_to_int(scm_type);
  int num_dims = scm_to_int(scm_length(scm_shape));
  int64_t *dims = scm_gc_malloc_pointerless(sizeof(int64_t) * num_dims, "make-tensor");
  int count = 1;
  for (int i=0; i<num_dims; i++) {
    dims[i] = scm_to_int(scm_car(scm_shape));
    count = count * dims[i];
    scm_shape = scm_cdr(scm_shape);
  };
  if (type == TF_STRING) {
    SCM* pointer = scm_to_pointer(scm_source);
    size_t encoded_size = 0;
    for (int i=0; i<count; i++) {
      encoded_size += TF_StringEncodedSize(scm_c_string_length(*pointer)) + 8;
      pointer++;
    };
    self->tensor = TF_AllocateTensor(type, dims, num_dims, encoded_size);
    int64_t *offsets = TF_TensorData(self->tensor);
    int offset = 0;
    void *result = offsets + count;
    pointer = scm_to_pointer(scm_source);
    encoded_size = encoded_size - count * sizeof(int64_t);
    for (int i=0; i<count; i++) {
      char *str = scm_to_locale_string(*pointer);
      int len = TF_StringEncodedSize(scm_c_string_length(*pointer));
      *offsets++ = offset;
      TF_StringEncode(str, scm_c_string_length(*pointer), result, encoded_size, status());
      free(str);
      if (TF_GetCode(_status) != TF_OK)
        scm_misc_error("make-tensor", TF_Message(_status), SCM_EOL);
      offset += len;
      encoded_size -= len;
      result += len;
      pointer++;
    };
  } else {
    self->tensor = TF_AllocateTensor(type, dims, num_dims, scm_to_int(scm_size));
    memcpy(TF_TensorData(self->tensor), scm_to_pointer(scm_source), scm_to_int(scm_size));
  };
  return retval;
}
Exemple #20
0
static void init_env(void) {
	SCM smob;
	char *ver;
	SOURCE_HANDLE *handle;
	init_log();
	init_alsa_module();
	ver = scm_to_locale_string(scm_version());
	log_msg("Guile version %s\n", ver);
	free(ver);
	init_messaging(msg_port);
	init_time();
	init_json();
	init_scheduler();
	init_audiofile();
	if (use_jack) init_jackport();
	init_feeds();
	init_recorder();
	init_stream();
	init_source_mod();
	init_ladspa();
	init_unitgen();
	fader = (SOURCE_OBJ *)my_malloc(sizeof(SOURCE_OBJ), "main fader");
	handle = (SOURCE_HANDLE *)my_gc_malloc(sizeof(SOURCE_HANDLE), "mains",
				"mains");
	handle->body = (void *)fader;
	handle->src = fader;
	init_source(fader);
	mains_tag = scm_make_smob_type("mains", sizeof(SOURCE_OBJ));
	SCM_NEWSMOB(smob, mains_tag, handle);
	scm_c_define("mains", smob);
	if (use_jack) {
		scm_c_define("jack-client-name",
			scm_from_locale_string(client_name));
		scm_c_define_gsubr("patch-out", 2, 0, 0, patch_out);
		scm_c_define_gsubr("unpatch-out", 2, 0, 0, unpatch_out);
		}
	scm_c_define_gsubr("quit", 0, 0, 0, qmx_quit);
	scm_c_define_gsubr("db", 1, 0, 0, db20);
	scm_c_define_gsubr("period-duty-cycle", 0, 0, 0, get_duty_cycle);
	scm_permanent_object(console_display =
			scm_c_eval_string(console_display_src));
	scm_permanent_object(catch_display =
			scm_c_eval_string(catch_display_src));
	return;
	}
Exemple #21
0
SCM make_Segment2_line(SCM X1, SCM Y1, SCM X2, SCM Y2)
{
  SCM smob;
  Segment2 * seg;

  DB_PRINTF("make_Segment2_line\n");
  
  seg = malloc(sizeof(Segment2));

  seg->type = LINE;
  seg->s.line.start.x = scm_to_double(X1);
  seg->s.line.start.y = scm_to_double(Y1);
  seg->s.line.end.x   = scm_to_double(X2);
  seg->s.line.end.y   = scm_to_double(Y2);

  SCM_NEWSMOB( smob, tag_Segment2, seg);
  return smob;
}
Exemple #22
0
SCM make_cell (SCM s_x, SCM s_y, SCM s_status) {
	SCM smob;
	struct cell *cell;
	int x = scm_to_int(s_x);
	int y = scm_to_int(s_y);
	int status = scm_to_int(s_status);

	cell = (struct cell *)scm_gc_malloc(sizeof(struct cell), "cell");

	cell->x = x;
	cell->y = y;
	cell->status = status;
	cell->update_func = SCM_BOOL_F;

	SCM_NEWSMOB(smob, cell_tag, cell);

	return smob;
}
Exemple #23
0
static SCM
guile_sock_referrer (SCM sock, SCM referrer)
{
    SCM oreferrer = SCM_EOL;
    svz_socket_t *xsock, *xreferrer;

    scm_assert_smob_type (guile_svz_socket_tag, sock);
    xsock = (svz_socket_t *) SCM_SMOB_DATA (sock);
    if ((xreferrer = svz_sock_getreferrer (xsock)) != NULL)
        SCM_NEWSMOB (oreferrer, guile_svz_socket_tag, xreferrer);
    if (!SCM_UNBNDP (referrer))
    {
        scm_assert_smob_type (guile_svz_socket_tag, referrer);
        xreferrer = (svz_socket_t *) SCM_SMOB_DATA (referrer);
        svz_sock_setreferrer (xsock, xreferrer);
    }
    return oreferrer;
}
Exemple #24
0
static SCM
guile_sock_parent (SCM sock, SCM parent)
{
    SCM oparent = SCM_EOL;
    svz_socket_t *xsock, *xparent;

    scm_assert_smob_type (guile_svz_socket_tag, sock);
    xsock = (svz_socket_t *) SCM_SMOB_DATA (sock);
    if ((xparent = svz_sock_getparent (xsock)) != NULL)
        SCM_NEWSMOB (oparent, guile_svz_socket_tag, xparent);
    if (!SCM_UNBNDP (parent))
    {
        scm_assert_smob_type (guile_svz_socket_tag, parent);
        xparent = (svz_socket_t *) SCM_SMOB_DATA (parent);
        svz_sock_setparent (xsock, xparent);
    }
    return oparent;
}
Exemple #25
0
static SCM pg_open_primitive(SCM conninfo) {
	SCM smob;
	struct pg_conn *pgc;
	char *conninfo_s;
	conninfo_s = scm_to_locale_string(conninfo);
	pgc = (struct pg_conn *)scm_gc_malloc(sizeof(struct pg_conn),
					"pg_conn");
	pgc->conn = PQconnectdb(conninfo_s);
	free(conninfo_s);
	if (PQstatus(pgc->conn) != CONNECTION_OK) {
		log_msg("PQ connection failed: %s\n",
				PQerrorMessage(pgc->conn));
		PQfinish(pgc->conn);
		pgc->conn = NULL;
		}
	pgc->mutex = scm_make_mutex();
	SCM_NEWSMOB(smob, pg_conn_tag, pgc);
	return smob;
	}
Exemple #26
0
SCM make_Segment2_arc(SCM ROT, SCM X, SCM Y, SCM Radius, SCM startTheta, SCM endTheta)
{
  SCM smob;
  Segment2 * seg;
  
  DB_PRINTF("make_Segment2_arc\n");

  seg = malloc(sizeof(Segment2));
  seg->type = ARC;
  seg->s.arc.angle.rot   = scm_to_int16 (ROT       );
  seg->s.arc.angle.start = scm_to_double(startTheta);
  seg->s.arc.angle.end   = scm_to_double(endTheta  );
  seg->s.arc.radius      = scm_to_double(Radius    );
  seg->s.arc.center.x    = scm_to_double(X         );
  seg->s.arc.center.y    = scm_to_double(Y         );

  SCM_NEWSMOB( smob, tag_Segment2, seg);
  return smob;
}
Exemple #27
0
static SCM
load_sample (SCM s_file)
{
    SCM smob;
    const char *file = scm_to_locale_string (s_file);
    Sample *sample = (Sample *) scm_gc_malloc (sizeof (Sample), "sample");

    sample->sample = NULL;

    SCM_NEWSMOB (smob, sample_tag, sample);

    sample->sample = al_load_sample (file);

    if (!sample->sample) {
        fprintf (stderr, "failed to load audio sample: %s\n", file);
    }

    return smob;
}
Exemple #28
0
SCM
_scm_from_termios (struct termios *x)
{
  SCM s_termios;

  assert (x != NULL);

  SCM_NEWSMOB (s_termios, termios_tag, x);

  assert (x == (struct termios *) SCM_SMOB_DATA (s_termios));

#if 0
  if (0)
    {
      fprintf (stderr, "Making smob from termios based on *%p\n", x);
    }
#endif

  return (s_termios);
}
Exemple #29
0
/*! \brief Get a smob for a page.
 * \ingroup guile_c_iface
 * \par Function Description
 * Create a new smob representing \a page.
 *
 * \param page #PAGE to create a smob for.
 * \return a smob representing \a page.
 */
SCM
edascm_from_page (PAGE *page)
{
  SCM smob = smob_cache_lookup (page);

  if (EDASCM_PAGEP (smob)) {
    return smob;
  }

  SCM_NEWSMOB (smob, geda_smob_tag, page);
  SCM_SET_SMOB_FLAGS (smob, GEDA_SMOB_PAGE);

  /* Set weak reference */
  s_page_weak_ref (page, smob_weakref_notify,
                   unpack_as_pointer (smob));

  smob_cache_add (page, smob);

  return smob;
}
Exemple #30
0
SCM llvm_build_call(SCM scm_function, SCM scm_llvm, SCM scm_return_type, SCM scm_function_name, SCM scm_argument_types, SCM scm_values)
{
  SCM retval;
  struct llvm_function_t *function = get_llvm_function(scm_function);
  struct llvm_module_t *llvm = get_llvm(scm_llvm);
  char *function_name = scm_to_locale_string(scm_function_name);
  LLVMValueRef function_pointer = LLVMAddFunction(llvm->module, function_name, function_type(scm_return_type, scm_argument_types));
  free(function_name);
  // LLVMAddFunctionAttr(function_pointer, LLVMExternalLinkage);
  int n_values = scm_ilength(scm_values);
  LLVMValueRef *values = scm_gc_malloc_pointerless(n_values * sizeof(LLVMValueRef), "llvm-build-call");
  for (int i=0; i<n_values; i++) {
    values[i] = get_llvm_value(scm_car(scm_values))->value;
    scm_values = scm_cdr(scm_values);
  };
  struct llvm_value_t *result = (struct llvm_value_t *)scm_gc_calloc(sizeof(struct llvm_value_t), "llvmvalue");
  SCM_NEWSMOB(retval, llvm_value_tag, result);
  result->value = LLVMBuildCall(function->builder, function_pointer, values, n_values, "x");
  return retval;
}