<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:www.nabble.com,2006:forum-14001</id>
	<title>Nabble - Caml Discuss</title>
	<updated>2008-10-23T15:50:51Z</updated>
	<link rel="self" type="application/atom+xml" href="http://www.nabble.com/Caml-Discuss-f14001.xml" />
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Caml-Discuss-f14001.html" />
	<subtitle type="html"></subtitle>
	
<entry>
	<id>tag:www.nabble.com,2006:post-20141306</id>
	<title>Re: Re: Serialisation of PXP DTDs</title>
	<published>2008-10-23T15:50:51Z</published>
	<updated>2008-10-23T15:50:51Z</updated>
	<author>
		<name>Mauricio Fernandez-2</name>
	</author>
	<content type="html">On Fri, Oct 24, 2008 at 12:18:50AM +0200, Gerd Stolpmann wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Am Donnerstag, den 23.10.2008, 23:05 +0200 schrieb Mauricio Fernandez:
&lt;br&gt;&amp;gt; &amp;gt; I have been working for a while on a self-describing, compact, extensible
&lt;br&gt;&amp;gt; &amp;gt; binary protocol, along with an OCaml implementation which I intent to release
&lt;br&gt;&amp;gt; &amp;gt; in not too long.
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; It differs from sexplib and that bin-prot in two main ways:
&lt;br&gt;&amp;gt; &amp;gt; * the data model is deliberately more limited, as the format is meant to be
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp; de/encodable in multiple languages.
&lt;br&gt;&amp;gt; &amp;gt; * it is extensible at several levels, achieving both forward and backward
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp; compatibility across changes in the data type
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; You can think of it as an extensible Protocol Buffers[1] with a richer data
&lt;br&gt;&amp;gt; &amp;gt; model (albeit not in 1:1 accordance with OCaml's for the above mentioned
&lt;br&gt;&amp;gt; &amp;gt; reason).
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Have you looked at ICEP (see zeroc.com)? It has bindings for many
&lt;br&gt;&amp;gt; languages, even for Ocaml (&lt;a href=&quot;http://oss.wink.com/hydro/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://oss.wink.com/hydro/&lt;/a&gt;).
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; It is, however, not self-describing. Anyway, you may find there ideas
&lt;br&gt;&amp;gt; for portability.
&lt;/div&gt;&lt;br&gt;I've just taken a quick look at the manual (in particular, the definition of
&lt;br&gt;the Slice language and the Data Encoding section of the Ice protocol). Even
&lt;br&gt;though it solves a different problem, it looks very interesting --- both as a
&lt;br&gt;source of inspiration, as you say, and for its intended use as a middleware
&lt;br&gt;technology. &amp;nbsp;Thanks a lot for the reference.
&lt;br&gt;&lt;br&gt;Regards,
&lt;br&gt;-- 
&lt;br&gt;Mauricio Fernandez &amp;nbsp;- &amp;nbsp; &lt;a href=&quot;http://eigenclass.org&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://eigenclass.org&lt;/a&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Caml-list mailing list. Subscription management:
&lt;br&gt;&lt;a href=&quot;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://caml.inria.fr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr&lt;/a&gt;&lt;br&gt;Beginner's list: &lt;a href=&quot;http://groups.yahoo.com/group/ocaml_beginners&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://groups.yahoo.com/group/ocaml_beginners&lt;/a&gt;&lt;br&gt;Bug reports: &lt;a href=&quot;http://caml.inria.fr/bin/caml-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr/bin/caml-bugs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Re%3A-Re%3A-Serialisation-of-PXP-DTDs-tp20141306p20141306.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-15288389</id>
	<title>Re: [OSR] Exceptionless error management</title>
	<published>2008-02-05T03:36:48Z</published>
	<updated>2008-02-05T03:36:48Z</updated>
	<author>
		<name>Frédéric van der Plancke-2</name>
	</author>
	<content type="html">Bünzli Daniel wrote:
