CAMLprim value ml_segment_array_new (value len) { value ret; if(Int_val(len) <= 0) invalid_argument("SegmentArray.new"); ret = alloc (1 + Wosize_asize(Int_val(len)*sizeof(GdkSegment)), Abstract_tag); Field(ret,0) = len; return ret; }
CAMLexport value copy_memblock_indirected (void *src, asize_t size) { mlsize_t wosize = Wosize_asize(size); value ret; if (!src) ml_raise_null_pointer (); ret = alloc_shr (wosize+2, Abstract_tag); Field(ret,1) = (value)2; memcpy ((value *) ret + 2, src, size); return ret; }
CAMLprim value ml_gtk_drag_source_set (value w, value m, value t, value a) { GtkTargetEntry *targets = (GtkTargetEntry *)Val_unit; int n_targets, i; CAMLparam4 (w,m,t,a); n_targets = Wosize_val(t); if (n_targets) targets = (GtkTargetEntry *) alloc (Wosize_asize(n_targets * sizeof(GtkTargetEntry)), Abstract_tag); for (i=0; i<n_targets; i++) { targets[i].target = String_val(Field(Field(t, i), 0)); targets[i].flags = Flags_Target_flags_val(Field(Field(t, i), 1)); targets[i].info = Int_val(Field(Field(t, i), 2)); } gtk_drag_source_set (GtkWidget_val(w), OptFlags_GdkModifier_val(m), targets, n_targets, Flags_GdkDragAction_val(a)); CAMLreturn(Val_unit); }
value alloc_memblock_indirected (asize_t size) { value ret = alloc_shr (Wosize_asize(size)+2, Abstract_tag); Field(ret,1) = (value)2; return ret; }