/* -------------------------------------------------------------------------- * Definition of the external Hugs server API * * The Hugs 98 system is Copyright (c) Mark P Jones, Alastair Reid, the * Yale Haskell Group, and the OGI School of Science & Engineering at OHSU, * 1994-2003, All rights reserved. It is distributed as free software under * the license in the file "License", which is included in the distribution. * * ------------------------------------------------------------------------*/ #ifndef __HUGSAPI_H__ #define __HUGSAPI_H__ #ifndef Args # if PROTOTYPES # define Args(x) x # else # define Args(x) () # endif #endif /* !defined Args */ #ifdef __cplusplus extern "C" { #endif typedef int HVal; /* Haskell values are represented by stable pointers */ typedef struct _HugsServerAPI { char* (*clearError ) Args((void)); void (*setHugsArgs ) Args((int, char**)); int (*getNumScripts ) Args((void)); void (*reset ) Args((int)); void (*setOutputEnable) Args((unsigned)); void (*changeDir ) Args((char*)); void (*loadProject ) Args((char*)); void (*loadFile ) Args((char*)); void (*loadFromBuffer ) Args((char*)); void (*setOptions ) Args((char*)); char* (*getOptions ) Args((void)); HVal (*compileExpr ) Args((char*,char*)); void (*garbageCollect ) Args((void)); void (*lookupName ) Args((char*,char*)); /* push values onto stack*/ void (*mkInt ) Args((int)); void (*mkAddr ) Args((void*)); void (*mkString ) Args((char*)); void (*apply ) Args((void)); /* manipulate top of stack */ int (*evalInt ) Args((void)); /* evaluate top of stack */ void* (*evalAddr ) Args((void)); char* (*evalString ) Args((void)); int (*doIO ) Args((void)); int (*doIO_Int ) Args((int*)); int (*doIO_Addr ) Args((void**)); HVal (*popHVal ) Args((void)); /* pop stack */ void (*pushHVal ) Args((HVal)); /* push back onto stack */ void (*freeHVal ) Args((HVal)); } HugsServerAPI; DLLEXPORT(HugsServerAPI*) initHugsServer Args((Int, String[])); DLLEXPORT(Void) shutdownHugsServer Args((HugsServerAPI*)); #ifdef __cplusplus }; #endif #endif /* __HUGSAPI_H__ */