&lt;br&gt;&amp;gt; Still I think this is a little bit sad. Using polymorphic variants 
&lt;br&gt;&amp;gt; isn't that bad at all as long as we just use the following _closed_ 
&lt;br&gt;&amp;gt; type [ `Value of &amp;nbsp;... | `Error of ... ]. This would allow us to move 
&lt;br&gt;&amp;gt; forward despite that fact that Pervasives is frozen (and no I'm not 
&lt;br&gt;&amp;gt; interested in forking it).
&lt;br&gt;But Pervasives is not *that* frozen. If I understand things well, the 
&lt;br&gt;main concern of Inria is having to maintain the would-be additions and 
&lt;br&gt;changes to Pervasives. An Ok | Error variant doesn't look like it will 
&lt;br&gt;entail heavy maintenance charges. So they may accept to add it.
&lt;br&gt;&lt;br&gt;(I don't think there are backwards-compatibility problems either as 
&lt;br&gt;user-defined Ok|Error would hide a Pervasives-defined one in all 
&lt;br&gt;contexts I can think of.)
&lt;br&gt;&lt;br&gt;Frédéric
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Caml-list mailing list. Subscription management:
&lt;br&gt;&lt;a href=&quot;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://caml.inria.fr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr&lt;/a&gt;&lt;br&gt;Beginner's list: &lt;a href=&quot;http://groups.yahoo.com/group/ocaml_beginners&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://groups.yahoo.com/group/ocaml_beginners&lt;/a&gt;&lt;br&gt;Bug reports: &lt;a href=&quot;http://caml.inria.fr/bin/caml-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr/bin/caml-bugs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Re%3A--OSR--Exceptionless-error-management-tp15288389p15288389.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-11673111</id>
	<title>Re: Interface manipulation patches</title>
	<published>2007-07-18T11:18:05Z</published>
	<updated>2007-07-18T11:18:05Z</updated>
	<author>
		<name>Vincent Aravantinos</name>
	</author>
	<content type="html">&lt;br&gt;Le 18 juil. 07 à 16:24, Chris King a écrit :
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Back in December Piotr Wieczorek sent a couple patches for the O'Caml
&lt;br&gt;&amp;gt; compiler to the mailing list [1]. &amp;nbsp;They dealt mostly with manipulating
&lt;br&gt;&amp;gt; interfaces, in particular adding the ability to
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 1) &amp;quot;export&amp;quot; a module when packing
&lt;br&gt;&amp;gt; 2) treat .cmis as module types
&lt;br&gt;&amp;gt; 3) import interfaces sans selected fields
&lt;br&gt;&amp;gt; 4) retype .cmo files
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; These patches are great for a library developer... in the library I am
&lt;br&gt;&amp;gt; currently developing (O'Caml RT) I have an immediate use for (1), (3),
&lt;br&gt;&amp;gt; and (4), and I have had a need for (2) in the past.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I'm wondering if these patches have been considered for inclusion in
&lt;br&gt;&amp;gt; the official O'Caml tree, and, if not, what it would take to get them
&lt;br&gt;&amp;gt; included.
&lt;/div&gt;&lt;br&gt;Would be very nice indeed ! I love (3)...
&lt;br&gt;&lt;br&gt;--
&lt;br&gt;Vincent Aravantinos
&lt;br&gt;PhD Student in Computer Science
&lt;br&gt;LIG - CAPP Team
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Caml-list mailing list. Subscription management:
&lt;br&gt;&lt;a href=&quot;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://caml.inria.fr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr&lt;/a&gt;&lt;br&gt;Beginner's list: &lt;a href=&quot;http://groups.yahoo.com/group/ocaml_beginners&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://groups.yahoo.com/group/ocaml_beginners&lt;/a&gt;&lt;br&gt;Bug reports: &lt;a href=&quot;http://caml.inria.fr/bin/caml-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr/bin/caml-bugs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Re%3A-Interface-manipulation-patches-tp11673111p11673111.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-10268562</id>
	<title>Functors and sharing a symbol table between a Menhir parser and ocamllex lexer</title>
	<published>2007-05-01T04:34:48Z</published>
	<updated>2007-05-01T04:34:48Z</updated>
	<author>
		<name>Joel Reymont</name>
	</author>
	<content type="html">I want to pass a symbol table to my Menhir parser since I want to run &amp;nbsp;
&lt;br&gt;several parsers in parallel and don't want any shared state.
&lt;br&gt;&lt;br&gt;I have this in the header of my ocamllex lexer:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;module P = EasyParser.Make
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;struct
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;type t = EasySymtab.symtab_t
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;let putsym = EasySymtab.putsym
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;let infer_type = EasyCheck.infer_type
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;let symtype = EasyCheck.symtype
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;end
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;&lt;br&gt;rule token tab = parse
&lt;br&gt;...
&lt;br&gt;&lt;br&gt;Above are functions that take a symbol table as their first argument &amp;nbsp;
&lt;br&gt;and the lexer (token) takes the symbol table as well.
&lt;br&gt;&lt;br&gt;In my parser test harness I have:
&lt;br&gt;&lt;br&gt;let parse str =
&lt;br&gt;&amp;nbsp; &amp;nbsp;let lexbuf = Lexing.from_string str in
&lt;br&gt;&amp;nbsp; &amp;nbsp;let ast = EasyLexer.P.program (EasyLexer.token (symtab ())) lexbuf in
&lt;br&gt;&amp;nbsp; &amp;nbsp;List.map EasyLocStrip.strip_stmt ast
&lt;br&gt;&lt;br&gt;How do I ensure that the lexer and the parser use the same symbol table?
&lt;br&gt;&lt;br&gt;I thought I could parameterize the parser on curried functions like &amp;nbsp;
&lt;br&gt;&amp;quot;putsym tab&amp;quot; but then how do I make sure that all functions in Make &amp;nbsp;
&lt;br&gt;above take the same tab?
&lt;br&gt;&lt;br&gt;If that works than I need to ensure that EasyLexer.token in my parse &amp;nbsp;
&lt;br&gt;function takes the same tab that &amp;nbsp;was used by EasyParser.Make.
&lt;br&gt;&lt;br&gt;Any suggestions?
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Thanks, Joel
&lt;br&gt;&lt;br&gt;--
&lt;br&gt;&lt;a href=&quot;http://wagerlabs.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://wagerlabs.com/&lt;/a&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Caml-list mailing list. Subscription management:
&lt;br&gt;&lt;a href=&quot;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://caml.inria.fr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr&lt;/a&gt;&lt;br&gt;Beginner's list: &lt;a href=&quot;http://groups.yahoo.com/group/ocaml_beginners&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://groups.yahoo.com/group/ocaml_beginners&lt;/a&gt;&lt;br&gt;Bug reports: &lt;a href=&quot;http://caml.inria.fr/bin/caml-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr/bin/caml-bugs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Functors-and-sharing-a-symbol-table-between-a-Menhir-parser-and-ocamllex-lexer-tp10268562p10268562.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-9348809</id>
	<title>Re: Fixed GMenu?</title>
	<published>2007-03-07T00:42:12Z</published>
	<updated>2007-03-07T00:42:12Z</updated>
	<author>
		<name>Robert Roessler</name>
	</author>
	<content type="html">Ewen Maclean wrote:
&lt;br&gt;&amp;gt; I am currently adding a GMenu.menu_bar to a vbox within a window. The 
&lt;br&gt;&amp;gt; problem is that when I resize the window the menu bar also resizes 
&lt;br&gt;&amp;gt; proportionately. Is there a way of fixing the height so that it doesn't 
&lt;br&gt;&amp;gt; resize when the window resizes?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Many thanks in advance
&lt;br&gt;&lt;br&gt;I do this a little differently - and don't have your problem. &amp;nbsp;I use 
&lt;br&gt;add_ui_from_string on a &amp;quot;UI manager&amp;quot; instance (from GAction.ui_manager 
&lt;br&gt;()), since building up a menu bar and dropdowns seemed easier this way.
&lt;br&gt;&lt;br&gt;Then I build up an hbox with the resulting menu widget and a couple of 
&lt;br&gt;other controls and pack *that* into the vbox, followed by the rest of 
&lt;br&gt;my window contents and status bar widget.
&lt;br&gt;&lt;br&gt;In any case, the undesirable menu bar resizing does not occur for me.
&lt;br&gt;&lt;br&gt;Finally, you might check out the LablGTK mailing list (there is one) 
&lt;br&gt;in the cc list, as they are a little more focused on things LablGTK.
&lt;br&gt;&lt;br&gt;Robert Roessler
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=9348809&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;roessler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://www.rftp.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.rftp.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Re%3A-Fixed-GMenu--tp9348809p9348809.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-6678009</id>
	<title>GtkHRuler and GtkVRuler properties on new widgets</title>
	<published>2006-10-06T05:49:32Z</published>
	<updated>2006-10-06T05:49:32Z</updated>
	<author>
		<name>j.romildo</name>
	</author>
	<content type="html">Hi.
&lt;br&gt;&lt;br&gt;I am still working on the port of GtkDatabox to lablgtk. This time I am
&lt;br&gt;having difficults with two properties of the GtkDatabox widget: &amp;quot;hruler&amp;quot;
&lt;br&gt;and &amp;quot;vruler&amp;quot;. Probably the difficults come from the fact that lablgtk
&lt;br&gt;does not have one class for each of GtkRuler, GtkHRuler and GtkVRuler,
&lt;br&gt;but only a single class: GRange.ruler.
&lt;br&gt;&lt;br&gt;So far I have the following definitions. Please, look where I have
&lt;br&gt;annoted with the comment (* is this correct? *), and see if I am doing it
&lt;br&gt;right.
&lt;br&gt;&lt;br&gt;&lt;br&gt;(* gtkDatabox.props *)
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;prefix &amp;quot;Gtk&amp;quot;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;header {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;type databox_t = [Gtk.drawing_area|`databox]
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;classes {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;GtkAdjustment &amp;quot;Gtk.adjustment obj&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;GtkHRuler &amp;quot;Gtk.ruler Gtk.obj&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (* is this correct? *)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;GtkVRuler &amp;quot;Gtk.ruler Gtk.obj&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (* is this correct? *)
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;class Databox type &amp;quot;databox_t Gtk.obj&amp;quot; set wrap wrapsig : DrawingArea {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;enable-selection&amp;quot; &amp;nbsp; gboolean &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: Read / Write
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;enable-zoom&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: Read / Write
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;hadjustment&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;GtkAdjustment &amp;nbsp; : Read / Write
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;vadjustment&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;GtkAdjustment &amp;nbsp; : Read / Write
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;hruler&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GtkHRuler &amp;nbsp; &amp;nbsp; &amp;nbsp; : Read / Write &amp;nbsp; &amp;nbsp; (* is this correct? *)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;vruler&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GtkVRuler &amp;nbsp; &amp;nbsp; &amp;nbsp; : Read / Write &amp;nbsp; &amp;nbsp; (* is this correct? *)
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;signal selection_changed
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;&lt;br&gt;(* gDatabox.mli *)
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;class databox_signals : 'a Gtk.obj -&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;object
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;inherit GObj.widget_signals
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;constraint 'a = [&amp;gt; GtkDatabox.databox]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;val obj : 'a Gtk.obj
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method selection_changed : callback:(unit -&amp;gt; unit) -&amp;gt; GtkSignal.id
&lt;br&gt;&amp;nbsp; &amp;nbsp;end
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;class databox : 'a Gtk.obj -&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;object
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;inherit GObj.widget
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;constraint 'a = [&amp;gt; GtkDatabox.databox]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;val obj : 'a Gtk.obj
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method as_databox : GtkDatabox.databox Gtk.obj
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method enable_selection : bool
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method set_enable_selection : bool -&amp;gt; unit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method enable_zoom : bool
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method set_enable_zoom : bool -&amp;gt; unit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method hadjustment : GData.adjustment
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method set_hadjustment : GData.adjustment -&amp;gt; unit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method vadjustment : GData.adjustment
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method set_vadjustment : GData.adjustment -&amp;gt; unit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method hruler : GRange.ruler &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(* is this correct? *)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method set_hruler : GRange.ruler -&amp;gt; unit &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(* is this correct? *)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method vruler : GRange.ruler &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(* is this correct? *)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method set_vruler : GRange.ruler -&amp;gt; unit &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(* is this correct? *)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method event : GObj.event_ops
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method connect : databox_signals
&lt;br&gt;&amp;nbsp; &amp;nbsp;end
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;val databox :
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;?packing:(GObj.widget -&amp;gt; unit) -&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;?show:bool -&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;unit -&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;databox
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;(* gDatabox.ml *)
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;open GObj
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;open GtkDatabox
&lt;br&gt;&amp;nbsp; &amp;nbsp;open OgtkDataboxProps
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;class databox_signals &amp;nbsp;(obj : [&amp;gt; GtkDatabox.databox] Gtk.obj) = object
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;inherit GObj.widget_signals_impl obj
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;inherit databox_sigs
&lt;br&gt;&amp;nbsp; &amp;nbsp;end
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;class databox (obj : [&amp;gt; GtkDatabox.databox] Gtk.obj) = object
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;inherit [_] GObj.widget_impl obj
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method as_databox : GtkDatabox.databox Gtk.obj =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (obj :&amp;gt; GtkDatabox.databox Gobject.obj)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;inherit databox_props
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method event = new GObj.event_ops obj
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method connect = new databox_signals obj
&lt;br&gt;&amp;nbsp; &amp;nbsp;end
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;let databox ?packing ?show () =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;let w = Databox.create [] in
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pack_return (new databox w) ~packing ~show
&lt;br&gt;&lt;br&gt;Compilation fails with the message:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;$ make opt
&lt;br&gt;&amp;nbsp; &amp;nbsp;[...]
&lt;br&gt;&amp;nbsp; &amp;nbsp;ocamlc.opt -I +lablGL &amp;nbsp;-w s -c gDatabox.ml
&lt;br&gt;&amp;nbsp; &amp;nbsp;The implementation gDatabox.ml does not match the interface gDatabox.cmi:
&lt;br&gt;&amp;nbsp; &amp;nbsp;Class declarations do not match:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;class databox :
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;([&amp;gt; GtkDataboxProps.databox_t ] as 'a) Gtk.obj -&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;object
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;val obj : 'a Gtk.obj
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method add : graph -&amp;gt; bool
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method as_databox : GtkDatabox.databox Gtk.obj
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method as_widget : Gtk.widget Gtk.obj
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method coerce : GObj.widget
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method connect : databox_signals
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method destroy : unit -&amp;gt; unit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method drag : GObj.drag_ops
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method enable_selection : bool
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method enable_zoom : bool
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method event : GObj.event_ops
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method get_oid : int
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method hadjustment : GData.adjustment
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method hruler : Gtk.ruler Gtk.obj
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method misc : GObj.misc_ops
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method private obj : 'a Gtk.obj
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method set_enable_selection : bool -&amp;gt; unit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method set_enable_zoom : bool -&amp;gt; unit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method set_hadjustment : GData.adjustment -&amp;gt; unit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method set_hruler : Gtk.ruler Gtk.obj -&amp;gt; unit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method set_vadjustment : GData.adjustment -&amp;gt; unit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method set_vruler : Gtk.ruler Gtk.obj -&amp;gt; unit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method vadjustment : GData.adjustment
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method vruler : Gtk.ruler Gtk.obj
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;end
&lt;br&gt;&amp;nbsp; &amp;nbsp;does not match
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;class databox :
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;([&amp;gt; GtkDatabox.databox ] as 'a) Gtk.obj -&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;object
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;val obj : 'a Gtk.obj
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method add : graph -&amp;gt; bool
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method as_databox : GtkDatabox.databox Gtk.obj
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method as_widget : Gtk.widget Gtk.obj
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method coerce : GObj.widget
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method connect : databox_signals
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method destroy : unit -&amp;gt; unit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method drag : GObj.drag_ops
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method enable_selection : bool
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method enable_zoom : bool
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method event : GObj.event_ops
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method get_oid : int
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method hadjustment : GData.adjustment
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method hruler : GRange.ruler
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method misc : GObj.misc_ops
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method set_enable_selection : bool -&amp;gt; unit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method set_enable_zoom : bool -&amp;gt; unit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method set_hadjustment : GData.adjustment -&amp;gt; unit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method set_hruler : GRange.ruler -&amp;gt; unit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method set_vadjustment : GData.adjustment -&amp;gt; unit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method set_vruler : GRange.ruler -&amp;gt; unit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method vadjustment : GData.adjustment
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method vruler : GRange.ruler
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;end
&lt;br&gt;&amp;nbsp; &amp;nbsp;The method hruler has type Gtk.ruler Gtk.obj but is expected to have type
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;GRange.ruler
&lt;br&gt;&amp;nbsp; &amp;nbsp;Type Gtk.ruler Gtk.obj = Gtk.ruler Gobject.obj is not compatible with type
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;GRange.ruler =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt; as_widget : Gtk.widget Gtk.obj; coerce : GObj.widget;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;connect : GObj.widget_signals; destroy : unit -&amp;gt; unit;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;drag : GObj.drag_ops; event : GObj.event_ops; get_oid : int;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;lower : float; max_size : float; misc : GObj.misc_ops;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;position : float; set_lower : float -&amp;gt; unit;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;set_max_size : float -&amp;gt; unit;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;set_metric : Gtk.Tags.metric_type -&amp;gt; unit;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;set_position : float -&amp;gt; unit; set_upper : float -&amp;gt; unit;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;upper : float &amp;gt; 
&lt;br&gt;&amp;nbsp; &amp;nbsp;make: *** [gDatabox.cmo] Error 2
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;I will be grateful for any help on this problem.
&lt;br&gt;&lt;br&gt;Regards,
&lt;br&gt;&lt;br&gt;Romildo
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/GtkHRuler-and-GtkVRuler-properties-on-new-widgets-tp6678009p6678009.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-6673821</id>
	<title>Re: Help on a port of GtkDatabox with lablgtk</title>
	<published>2006-10-05T23:53:43Z</published>
	<updated>2006-10-05T23:53:43Z</updated>
	<author>
		<name>Jacques Garrigue</name>
	</author>
	<content type="html">From: &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=6673821&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;j.romildo@...&lt;/a&gt;
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;module T = struct
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;type databox = [Gtk.drawing_area|`databox]
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;type graph = [`graph]
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;type xyc = [graph|`xyc]
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;type points = [xyc|`points]
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;end
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;external graph_add
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;: [&amp;gt; T.databox] Gtk.obj -&amp;gt; [&amp;gt; T.graph] Gobject.obj -&amp;gt; bool
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;= &amp;quot;ml_gtk_databox_graph_add&amp;quot;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;class virtual graph (obj : [&amp;gt; T.graph] Gobject.obj) = object
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;method as_graph : T.graph Gobject.obj = obj
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;end
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;class xyc (obj : [&amp;gt; T.xyc] Gobject.obj) = object
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;inherit graph obj
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;end
&lt;/div&gt;[..]
&lt;br&gt;&lt;br&gt;&amp;gt; Unfortunatly I was not clever enough to write correct ocaml code, hence
&lt;br&gt;&amp;gt; it is not accepted by the compiler, which says:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp; $ ocamlopt -I . -c -i databox.ml
&lt;br&gt;&amp;gt; &amp;nbsp; File &amp;quot;databox.ml&amp;quot;, line 19, characters 16-19:
&lt;br&gt;&amp;gt; &amp;nbsp; This expression has type ([&amp;gt; T.xyc ] as 'a) Gobject.obj
&lt;br&gt;&amp;gt; &amp;nbsp; but is here used with type T.graph Gobject.obj
&lt;br&gt;&amp;gt; &amp;nbsp; Type 'a = [&amp;gt; `graph | `xyc ] is not compatible with type T.graph = [ `graph ]
&lt;br&gt;&lt;br&gt;You need a coercion in the definition of graph:
&lt;br&gt;&lt;br&gt;&amp;nbsp; method as_graph = (obj :&amp;gt; T.graph Gobject.obj)
&lt;br&gt;&lt;br&gt;Indeed, without this coercion, the polymorphism of the obj parameter
&lt;br&gt;is lost, and the class type of graph would be:
&lt;br&gt;&lt;br&gt;&amp;nbsp; class virtual graph : T.graph Gobject.obj -&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; object method as_graph : T.graph Gobject.obj end
&lt;br&gt;&lt;br&gt;which causes your type error.
&lt;br&gt;&lt;br&gt;Jacques Garrigue
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Help-on-a-port-of-GtkDatabox-with-lablgtk-tp6669137p6673821.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-6669137</id>
	<title>Help on a port of GtkDatabox with lablgtk</title>
	<published>2006-10-05T15:14:11Z</published>
	<updated>2006-10-05T15:14:11Z</updated>
	<author>
		<name>j.romildo</name>
	</author>
	<content type="html">Hello.
&lt;br&gt;&lt;br&gt;The GtkDatabox library (&lt;a href=&quot;http://www.eudoxos.net/gtk/gtkdatabox/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.eudoxos.net/gtk/gtkdatabox/&lt;/a&gt;) defines
&lt;br&gt;the folowing class hierarchy:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;GObject
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; GtkDataboxGraph
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;GtkDataboxXYCGraph
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;GtkDataboxPoints
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GtkDataboxLines
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GtkDataboxMarker
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;GtkDataboxCrossSimple
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GtkDataboxBars
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;GtkDataboxGrid
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;GtdDrawingArea
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; GtkDatabox
&lt;br&gt;&lt;br&gt;The class GtkDatabox has the method add, whose C prototype is
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;gboolean 
&lt;br&gt;&amp;nbsp; &amp;nbsp;gtk_databox_graph_add (GtkDatabox *box, GtkDataboxGraph *graph)
&lt;br&gt;&lt;br&gt;I am attempting to port the library to ocaml using lablgtk (the latest
&lt;br&gt;snapshot: lablgtk2-20060908).
&lt;br&gt;&lt;br&gt;Therefore I have the following definitions in ocaml:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;module T = struct
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;type databox = [Gtk.drawing_area|`databox]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;type graph = [`graph]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;type xyc = [graph|`xyc]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;type points = [xyc|`points]
&lt;br&gt;&amp;nbsp; &amp;nbsp;end
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;external graph_add
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;: [&amp;gt; T.databox] Gtk.obj -&amp;gt; [&amp;gt; T.graph] Gobject.obj -&amp;gt; bool
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;= &amp;quot;ml_gtk_databox_graph_add&amp;quot;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;class virtual graph (obj : [&amp;gt; T.graph] Gobject.obj) = object
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method as_graph : T.graph Gobject.obj = obj
&lt;br&gt;&amp;nbsp; &amp;nbsp;end
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;class xyc (obj : [&amp;gt; T.xyc] Gobject.obj) = object
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;inherit graph obj
&lt;br&gt;&amp;nbsp; &amp;nbsp;end
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;class databox (obj : [&amp;gt; T.databox] Gtk.obj) = object
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;inherit [_] GObj.widget_impl obj
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method as_databox : T.databox Gtk.obj = obj
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method add g = graph_add obj g#as_graph
&lt;br&gt;&amp;nbsp; &amp;nbsp;end
&lt;br&gt;&lt;br&gt;The code is simplified, as at the moment I am not interesting in the
&lt;br&gt;properties and signals of GtkDatabox, as well as the functions to create
&lt;br&gt;the objects of the relevant classes.
&lt;br&gt;&lt;br&gt;Unfortunatly I was not clever enough to write correct ocaml code, hence
&lt;br&gt;it is not accepted by the compiler, which says:
&lt;br&gt;&lt;br&gt;&amp;nbsp; $ ocamlopt -I . -c -i databox.ml
&lt;br&gt;&amp;nbsp; File &amp;quot;databox.ml&amp;quot;, line 19, characters 16-19:
&lt;br&gt;&amp;nbsp; This expression has type ([&amp;gt; T.xyc ] as 'a) Gobject.obj
&lt;br&gt;&amp;nbsp; but is here used with type T.graph Gobject.obj
&lt;br&gt;&amp;nbsp; Type 'a = [&amp;gt; `graph | `xyc ] is not compatible with type T.graph = [ `graph ]
&lt;br&gt;&lt;br&gt;And finally I coming to these mailing lists to ask for help on how to
&lt;br&gt;solve this problem.
&lt;br&gt;&lt;br&gt;I am willing also get advices on how to conduct this port.
&lt;br&gt;&lt;br&gt;Regards,
&lt;br&gt;&lt;br&gt;Romildo
&lt;br&gt;&lt;br&gt;PS: Unfortunatly I am short of time, and would like to get answers as
&lt;br&gt;&amp;nbsp; &amp;nbsp; soon as possible. But I do not want to make pressure on you. Anyway
&lt;br&gt;&amp;nbsp; &amp;nbsp; it is still better to get delayed answers, that no answer at all.
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Help-on-a-port-of-GtkDatabox-with-lablgtk-tp6669137p6669137.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-6648427</id>
	<title>lablgtk internals: understand *.props files</title>
	<published>2006-10-04T14:52:42Z</published>
	<updated>2006-10-04T14:52:42Z</updated>
	<author>
		<name>j.romildo</name>
	</author>
	<content type="html">Hello.
&lt;br&gt;&lt;br&gt;I want to add bindings for a Gtk based library (GtkDatabox) in lablgtk,
&lt;br&gt;but the lack of documentation of lablgtk internals makes it difficult.
&lt;br&gt;&lt;br&gt;For now I have a question regarding property declaration files
&lt;br&gt;(*.props). What are the meaning of the different &amp;quot;modifiers&amp;quot; that one
&lt;br&gt;can see on those files, when declaring a class? In particular, what are
&lt;br&gt;&amp;quot;set&amp;quot;, &amp;quot;wrap&amp;quot;, &amp;quot;wrapsip&amp;quot;, &amp;quot;type&amp;quot;, ... for in a class declaration?
&lt;br&gt;&lt;br&gt;For instance, gtkMisc.props has the following declaration:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;class TipsQuery set wrap wrapsig : Label { ... }
&lt;br&gt;&lt;br&gt;Romildo
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/lablgtk-internals%3A-understand-*.props-files-tp6648427p6648427.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-6636797</id>
	<title>Re: Re: missing gtk_button_set_image in lablgtk</title>
	<published>2006-10-04T03:29:39Z</published>
	<updated>2006-10-04T03:29:39Z</updated>
	<author>
		<name>j.romildo</name>
	</author>
	<content type="html">On Tue, Oct 03, 2006 at 09:12:58PM +0200, Olivier Andrieu wrote:
&lt;br&gt;Content-Description: message body and .signature
&lt;br&gt;&amp;gt; &amp;nbsp;Olivier Andrieu [Tuesday 3 October 2006] :
&lt;br&gt;&amp;gt; &amp;nbsp;&amp;gt; Here is a patch, with a bunch of other missing properties of
&lt;br&gt;&amp;gt; &amp;nbsp;&amp;gt; GtkButton.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Index: gtkButton.props
&lt;br&gt;&amp;gt; ===================================================================
&lt;br&gt;&amp;gt; RCS file: /net/yquem/devel/caml/repository/bazar-ocaml/lablgtk/src/gtkButton.props,v
&lt;br&gt;&amp;gt; retrieving revision 1.5
&lt;br&gt;&amp;gt; diff -u -r1.5 gtkButton.props
&lt;br&gt;&amp;gt; --- gtkButton.props	16 Sep 2006 10:33:02 -0000	1.5
&lt;br&gt;&amp;gt; +++ gtkButton.props	3 Oct 2006 19:11:02 -0000
&lt;br&gt;&amp;gt; @@ -11,10 +11,14 @@
&lt;br&gt;&amp;gt; &amp;nbsp;}
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt; &amp;nbsp;class Button set wrap wrapsig : Bin {
&lt;br&gt;&amp;gt; + &amp;nbsp;&amp;quot;focus-on-click&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; gboolean &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : Read / Write / NoSet
&lt;br&gt;&amp;gt; + &amp;nbsp;&amp;quot;image&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;GtkWidget_opt &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: Read / Write / NoSet
&lt;/div&gt;&lt;br&gt;It seems that defining image this way, as a property, will force the
&lt;br&gt;type of set_image to GObj.widget option -&amp;gt; unit, while one may expect it
&lt;br&gt;to be GObj.widget -&amp;gt; unit &amp;nbsp;, from the Gtk API documentation.
&lt;br&gt;&lt;br&gt;Maybe the property image-position should be defined too.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&amp;quot;label&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gchararray &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : Read / Write / Construct
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&amp;quot;use-stock&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : Read / Write / Construct
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&amp;quot;use-underline&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : Read / Write / Construct
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&amp;quot;relief&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GtkReliefStyle &amp;nbsp; &amp;nbsp; &amp;nbsp; : Read / Write
&lt;br&gt;&amp;gt; + &amp;nbsp;&amp;quot;xalign&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gfloat &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : Read / Write / NoSet
&lt;br&gt;&amp;gt; + &amp;nbsp;&amp;quot;yalign&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gfloat &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : Read / Write / NoSet
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;signal activate &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/ NoWrap
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;signal clicked
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;signal enter
&lt;br&gt;&amp;gt; Index: gButton.mli
&lt;br&gt;&amp;gt; ===================================================================
&lt;br&gt;&amp;gt; RCS file: /net/yquem/devel/caml/repository/bazar-ocaml/lablgtk/src/gButton.mli,v
&lt;br&gt;&amp;gt; retrieving revision 1.34
&lt;br&gt;&amp;gt; diff -u -r1.34 gButton.mli
&lt;br&gt;&amp;gt; --- gButton.mli	16 Sep 2006 10:33:02 -0000	1.34
&lt;br&gt;&amp;gt; +++ gButton.mli	3 Oct 2006 19:11:02 -0000
&lt;br&gt;&amp;gt; @@ -25,6 +25,14 @@
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;method use_underline : bool
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;method grab_default : unit -&amp;gt; unit
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;method event : event_ops
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;method set_focus_on_click : bool -&amp;gt; unit
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;method focus_on_click : bool
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;method image : GObj.widget option &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (** @since GTK 2.6 *)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;method set_image : GObj.widget option -&amp;gt; unit (** @since GTK 2.6 *)
&lt;/div&gt;&lt;br&gt;Is this really the type we want for set_image? I am not sure.
&lt;br&gt;&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;method set_xalign : float -&amp;gt; unit &amp;nbsp;(** @since GTK 2.4 *)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;method xalign &amp;nbsp; &amp;nbsp; : float &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(** @since GTK 2.4 *)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;method set_yalign : float -&amp;gt; unit &amp;nbsp;(** @since GTK 2.4 *)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;method yalign &amp;nbsp; &amp;nbsp; : float &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(** @since GTK 2.4 *)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;end
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt; &amp;nbsp;(** @gtkdoc gtk GtkButton *)
&lt;br&gt;&lt;br&gt;Comparing with the types for label (string), and set_label (string -&amp;gt;
&lt;br&gt;unit), option is not used. But probably because here an empty string may
&lt;br&gt;be used for un unset label. Although the API doc. says that &amp;quot;If the
&lt;br&gt;label text has not been set the return value will be NULL&amp;quot;. So, in C, an
&lt;br&gt;unset label would return a NULL pointer, instead of the empty string &amp;quot;&amp;quot;.
&lt;br&gt;&lt;br&gt;Romildo
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Re%3A-missing-gtk_button_set_image-in-lablgtk-tp6625661p6636797.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-6627072</id>
	<title>Re: Re: missing gtk_button_set_image in lablgtk</title>
	<published>2006-10-03T13:12:58Z</published>
	<updated>2006-10-03T13:12:58Z</updated>
	<author>
		<name>Olivier Andrieu-2</name>
	</author>
	<content type="html">&amp;nbsp;Olivier Andrieu [Tuesday 3 October 2006] :
&lt;br&gt;&amp;nbsp;&amp;gt; Here is a patch, with a bunch of other missing properties of
&lt;br&gt;&amp;nbsp;&amp;gt; GtkButton.
&lt;br&gt;&lt;br&gt;Oops, here is a real patch.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;&amp;nbsp; &amp;nbsp;Olivier
&lt;br&gt;&lt;br /&gt;Index: gtkButton.props
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /net/yquem/devel/caml/repository/bazar-ocaml/lablgtk/src/gtkButton.props,v
&lt;br&gt;retrieving revision 1.5
&lt;br&gt;diff -u -r1.5 gtkButton.props
&lt;br&gt;--- gtkButton.props	16 Sep 2006 10:33:02 -0000	1.5
&lt;br&gt;+++ gtkButton.props	3 Oct 2006 19:11:02 -0000
&lt;br&gt;@@ -11,10 +11,14 @@
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;class Button set wrap wrapsig : Bin {
&lt;br&gt;+ &amp;nbsp;&amp;quot;focus-on-click&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; gboolean &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : Read / Write / NoSet
&lt;br&gt;+ &amp;nbsp;&amp;quot;image&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;GtkWidget_opt &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: Read / Write / NoSet
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;quot;label&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gchararray &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : Read / Write / Construct
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;quot;use-stock&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : Read / Write / Construct
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;quot;use-underline&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : Read / Write / Construct
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;quot;relief&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GtkReliefStyle &amp;nbsp; &amp;nbsp; &amp;nbsp; : Read / Write
&lt;br&gt;+ &amp;nbsp;&amp;quot;xalign&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gfloat &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : Read / Write / NoSet
&lt;br&gt;+ &amp;nbsp;&amp;quot;yalign&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gfloat &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : Read / Write / NoSet
&lt;br&gt;&amp;nbsp; &amp;nbsp;signal activate &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/ NoWrap
&lt;br&gt;&amp;nbsp; &amp;nbsp;signal clicked
&lt;br&gt;&amp;nbsp; &amp;nbsp;signal enter
&lt;br&gt;Index: gButton.mli
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /net/yquem/devel/caml/repository/bazar-ocaml/lablgtk/src/gButton.mli,v
&lt;br&gt;retrieving revision 1.34
&lt;br&gt;diff -u -r1.34 gButton.mli
&lt;br&gt;--- gButton.mli	16 Sep 2006 10:33:02 -0000	1.34
&lt;br&gt;+++ gButton.mli	3 Oct 2006 19:11:02 -0000
&lt;br&gt;@@ -25,6 +25,14 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method use_underline : bool
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method grab_default : unit -&amp;gt; unit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method event : event_ops
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;method set_focus_on_click : bool -&amp;gt; unit
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;method focus_on_click : bool
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;method image : GObj.widget option &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (** @since GTK 2.6 *)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;method set_image : GObj.widget option -&amp;gt; unit (** @since GTK 2.6 *)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;method set_xalign : float -&amp;gt; unit &amp;nbsp;(** @since GTK 2.4 *)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;method xalign &amp;nbsp; &amp;nbsp; : float &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(** @since GTK 2.4 *)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;method set_yalign : float -&amp;gt; unit &amp;nbsp;(** @since GTK 2.4 *)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;method yalign &amp;nbsp; &amp;nbsp; : float &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(** @since GTK 2.4 *)
&lt;br&gt;&amp;nbsp; &amp;nbsp;end
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;(** @gtkdoc gtk GtkButton *)
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Re%3A-missing-gtk_button_set_image-in-lablgtk-tp6625661p6627072.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-6626994</id>
	<title>Re: missing gtk_button_set_image in lablgtk</title>
	<published>2006-10-03T13:01:21Z</published>
	<updated>2006-10-03T13:01:21Z</updated>
	<author>
		<name>Olivier Andrieu-2</name>
	</author>
	<content type="html">&amp;nbsp;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=6626994&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;j.romildo@...&lt;/a&gt; [Tuesday 3 October 2006] :
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; On Tue, Oct 03, 2006 at 10:34:39AM -0300, &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=6626994&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;j.romildo@...&lt;/a&gt; wrote:
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;gt; Hello.
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;gt; I am using lablgtk to write the GUI for an application I am
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;gt; developing. Currently I want to set the image associated with a
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;gt; button, but it seems that lablgtk does not have support for the
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;gt; Gtk API function gtk_button_set_image. So I am writing to request
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;gt; this support in the next version of lablgtk.
&lt;br&gt;&amp;nbsp;&amp;gt; 
&lt;br&gt;&amp;nbsp;&amp;gt; I have written the attached to add the methos image and set_image
&lt;br&gt;&amp;nbsp;&amp;gt; to class Button of gtklabel. But I did not get the types correct
&lt;br&gt;&amp;nbsp;&amp;gt; for the GtkWidget* from the Gtk+ API. Maybe someone has a clue on
&lt;br&gt;&amp;nbsp;&amp;gt; how those methods should be typed.
&lt;br&gt;&amp;nbsp;&amp;gt; 
&lt;br&gt;&amp;nbsp;&amp;gt; In Gtk+ the functions have the prototypes:
&lt;br&gt;&amp;nbsp;&amp;gt; 
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp;GtkWidget* gtk_button_get_image (GtkButton *button);
&lt;br&gt;&amp;nbsp;&amp;gt; 
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp;void gtk_button_set_image (GtkButton *button, GtkWidget *image);
&lt;br&gt;&amp;nbsp;&amp;gt; 
&lt;br&gt;&amp;nbsp;&amp;gt; The idea is to have two new methods in the class button (files
&lt;br&gt;&amp;nbsp;&amp;gt; gButton.mli and gButton.ml):
&lt;br&gt;&amp;nbsp;&amp;gt; 
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; image : &amp;lt;lablgtk type equivalent to GtkWidget*&amp;gt; option
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; set_image : &amp;lt;lablgtk type equivalent to GtkWidget*&amp;gt; -&amp;gt; unit
&lt;br&gt;&amp;nbsp;&amp;gt; 
&lt;br&gt;&amp;nbsp;&amp;gt; and two extern functions in module Button of file gtkButton.ml:
&lt;br&gt;&lt;br&gt;No need to, since &amp;quot;image&amp;quot; is defined as a property. You just have to
&lt;br&gt;modify gtkButton.props and propcc will generate the code, and add the
&lt;br&gt;new methods in gButton.mli.
&lt;br&gt;&lt;br&gt;Here is a patch, with a bunch of other missing properties of
&lt;br&gt;GtkButton.
&lt;br&gt;-- 
&lt;br&gt;&amp;nbsp; &amp;nbsp;Olivier
&lt;br&gt;&lt;br /&gt;Repository : &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=6626994&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;andrieu@...&lt;/a&gt;:/net/yquem/devel/caml/repository
&lt;br&gt;Module &amp;nbsp; &amp;nbsp; : bazar-ocaml/lablgtk
&lt;br&gt;Working dir: ~/src/caml/lablgtk/lablgtk-camlcvs/
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;In directory .:
&lt;br&gt;In directory src:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Modified &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src/gButton.mli
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Modified &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src/gtkButton.props
&lt;br&gt;&lt;br&gt;--------------------- End ---------------------
&lt;br&gt;-- last cmd: cvs -f -z3 diff -u src/gtkButton.props src/gButton.mli --
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Re%3A-missing-gtk_button_set_image-in-lablgtk-tp6625661p6626994.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-6626979</id>
	<title>Patch available for missing gtk_button_set_image in lablgtk</title>
	<published>2006-10-03T12:52:50Z</published>
	<updated>2006-10-03T12:52:50Z</updated>
	<author>
		<name>j.romildo</name>
	</author>
	<content type="html">On Tue, Oct 03, 2006 at 02:37:55PM -0300, &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=6626979&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;j.romildo@...&lt;/a&gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; On Tue, Oct 03, 2006 at 10:34:39AM -0300, &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=6626979&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;j.romildo@...&lt;/a&gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt; Hello.
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; I am using lablgtk to write the GUI for an application I am
&lt;br&gt;&amp;gt; &amp;gt; developing. Currently I want to set the image associated with a button,
&lt;br&gt;&amp;gt; &amp;gt; but it seems that lablgtk does not have support for the Gtk API function
&lt;br&gt;&amp;gt; &amp;gt; gtk_button_set_image. So I am writing to request this support in the
&lt;br&gt;&amp;gt; &amp;gt; next version of lablgtk.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I have written the attached to add the methos image and set_image to
&lt;br&gt;&amp;gt; class Button of gtklabel. But I did not get the types correct for the
&lt;br&gt;&amp;gt; GtkWidget* from the Gtk+ API. Maybe someone has a clue on how those
&lt;br&gt;&amp;gt; methods should be typed.
&lt;/div&gt;&lt;/div&gt;I have reworked the patch and it is working now. So I will be glad if it
&lt;br&gt;as accepted upstream.
&lt;br&gt;&lt;br&gt;Regards.
&lt;br&gt;&lt;br&gt;Romildo
&lt;br&gt;&lt;br /&gt;Only in lablgtk-2.6.0.new: config.log
&lt;br&gt;Only in lablgtk-2.6.0.new: config.make
&lt;br&gt;Only in lablgtk-2.6.0.new: config.status
&lt;br&gt;diff -ur lablgtk-2.6.0.orig/src/gButton.ml lablgtk-2.6.0.new/src/gButton.ml
&lt;br&gt;--- lablgtk-2.6.0.orig/src/gButton.ml	2004-06-01 09:06:42.000000000 -0300
&lt;br&gt;+++ lablgtk-2.6.0.new/src/gButton.ml	2006-10-03 15:39:02.000000000 -0300
&lt;br&gt;@@ -14,6 +14,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;inherit button_props
&lt;br&gt;&amp;nbsp; &amp;nbsp;method private obj = obj
&lt;br&gt;&amp;nbsp; &amp;nbsp;method clicked () = Button.clicked obj
&lt;br&gt;+ &amp;nbsp;method image =
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;match Button.image obj with
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;| Some x -&amp;gt; Some (new widget x)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;| None -&amp;gt; None
&lt;br&gt;+ &amp;nbsp;method set_image w = Button.set_image obj (as_widget w)
&lt;br&gt;&amp;nbsp; &amp;nbsp;method grab_default () =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;set Widget.P.can_default obj true;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;set Widget.P.has_default obj true
&lt;br&gt;diff -ur lablgtk-2.6.0.orig/src/gButton.mli lablgtk-2.6.0.new/src/gButton.mli
&lt;br&gt;--- lablgtk-2.6.0.orig/src/gButton.mli	2004-07-05 07:05:47.000000000 -0300
&lt;br&gt;+++ lablgtk-2.6.0.new/src/gButton.mli	2006-10-03 15:36:36.000000000 -0300
&lt;br&gt;@@ -14,6 +14,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;inherit GContainer.bin
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;constraint 'a = [&amp;gt; button]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;val obj : 'a obj
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;method image : widget option
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;method set_image : widget -&amp;gt; unit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method clicked : unit -&amp;gt; unit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method set_relief : Tags.relief_style -&amp;gt; unit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method relief : Tags.relief_style
&lt;br&gt;diff -ur lablgtk-2.6.0.orig/src/gtkButton.ml lablgtk-2.6.0.new/src/gtkButton.ml
&lt;br&gt;--- lablgtk-2.6.0.orig/src/gtkButton.ml	2004-05-09 11:39:14.000000000 -0300
&lt;br&gt;+++ lablgtk-2.6.0.new/src/gtkButton.ml	2006-10-03 15:36:36.000000000 -0300
&lt;br&gt;@@ -17,6 +17,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;match stock with None -&amp;gt; label, None
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| Some id -&amp;gt; Some (GtkStock.convert_id id), Some true in
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;make_params ~cont p ?label ?use_underline:use_mnemonic ?use_stock
&lt;br&gt;+ &amp;nbsp;external image : [&amp;gt;`button] obj -&amp;gt; (Gtk.widget Gtk.obj) option = &amp;quot;ml_gtk_button_get_image&amp;quot;
&lt;br&gt;+ &amp;nbsp;external set_image : [&amp;gt;`button] obj -&amp;gt; Gtk.widget Gtk.obj -&amp;gt; unit = &amp;quot;ml_gtk_button_set_image&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp;external pressed : [&amp;gt;`button] obj -&amp;gt; unit = &amp;quot;ml_gtk_button_pressed&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp;external released : [&amp;gt;`button] obj -&amp;gt; unit = &amp;quot;ml_gtk_button_released&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp;external clicked : [&amp;gt;`button] obj -&amp;gt; unit = &amp;quot;ml_gtk_button_clicked&amp;quot;
&lt;br&gt;diff -ur lablgtk-2.6.0.orig/src/ml_gtkbutton.c lablgtk-2.6.0.new/src/ml_gtkbutton.c
&lt;br&gt;--- lablgtk-2.6.0.orig/src/ml_gtkbutton.c	2004-05-09 11:39:14.000000000 -0300
&lt;br&gt;+++ lablgtk-2.6.0.new/src/ml_gtkbutton.c	2006-10-03 15:36:36.000000000 -0300
&lt;br&gt;@@ -58,6 +58,16 @@
&lt;br&gt;&amp;nbsp;ML_2 (gtk_button_set_label, GtkButton_val, String_val, Unit)
&lt;br&gt;&amp;nbsp;ML_1 (gtk_button_get_label, GtkButton_val, Val_optstring)
&lt;br&gt;&amp;nbsp;*/
&lt;br&gt;+ML_2 (gtk_button_set_image, GtkButton_val, GtkWidget_val, Unit)
&lt;br&gt;+CAMLprim value ml_gtk_button_get_image (value b)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;CAMLparam1(b);
&lt;br&gt;+ &amp;nbsp;CAMLlocal1(res);
&lt;br&gt;+ &amp;nbsp;GtkWidget* tmp;
&lt;br&gt;+ &amp;nbsp;tmp = gtk_button_get_image(GtkButton_val(b));
&lt;br&gt;+ &amp;nbsp;res = Val_option(tmp,Val_GtkWidget);
&lt;br&gt;+ &amp;nbsp;CAMLreturn(res);
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/* gtktogglebutton.h */
&lt;br&gt;&amp;nbsp;
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Re%3A-missing-gtk_button_set_image-in-lablgtk-tp6625661p6626979.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-6625661</id>
	<title>Re: missing gtk_button_set_image in lablgtk</title>
	<published>2006-10-03T11:37:55Z</published>
	<updated>2006-10-03T11:37:55Z</updated>
	<author>
		<name>j.romildo</name>
	</author>
	<content type="html">On Tue, Oct 03, 2006 at 10:34:39AM -0300, &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=6625661&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;j.romildo@...&lt;/a&gt; wrote:
&lt;br&gt;&amp;gt; Hello.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I am using lablgtk to write the GUI for an application I am
&lt;br&gt;&amp;gt; developing. Currently I want to set the image associated with a button,
&lt;br&gt;&amp;gt; but it seems that lablgtk does not have support for the Gtk API function
&lt;br&gt;&amp;gt; gtk_button_set_image. So I am writing to request this support in the
&lt;br&gt;&amp;gt; next version of lablgtk.
&lt;br&gt;&lt;br&gt;I have written the attached to add the methos image and set_image to
&lt;br&gt;class Button of gtklabel. But I did not get the types correct for the
&lt;br&gt;GtkWidget* from the Gtk+ API. Maybe someone has a clue on how those
&lt;br&gt;methods should be typed.
&lt;br&gt;&lt;br&gt;In Gtk+ the functions have the prototypes:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;GtkWidget* gtk_button_get_image (GtkButton *button);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;void gtk_button_set_image (GtkButton *button, GtkWidget *image);
&lt;br&gt;&lt;br&gt;The idea is to have two new methods in the class button (files
&lt;br&gt;gButton.mli and gButton.ml):
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; image : &amp;lt;lablgtk type equivalent to GtkWidget*&amp;gt; option
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; set_image : &amp;lt;lablgtk type equivalent to GtkWidget*&amp;gt; -&amp;gt; unit
&lt;br&gt;&lt;br&gt;and two extern functions in module Button of file gtkButton.ml:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; external set_image : [&amp;gt;`button] obj -&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;type equivalent to GtkWidget*&amp;gt; -&amp;gt; unit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; = &amp;quot;ml_gtk_button_set_image&amp;quot;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; external image : [&amp;gt;`button] obj -&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;type equivalent to GtkWidget*&amp;gt; option
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; = &amp;quot;ml_gtk_button_get_image&amp;quot;
&lt;br&gt;&lt;br&gt;Any help is welcome.
&lt;br&gt;&lt;br&gt;Romildo
&lt;br&gt;&lt;br /&gt;diff -ur lablgtk-2.6.0.orig/src/gButton.ml lablgtk-2.6.0.new/src/gButton.ml
&lt;br&gt;--- lablgtk-2.6.0.orig/src/gButton.ml	2004-06-01 09:06:42.000000000 -0300
&lt;br&gt;+++ lablgtk-2.6.0.new/src/gButton.ml	2006-10-03 12:19:56.000000000 -0300
&lt;br&gt;@@ -14,6 +14,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;inherit button_props
&lt;br&gt;&amp;nbsp; &amp;nbsp;method private obj = obj
&lt;br&gt;&amp;nbsp; &amp;nbsp;method clicked () = Button.clicked obj
&lt;br&gt;+ &amp;nbsp;method image = Button.image obj
&lt;br&gt;+ &amp;nbsp;method set_image image = Button.set_image obj image
&lt;br&gt;&amp;nbsp; &amp;nbsp;method grab_default () =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;set Widget.P.can_default obj true;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;set Widget.P.has_default obj true
&lt;br&gt;diff -ur lablgtk-2.6.0.orig/src/gButton.mli lablgtk-2.6.0.new/src/gButton.mli
&lt;br&gt;--- lablgtk-2.6.0.orig/src/gButton.mli	2004-07-05 07:05:47.000000000 -0300
&lt;br&gt;+++ lablgtk-2.6.0.new/src/gButton.mli	2006-10-03 12:20:24.000000000 -0300
&lt;br&gt;@@ -14,6 +14,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;inherit GContainer.bin
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;constraint 'a = [&amp;gt; button]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;val obj : 'a obj
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;method image : Gtk.widget option
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;method set_image : Gtk.widget -&amp;gt; unit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method clicked : unit -&amp;gt; unit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method set_relief : Tags.relief_style -&amp;gt; unit
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;method relief : Tags.relief_style
&lt;br&gt;diff -ur lablgtk-2.6.0.orig/src/gtkButton.ml lablgtk-2.6.0.new/src/gtkButton.ml
&lt;br&gt;--- lablgtk-2.6.0.orig/src/gtkButton.ml	2004-05-09 11:39:14.000000000 -0300
&lt;br&gt;+++ lablgtk-2.6.0.new/src/gtkButton.ml	2006-10-03 12:15:32.000000000 -0300
&lt;br&gt;@@ -17,6 +17,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;match stock with None -&amp;gt; label, None
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| Some id -&amp;gt; Some (GtkStock.convert_id id), Some true in
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;make_params ~cont p ?label ?use_underline:use_mnemonic ?use_stock
&lt;br&gt;+ &amp;nbsp;external set_image : [&amp;gt;`button] obj -&amp;gt; Gtk.widget -&amp;gt; unit = &amp;quot;ml_gtk_button_set_image&amp;quot;
&lt;br&gt;+ &amp;nbsp;external image : [&amp;gt;`button] obj -&amp;gt; Gtk.widget option = &amp;quot;ml_gtk_button_get_image&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp;external pressed : [&amp;gt;`button] obj -&amp;gt; unit = &amp;quot;ml_gtk_button_pressed&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp;external released : [&amp;gt;`button] obj -&amp;gt; unit = &amp;quot;ml_gtk_button_released&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp;external clicked : [&amp;gt;`button] obj -&amp;gt; unit = &amp;quot;ml_gtk_button_clicked&amp;quot;
&lt;br&gt;diff -ur lablgtk-2.6.0.orig/src/ml_gtkbutton.c lablgtk-2.6.0.new/src/ml_gtkbutton.c
&lt;br&gt;--- lablgtk-2.6.0.orig/src/ml_gtkbutton.c	2004-05-09 11:39:14.000000000 -0300
&lt;br&gt;+++ lablgtk-2.6.0.new/src/ml_gtkbutton.c	2006-10-03 12:14:54.000000000 -0300
&lt;br&gt;@@ -58,6 +58,16 @@
&lt;br&gt;&amp;nbsp;ML_2 (gtk_button_set_label, GtkButton_val, String_val, Unit)
&lt;br&gt;&amp;nbsp;ML_1 (gtk_button_get_label, GtkButton_val, Val_optstring)
&lt;br&gt;&amp;nbsp;*/
&lt;br&gt;+ML_2 (gtk_button_set_image, GtkButton_val, GtkWidget_val, Unit)
&lt;br&gt;+CAMLprim value ml_gtk_button_get_image (value b)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;CAMLparam1(b);
&lt;br&gt;+ &amp;nbsp;CAMLlocal1(res);
&lt;br&gt;+ &amp;nbsp;GtkWidget* tmp;
&lt;br&gt;+ &amp;nbsp;tmp = gtk_button_get_image(GtkButton_val(b));
&lt;br&gt;+ &amp;nbsp;res = Val_option(tmp,Val_GtkWidget);
&lt;br&gt;+ &amp;nbsp;CAMLreturn(res);
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/* gtktogglebutton.h */
&lt;br&gt;&amp;nbsp;
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Re%3A-missing-gtk_button_set_image-in-lablgtk-tp6625661p6625661.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-4065280</id>
	<title>Lablgtkmathview installation : findlib problem ?</title>
	<published>2006-04-22T14:43:12Z</published>
	<updated>2006-04-22T14:43:12Z</updated>
	<author>
		<name>Nicolas FRANCOIS-2</name>
	</author>
	<content type="html">I'd like to install lablgtkmathview, a wrapper for the widget
&lt;br&gt;gtkmathview. Problem is : it needs gmetadom, qhich works with findlib. I
&lt;br&gt;have some difficulties to work out how findlib works.
&lt;br&gt;&lt;br&gt;I tried to install lablgtk2 with the option
&lt;br&gt;--withdir=/usr/lib/ocaml/site-lib/, but now I can't compile
&lt;br&gt;lablgtkmathview. Anyway I try it, I can't mix packages using findlib and
&lt;br&gt;packages not using it.
&lt;br&gt;&lt;br&gt;How do you fix those problems yourself ?
&lt;br&gt;&lt;br&gt;Thanks for any help.
&lt;br&gt;&lt;br&gt;\bye
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Nicolas FRANCOIS
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://nicolas.francois.free.fr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://nicolas.francois.free.fr&lt;/a&gt;&lt;br&gt;&amp;nbsp;A TRUE Klingon programmer does NOT comment his code
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Caml-list mailing list. Subscription management:
&lt;br&gt;&lt;a href=&quot;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://caml.inria.fr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr&lt;/a&gt;&lt;br&gt;Beginner's list: &lt;a href=&quot;http://groups.yahoo.com/group/ocaml_beginners&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://groups.yahoo.com/group/ocaml_beginners&lt;/a&gt;&lt;br&gt;Bug reports: &lt;a href=&quot;http://caml.inria.fr/bin/caml-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr/bin/caml-bugs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Lablgtkmathview-installation-%3A-findlib-problem---tp4065280p4065280.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-3627164</id>
	<title>Re: lablgtk2 : connecting scroll bar adjustments to a view widget.</title>
	<published>2006-03-28T02:17:39Z</published>
	<updated>2006-03-28T02:17:39Z</updated>
	<author>
		<name>Olivier Andrieu-2</name>
	</author>
	<content type="html">&amp;nbsp;Erik de Castro Lopo [Tuesday 28 March 2006] :
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; HI all,
&lt;br&gt;&amp;nbsp;&amp;gt; 
&lt;br&gt;&amp;nbsp;&amp;gt; I posted this to the lablgtk list but received no reply. I'm hoping
&lt;br&gt;&amp;nbsp;&amp;gt; someone here might be able to answer this.
&lt;br&gt;&amp;nbsp;&amp;gt; 
&lt;br&gt;&amp;nbsp;&amp;gt; I have a pair of view objects and I'd like to connect a GData.adjustment
&lt;br&gt;&amp;nbsp;&amp;gt; to them. I think this has something to do with this method:
&lt;br&gt;&amp;nbsp;&amp;gt; 
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; method set_scroll_adjustments :
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; callback:(GData.adjustment option -&amp;gt; GData.adjustment option -&amp;gt; unit)
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; -&amp;gt; GtkSignal.id
&lt;br&gt;&lt;br&gt;Not quite. Apparently this signal is not meant to be connected by
&lt;br&gt;application code but is used by widget implementations. 
&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;gt; but I can't figure out how to use it. Anyone have a clue how to do
&lt;br&gt;&amp;nbsp;&amp;gt; this?
&lt;br&gt;&lt;br&gt;What you'd need is the gtk_widget_set_scroll_adjustments() function
&lt;br&gt;(which will emit the set_scroll_adjustments signal you've
&lt;br&gt;mentionned). Unfortunately this function is not wrapped in lablgtk.
&lt;br&gt;&lt;br&gt;All is not lost however, you can still use the GtkScrolledWindow
&lt;br&gt;convenience widget to implement some &amp;quot;linked scrollbars&amp;quot; setup. You
&lt;br&gt;simply need to tell the second scrollbar you create to reuse the
&lt;br&gt;GtkAdjustment object of the first scrollbar. (Untested) Pseudo-code
&lt;br&gt;follows:
&lt;br&gt;,----
&lt;br&gt;| let pane = GPack.paned `HORIZONTAL ~packing () in
&lt;br&gt;| 
&lt;br&gt;| let scroll_win_1 = 
&lt;br&gt;| &amp;nbsp; GBin.scrolled_window 
&lt;br&gt;| &amp;nbsp; &amp;nbsp; ~packing:pane#add1 () in
&lt;br&gt;| let scroll_win_2 = 
&lt;br&gt;| &amp;nbsp; GBin.scrolled_window
&lt;br&gt;| &amp;nbsp; &amp;nbsp; ~vadjustment:scroll_win_1#vadjustment
&lt;br&gt;| &amp;nbsp; &amp;nbsp; ~packing:pane#add2 () in
&lt;br&gt;| 
&lt;br&gt;| let text_view_1 = GText.view ~packing:scroll_win_1#add () in
&lt;br&gt;| let text_view_2 = GText.view ~packing:scroll_win_2#add () in
&lt;br&gt;| ...
&lt;br&gt;`----
&lt;br&gt;&lt;br&gt;This is not exactly what you wanted (there are 2 scrollbars) ; you'd
&lt;br&gt;need gtk_widget_set_scroll_adjustments() for a
&lt;br&gt;one-scrollbar-two-textviews setup.
&lt;br&gt;&lt;br&gt;cf. &lt;a href=&quot;http://developer.gnome.org/doc/API/2.0/gtk/GtkScrolledWindow.html#desc&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://developer.gnome.org/doc/API/2.0/gtk/GtkScrolledWindow.html#desc&lt;/a&gt;&amp;nbsp;
&lt;br&gt;for a more detailed description of how scrollable widgets are managed.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;&amp;nbsp; &amp;nbsp;Olivier
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Re%3A-lablgtk2-%3A-connecting-scroll-bar-adjustments-to-a-view-widget.-tp3627164p3627164.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-2815439</id>
	<title>Re: Re: async networking</title>
	<published>2006-02-07T20:29:17Z</published>
	<updated>2006-02-07T20:29:17Z</updated>
	<author>
		<name>skaller-2</name>
	</author>
	<content type="html">On Tue, 2006-02-07 at 13:29 -0800, Rick Richardson wrote:
&lt;br&gt;&lt;br&gt;&amp;gt; My only interest lies in high performance networking, specifically in a
&lt;br&gt;&amp;gt; high connection / low data volume scenario (at this juncture at least).
&lt;br&gt;&amp;gt; The optimal solution is some form of iocp with multiple threads (1 per
&lt;br&gt;&amp;gt; open socket initiated at startup). 
&lt;br&gt;&lt;br&gt;The optimal solution is to use MLton, Haskell, or Felix,
&lt;br&gt;which all give you a threading API without needing pthreads.
&lt;br&gt;&lt;br&gt;Ocaml bytecode with vmthreads does too, but I think it needs to be 
&lt;br&gt;fixed to schedule using event notifications instead of select.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;John Skaller &amp;lt;skaller at users dot sf dot net&amp;gt;
&lt;br&gt;Felix, successor to C++: &lt;a href=&quot;http://felix.sf.net&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://felix.sf.net&lt;/a&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Caml-list mailing list. Subscription management:
&lt;br&gt;&lt;a href=&quot;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://caml.inria.fr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr&lt;/a&gt;&lt;br&gt;Beginner's list: &lt;a href=&quot;http://groups.yahoo.com/group/ocaml_beginners&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://groups.yahoo.com/group/ocaml_beginners&lt;/a&gt;&lt;br&gt;Bug reports: &lt;a href=&quot;http://caml.inria.fr/bin/caml-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr/bin/caml-bugs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Re%3A-async-networking-tp2786947p2815439.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-2815342</id>
	<title>Re: Re: async networking</title>
	<published>2006-02-07T20:18:01Z</published>
	<updated>2006-02-07T20:18:01Z</updated>
	<author>
		<name>Rick Richardson-2</name>
	</author>
	<content type="html">On Wed, 2006-02-08 at 11:03 +1300, Jonathan Roewen wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; &amp;gt; The multiple serving threads could actually make for an simple api,
&lt;br&gt;&amp;gt; &amp;gt; actually. A simple function to add a receive callback for a port would
&lt;br&gt;&amp;gt; &amp;gt; be all you'd need. You could even pass in a buffer to that callback that
&lt;br&gt;&amp;gt; &amp;gt; a person could respond directly to for socket send, since the same
&lt;br&gt;&amp;gt; &amp;gt; thread is handling the send requests as well.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I haven't checked the systhreads implementation (as I don't use it),
&lt;br&gt;&amp;gt; but if it's anything similar to the vmthreads implementation, it is
&lt;br&gt;&amp;gt; not very high performance.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; For example: to reschedule a thread, vmthreads a) uses select (not
&lt;br&gt;&amp;gt; sure if this is a problem), and b) does a linear search for a runnable
&lt;br&gt;&amp;gt; thread (I can't remember if it stops early, I'd have to have another
&lt;br&gt;&amp;gt; check).
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; The point is, in this case, you'd need to rewrite it to use thread
&lt;br&gt;&amp;gt; queues for the various states to get something closer to an O(1)
&lt;br&gt;&amp;gt; scheduler.
&lt;/div&gt;I technically don't need to officially reschedule.. since they will all
&lt;br&gt;be doing the same thing, I'll sleep the thread, then when data becomes
&lt;br&gt;available pass it the new fd and wake it up. A simple queue would be
&lt;br&gt;fine for that. 
&lt;br&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Jonathan
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Caml-list mailing list. Subscription management:
&lt;br&gt;&lt;a href=&quot;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://caml.inria.fr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr&lt;/a&gt;&lt;br&gt;Beginner's list: &lt;a href=&quot;http://groups.yahoo.com/group/ocaml_beginners&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://groups.yahoo.com/group/ocaml_beginners&lt;/a&gt;&lt;br&gt;Bug reports: &lt;a href=&quot;http://caml.inria.fr/bin/caml-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr/bin/caml-bugs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Re%3A-async-networking-tp2786947p2815342.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-2812153</id>
	<title>How to write efficient threaded programs on OCaml</title>
	<published>2006-02-07T15:15:47Z</published>
	<updated>2006-02-07T15:15:47Z</updated>
	<author>
		<name>Christophe Troestler</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;I was wondering if some among you would like to share some hints about
&lt;br&gt;how to write efficient multithreaded applications in OCaml. &amp;nbsp;Indeed,
&lt;br&gt;for example, the following concurrency test shows OCaml performing
&lt;br&gt;quite poorly:
&lt;br&gt;&lt;a href=&quot;http://shootout.alioth.debian.org/debian/benchmark.php?test=chameneos&amp;lang=all&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://shootout.alioth.debian.org/debian/benchmark.php?test=chameneos&amp;lang=all&lt;/a&gt;&lt;br&gt;A qprof profiling reveals that OCaml is spending 63-73% of its time on
&lt;br&gt;the function caml_process_pending_signals and 13-18% on
&lt;br&gt;pthread_cond_signal. &amp;nbsp;Is there a way to improve the performance of
&lt;br&gt;this code ?
&lt;br&gt;&lt;br&gt;Now maybe this is not to be considered like a good analogous of a
&lt;br&gt;possible &amp;quot;real life&amp;quot; application. &amp;nbsp;Hence my question: what do people
&lt;br&gt;do to get decent performance in these cases?
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;ChriS
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Caml-list mailing list. Subscription management:
&lt;br&gt;&lt;a href=&quot;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://caml.inria.fr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr&lt;/a&gt;&lt;br&gt;Beginner's list: &lt;a href=&quot;http://groups.yahoo.com/group/ocaml_beginners&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://groups.yahoo.com/group/ocaml_beginners&lt;/a&gt;&lt;br&gt;Bug reports: &lt;a href=&quot;http://caml.inria.fr/bin/caml-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr/bin/caml-bugs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/How-to-write-efficient-threaded-programs-on-OCaml-tp2812153p2812153.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-2811007</id>
	<title>Re: Re: async networking</title>
	<published>2006-02-07T14:03:31Z</published>
	<updated>2006-02-07T14:03:31Z</updated>
	<author>
		<name>Jonathan Roewen</name>
	</author>
	<content type="html">&amp;gt; The multiple serving threads could actually make for an simple api,
&lt;br&gt;&amp;gt; actually. A simple function to add a receive callback for a port would
&lt;br&gt;&amp;gt; be all you'd need. You could even pass in a buffer to that callback that
&lt;br&gt;&amp;gt; a person could respond directly to for socket send, since the same
&lt;br&gt;&amp;gt; thread is handling the send requests as well.
&lt;br&gt;&lt;br&gt;I haven't checked the systhreads implementation (as I don't use it),
&lt;br&gt;but if it's anything similar to the vmthreads implementation, it is
&lt;br&gt;not very high performance.
&lt;br&gt;&lt;br&gt;For example: to reschedule a thread, vmthreads a) uses select (not
&lt;br&gt;sure if this is a problem), and b) does a linear search for a runnable
&lt;br&gt;thread (I can't remember if it stops early, I'd have to have another
&lt;br&gt;check).
&lt;br&gt;&lt;br&gt;The point is, in this case, you'd need to rewrite it to use thread
&lt;br&gt;queues for the various states to get something closer to an O(1)
&lt;br&gt;scheduler.
&lt;br&gt;&lt;br&gt;Jonathan
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Caml-list mailing list. Subscription management:
&lt;br&gt;&lt;a href=&quot;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://caml.inria.fr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr&lt;/a&gt;&lt;br&gt;Beginner's list: &lt;a href=&quot;http://groups.yahoo.com/group/ocaml_beginners&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://groups.yahoo.com/group/ocaml_beginners&lt;/a&gt;&lt;br&gt;Bug reports: &lt;a href=&quot;http://caml.inria.fr/bin/caml-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr/bin/caml-bugs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Re%3A-async-networking-tp2786947p2811007.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-2810453</id>
	<title>Re: Re: async networking</title>
	<published>2006-02-07T13:29:35Z</published>
	<updated>2006-02-07T13:29:35Z</updated>
	<author>
		<name>Rick Richardson-2</name>
	</author>
	<content type="html">On Tue, 2006-02-07 at 18:44 +0100, Bardur Arantsson wrote: 
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; skaller wrote:
&lt;br&gt;&amp;gt; &amp;gt; On Mon, 2006-02-06 at 19:34 +0100, Bardur Arantsson wrote:
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; However, if you want very high-performance networking
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; you'd be better off with something closer to the metal, i.e. something
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; like a libevent wrapper 
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; Argg no. Libevent isn't a library, it doesn't control invert.
&lt;br&gt;&amp;gt; &amp;gt; It is a monolithic framework. Therefore it is not very useful because
&lt;br&gt;&amp;gt; &amp;gt; your code will no longer be composable. In particular,
&lt;br&gt;&amp;gt; &amp;gt; there is no way to compose two such frameworks, for example
&lt;br&gt;&amp;gt; &amp;gt; you cannot use it with an event driven GUI framework.
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Note that I said 'high-performance'.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Point #1: select() and anything based on it (I believe Equeue still is 
&lt;br&gt;&amp;gt; though I haven't looked at it for quite a while) is woefully inadequate 
&lt;br&gt;&amp;gt; for high performance I/O except in very specific circumstances.
&lt;/div&gt;&lt;br&gt;My only interest lies in high performance networking, specifically in a
&lt;br&gt;high connection / low data volume scenario (at this juncture at least).
&lt;br&gt;The optimal solution is some form of iocp with multiple threads (1 per
&lt;br&gt;open socket initiated at startup). I think at some level of high
&lt;br&gt;performance networking the whole file analogy goes out the window.
&lt;br&gt;&lt;br&gt;The multiple serving threads could actually make for an simple api,
&lt;br&gt;actually. A simple function to add a receive callback for a port would
&lt;br&gt;be all you'd need. You could even pass in a buffer to that callback that
&lt;br&gt;a person could respond directly to for socket send, since the same
&lt;br&gt;thread is handling the send requests as well. 
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Point #2: It is not customary for UI applications to require 
&lt;br&gt;&amp;gt; particularly high-performance I/O, thus rendering the non-composability 
&lt;br&gt;&amp;gt; issue moot.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I'm _not_ recommending libevent for general use, just if you want high 
&lt;br&gt;&amp;gt; performance with an easily switchable backend implementation.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Cheers,
&lt;br&gt;&amp;gt; 
&lt;/div&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Caml-list mailing list. Subscription management:
&lt;br&gt;&lt;a href=&quot;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://caml.inria.fr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr&lt;/a&gt;&lt;br&gt;Beginner's list: &lt;a href=&quot;http://groups.yahoo.com/group/ocaml_beginners&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://groups.yahoo.com/group/ocaml_beginners&lt;/a&gt;&lt;br&gt;Bug reports: &lt;a href=&quot;http://caml.inria.fr/bin/caml-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr/bin/caml-bugs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Re%3A-async-networking-tp2786947p2810453.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-2809694</id>
	<title>Re: Re: async networking</title>
	<published>2006-02-07T12:51:15Z</published>
	<updated>2006-02-07T12:51:15Z</updated>
	<author>
		<name>remi.vanicat</name>
	</author>
	<content type="html">2006/2/7, Bardur Arantsson &amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=2809694&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;spam@...&lt;/a&gt;&amp;gt;:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Gerd Stolpmann wrote:
