# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
# 2001, 2002, 2003 Free Software Foundation, Inc.
#
# This file is part of DejaGnu.
#
# DejaGnu 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.
#
# DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

#
# A set of standard functions for tools. Calls the
# target-machine-specific versions.
#

proc ${tool}_load { program args } {
    if { [llength $args] > 0 } {
	set program_args [lindex $args 0]
    } else {
	set program_args ""
    }

    if { [llength $args] > 1 } {
	set input_file [lindex $args 1]
    } else {
	set input_file ""
    }
    return [remote_load target $program $program_args $input_file]
}

proc ${tool}_compile { srcfile destfile compile_type options } {
    target_compile $srcfile $destfile $compile_type $options
}
