/***********************************************************************
 *
 *	Public definitions for calling in to Smalltalk.
 *
 *	$Revision: 1.6 $
 *	$Date: 1995/09/17 10:49:48 $
 *	$Author: sbb $
 *
 ***********************************************************************/


/***********************************************************************
 *
 * Copyright (C) 1992, 1994, 1995 Free Software Foundation, Inc.
 * Written by Steve Byrne.
 *
 * This file is part of GNU Smalltalk.
 *
 * GNU Smalltalk 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 1, or (at your option) any later 
 * version.
 * 
 * GNU Smalltalk 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
 * GNU Smalltalk; see the file COPYING.  If not, write to the Free Software
 * Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  
 *
 ***********************************************************************/

/*
 *    Change Log
 * ============================================================================
 * Author      Date       Change 
 * sbb	     11 Jul 95	  Added defineCFunc.
 *
 * sbb	     23 Jun 95	  Switched to GST header guard prefix.
 *
 * sbb	      6 Jun 95	  Switched to new file naming scheme.
 *
 * sbb	      5 Jun 95	  Merged in Brad Diller's changes.
 *
 * sbb	      1 Jan 92	  Created.
 *
 */


#ifndef __GSTPUB__
#define __GSTPUB__

#ifndef __GST__
#include "gst.h"
#endif /* __GST__ */

#if defined(HAVE_VARARGS_H)
# define __PVARGS(args) ()
#else
# define __PVARGS(args) __P(args)
#endif

extern OOP	msgSend __PVARGS ((OOP receiver, OOP selector __DOTS));
extern OOP	strMsgSend __PVARGS ((OOP receiver __DOTS));

extern void	msgSendf __PVARGS ((voidPtr resultPtr __DOTS));

extern OOP      registerOOP(), msgEval(), evalExpr();
extern void	unregisterOOP(), initSmalltalk(), smalltalkArgs(),
		topLevelLoop(), 
		defineCFunc();

/* Convert C datatypes to Smalltalk types */

extern OOP	intToOOP(), floatToOOP(), boolToOOP(), charToOOP(),
		stringToOOP(), symbolToOOP(), cObjectToOOP(), typeNameToOOP();

/* Convert Smalltalk datatypes to C data types */

extern long	OOPToInt(); 
extern double	OOPToFloat();
extern int 	OOPToBool();
extern char	OOPToChar();
extern char	*OOPToString();
extern voidPtr	OOPToCObject();

/* SBB: these two interfaces are not permanent -- they will go away when weak refs/finalization becomes available */
/* brd Mon Jan 23 22:48:01 GMT-0800 1995 */

extern void *mstGetCdata();
extern OOP mstMalloc();

#if defined(GC_TORTURE)
extern void	startGCTorture(), stopGCTorture();
#endif


#endif /* __GSTPUB__ */
