/*
 * Copyright (c) 2002 Stephen Williams (steve@icarus.com)
 *
 *    This source code is free software; you can redistribute it
 *    and/or modify it in source code form 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.
 *
 *    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
 *    along with this program; if not, write to the Free Software
 *    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
 */
#ident "$Id: hello_tf.c,v 1.1 2002/05/23 03:34:05 stevewilliams Exp $"

/*
 */

# include  <vpi_user.h>
# include  <veriuser.h>

static int my_hello_calltf(char *xx)
{
      io_printf("Hello World, from VPI.\n");
      return 0;
}

static void my_hello_register()
{
      s_vpi_systf_data tf_data;

      tf_data.type      = vpiSysTask;
      tf_data.tfname    = "$my_hello";
      tf_data.calltf    = my_hello_calltf;
      tf_data.compiletf = 0;
      tf_data.sizetf    = 0;
      vpi_register_systf(&tf_data);

}

/*
 * This is a table of register functions. This table is the external
 * symbol that the simulator looks for when loading this .vpi module.
 */
void (*vlog_startup_routines[])() = {
      my_hello_register,
      0
};
/*
 * $Log: hello_tf.c,v $
 * Revision 1.1  2002/05/23 03:34:05  stevewilliams
 *  Add the hello_tf test.
 *
 * Revision 1.1  2002/05/04 16:34:13  ka6s
 * First release of vpi tests
 *
 * Revision 1.1  2002/04/18 03:25:16  steve
 *  More examples.
 *
 */

