Patch title: Release 96 bulk changes
Abstract:
File: /pliant/language/ui/console1.pli
Key:
    Removed line
    Added line
# Copyright  Hubert Tonneau  hubert.tonneau@pliant.cx
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License version 2
# as published by the Free Software Foundation.
#
# This program 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
# version 2 along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

scope "/pliant/language/" "/pliant/install/"
module "/pliant/install/ring2.pli"


if os_api="linux" and default_charset_is_utf8
  function switch_to_UTF8 parameter filehandle
    arg Address parameter ; arg Int filehandle
    console character:27+"%G"
  switch_to_UTF8 null 0
  gvar DelayedAction da
  da function :> the_function switch_to_UTF8 Address Int
  pliant_restore_actions append addressof:da


constant to_index (the_function '. to string' Universal Str -> Str):generic_index

function to_string data options function -> string
  arg Universal data ; arg Str options ; arg Function function ; arg Str string
  indirect

function console_universal u f
  arg Universal u ; arg Function f
  console (to_string u "con" f)

meta console e
  strong_definition
  for (var Int i) 0 e:size-1
    if e:i:ident="eol"
      e add (instruction (the_function console Str) (argument constant Str "[lf]"))
    else
      e:i compile ?
      var Pointer:Type type :> e:i:result:type:real_data_type
      e:i cast type ?
      var Pointer:Function function :> type get_generic_method to_index
      if addressof:function=null or addressof:function=addressof:(the_function '. to string' Universal Str -> Str)
        return
      e suckup e:i
      e add (instruction (the_function console_universal Universal Function) e:i:result (argument mapped_constant Function function))
  e set_void_result

export console