&lt;br&gt;&amp;gt; &amp;gt; Yes, the default Equeue implementation bases simply on select(). It is,
&lt;br&gt;&amp;gt; &amp;gt; however, possible to develop alternate implementations. Currently, there
&lt;br&gt;&amp;gt; &amp;gt; are three of them which integrate into the event loops of labltk,
&lt;br&gt;&amp;gt; &amp;gt; lablgtk1 and lablgtk2. One could, for example, easily add an
&lt;br&gt;&amp;gt; &amp;gt; implementation for advanced kernel interfaces like epoll.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Actually, it might be quite interesting to see one based on
&lt;br&gt;&amp;gt; poll()/epoll(), but I suspect it wouldn't matter much compared to all
&lt;br&gt;&amp;gt; the other stuff that's going in the Equeue code. This is just a very
&lt;br&gt;&amp;gt; vague hunch, though.
&lt;/div&gt;&lt;br&gt;I believe that labgtk (and so equeue over lablgtk) use poll. Note that
&lt;br&gt;you are adding another layer : glib, so you might not have gain a lot.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Caml-list mailing list. Subscription management:
&lt;br&gt;&lt;a href=&quot;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://caml.inria.fr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr&lt;/a&gt;&lt;br&gt;Beginner's list: &lt;a href=&quot;http://groups.yahoo.com/group/ocaml_beginners&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://groups.yahoo.com/group/ocaml_beginners&lt;/a&gt;&lt;br&gt;Bug reports: &lt;a href=&quot;http://caml.inria.fr/bin/caml-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr/bin/caml-bugs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Re%3A-async-networking-tp2786947p2809694.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-2809293</id>
	<title>Re: Re: async networking</title>
	<published>2006-02-07T12:30:29Z</published>
	<updated>2006-02-07T12:30:29Z</updated>
	<author>
		<name>Gerd Stolpmann</name>
	</author>
	<content type="html">Am Dienstag, den 07.02.2006, 20:43 +0100 schrieb Bardur Arantsson:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; &amp;gt; Yes, the default Equeue implementation bases simply on select(). It is,
