+(* Copyright (C) 2004, HELM Team.
+ *
+ * This file is part of HELM, an Hypertextual, Electronic
+ * Library of Mathematics, developed at the Computer Science
+ * Department, University of Bologna, Italy.
+ *
+ * HELM is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * HELM is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HELM; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ * MA 02111-1307, USA.
+ *
+ * For details, see the HELM World-Wide-Web page,
+ * http://helm.cs.unibo.it/
+ *)
+
+let default_prompt = "## "
+
+let message_props = [ `STYLE `ITALIC ]
+let error_props = [ `WEIGHT `BOLD ]
+
+class console ?(prompt = default_prompt) obj =
+(* let read_only = console#buffer#create_tag [ `EDITABLE false ] in *)
+ object (self)
+ inherit GText.view obj
+
+ method read_phrase () = prompt ^ "foo"
+ method echo_prompt () =
+ let buf = self#buffer in
+ buf#insert ~iter:buf#end_iter ~tags:[] prompt;
+ self#lock
+ method private lock =
+ let buf = self#buffer in
+ let read_only = buf#create_tag [`EDITABLE false] in
+ buf#apply_tag read_only ~start:buf#start_iter ~stop:buf#end_iter
+ method echo_message msg =
+ let buf = self#buffer in
+ buf#insert ~iter:buf#end_iter ~tags:[buf#create_tag message_props]
+ (msg ^ "\n");
+ self#lock
+ method echo_error msg =
+ let buf = self#buffer in
+ buf#insert ~iter:buf#end_iter ~tags:[buf#create_tag error_props]
+ (msg ^ "\n");
+ self#lock
+ end
+
+let console ?(prompt = default_prompt)
+ ?buffer ?editable ?cursor_visible ?justification ?wrap_mode ?border_width
+ ?width ?height ?packing ?show ()
+=
+ let view =
+ GText.view
+ ?buffer ?editable ?cursor_visible ?justification ?wrap_mode ?border_width
+ ?width ?height ?packing ?show ()
+ in
+ new console ~prompt view#as_view
+