Patch title: Release 94 bulk changes
Abstract:
File: /pliant/storage/database/light.pli
Key:
    Removed line
    Added line
abstract
  [The 'data_read' function in this module enables you to read a data in a database file without loading the all database engine.]

# 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.

module "/pliant/language/compiler.pli"
module "/pliant/language/stream.pli"
module "/pliant/util/encoding/html.pli"
module "/pliant/language/data/string_cast.pli"


function data_read_it filename path data type -> status
  arg Str filename path ; arg_rw Universal data ; arg Type type ; arg Status status
  (var Stream s) open filename in+safe
  type destroy_instance addressof:data
  type build_instance addressof:data
  status := failure
  while not s:atend
    if (s:readline eparse any "<pdata path=[dq]" any:(var Str subpath) "[dq]" any ">" any:(var Str value) "</pdata>" any)
      if subpath=path
        status := from_string addressof:data type html_decode:value "db"

meta data_read e
  if e:size<>3 or not (e:0 cast Str) or not (e:1 cast Str)
    return
  e:2 compile ?
  var Pointer:Type t :> e:2:result:type real_data_type
  if not (e:2 cast t)
    return
  var Link:Argument a :> argument local Status
  e suckup e:0 ; e suckup e:1 ; e suckup e:2
  e add (instruction (the_function data_read_it Str Str Universal Type -> Status) e:0:result e:1:result e:2:result (argument mapped_constant Type t) a)
  e set_result a access_read

export data_read