&lt;br&gt;&amp;gt; &amp;gt; however, possible to develop alternate implementations. Currently, there
&lt;br&gt;&amp;gt; &amp;gt; are three of them which integrate into the event loops of labltk,
&lt;br&gt;&amp;gt; &amp;gt; lablgtk1 and lablgtk2. One could, for example, easily add an
&lt;br&gt;&amp;gt; &amp;gt; implementation for advanced kernel interfaces like epoll.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Actually, it might be quite interesting to see one based on 
&lt;br&gt;&amp;gt; poll()/epoll(), but I suspect it wouldn't matter much compared to all 
&lt;br&gt;&amp;gt; the other stuff that's going in the Equeue code. This is just a very 
&lt;br&gt;&amp;gt; vague hunch, though.
&lt;/div&gt;&lt;br&gt;The Equeue core is quite light-weight, there are just some modules on
&lt;br&gt;top of it that make life easier at the user's option. So it would
&lt;br&gt;matter.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; &amp;gt; select() is, as far as I know, only bad if the file descriptors are
&lt;br&gt;&amp;gt; &amp;gt; linked with many different processes, because all that processes must be
&lt;br&gt;&amp;gt; &amp;gt; waked up in order to check the descriptors (even if no I/O can happen).
&lt;br&gt;&amp;gt; &amp;gt; But if you only have Internet sockets, I expect that select() performs
&lt;br&gt;&amp;gt; &amp;gt; well.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; There are lots of problems with select(). For example, it generally 
&lt;br&gt;&amp;gt; requires copying the file descriptor sets from user-space to kernel 
&lt;br&gt;&amp;gt; space for every select() invocation, the scanning of active file 
&lt;br&gt;&amp;gt; descriptors afterward can be inefficient(*), from OCaml it also causes 
&lt;br&gt;&amp;gt; more pressure on the GC through list allocations for result sets, etc. etc.
&lt;/div&gt;&lt;br&gt;That depends all very much on the average data case. E.g. if all the
&lt;br&gt;descriptors generate events at the same time, there is nothing bad with
&lt;br&gt;select(). If the typical case is that only very few descriptors &amp;quot;fire&amp;quot;
&lt;br&gt;it has very much overhead.
&lt;br&gt;&lt;br&gt;The poll() interface fixes a number of these issues. Anyway, in practice
&lt;br&gt;it is not much better than select() just because it is also based on
&lt;br&gt;passive iteration. One needs an actively notifying interface to improve
&lt;br&gt;that.
&lt;br&gt;&lt;br&gt;&amp;gt; Sure, but not at the level I'm talking. I'm talking about saturating 
&lt;br&gt;&amp;gt; high-bandwidth links, ultra-low latency -- though usually not at the 
&lt;br&gt;&amp;gt; same time, obviously ;). You know, the kind of stuff you might even 
&lt;br&gt;&amp;gt; consider using C/C++ (shudder) for just to avoid GC.
&lt;br&gt;&lt;br&gt;Given that data also needs to be processed by the application, it would
&lt;br&gt;be quite interesting whether the choice of the language makes a
&lt;br&gt;difference here. I would guess the time for GC can be kept low in
&lt;br&gt;relation to the costs for context switches, even for the
&lt;br&gt;high-performance case.
&lt;br&gt;&lt;br&gt;And in O'Caml one can prefer to program in a style that reduces the load
&lt;br&gt;on the GC. A much nicer alternative than considering C/C++ too early.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; &amp;gt; I think there is another point why it is a bad idea to distinguish
&lt;br&gt;&amp;gt; &amp;gt; between, say UI and server applications. Network components should be
&lt;br&gt;&amp;gt; &amp;gt; shareable between all types of applications.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Yup. Though all non-blocking I/O has the basic problem of &amp;quot;one event 
&lt;br&gt;&amp;gt; loop to rule them all&amp;quot; unless you go with several threads, each running 
&lt;br&gt;&amp;gt; their own event loop... At which point you might as well have each of 
&lt;br&gt;&amp;gt; those components just using regular blocking I/O and using threads as 
&lt;br&gt;&amp;gt; appropriate. Note, I'm not talking about performance characteristics 
&lt;br&gt;&amp;gt; here, just design. Also, exception handling and such can be handled much 
&lt;br&gt;&amp;gt; more nicely with a threaded design since they don't &amp;quot;invert&amp;quot; the control 
&lt;br&gt;&amp;gt; logic the same way non-blocking I/O tends to do.
&lt;/div&gt;&lt;br&gt;Really? From my experience I would say that exception handling is much
&lt;br&gt;easier in the non-blocking case. Exceptions may raise complicated
&lt;br&gt;synchronisation issues in the threaded design.
&lt;br&gt;&lt;br&gt;Gerd
&lt;br&gt;-- 
&lt;br&gt;------------------------------------------------------------
&lt;br&gt;Gerd Stolpmann * Viktoriastr. 45 * 64293 Darmstadt * Germany 
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=2809293&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gerd@...&lt;/a&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.gerd-stolpmann.de&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.gerd-stolpmann.de&lt;/a&gt;&lt;br&gt;Telefon: 06151/153855 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Telefax: 06151/997714
&lt;br&gt;------------------------------------------------------------
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Caml-list mailing list. Subscription management:
&lt;br&gt;&lt;a href=&quot;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://caml.inria.fr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr&lt;/a&gt;&lt;br&gt;Beginner's list: &lt;a href=&quot;http://groups.yahoo.com/group/ocaml_beginners&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://groups.yahoo.com/group/ocaml_beginners&lt;/a&gt;&lt;br&gt;Bug reports: &lt;a href=&quot;http://caml.inria.fr/bin/caml-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr/bin/caml-bugs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Re%3A-async-networking-tp2786947p2809293.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-2808480</id>
	<title>Re: async networking</title>
	<published>2006-02-07T11:43:57Z</published>
	<updated>2006-02-07T11:43:57Z</updated>
	<author>
		<name>Bárður Árantsson</name>
	</author>
	<content type="html">Gerd Stolpmann wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Am Dienstag, den 07.02.2006, 18:44 +0100 schrieb Bardur Arantsson:
&lt;br&gt;&amp;gt;&amp;gt; skaller wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; On Mon, 2006-02-06 at 19:34 +0100, Bardur Arantsson wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; However, if you want very high-performance networking
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; you'd be better off with something closer to the metal, i.e. something
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; like a libevent wrapper 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Argg no. Libevent isn't a library, it doesn't control invert.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; It is a monolithic framework. Therefore it is not very useful because
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; your code will no longer be composable. In particular,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; there is no way to compose two such frameworks, for example
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; you cannot use it with an event driven GUI framework.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Note that I said 'high-performance'.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Point #1: select() and anything based on it (I believe Equeue still is 
&lt;br&gt;&amp;gt;&amp;gt; though I haven't looked at it for quite a while) is woefully inadequate 
&lt;br&gt;&amp;gt;&amp;gt; for high performance I/O except in very specific circumstances.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Yes, the default Equeue implementation bases simply on select(). It is,
&lt;br&gt;&amp;gt; however, possible to develop alternate implementations. Currently, there
&lt;br&gt;&amp;gt; are three of them which integrate into the event loops of labltk,
&lt;br&gt;&amp;gt; lablgtk1 and lablgtk2. One could, for example, easily add an
&lt;br&gt;&amp;gt; implementation for advanced kernel interfaces like epoll.
&lt;/div&gt;&lt;br&gt;Actually, it might be quite interesting to see one based on 
&lt;br&gt;poll()/epoll(), but I suspect it wouldn't matter much compared to all 
&lt;br&gt;the other stuff that's going in the Equeue code. This is just a very 
&lt;br&gt;vague hunch, though.
&lt;br&gt;&lt;br&gt;[--snip--]
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; select() is, as far as I know, only bad if the file descriptors are
&lt;br&gt;&amp;gt; linked with many different processes, because all that processes must be
&lt;br&gt;&amp;gt; waked up in order to check the descriptors (even if no I/O can happen).
&lt;br&gt;&amp;gt; But if you only have Internet sockets, I expect that select() performs
&lt;br&gt;&amp;gt; well.
&lt;br&gt;&lt;br&gt;There are lots of problems with select(). For example, it generally 
&lt;br&gt;requires copying the file descriptor sets from user-space to kernel 
&lt;br&gt;space for every select() invocation, the scanning of active file 
&lt;br&gt;descriptors afterward can be inefficient(*), from OCaml it also causes 
&lt;br&gt;more pressure on the GC through list allocations for result sets, etc. etc.
&lt;br&gt;&lt;br&gt;(*) If your file descriptor set has large &amp;quot;holes&amp;quot; -- which can develop 
&lt;br&gt;if clients have very variable connection lifetimes -- you'll end up 
&lt;br&gt;scanning lots of memory you don't really need to scan. Algorithmically 
&lt;br&gt;it's all still O(n), but the constants can be _very_ different.
&lt;br&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; Point #2: It is not customary for UI applications to require 
&lt;br&gt;&amp;gt;&amp;gt; particularly high-performance I/O, thus rendering the non-composability 
&lt;br&gt;&amp;gt;&amp;gt; issue moot.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; There are many aspects of high performance, for example throughput,
&lt;br&gt;&amp;gt; latency, and whether a low or high number of descriptors are watched.
&lt;br&gt;&lt;br&gt;Sure. It's just that select() sucks performance-wise for most purposes. 
&lt;br&gt;The alternatives like the OpenBSD kqueue and poll() are usually much better.
&lt;br&gt;&lt;br&gt;&amp;gt; UI applications are often interested in low latency for a moderate number
&lt;br&gt;&amp;gt; of descriptors.
&lt;br&gt;&lt;br&gt;Sure, but not at the level I'm talking. I'm talking about saturating 
&lt;br&gt;high-bandwidth links, ultra-low latency -- though usually not at the 
&lt;br&gt;same time, obviously ;). You know, the kind of stuff you might even 
&lt;br&gt;consider using C/C++ (shudder) for just to avoid GC.
&lt;br&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I think there is another point why it is a bad idea to distinguish
&lt;br&gt;&amp;gt; between, say UI and server applications. Network components should be
&lt;br&gt;&amp;gt; shareable between all types of applications.
&lt;br&gt;&lt;br&gt;Yup. Though all non-blocking I/O has the basic problem of &amp;quot;one event 
&lt;br&gt;loop to rule them all&amp;quot; unless you go with several threads, each running 
&lt;br&gt;their own event loop... At which point you might as well have each of 
&lt;br&gt;those components just using regular blocking I/O and using threads as 
&lt;br&gt;appropriate. Note, I'm not talking about performance characteristics 
&lt;br&gt;here, just design. Also, exception handling and such can be handled much 
&lt;br&gt;more nicely with a threaded design since they don't &amp;quot;invert&amp;quot; the control 
&lt;br&gt;logic the same way non-blocking I/O tends to do.
&lt;br&gt;&lt;br&gt;&amp;gt; For example, an HTTP component is useful for both, so why should we develop an extra one for
&lt;br&gt;&amp;gt; specific needs of high performance?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&lt;br&gt;Sometimes you just need that last bit of performance where a &amp;quot;nice&amp;quot; 
&lt;br&gt;implementation just won't do.
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Bardur Arantsson
&lt;br&gt;&amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=2808480&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bardurREMOVE@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=2808480&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bardurREMOVE@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;[Postmodernism] is more like a three year old throwing his blocks
&lt;br&gt;around the room because he got frustrated with his failed
&lt;br&gt;attempts to stack them higher.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Black Parrot @ &lt;a href=&quot;http://slashdot.org&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://slashdot.org&lt;/a&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Caml-list mailing list. Subscription management:
&lt;br&gt;&lt;a href=&quot;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://caml.inria.fr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr&lt;/a&gt;&lt;br&gt;Beginner's list: &lt;a href=&quot;http://groups.yahoo.com/group/ocaml_beginners&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://groups.yahoo.com/group/ocaml_beginners&lt;/a&gt;&lt;br&gt;Bug reports: &lt;a href=&quot;http://caml.inria.fr/bin/caml-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr/bin/caml-bugs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Re%3A-async-networking-tp2786947p2808480.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-2807646</id>
	<title>Re: Re: async networking</title>
	<published>2006-02-07T11:01:08Z</published>
	<updated>2006-02-07T11:01:08Z</updated>
	<author>
		<name>Gerd Stolpmann</name>
	</author>
	<content type="html">Am Dienstag, den 07.02.2006, 18:44 +0100 schrieb Bardur Arantsson:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; skaller wrote:
&lt;br&gt;&amp;gt; &amp;gt; On Mon, 2006-02-06 at 19:34 +0100, Bardur Arantsson wrote:
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; However, if you want very high-performance networking
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; you'd be better off with something closer to the metal, i.e. something
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; like a libevent wrapper 
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; Argg no. Libevent isn't a library, it doesn't control invert.
&lt;br&gt;&amp;gt; &amp;gt; It is a monolithic framework. Therefore it is not very useful because
&lt;br&gt;&amp;gt; &amp;gt; your code will no longer be composable. In particular,
&lt;br&gt;&amp;gt; &amp;gt; there is no way to compose two such frameworks, for example
&lt;br&gt;&amp;gt; &amp;gt; you cannot use it with an event driven GUI framework.
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Note that I said 'high-performance'.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Point #1: select() and anything based on it (I believe Equeue still is 
&lt;br&gt;&amp;gt; though I haven't looked at it for quite a while) is woefully inadequate 
&lt;br&gt;&amp;gt; for high performance I/O except in very specific circumstances.
&lt;/div&gt;&lt;br&gt;Yes, the default Equeue implementation bases simply on select(). It is,
&lt;br&gt;however, possible to develop alternate implementations. Currently, there
&lt;br&gt;are three of them which integrate into the event loops of labltk,
&lt;br&gt;lablgtk1 and lablgtk2. One could, for example, easily add an
&lt;br&gt;implementation for advanced kernel interfaces like epoll. Or one that
&lt;br&gt;sits upon libevent. There is, however, the basic design decision that
&lt;br&gt;all events pass the same queue. This mainly has a certain scheduling
&lt;br&gt;effect (application-driven scheduling), and increases latency if the
&lt;br&gt;queue gets too long, but shows good behaviour under high load.
&lt;br&gt;&lt;br&gt;select() is, as far as I know, only bad if the file descriptors are
&lt;br&gt;linked with many different processes, because all that processes must be
&lt;br&gt;waked up in order to check the descriptors (even if no I/O can happen).
&lt;br&gt;But if you only have Internet sockets, I expect that select() performs
&lt;br&gt;well.
&lt;br&gt;&lt;br&gt;&amp;gt; Point #2: It is not customary for UI applications to require 
&lt;br&gt;&amp;gt; particularly high-performance I/O, thus rendering the non-composability 
&lt;br&gt;&amp;gt; issue moot.
&lt;br&gt;&lt;br&gt;There are many aspects of high performance, for example throughput,
&lt;br&gt;latency, and whether a low or high number of descriptors are watched. UI
&lt;br&gt;applications are often interested in low latency for a moderate number
&lt;br&gt;of descriptors.
&lt;br&gt;&lt;br&gt;I think there is another point why it is a bad idea to distinguish
&lt;br&gt;between, say UI and server applications. Network components should be
&lt;br&gt;shareable between all types of applications. For example, an HTTP
&lt;br&gt;component is useful for both, so why should we develop an extra one for
&lt;br&gt;specific needs of high performance?
&lt;br&gt;&lt;br&gt;Gerd
&lt;br&gt;&lt;br&gt;&amp;gt; I'm _not_ recommending libevent for general use, just if you want high 
&lt;br&gt;&amp;gt; performance with an easily switchable backend implementation.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Cheers,
&lt;br&gt;&amp;gt; 
&lt;br&gt;-- 
&lt;br&gt;------------------------------------------------------------
&lt;br&gt;Gerd Stolpmann * Viktoriastr. 45 * 64293 Darmstadt * Germany 
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=2807646&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gerd@...&lt;/a&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.gerd-stolpmann.de&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.gerd-stolpmann.de&lt;/a&gt;&lt;br&gt;Telefon: 06151/153855 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Telefax: 06151/997714
&lt;br&gt;------------------------------------------------------------
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Caml-list mailing list. Subscription management:
&lt;br&gt;&lt;a href=&quot;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://caml.inria.fr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr&lt;/a&gt;&lt;br&gt;Beginner's list: &lt;a href=&quot;http://groups.yahoo.com/group/ocaml_beginners&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://groups.yahoo.com/group/ocaml_beginners&lt;/a&gt;&lt;br&gt;Bug reports: &lt;a href=&quot;http://caml.inria.fr/bin/caml-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr/bin/caml-bugs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Re%3A-async-networking-tp2786947p2807646.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-2805938</id>
	<title>Re: async networking</title>
	<published>2006-02-07T09:44:54Z</published>
	<updated>2006-02-07T09:44:54Z</updated>
	<author>
		<name>Bárður Árantsson</name>
	</author>
	<content type="html">skaller wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; On Mon, 2006-02-06 at 19:34 +0100, Bardur Arantsson wrote:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; However, if you want very high-performance networking
&lt;br&gt;&amp;gt;&amp;gt; you'd be better off with something closer to the metal, i.e. something
&lt;br&gt;&amp;gt;&amp;gt; like a libevent wrapper 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Argg no. Libevent isn't a library, it doesn't control invert.
&lt;br&gt;&amp;gt; It is a monolithic framework. Therefore it is not very useful because
&lt;br&gt;&amp;gt; your code will no longer be composable. In particular,
&lt;br&gt;&amp;gt; there is no way to compose two such frameworks, for example
&lt;br&gt;&amp;gt; you cannot use it with an event driven GUI framework.
&lt;br&gt;&amp;gt; 
&lt;/div&gt;&lt;br&gt;Note that I said 'high-performance'.
&lt;br&gt;&lt;br&gt;Point #1: select() and anything based on it (I believe Equeue still is 
&lt;br&gt;though I haven't looked at it for quite a while) is woefully inadequate 
&lt;br&gt;for high performance I/O except in very specific circumstances.
&lt;br&gt;&lt;br&gt;Point #2: It is not customary for UI applications to require 
&lt;br&gt;particularly high-performance I/O, thus rendering the non-composability 
&lt;br&gt;issue moot.
&lt;br&gt;&lt;br&gt;I'm _not_ recommending libevent for general use, just if you want high 
&lt;br&gt;performance with an easily switchable backend implementation.
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Bardur Arantsson
&lt;br&gt;&amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=2805938&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bardurREMOVE@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=2805938&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bardurREMOVE@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;- Your Honor, let the record reflect that the Defense just grazed
&lt;br&gt;my Johnson.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;John, 'Ally McBeal'
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Caml-list mailing list. Subscription management:
&lt;br&gt;&lt;a href=&quot;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://caml.inria.fr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr&lt;/a&gt;&lt;br&gt;Beginner's list: &lt;a href=&quot;http://groups.yahoo.com/group/ocaml_beginners&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://groups.yahoo.com/group/ocaml_beginners&lt;/a&gt;&lt;br&gt;Bug reports: &lt;a href=&quot;http://caml.inria.fr/bin/caml-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr/bin/caml-bugs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Re%3A-async-networking-tp2786947p2805938.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-2798049</id>
	<title>Re: look for solution OCaml task</title>
	<published>2006-02-07T01:26:38Z</published>
	<updated>2006-02-07T01:26:38Z</updated>
	<author>
		<name>Alessandro Baretta</name>
	</author>
	<content type="html">skaller wrote:
&lt;br&gt;&amp;gt; On Mon, 2006-02-06 at 10:25 +0100, Alessandro Baretta wrote:
&lt;br&gt;&lt;br&gt;&amp;gt; But if I ran a software engineering class I'd FAIL anyone
&lt;br&gt;&amp;gt; that didn't .. not that I could actually understand the question .. :)
&lt;br&gt;&lt;br&gt;Actually, neither did I. See the value of formal specification languages? Why 
&lt;br&gt;not specify this task by writing an Ocaml class providing a reference 
&lt;br&gt;implementation?
&lt;br&gt;&lt;br&gt;Alex
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;*********************************************************************
&lt;br&gt;&lt;br&gt;Ing. Alessandro Baretta
&lt;br&gt;&lt;br&gt;Studio Baretta
&lt;br&gt;&lt;a href=&quot;http://studio.baretta.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://studio.baretta.com/&lt;/a&gt;&lt;br&gt;&lt;br&gt;Consulenza Tecnologica e Ingegneria Industriale
&lt;br&gt;Technological Consulting and Industrial Engineering
&lt;br&gt;&lt;br&gt;tel. +39 02 370 111 55
&lt;br&gt;fax. +39 02 370 111 54
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Caml-list mailing list. Subscription management:
&lt;br&gt;&lt;a href=&quot;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://caml.inria.fr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr&lt;/a&gt;&lt;br&gt;Beginner's list: &lt;a href=&quot;http://groups.yahoo.com/group/ocaml_beginners&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://groups.yahoo.com/group/ocaml_beginners&lt;/a&gt;&lt;br&gt;Bug reports: &lt;a href=&quot;http://caml.inria.fr/bin/caml-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr/bin/caml-bugs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Re%3A-look-for-solution-OCaml-task-tp2778156p2798049.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-2787959</id>
	<title>Re: OCaml &amp; .NET</title>
	<published>2006-02-06T11:19:37Z</published>
	<updated>2006-02-06T11:19:37Z</updated>
	<author>
		<name>Robert Roessler</name>
	</author>
	<content type="html">Sigh - one more email that went to the person insteat of the list...
&lt;br&gt;&lt;br&gt;William W Smith wrote:
&lt;br&gt;&amp;gt; Has anyone tried porting OCaml to managed code as a
&lt;br&gt;&amp;gt; Microsoft .NET family language? &amp;nbsp;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; A related question is whether there any library sets
&lt;br&gt;&amp;gt; to access the windows API or MFC directly?
&lt;br&gt;&lt;br&gt;Well, everyone else has already mentioned F# (but do note that it is
&lt;br&gt;not full OCaml)...
&lt;br&gt;&lt;br&gt;Regarding your other question, there is also a somewhat/largely
&lt;br&gt;complete (depending on your POV/needs) library for Win32 API access:
&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://sourceforge.net/projects/ocaml-win32&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://sourceforge.net/projects/ocaml-win32&lt;/a&gt;&lt;br&gt;&lt;br&gt;Robert Roessler
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=2787959&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;roessler@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://www.rftp.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.rftp.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Caml-list mailing list. Subscription management:
&lt;br&gt;&lt;a href=&quot;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://caml.inria.fr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr&lt;/a&gt;&lt;br&gt;Beginner's list: &lt;a href=&quot;http://groups.yahoo.com/group/ocaml_beginners&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://groups.yahoo.com/group/ocaml_beginners&lt;/a&gt;&lt;br&gt;Bug reports: &lt;a href=&quot;http://caml.inria.fr/bin/caml-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr/bin/caml-bugs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Re%3A-OCaml---.NET-tp2787959p2787959.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-2786947</id>
	<title>Re: async networking</title>
	<published>2006-02-06T10:34:35Z</published>
	<updated>2006-02-06T10:34:35Z</updated>
	<author>
		<name>Bárður Árantsson</name>
	</author>
	<content type="html">Gerd Stolpmann wrote:
&lt;br&gt;&amp;gt; Maybe you interested in my equeue library for multiplexing I/O. There is
&lt;br&gt;&amp;gt; now a lot of code using equeue (HTTP client, FTP client, RPC
&lt;br&gt;&amp;gt; implementation), so I think it is very stable.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://www.ocaml-programming.de/programming/equeue.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.ocaml-programming.de/programming/equeue.html&lt;/a&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&lt;br&gt;If you want ease of use and all-round stability I can also recommend
&lt;br&gt;Gerd's Equeue. However, if you want very high-performance networking
&lt;br&gt;you'd be better off with something closer to the metal, i.e. something
&lt;br&gt;like a libevent wrapper combined with a memory-mapped ring buffer to
&lt;br&gt;avoid unnecessary copying and minimize the costs associated with string
&lt;br&gt;allocation and GC. I have developed a highly efficient ring buffer 
&lt;br&gt;library (ocaml-rbuffer) which can be downloaded at
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://www.imada.sdu.dk/~bardur/personal/45-programs/index.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.imada.sdu.dk/~bardur/personal/45-programs/index.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Bardur Arantsson
&lt;br&gt;&amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=2786947&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bardurREMOVE@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=2786947&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bardurREMOVE@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;- Sometimes I think Trent just needs a cup of hot chocolate and a
&lt;br&gt;blankie.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Tori Amos commenting on Nine Inch Nails
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Caml-list mailing list. Subscription management:
&lt;br&gt;&lt;a href=&quot;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://caml.inria.fr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr&lt;/a&gt;&lt;br&gt;Beginner's list: &lt;a href=&quot;http://groups.yahoo.com/group/ocaml_beginners&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://groups.yahoo.com/group/ocaml_beginners&lt;/a&gt;&lt;br&gt;Bug reports: &lt;a href=&quot;http://caml.inria.fr/bin/caml-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr/bin/caml-bugs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Re%3A-async-networking-tp2786947p2786947.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-2784949</id>
	<title>Soutiens les aveugles et déficients visuels</title>
	<published>2006-02-06T07:17:38Z</published>
	<updated>2006-02-06T07:17:38Z</updated>
	<author>
		<name>leo22847@yahoo.fr</name>
	</author>
	<content type="html">Bonjour,
&lt;br&gt;&lt;br&gt;
Comme d&amp;#146;autres copains avant moi je transmets cette cha&amp;#238;ne de solidarit&amp;#233; pour aider une association (&lt;A href=&quot;http://www.unadev.org&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;CLIQUEZ-ICI: http://www.unadev.org&lt;/A&gt; pour acc&amp;#232;der au site internet)  connue en France et  qui fait de tr&amp;#232;s grandes choses. J&amp;#146;ai 14 ans et avec mon ecole, on a particip&amp;#233; au Marchathon.
&lt;br&gt;&lt;br&gt;
J&amp;#146;ai lu une histoire trop forte sur un gar&amp;#231;on de 12 ans qui &amp;#224; march&amp;#233; et courru sur 24 km. Je ne suis pas arriv&amp;#233; &amp;#224; faire 10 kms, la honte. &lt;br&gt;
Le Marchathon est une id&amp;#233;e de rassemblement et de solidarit&amp;#233; exemplaire. En 10 ans, 12 aveugles ont re&amp;#231;u leur chien gr&amp;#226;ce &amp;#224; ce mouvement du c&amp;#156;ur. Bravo &amp;#224; l&amp;#146;UNADEV.
 &lt;br&gt;&lt;br&gt;
J&amp;#146;ai &amp;#233;t&amp;#233; sur leur site et j&amp;#146;ai d&amp;#233;couvert que  L'UNADEV (Union des Aveugles et D&amp;#233;ficients Visuels), a &amp;#233;t&amp;#233; cr&amp;#233;&amp;#233;e en 1929, est une association reconnue d'int&amp;#233;r&amp;#234;t g&amp;#233;n&amp;#233;ral. Elle est membre de la F&amp;#233;d&amp;#233;ration des Aveugles et Handicap&amp;#233;s Visuels de France, reconnue d'utilit&amp;#233; publique (d&amp;#233;cret du 27 ao&amp;#251;t 1921). L'UNADEV a pour but l'aide et l'entraide des handicap&amp;#233;s visuels, par ses propres &amp;#156;uvres, la repr&amp;#233;sentation et la d&amp;#233;fense de leurs int&amp;#233;r&amp;#234;ts, et d'une mani&amp;#232;re g&amp;#233;n&amp;#233;rale, l'am&amp;#233;lioration de leur quotidien, notamment par l'utilisation des lois existantes ou &amp;#224; venir. Son action s'&amp;#233;tend au plan national.
 &lt;br&gt;&lt;br&gt;
J&amp;#146;ai appris que l&amp;#146;UNADEV &amp;#233;tait en train de refaire leur site web, il sortira en f&amp;#233;vrier tout beau, tout neuf avec une plate forme de dons en ligne.
 &lt;br&gt;&lt;br&gt;&lt;A href=&quot;http://www.unadev.org&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;www.unadev.org&lt;/a&gt;
 &lt;br&gt;&lt;br&gt;
S&amp;#146;il vous plait, faites passer ce message &amp;#224; 10 personnes qui ont comme vous et nous, du c&amp;#156;ur et donnez pour l&amp;#146;UNADEV. Je compte sur vous.
 &lt;br&gt;&lt;br&gt;
Merci.
 &lt;br&gt;&lt;br&gt;
L&amp;#233;o

&lt;br&gt;&lt;br&gt;&lt;br&gt;
--------------------------------------------------------------------------------&lt;br&gt;
Nouveau : t&amp;#233;l&amp;#233;phonez moins cher avec Yahoo! Messenger ! D&amp;#233;couvez les tarifs exceptionnels pour appeler la France et l'international. T&amp;#233;l&amp;#233;chargez la version beta.&lt;/HTML&gt;
&lt;br /&gt;_______________________________________________
&lt;br&gt;Caml-list mailing list. Subscription management:
&lt;br&gt;&lt;a href=&quot;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://caml.inria.fr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr&lt;/a&gt;&lt;br&gt;Beginner's list: &lt;a href=&quot;http://groups.yahoo.com/group/ocaml_beginners&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://groups.yahoo.com/group/ocaml_beginners&lt;/a&gt;&lt;br&gt;Bug reports: &lt;a href=&quot;http://caml.inria.fr/bin/caml-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr/bin/caml-bugs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Soutiens-les-aveugles-et-d%C3%A9ficients-visuels-tp2784949p2784949.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-2813984</id>
	<title>Wear this gold gift piece and show the world.</title>
	<published>2006-02-06T07:06:56Z</published>
	<updated>2006-02-06T07:06:56Z</updated>
	<author>
		<name>Kyya</name>
	</author>
	<content type="html">Heya Greg,
&lt;br&gt;&lt;br&gt;I came across these great chronometers a moment ago and I thought you would
&lt;br&gt;like to know. 
&lt;br&gt;&lt;br&gt;I know that you have a distingished elegance and also how you welcome a
&lt;br&gt;superb discount. at www.aarp.nc.G.htqs.org/lop/
&lt;br&gt;&lt;br&gt;I see you being frugal on nice things every month. This is not too
&lt;br&gt;expensive so that you can let yourself go!
&lt;br&gt;&lt;br&gt;Give me ur thoughts,
&lt;br&gt;Kyya
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Caml-list mailing list. Subscription management:
&lt;br&gt;&lt;a href=&quot;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://caml.inria.fr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr&lt;/a&gt;&lt;br&gt;Beginner's list: &lt;a href=&quot;http://groups.yahoo.com/group/ocaml_beginners&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://groups.yahoo.com/group/ocaml_beginners&lt;/a&gt;&lt;br&gt;Bug reports: &lt;a href=&quot;http://caml.inria.fr/bin/caml-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://caml.inria.fr/bin/caml-bugs&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Wear-this-gold-gift-piece-and-show-the-world.-tp2813984p2813984.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-2780855</id>
	<title>Re: From a recursive circuit to a functional/recursive OCaml-code...</title>
	<published>2006-02-06T05:10:38Z</published>
	<updated>2006-02-06T05:10:38Z</updated>
	<author>
		<name>OLBA</name>
	</author>
	<content type="html">On Mon, Feb 06, 2006 at 12:52:08PM +0100, Oliver Bandel wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; On Sun, Feb 05, 2006 at 04:42:47PM +1100, skaller wrote:
&lt;br&gt;&amp;gt; &amp;gt; On Sun, 2006-02-05 at 05:16 +0100, Oliver Bandel wrote:
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; But I'm not clear about how to write this function &amp;quot;f&amp;quot;,
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; because it needs mutual recursion...
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; No it doesn't, not even with feedback, because your
&lt;br&gt;&amp;gt; &amp;gt; system is CLOCKED.
&lt;br&gt;&amp;gt; [...]
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I need for this task one clock.
&lt;br&gt;&amp;gt; I can do a clock (in binary values) with true and false
&lt;br&gt;&amp;gt; or 1 and 0 or so with a variable.
&lt;br&gt;&amp;gt; I can do this with loops or functions that inverts their
&lt;br&gt;&amp;gt; last value (true -&amp;gt; false &amp;nbsp; and false -&amp;gt; true) with simple
&lt;br&gt;&amp;gt; toggling.
&lt;br&gt;&amp;gt; I then could use this value and do things depending on the value.
&lt;/div&gt;&lt;br&gt;Following his paper
&lt;br&gt;&lt;br&gt;&amp;quot;Prinzipien der Selbstorganisation im sozialen und
&lt;br&gt;&amp;nbsp; &amp;nbsp; betriebswirtschaftlichen Bereich&amp;quot;
&lt;