3137 lines
106 KiB
C
3137 lines
106 KiB
C
/*************************************************************************
|
|
|
|
Copyright 1986 through 2002 by Wolfram Research Inc.
|
|
All rights reserved
|
|
|
|
*************************************************************************/
|
|
|
|
#ifndef _MATHLINK_H
|
|
#define _MATHLINK_H
|
|
|
|
#if __BORLANDC__ && ! __BCPLUSPLUS__
|
|
#pragma warn -stu
|
|
#endif
|
|
|
|
#ifndef _MLVERS_H
|
|
#define _MLVERS_H
|
|
|
|
#ifndef _MLPLATFM_H
|
|
#define _MLPLATFM_H
|
|
|
|
#if ! MACINTOSH_MATHLINK && ! WINDOWS_MATHLINK && ! UNIX_MATHLINK && ! OS2_MATHLINK
|
|
# if 0
|
|
# if __BEOS__
|
|
# define BE_MATHLINK 1
|
|
# elif macintosh || Macintosh || THINK_C || defined(_MAC) || defined(__MRC__)
|
|
# define MACINTOSH_MATHLINK 1
|
|
# elif defined(WIN16) || defined(_WIN16)
|
|
# define WINDOWS_MATHLINK 1
|
|
# elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__)
|
|
# define WINDOWS_MATHLINK 1
|
|
# elif unix || __unix || __unix__ ||_AIX
|
|
# define UNIX_MATHLINK 1
|
|
# endif
|
|
# endif
|
|
# define WINDOWS_MATHLINK 1
|
|
#endif
|
|
|
|
#if MACINTOSH_MATHLINK
|
|
# if (powerc || __powerc || __powerc__)
|
|
# define POWERMACINTOSH_MATHLINK 1
|
|
# else
|
|
# define M68KMACINTOSH_MATHLINK 1
|
|
# if defined(__CFM68K__)
|
|
# define CFM68K_MACINTOSH_MATHLINK 1
|
|
# else
|
|
# define CLASSIC68K_MACINTOSH_MATHLINK 1
|
|
# endif
|
|
# endif
|
|
#elif WINDOWS_MATHLINK
|
|
# if defined(WIN32) || defined(__WIN32__) || defined(__NT__) || defined(_WIN32)
|
|
# define WIN32_MATHLINK 1
|
|
# if( _M_IX86 || __i386 || __i386__ || i386)
|
|
# define I86_WIN32_MATHLINK 1
|
|
# elif _M_ALPHA || __alpha || __alpha__ || alpha
|
|
# define ALPHA_WIN32_MATHLINK 1
|
|
# else
|
|
# endif
|
|
# else
|
|
# define WIN16_MATHLINK 1
|
|
# endif
|
|
#elif UNIX_MATHLINK
|
|
# if (__sun || __sun__ || sun) && !defined(SUN_MATHLINK)
|
|
# define SUN_MATHLINK 1
|
|
# if __SVR4 || __svr4__
|
|
# define SOLARIS_MATHLINK 1
|
|
# else
|
|
# define SUNOS_MATHLINK 1
|
|
# endif
|
|
# if __sparc || __sparc__ || sparc
|
|
# define SPARC_SUN_MATHLINK 1
|
|
# elif __i386 || __i386__ || i386
|
|
# define I86_SUN_MATHLINK 1
|
|
# else
|
|
unknown platform
|
|
# endif
|
|
# elif (__MACH || __MACH__ || MACH) && !defined(DARWIN_MATHLINK)
|
|
# define DARWIN_MATHLINK 1
|
|
# if __ppc || __ppc__ || ppc
|
|
# define PPC_DARWIN_MATHLINK 1
|
|
# else
|
|
not yet implemented
|
|
# endif
|
|
# elif (__linux || __linux__ || linux) && !defined(LINUX_MATHLINK)
|
|
# define LINUX_MATHLINK 1
|
|
# if __i386 || __i386__ || i386
|
|
# define I86_LINUX_MATHLINK 1
|
|
# elif __PPC || __PPC__ || PPC
|
|
# define PPC_LINUX_MATHLINK 1
|
|
# elif __alpha || __alpha__ || alpha
|
|
# define AXP_LINUX_MATHLINK 1
|
|
# else
|
|
not yet implemented
|
|
# endif
|
|
# elif (__osf || __osf__ || osf || OSF1) && !defined(DIGITAL_MATHLINK)
|
|
# define DIGITAL_MATHLINK 1
|
|
# if __alpha || __alpha__ || alpha
|
|
# define ALPHA_DIGITAL_MATHLINK 1
|
|
# else
|
|
unknown platform
|
|
# endif
|
|
# elif (_AIX || _IBMR2 || __xlC__) && !defined(AIX_MATHLINK)
|
|
# define AIX_MATHLINK 1
|
|
# elif (__sgi || __sgi__ || sgi || mips) && !defined(IRIX_MATHLINK)
|
|
# define IRIX_MATHLINK 1
|
|
# elif (hpux || __hpux) && !defined(HPUX_MATHLINK)
|
|
# define HPUX_MATHLINK 1
|
|
# elif (M_I386 || _SCO_DS || SCO) && !defined(SCO_MATHLINK)
|
|
# define SCO_MATHLINK 1
|
|
# elif (__NetBSD__) && !defined(NETBSD_MATHLINK)
|
|
# define NETBSD_MATHLINK 1
|
|
# elif (__FreeBSD__) && !defined(FREEBSD_MATHLINK)
|
|
# define FREEBSD_MATHLINK 1
|
|
# elif (bsdi || __bsdi__) && !defined(BSDI_MATHLINK)
|
|
# define BSDI_MATHLINK 1
|
|
# else
|
|
# endif
|
|
#else
|
|
# if defined(__amigaos__) || defined(AMIGA)
|
|
# define AMIGA_MATHLINK 1
|
|
# endif
|
|
# if __BEOS__
|
|
# define BE_MATHLINK 1
|
|
# endif
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef NO_GLOBAL_DATA
|
|
# if M68KMACINTOSH_MATHLINK
|
|
# define NO_GLOBAL_DATA 1
|
|
# else
|
|
# define NO_GLOBAL_DATA 0
|
|
# endif
|
|
#endif
|
|
|
|
#if WINDOWS_MATHLINK || __i386 || __i386__ || i386 || _M_IX86 || __alpha || __alpha__ || alpha
|
|
# define LITTLEENDIAN_NUMERIC_TYPES 1
|
|
#else
|
|
# define BIGENDIAN_NUMERIC_TYPES 1
|
|
#endif
|
|
|
|
#endif /* _MLPLATFM_H */
|
|
|
|
#ifndef MLVERSION
|
|
# define MLVERSION 3
|
|
#endif
|
|
|
|
#if !OLD_VERSIONING
|
|
|
|
|
|
/*
|
|
* MathLink adopts a simple versioning strategy that can be adapted to many
|
|
* compile-time and run-time environments. In particular, it is amenable to
|
|
* the various shared library facilities in use. (Although certain of these
|
|
* facilities provide more sophisticated mechanisms than are required by the
|
|
* following simple strategy.)
|
|
*
|
|
* MathLink evolves by improving its implementation and by improving its
|
|
* interface. The values of MLREVISION or MLINTERFACE defined here are
|
|
* incremented whenever an improvement is made and released.
|
|
*
|
|
* MLREVISION is the current revision number. It is incremented every time
|
|
* a change is made to the source and MathLink is rebuilt and distributed
|
|
* on any platform. (Bug fixes, optimizations, or other improvements
|
|
* transparent to the interface increment only this number.)
|
|
*
|
|
* MLINTERFACE is a name for a documented interface to MathLink. This
|
|
* number is incremented whenever a named constant or function is added,
|
|
* removed, or its behavior is changed in a way that could break existing
|
|
* correct* client programs. It is expected that the interface to MathLink
|
|
* is improved over time so that implemenations of higher numbered
|
|
* interfaces are more complete or more convenient to use for writing
|
|
* effective client programs. In particular, a specific interface provides
|
|
* all the useful functionality of an earlier interface.
|
|
*
|
|
* *(It is possible that an incorrect MathLink program still works
|
|
* because it relies on some undocumented detail of a particular
|
|
* revision. It may not always be possible to change the interface
|
|
* number when such a detail changes. For example, one program may
|
|
* be relying on a bug in MathLink that a great many other programs
|
|
* need fixed. In this case, we would likely choose to potentially
|
|
* break the incorrect program in order to fix the correct programs
|
|
* by incrementing the revision number leaving the interface number
|
|
* unchanged. It is possible to bind to a particular revision of a
|
|
* MathLink interface if that is important for some programs. One
|
|
* could use a statically linked version of the library, make use of
|
|
* the search algorithm used by the runtime loader, or dynamically
|
|
* load the MathLink library manually.)
|
|
*
|
|
*
|
|
* If a distributed MathLink implmentation were labeled with its revision
|
|
* and interface numbers in dotted notation so that, say, ML.1.6 means the
|
|
* sixth revision of interface one, then the following may represent the
|
|
* distribution history of MathLink.
|
|
*
|
|
* first distribution
|
|
* ML.1.5 (Perhaps earlier revisions were never
|
|
* distributed for this platform.)
|
|
*
|
|
* second distribution
|
|
* ML.1.6 (Bug fixes or other improvements were
|
|
* made that don't affect the interface.)
|
|
*
|
|
* third distribution
|
|
* ML.2.7 (Perhaps some new functions were added.)
|
|
*
|
|
* ML.1.7 (And improvements were made that don't
|
|
* affect the old interface.)
|
|
*
|
|
* fourth distribution
|
|
* ML.3.8 (Perhaps the return values of an existing
|
|
* function changed.)
|
|
* ML.2.8 (Revision 8 also adds improvements transparent
|
|
* to interface 2.)
|
|
* ML.1.7 (Clients of interface 1 see no improvements
|
|
* in this eighth revision.)
|
|
*
|
|
* Note that the distribution history may not be the same on different
|
|
* platforms. But revision numbers represent a named body of source code
|
|
* across all platforms.
|
|
*
|
|
* The mechanism for deploying this strategy differs between platforms
|
|
* because of differing platform-specific facilities and conventions.
|
|
* The interface and revision numbers may form part of the filename of
|
|
* the MathLink library, or they may not. This information is always
|
|
* available in some conventional form so that it is easy and natural for
|
|
* client programs to bind with and use the best available implementation
|
|
* of a particular MathLink interface. The details are described in the
|
|
* MathLink Developer's Guide for each platform.
|
|
*/
|
|
|
|
#define MLREVISION 10
|
|
|
|
#define MLAPI1REVISION 1 /* the first revision to support interface 1 */
|
|
#define MLAPI2REVISION 6 /* the first revision to support interface 2 */
|
|
|
|
|
|
#ifndef MLINTERFACE
|
|
# define MLINTERFACE 2
|
|
# define MLAPIREVISION MLAPI2REVISION
|
|
/*
|
|
* Interface 2 adds the following exported functions:
|
|
* MLGetBinaryNumberArray0
|
|
* MLTransfer0
|
|
* MLNextCharacter0
|
|
* And, for WINDOWS_MATHLINK, some constants in "mlntypes.h"
|
|
* were changed in a way that causes MLGetRawType to return
|
|
* different values.
|
|
*
|
|
* MLPutNullSequence and MLEGETENDEXPR pushed to interface 3
|
|
*/
|
|
#else
|
|
# if MLINTERFACE == 1
|
|
# define MLAPIREVISION MLAPI1REVISION
|
|
# elif MLINTERFACE == 2
|
|
# define MLAPIREVISION MLAPI2REVISION
|
|
# else
|
|
/* syntax error */ )
|
|
# endif
|
|
#endif
|
|
|
|
|
|
/* It may be possible for an implementation of one MathLink interface to
|
|
* fully support an earlier interface. MLNewParameters() may succeed when
|
|
* passed an interface number less than the value of MLAPIREVISION when the
|
|
* library was built. This would happen, if the newer interface is a proper
|
|
* superset of the older interface, or if the implementation can adjust its
|
|
* behavior at runtime to conform to the older requested interface.
|
|
*/
|
|
|
|
#ifndef MLOLDDEFINITION
|
|
# if WINDOWS_MATHLINK
|
|
# if MLINTERFACE == 1
|
|
# define MLOLDDEFINITION MLAPI1REVISION
|
|
# elif MLINTERFACE == 2
|
|
# define MLOLDDEFINITION MLAPI2REVISION
|
|
# else
|
|
/* syntax error */ )
|
|
# endif
|
|
# else
|
|
# define MLOLDDEFINITION MLAPI1REVISION
|
|
# endif
|
|
#endif
|
|
|
|
|
|
#if 0
|
|
MLParameters s;
|
|
MLNewParameters( s, MLREVISION, MLAPIREVISION); or MLNewParameters( s, 0, MLAPIREVISION);
|
|
MLSetAllocParameter( s, allocator, deallocator);
|
|
MLIntialize(s);
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#else
|
|
/* syntax error */ )
|
|
#endif
|
|
|
|
#endif /* _MLVERS_H */
|
|
|
|
|
|
|
|
#ifndef ML_EXTERN_C
|
|
|
|
#if defined(__cplusplus)
|
|
# define ML_C "C"
|
|
# define ML_EXTERN_C extern "C" {
|
|
# define ML_END_EXTERN_C }
|
|
#else
|
|
# define ML_C
|
|
# define ML_EXTERN_C
|
|
# define ML_END_EXTERN_C
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if WINDOWS_MATHLINK && (MPREP_REVISION || !defined(APIENTRY) || !defined(FAR))
|
|
|
|
#if defined(WIN32_LEAN_AND_MEAN) && defined(WIN32_EXTRA_LEAN)
|
|
# include <windows.h>
|
|
#elif defined( WIN32_LEAN_AND_MEAN)
|
|
# define WIN32_EXTRA_LEAN
|
|
# include <windows.h>
|
|
# undef WIN32_EXTRA_LEAN
|
|
#elif defined( WIN32_EXTRA_LEAN)
|
|
# define WIN32_LEAN_AND_MEAN
|
|
# include <windows.h>
|
|
# undef WIN32_LEAN_AND_MEAN
|
|
#else
|
|
# define WIN32_EXTRA_LEAN
|
|
# define WIN32_LEAN_AND_MEAN
|
|
# include <windows.h>
|
|
# undef WIN32_EXTRA_LEAN
|
|
# undef WIN32_LEAN_AND_MEAN
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#ifndef _MLCFM_H
|
|
#define _MLCFM_H
|
|
|
|
|
|
#if MACINTOSH_MATHLINK
|
|
#ifndef GENERATINGCFM
|
|
# ifdef USESROUTINEDESCRIPTORS
|
|
# define GENERATINGCFM USESROUTINEDESCRIPTORS
|
|
# elif MACINTOSH_MATHLINK
|
|
# include <ConditionalMacros.h>
|
|
# ifndef GENERATINGCFM
|
|
# define GENERATINGCFM USESROUTINEDESCRIPTORS
|
|
# endif
|
|
# else
|
|
# define GENERATINGCFM 0
|
|
# endif
|
|
#endif
|
|
#endif /* MACINTOSH_MATHLINK */
|
|
|
|
|
|
#if MACINTOSH_MATHLINK
|
|
# include <MixedMode.h>
|
|
#elif DARWIN_MATHLINK && defined(__CONDITIONALMACROS__)
|
|
# if defined(GENERATINGCFM)
|
|
# undef GENERATINGCFM
|
|
# define GENERATINGCFM 0
|
|
# endif /* defined(GENERATINGCFM) */
|
|
# if defined(GENERATING68K)
|
|
# undef GENERATING68K
|
|
# define GENERATING68K 0
|
|
# endif /* defined(GENERATING68K) */
|
|
#else
|
|
enum {
|
|
kPascalStackBased = 0,
|
|
kCStackBased = 0,
|
|
kThinkCStackBased = 0
|
|
};
|
|
# define SIZE_CODE(size) (0)
|
|
# define RESULT_SIZE(sizeCode) (0)
|
|
# define STACK_ROUTINE_PARAMETER(whichParam, sizeCode) (0)
|
|
#endif
|
|
|
|
|
|
#endif /* _MLCFM_H */
|
|
|
|
|
|
#ifdef __CFM68K__
|
|
#pragma import on
|
|
#endif
|
|
|
|
|
|
#ifndef _MLDEVICE_H
|
|
#define _MLDEVICE_H
|
|
|
|
|
|
#ifndef P
|
|
|
|
# ifndef MLPROTOTYPES
|
|
# define MLPROTOTYPES 1
|
|
# endif
|
|
|
|
# if MLPROTOTYPES || __STDC__ || defined(__cplusplus) || ! UNIX_MATHLINK
|
|
# define P(s) s
|
|
# undef MLPROTOTYPES
|
|
# define MLPROTOTYPES 1
|
|
# else
|
|
# define P(s) ()
|
|
# undef MLPROTOTYPES
|
|
# define MLPROTOTYPES 0
|
|
# endif
|
|
#endif
|
|
#ifndef _MLFAR_H
|
|
#define _MLFAR_H
|
|
|
|
#ifndef FAR
|
|
|
|
#if WINDOWS_MATHLINK
|
|
# ifndef FAR
|
|
/* syntax error */ )
|
|
# endif
|
|
#else
|
|
# define FAR
|
|
#endif
|
|
|
|
|
|
#endif
|
|
|
|
/* //rename this file mlfarhuge.h */
|
|
|
|
#ifndef MLHUGE
|
|
# if WINDOWS_MATHLINK && ! WIN32_MATHLINK
|
|
# define MLHUGE huge
|
|
# else
|
|
# define MLHUGE
|
|
# endif
|
|
#endif
|
|
|
|
#endif /* _MLFAR_H */
|
|
|
|
#ifndef _MLTYPES_H
|
|
#define _MLTYPES_H
|
|
|
|
|
|
#if WINDOWS_MATHLINK
|
|
# ifndef APIENTRY
|
|
# define APIENTRY far pascal
|
|
# endif
|
|
# ifndef CALLBACK
|
|
# define CALLBACK APIENTRY
|
|
# endif
|
|
# if WIN32_MATHLINK
|
|
/* try this #define MLEXPORT __declspec(dllexport) */
|
|
# define MLEXPORT
|
|
# else
|
|
# define MLEXPORT __export
|
|
# endif
|
|
# define MLCB APIENTRY MLEXPORT
|
|
# define MLAPI APIENTRY
|
|
|
|
#elif OS2_MATHLINK
|
|
# include <os2def.h>
|
|
# define MLEXPORT
|
|
# define MLCB APIENTRY
|
|
# define MLAPI APIENTRY
|
|
#elif CLASSIC68K_MACINTOSH_MATHLINK
|
|
# define MLAPI pascal
|
|
# define MLEXPORT
|
|
# if defined(__MWERKS__)
|
|
# if !__fourbyteints__
|
|
# define __uint_ct__ unsigned long
|
|
# define __int_ct__ long
|
|
# endif
|
|
# elif defined(THINK_C) || defined(SYMANTEC_C) || defined(SYMANTEC_CPLUS)
|
|
# if !__option(int_4)
|
|
# define __uint_ct__ unsigned long
|
|
# define __int_ct__ long
|
|
# endif
|
|
# endif
|
|
#else
|
|
# define MLCB
|
|
# define MLAPI
|
|
# define MLEXPORT
|
|
#endif
|
|
|
|
#define MLAPI_ MLAPI
|
|
|
|
|
|
#ifndef MLDEFN
|
|
# define MLDEFN( rtype, name, params) extern rtype MLAPI MLEXPORT name params
|
|
#endif
|
|
#ifndef MLDECL
|
|
# define MLDECL( rtype, name, params) extern rtype MLAPI name P(params)
|
|
#endif
|
|
|
|
#ifndef ML_DEFN
|
|
# define ML_DEFN( rtype, name, params) extern rtype MLAPI_ MLEXPORT name params
|
|
#endif
|
|
#ifndef ML_DECL
|
|
# define ML_DECL( rtype, name, params) extern ML_C rtype MLAPI_ name P(params)
|
|
#endif
|
|
|
|
|
|
|
|
#if MACINTOSH_MATHLINK
|
|
|
|
#ifndef MLCBPROC
|
|
# define MLCBPROC( rtype, name, params) typedef pascal rtype (* name) P(params)
|
|
#endif
|
|
#ifndef MLCBDECL
|
|
# define MLCBDECL( rtype, name, params) extern pascal rtype name P(params)
|
|
#endif
|
|
#ifndef MLCBDEFN
|
|
# define MLCBDEFN( rtype, name, params) extern pascal rtype name params
|
|
#endif
|
|
|
|
#elif OS2_MATHLINK
|
|
|
|
#ifndef MLCBPROC
|
|
# define MLCBPROC( rtype, name, params) typedef rtype (* MLCB name) P(params)
|
|
#endif
|
|
#ifndef MLCBDECL
|
|
# define MLCBDECL( rtype, name, params) extern rtype MLCB name P(params)
|
|
#endif
|
|
#ifndef MLCBDEFN
|
|
# define MLCBDEFN( rtype, name, params) extern rtype MLCB name params
|
|
#endif
|
|
|
|
#else
|
|
|
|
#ifndef MLCBPROC
|
|
# define MLCBPROC( rtype, name, params) typedef rtype (MLCB * name) P(params)
|
|
#endif
|
|
#ifndef MLCBDECL
|
|
# define MLCBDECL( rtype, name, params) extern rtype MLCB name P(params)
|
|
#endif
|
|
#ifndef MLCBDEFN
|
|
# define MLCBDEFN( rtype, name, params) extern rtype MLCB name params
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
/* move into mlalert.h */
|
|
#ifndef MLDPROC
|
|
# define MLDPROC MLCBPROC
|
|
#endif
|
|
#ifndef MLDDECL
|
|
# define MLDDECL MLCBDECL
|
|
#endif
|
|
#ifndef MLDDEFN
|
|
# define MLDDEFN MLCBDEFN
|
|
#endif
|
|
|
|
|
|
|
|
|
|
/* move into ml3state.h or mlstrenv.h */
|
|
#ifndef MLTPROC
|
|
# define MLTPROC MLCBPROC
|
|
#endif
|
|
#ifndef MLTDECL
|
|
# define MLTDECL MLCBDECL
|
|
#endif
|
|
#ifndef MLTDEFN
|
|
# define MLTDEFN MLCBDEFN
|
|
#endif
|
|
|
|
|
|
/* move into mlnumenv.h */
|
|
#ifndef MLNPROC
|
|
# define MLNPROC MLCBPROC
|
|
#endif
|
|
#ifndef MLNDECL
|
|
# define MLNDECL MLCBDECL
|
|
#endif
|
|
#ifndef MLNDEFN
|
|
# define MLNDEFN MLCBDEFN
|
|
#endif
|
|
|
|
|
|
/* move into mlalloc.h */
|
|
#ifndef MLAPROC
|
|
# define MLAPROC MLCBPROC
|
|
#endif
|
|
#ifndef MLADECL
|
|
# define MLADECL MLCBDECL
|
|
#endif
|
|
#ifndef MLADEFN
|
|
# define MLADEFN MLCBDEFN
|
|
#endif
|
|
#ifndef MLFPROC
|
|
# define MLFPROC MLCBPROC
|
|
#endif
|
|
#ifndef MLFDECL
|
|
# define MLFDECL MLCBDECL
|
|
#endif
|
|
#ifndef MLFDEFN
|
|
# define MLFDEFN MLCBDEFN
|
|
#endif
|
|
|
|
|
|
|
|
|
|
/* move into mlstddev.h */
|
|
#ifndef MLYPROC
|
|
# define MLYPROC MLCBPROC
|
|
#endif
|
|
#ifndef MLYDECL
|
|
# define MLYDECL MLCBDECL
|
|
#endif
|
|
#ifndef MLYDEFN
|
|
# define MLYDEFN MLCBDEFN
|
|
#endif
|
|
#ifndef MLMPROC
|
|
# define MLMPROC MLCBPROC
|
|
#endif
|
|
#ifndef MLMDECL
|
|
# define MLMDECL MLCBDECL
|
|
#endif
|
|
#ifndef MLMDEFN
|
|
# define MLMDEFN MLCBDEFN
|
|
#endif
|
|
|
|
|
|
/* move into mlmake.h */
|
|
#ifndef MLUPROC
|
|
# define MLUPROC MLCBPROC
|
|
#endif
|
|
#ifndef MLUDECL
|
|
# define MLUDECL MLCBDECL
|
|
#endif
|
|
#ifndef MLUDEFN
|
|
# define MLUDEFN MLCBDEFN
|
|
#endif
|
|
|
|
|
|
/* move into mlmake.h */
|
|
#ifndef MLBPROC
|
|
# define MLBPROC MLCBPROC
|
|
#endif
|
|
#ifndef MLBDECL
|
|
# define MLBDECL MLCBDECL
|
|
#endif
|
|
#ifndef MLBDEFN
|
|
# define MLBDEFN MLCBDEFN
|
|
#endif
|
|
|
|
#ifndef MLDMPROC
|
|
# define MLDMPROC MLCBPROC
|
|
#endif
|
|
#ifndef MLDMDECL
|
|
# define MLDMDECL MLCBDECL
|
|
#endif
|
|
#ifndef MLDMDEFN
|
|
# define MLDMDEFN MLCBDEFN
|
|
#endif
|
|
|
|
|
|
#ifndef __uint_ct__
|
|
#define __uint_ct__ unsigned int
|
|
#endif
|
|
#ifndef __int_ct__
|
|
#define __int_ct__ int
|
|
#endif
|
|
|
|
|
|
typedef unsigned char uchar_ct;
|
|
typedef uchar_ct FAR * ucharp_ct;
|
|
typedef ucharp_ct FAR * ucharpp_ct;
|
|
typedef ucharpp_ct FAR * ucharppp_ct;
|
|
typedef unsigned short ushort_ct;
|
|
typedef ushort_ct FAR * ushortp_ct;
|
|
typedef ushortp_ct FAR * ushortpp_ct;
|
|
typedef ushortpp_ct FAR * ushortppp_ct;
|
|
typedef __uint_ct__ uint_ct;
|
|
typedef __int_ct__ int_ct;
|
|
typedef void FAR * voidp_ct;
|
|
typedef voidp_ct FAR * voidpp_ct;
|
|
typedef char FAR * charp_ct;
|
|
typedef charp_ct FAR * charpp_ct;
|
|
typedef charpp_ct FAR * charppp_ct;
|
|
typedef long FAR * longp_ct;
|
|
typedef longp_ct FAR * longpp_ct;
|
|
typedef unsigned long ulong_ct;
|
|
typedef ulong_ct FAR * ulongp_ct;
|
|
|
|
|
|
|
|
|
|
#ifndef MLCONST
|
|
# if MLPROTOTYPES
|
|
# define MLCONST const
|
|
# else
|
|
# define MLCONST
|
|
# endif
|
|
#endif
|
|
|
|
typedef MLCONST unsigned short FAR * kushortp_ct;
|
|
typedef MLCONST unsigned short FAR * FAR * kushortpp_ct;
|
|
typedef MLCONST unsigned char FAR * kucharp_ct;
|
|
typedef MLCONST unsigned char FAR * FAR * kucharpp_ct;
|
|
typedef MLCONST char FAR * kcharp_ct;
|
|
typedef MLCONST char FAR * FAR * kcharpp_ct;
|
|
typedef MLCONST void FAR * kvoidp_ct;
|
|
|
|
|
|
typedef void FAR * MLPointer;
|
|
|
|
#ifndef __MLENV__
|
|
typedef struct ml_environment FAR *MLENV;
|
|
typedef MLENV MLEnvironment;
|
|
# define __MLENV__
|
|
#endif
|
|
|
|
#ifndef __MLINK__
|
|
typedef struct MLink FAR *MLINK;
|
|
# define __MLINK__
|
|
#endif
|
|
|
|
#ifndef __MLMARK__
|
|
typedef struct MLinkMark FAR *MLMARK;
|
|
typedef MLMARK MLINKMark;
|
|
# define __MLMARK__
|
|
#endif
|
|
|
|
#ifndef __mlapi_token__
|
|
#define __mlapi_token__ int_ct
|
|
#endif
|
|
typedef __mlapi_token__ mlapi_token;
|
|
|
|
|
|
typedef unsigned long mlapi__token;
|
|
typedef mlapi__token FAR * mlapi__tokenp;
|
|
|
|
#ifndef __mlapi_packet__
|
|
#define __mlapi_packet__ int_ct
|
|
#endif
|
|
typedef __mlapi_packet__ mlapi_packet;
|
|
|
|
|
|
typedef long mlapi_error;
|
|
typedef long mlapi__error;
|
|
|
|
typedef long long_st;
|
|
typedef longp_ct longp_st;
|
|
typedef longpp_ct longpp_st;
|
|
|
|
typedef long long_et;
|
|
|
|
|
|
#ifndef __mlapi_result__
|
|
#define __mlapi_result__ int_ct
|
|
#endif
|
|
typedef __mlapi_result__ mlapi_result;
|
|
|
|
|
|
#define MLSUCCESS (1) /*bugcheck: this stuff doesnt belong where it can be seen at MLAPI_ layer */
|
|
#define MLFAILURE (0)
|
|
|
|
ML_EXTERN_C
|
|
|
|
#if WINDOWS_MATHLINK
|
|
typedef int (CALLBACK *__MLProcPtr__)();
|
|
#else
|
|
typedef long (*__MLProcPtr__)();
|
|
#endif
|
|
|
|
ML_END_EXTERN_C
|
|
|
|
#endif /* _MLTYPES_H */
|
|
|
|
|
|
#if WINDOWS_MATHLINK
|
|
# ifndef APIENTRY
|
|
# define APIENTRY far pascal
|
|
# endif
|
|
# define MLBN APIENTRY /* bottleneck function: upper layer calls lower layer */
|
|
#else
|
|
# define MLBN
|
|
#endif
|
|
|
|
#define BN MLBN
|
|
|
|
|
|
|
|
ML_EXTERN_C
|
|
|
|
|
|
|
|
typedef void FAR * dev_voidp;
|
|
typedef dev_voidp dev_type;
|
|
typedef dev_type FAR * dev_typep;
|
|
typedef long devproc_error;
|
|
typedef unsigned long devproc_selector;
|
|
|
|
|
|
#define MLDEV_WRITE_WINDOW 0
|
|
#define MLDEV_WRITE 1
|
|
#define MLDEV_HAS_DATA 2
|
|
#define MLDEV_READ 3
|
|
#define MLDEV_READ_COMPLETE 4
|
|
#define MLDEV_ACKNOWLEDGE 5
|
|
|
|
#define T_DEV_WRITE_WINDOW MLDEV_WRITE_WINDOW
|
|
#define T_DEV_WRITE MLDEV_WRITE
|
|
#define T_DEV_HAS_DATA MLDEV_HAS_DATA
|
|
#define T_DEV_READ MLDEV_READ
|
|
#define T_DEV_READ_COMPLETE MLDEV_READ_COMPLETE
|
|
|
|
|
|
#ifndef SCATTERED
|
|
#define SCATTERED 0
|
|
#undef NOT_SCATTERED
|
|
#define NOT_SCATTERED 1
|
|
#endif
|
|
|
|
|
|
#if powerc
|
|
#pragma options align=mac68k
|
|
#endif
|
|
|
|
typedef struct read_buf {
|
|
unsigned short length;
|
|
unsigned char* ptr;
|
|
} read_buf;
|
|
|
|
typedef read_buf FAR * read_bufp;
|
|
typedef read_bufp FAR * read_bufpp;
|
|
|
|
#if powerc
|
|
#pragma options align=reset
|
|
#endif
|
|
|
|
|
|
|
|
MLDMPROC( devproc_error, MLDeviceProcPtr, ( dev_type dev, devproc_selector selector, dev_voidp p1, dev_voidp p2));
|
|
MLDMDECL( devproc_error, MLDeviceMain, ( dev_type dev, devproc_selector selector, dev_voidp p1, dev_voidp p2));
|
|
|
|
#if MACINTOSH_MATHLINK
|
|
enum {
|
|
uppMLDeviceProcInfo = kPascalStackBased
|
|
| RESULT_SIZE(SIZE_CODE(sizeof(devproc_error)))
|
|
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(dev_type)))
|
|
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(devproc_selector)))
|
|
| STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(dev_voidp)))
|
|
| STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(dev_voidp)))
|
|
};
|
|
#endif /* MACINTOSH_MATHLINK */
|
|
|
|
#if MACINTOSH_MATHLINK
|
|
#if GENERATINGCFM
|
|
typedef UniversalProcPtr MLDeviceUPP;
|
|
# define CallMLDeviceProc(userRoutine, thing, selector, p1, p2) \
|
|
CallUniversalProc((userRoutine), uppMLDeviceProcInfo, (thing), (selector), (p1), (p2))
|
|
# define NewMLDeviceProc(userRoutine) \
|
|
NewRoutineDescriptor((ProcPtr)(userRoutine), uppMLDeviceProcInfo, GetCurrentArchitecture())
|
|
#else /* !GENERATINGCFM */
|
|
typedef MLDeviceProcPtr MLDeviceUPP;
|
|
# define CallMLDeviceProc(userRoutine, thing, selector, p1, p2) (*(userRoutine))((thing), (selector), (dev_voidp)(p1), (dev_voidp)(p2))
|
|
# define NewMLDeviceProc(userRoutine) (userRoutine)
|
|
#endif /* GENERATINGCFM */
|
|
#else /* !MACINTOSH_MATHLINK */
|
|
typedef MLDeviceProcPtr MLDeviceUPP;
|
|
# define CallMLDeviceProc(userRoutine, thing, selector, p1, p2) (*(userRoutine))((thing), (selector), (dev_voidp)(p1), (dev_voidp)(p2))
|
|
# define NewMLDeviceProc(userRoutine) (userRoutine)
|
|
#endif /* MACINTOSH_MATHLINK */
|
|
|
|
typedef MLDeviceUPP dev_main_type;
|
|
typedef dev_main_type FAR * dev_main_typep;
|
|
|
|
ML_END_EXTERN_C
|
|
|
|
|
|
#endif /* _MLDEVICE_H */
|
|
|
|
|
|
#ifndef _MLAPI_H
|
|
#define _MLAPI_H
|
|
|
|
|
|
ML_EXTERN_C
|
|
|
|
#ifndef _MLALLOC_H
|
|
#define _MLALLOC_H
|
|
|
|
|
|
|
|
|
|
MLAPROC( MLPointer, MLAllocatorProcPtr, (unsigned long));
|
|
|
|
#if MACINTOSH_MATHLINK
|
|
enum {
|
|
uppMLAllocatorProcInfo = kPascalStackBased
|
|
| RESULT_SIZE(SIZE_CODE(sizeof(MLPointer)))
|
|
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(unsigned long)))
|
|
};
|
|
#endif /* MACINTOSH_MATHLINK */
|
|
|
|
#if MACINTOSH_MATHLINK
|
|
#if GENERATINGCFM
|
|
typedef UniversalProcPtr MLAllocatorUPP;
|
|
# define CallMLAllocatorProc(userRoutine, size) \
|
|
(MLPointer)CallUniversalProc((userRoutine), uppMLAllocatorProcInfo, (size))
|
|
# define NewMLAllocatorProc(userRoutine) \
|
|
NewRoutineDescriptor(MLAllocatorCast((userRoutine)), uppMLAllocatorProcInfo, GetCurrentArchitecture())
|
|
#else /* !GENERATINGCFM */
|
|
typedef MLAllocatorProcPtr MLAllocatorUPP;
|
|
# define CallMLAllocatorProc(userRoutine, size) (*(userRoutine))((size))
|
|
# define NewMLAllocatorProc(userRoutine) (userRoutine)
|
|
#endif /* GENERATINGCFM */
|
|
#else /* !MACINTOSH_MATHLINK */
|
|
typedef MLAllocatorProcPtr MLAllocatorUPP;
|
|
# define CallMLAllocatorProc(userRoutine, size) (*(userRoutine))((size))
|
|
# define NewMLAllocatorProc(userRoutine) (userRoutine)
|
|
#endif /* MACINTOSH_MATHLINK */
|
|
|
|
|
|
|
|
|
|
MLFPROC( void, MLDeallocatorProcPtr, (MLPointer));
|
|
|
|
#if MACINTOSH_MATHLINK
|
|
enum {
|
|
uppMLDeallocatorProcInfo = kPascalStackBased
|
|
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(MLPointer)))
|
|
};
|
|
#endif /* MACINTOSH_MATHLINK */
|
|
|
|
#if MACINTOSH_MATHLINK
|
|
#if GENERATINGCFM
|
|
typedef UniversalProcPtr MLDeallocatorUPP;
|
|
# define CallMLDeallocatorProc(userRoutine, p) \
|
|
CallUniversalProc((userRoutine), uppMLDeallocatorProcInfo, (p))
|
|
# define NewMLDeallocatorProc(userRoutine) \
|
|
NewRoutineDescriptor(MLDeallocatorCast((userRoutine)), uppMLDeallocatorProcInfo, GetCurrentArchitecture())
|
|
#else /* !GENERATINGCFM */
|
|
typedef MLDeallocatorProcPtr MLDeallocatorUPP;
|
|
# define CallMLDeallocatorProc(userRoutine, p) (*(userRoutine))((p))
|
|
# define NewMLDeallocatorProc(userRoutine) (userRoutine)
|
|
#endif /* GENERATINGCFM */
|
|
#else /* !MACINTOSH_MATHLINK */
|
|
typedef MLDeallocatorProcPtr MLDeallocatorUPP;
|
|
# define CallMLDeallocatorProc(userRoutine, p) (*(userRoutine))((p))
|
|
# define NewMLDeallocatorProc(userRoutine) (userRoutine)
|
|
#endif /* MACINTOSH_MATHLINK */
|
|
|
|
|
|
|
|
#endif /* _MLALLOC_H */
|
|
|
|
|
|
/* explicitly not protected by _MLALLOC_H in case MLDECL is redefined for multiple inclusion */
|
|
|
|
|
|
/* just some type-safe casts */
|
|
MLDECL( __MLProcPtr__, MLAllocatorCast, ( MLAllocatorProcPtr f));
|
|
MLDECL( __MLProcPtr__, MLDeallocatorCast, ( MLDeallocatorProcPtr f));
|
|
|
|
ML_END_EXTERN_C
|
|
|
|
typedef MLAllocatorUPP MLAllocator;
|
|
typedef MLAllocator FAR * MLAllocatorp;
|
|
#define MLCallAllocator CallMLAllocatorProc
|
|
#define MLNewAllocator NewMLAllocatorProc
|
|
|
|
typedef MLDeallocatorUPP MLDeallocator;
|
|
typedef MLDeallocator FAR * MLDeallocatorp;
|
|
#define MLCallDeallocator CallMLDeallocatorProc
|
|
#define MLNewDeallocator NewMLDeallocatorProc
|
|
|
|
#define MLallocator MLAllocator
|
|
#define MLdeallocator MLDeallocator
|
|
|
|
#endif /* _MLAPI_H */
|
|
|
|
|
|
#ifndef _MLNTYPES_H
|
|
#define _MLNTYPES_H
|
|
|
|
|
|
#ifndef _MLNUMENV_H
|
|
#define _MLNUMENV_H
|
|
|
|
|
|
/* mlne__s2 must convert empty strings to zero */
|
|
|
|
|
|
|
|
ML_EXTERN_C
|
|
|
|
|
|
#define REALBIT 4
|
|
#define REAL_MASK (1 << REALBIT)
|
|
#define XDRBIT 5
|
|
#define XDR_MASK (1 << XDRBIT)
|
|
#define BINARYBIT 7
|
|
#define BINARY_MASK (1 << BINARYBIT)
|
|
#define SIZEVARIANTBIT 6
|
|
#define SIZEVARIANT_MASK (1 << SIZEVARIANTBIT)
|
|
|
|
|
|
|
|
#define MLNE__IMPLIED_SIZE( tok, num_dispatch) ((tok) & XDR_MASK || !((tok) & SIZEVARIANT_MASK) \
|
|
? (tok) & 0x08 ? (tok) & (0x0E + 2) : (1 << ((tok)>>1 & 0x03)) \
|
|
: call_num_dispatch( (num_dispatch), MLNE__SIZESELECTOR((tok)), 0,0,0))
|
|
|
|
/* Range[-128, 127] */
|
|
#define MLTK_8BIT_SIGNED_2sCOMPLEMENT_INTEGER 160 /* ((unsigned char)'\240') */
|
|
/* Range[0, 255] */
|
|
#define MLTK_8BIT_UNSIGNED_2sCOMPLEMENT_INTEGER 161 /* ((unsigned char)'\241') */
|
|
#define MLTK_8BIT_UNSIGNED_INTEGER MLTK_8BIT_UNSIGNED_2sCOMPLEMENT_INTEGER
|
|
|
|
/* Range[-32768, 32767] */
|
|
#define MLTK_16BIT_SIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER 162 /* ((unsigned char)'\242') */
|
|
/* Range[0, 65535] */
|
|
#define MLTK_16BIT_UNSIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER 163 /* ((unsigned char)'\243') */
|
|
#define MLTK_16BIT_UNSIGNED_BIGENDIAN_INTEGER MLTK_16BIT_UNSIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER
|
|
/* Range[-2147483648, 2147483647] */
|
|
#define MLTK_32BIT_SIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER 164 /* ((unsigned char)'\244') */
|
|
/* Range[0, 4294967295] */
|
|
#define MLTK_32BIT_UNSIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER 165 /* ((unsigned char)'\245') */
|
|
#define MLTK_32BIT_UNSIGNED_BIGENDIAN_INTEGER MLTK_32BIT_UNSIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER
|
|
/* Range[-9223372036854775808, 9223372036854775807] */
|
|
#define MLTK_64BIT_SIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER 166 /* ((unsigned char)'\246') */
|
|
/* Range[0, 18446744073709551615] */
|
|
#define MLTK_64BIT_UNSIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER 167 /* ((unsigned char)'\247') */
|
|
#define MLTK_64BIT_UNSIGNED_BIGENDIAN_INTEGER MLTK_64BIT_UNSIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER
|
|
|
|
|
|
/* Range[-32768, 32767] */
|
|
#define MLTK_16BIT_SIGNED_2sCOMPLEMENT_LITTLEENDIAN_INTEGER 226 /* ((unsigned char)'\342') */
|
|
/* Range[0, 65535] */
|
|
#define MLTK_16BIT_UNSIGNED_2sCOMPLEMENT_LITTLEENDIAN_INTEGER 227 /* ((unsigned char)'\343') */
|
|
#define MLTK_16BIT_UNSIGNED_LITTLEENDIAN_INTEGER MLTK_16BIT_UNSIGNED_2sCOMPLEMENT_LITTLEENDIAN_INTEGER
|
|
/* Range[-2147483648, 2147483647] */
|
|
#define MLTK_32BIT_SIGNED_2sCOMPLEMENT_LITTLEENDIAN_INTEGER 228 /* ((unsigned char)'\344') */
|
|
/* Range[0, 4294967295] */
|
|
#define MLTK_32BIT_UNSIGNED_2sCOMPLEMENT_LITTLEENDIAN_INTEGER 229 /* ((unsigned char)'\345') */
|
|
#define MLTK_32BIT_UNSIGNED_LITTLEENDIAN_INTEGER MLTK_32BIT_UNSIGNED_2sCOMPLEMENT_LITTLEENDIAN_INTEGER
|
|
/* Range[-9223372036854775808, 9223372036854775807] */
|
|
#define MLTK_64BIT_SIGNED_2sCOMPLEMENT_LITTLEENDIAN_INTEGER 230 /* ((unsigned char)'\346') */
|
|
/* Range[0, 18446744073709551615] */
|
|
#define MLTK_64BIT_UNSIGNED_2sCOMPLEMENT_LITTLEENDIAN_INTEGER 231 /* ((unsigned char)'\347') */
|
|
#define MLTK_64BIT_UNSIGNED_LITTLEENDIAN_INTEGER MLTK_64BIT_UNSIGNED_2sCOMPLEMENT_LITTLEENDIAN_INTEGER
|
|
|
|
/* Interval[{-3.402823e+38, 3.402823e+38}] */
|
|
#define MLTK_BIGENDIAN_IEEE754_SINGLE 180 /* ((unsigned char)'\264') */
|
|
/* Interval[{-1.79769313486232e+308, 1.79769313486232e+308}] */
|
|
#define MLTK_BIGENDIAN_IEEE754_DOUBLE 182 /* ((unsigned char)'\266') */
|
|
|
|
/* Interval[{-3.402823e+38, 3.402823e+38}] */
|
|
#define MLTK_LITTLEENDIAN_IEEE754_SINGLE 244 /* ((unsigned char)'\364') */
|
|
/* Interval[{-1.79769313486232e+308, 1.79769313486232e+308}] */
|
|
#define MLTK_LITTLEENDIAN_IEEE754_DOUBLE 246 /* ((unsigned char)'\366') */
|
|
|
|
/* Note, if the future brings...
|
|
* #define MLTK_128BIT_UNSIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER ((unsigned char)'\257')
|
|
* with Range[0, 340282366920938463463374607431768211456 (*approximately 3.40282e+38*)]
|
|
* the dynamic range is still a monotonically increasing function of the token value.
|
|
* An implementation might choose to set the high varient bit to mainain this property
|
|
* and dispatch more efficiently by avoiding overflow checks
|
|
*/
|
|
|
|
#define MLNE__SELECTOR( dtok, stok) \
|
|
(((dtok) << 8) | (stok)) /* maybe should mask of high word and cast stok */
|
|
|
|
#define MLNE__SIZESELECTOR( tok) MLNE__SELECTOR( 0, tok)
|
|
#define MLNE__INITSELECTOR (0)
|
|
#define MLNE__TOSTRINGSELECTOR( tok) MLNE__SELECTOR( MLNE__IS_REAL(tok) ? MLTKREAL : MLTKINT, tok)
|
|
#define MLNE__FROMSTRINGSELECTOR( dtok, stok) MLNE__SELECTOR( dtok, stok)
|
|
|
|
#define MLNE__STOK( selector) ( (selector) & 0x000000FF)
|
|
#define MLNE__DTOK( selector) ( ((selector) & 0x0000FF00)>>8)
|
|
|
|
#define MLNE__IS_BINARY( tok) ((tok) & BINARY_MASK)
|
|
#define MLNE__IS_REAL( tok) ((tok) & REAL_MASK)
|
|
#define MLNE__TEXT_TOKEN( tok) (MLNE__IS_REAL( tok) ? MLTKREAL : MLTKINT)
|
|
|
|
|
|
|
|
MLNDECL( long_et, mlne__dispatch, ( unsigned long selector, void* dptr, void* sptr, long* countp));
|
|
MLNPROC( long_et, dispatch_procptr_mlnet, ( unsigned long selector, void* dptr, void* sptr, long* countp));
|
|
|
|
/* will null terminate strings only if countp is null */
|
|
|
|
#if MACINTOSH_MATHLINK
|
|
enum {
|
|
uppNumDispatchProcInfo = kPascalStackBased
|
|
| RESULT_SIZE(SIZE_CODE(sizeof(long_et)))
|
|
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(unsigned long)))
|
|
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(void*)))
|
|
| STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(void*)))
|
|
| STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(long*)))
|
|
};
|
|
#endif /* MACINTOSH_MATHLINK */
|
|
|
|
#if MACINTOSH_MATHLINK
|
|
#if GENERATINGCFM && GENERATING68K /* on the powerpc use standard native shared library calling conventions */
|
|
typedef UniversalProcPtr dispatch_function_mlnet;
|
|
# define call_num_dispatch( num_dispatch, selector, dptr, sptr, countp) \
|
|
(long_et)CallUniversalProc( (num_dispatch), uppNumDispatchProcInfo, (selector), (dptr), (sptr), (countp))
|
|
# define new_num_dispatch(num_dispatch) \
|
|
NewRoutineDescriptor((ProcPtr)(num_dispatch), uppNumDispatchProcInfo, GetCurrentArchitecture())
|
|
#else /* !(GENERATINGCFM && GENERATING68K && !DIRECT_TEXT_CALLS) */
|
|
typedef dispatch_procptr_mlnet dispatch_function_mlnet;
|
|
# define call_num_dispatch(num_dispatch, selector, dptr, sptr, countp) \
|
|
((*(num_dispatch))( (selector), (dptr), (sptr), (countp)))
|
|
# define new_num_dispatch(num_dispatch) (num_dispatch)
|
|
#endif /* GENERATINGCFM && GENERATING68K && !DIRECT_TEXT_CALLS */
|
|
#else /* !MACINTOSH_MATHLINK */
|
|
typedef dispatch_procptr_mlnet dispatch_function_mlnet;
|
|
# define call_num_dispatch(num_dispatch, selector, dptr, sptr, countp) \
|
|
((*(num_dispatch))( (selector), (dptr), (sptr), (countp)))
|
|
# define new_num_dispatch(num_dispatch) (num_dispatch)
|
|
#endif /* MACINTOSH_MATHLINK */
|
|
|
|
|
|
|
|
ML_END_EXTERN_C
|
|
|
|
|
|
#endif /* _MLNUMENV_H */
|
|
|
|
#ifndef MLINTERFACE
|
|
/* syntax error */ )
|
|
#endif
|
|
|
|
/* MLTK_CSHORT_P 193
|
|
MLTK_CINT_P 194
|
|
MLTK_CLONG_P 195
|
|
MLTK_CFLOAT_P 209
|
|
MLTK_CDOUBLE_P 210
|
|
MLTK_CLONGDOUBLE_P 211 */
|
|
|
|
#define MLTK_CSHORT_P (( BINARY_MASK | SIZEVARIANT_MASK | 1))
|
|
#define MLTK_CINT_P (( BINARY_MASK | SIZEVARIANT_MASK | 2))
|
|
#define MLTK_CLONG_P (( BINARY_MASK | SIZEVARIANT_MASK | 3))
|
|
#define MLTK_CFLOAT_P (( BINARY_MASK | SIZEVARIANT_MASK | REAL_MASK | 1))
|
|
#define MLTK_CDOUBLE_P (( BINARY_MASK | SIZEVARIANT_MASK | REAL_MASK | 2))
|
|
#define MLTK_CLONGDOUBLE_P (( BINARY_MASK | SIZEVARIANT_MASK | REAL_MASK | 3))
|
|
|
|
|
|
#define MLTK_CUCHAR MLTK_8BIT_UNSIGNED_2sCOMPLEMENT_INTEGER
|
|
#define MLTK_MLUCHAR MLTK_8BIT_UNSIGNED_2sCOMPLEMENT_INTEGER
|
|
|
|
#if MACINTOSH_MATHLINK
|
|
/* two private tokens */
|
|
/* Interval[{-1.189731495357231765e+4932, 1.189731495357231765e+4932}] */
|
|
# define MLTK_80BIT_SANE_EXTENDED 152 /* ((unsigned char)'\230') */
|
|
# define MLTK_96BIT_68881_EXTENDED 154 /* ((unsigned char)'\232') */
|
|
#endif
|
|
|
|
#if POWERMACINTOSH_MATHLINK
|
|
/* one private token */
|
|
# define MLTK_128BIT_LONGDOUBLE 158 /* ((unsigned char)'\236') */
|
|
#endif
|
|
|
|
#if WINDOWS_MATHLINK
|
|
/* one private token */
|
|
/* Interval[{-1.189731495357231765e+4932, 1.189731495357231765e+4932}] */
|
|
# define MLTK_INTEL_80BIT_EXTENDED 216 /* ((unsigned char)'\330') */
|
|
# if MLINTERFACE > 1
|
|
# define NEW_WIN32_NUMENV 1
|
|
# endif
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#if M68KMACINTOSH_MATHLINK
|
|
# define MATHLINK_NUMERICS_ENVIRONMENT_ID "Sep 16 1996, 23:14:20"
|
|
|
|
# define MLTK_CSHORT MLTK_16BIT_SIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER
|
|
# define MLTK_CLONG MLTK_32BIT_SIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER
|
|
|
|
# define MLTK_CFLOAT MLTK_BIGENDIAN_IEEE754_SINGLE
|
|
|
|
# if defined(__MWERKS__)
|
|
# if __fourbyteints__
|
|
# define MLTK_CINT MLTK_32BIT_SIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER
|
|
# else
|
|
# define MLTK_CINT MLTK_16BIT_SIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER
|
|
# endif
|
|
# if __MC68881__
|
|
# define MLTK_CLONGDOUBLE MLTK_96BIT_68881_EXTENDED
|
|
# else
|
|
# define MLTK_CLONGDOUBLE MLTK_80BIT_SANE_EXTENDED
|
|
# endif
|
|
# if __IEEEdoubles__ || __ieeedoubles__
|
|
# define MLTK_CDOUBLE MLTK_BIGENDIAN_IEEE754_DOUBLE
|
|
# else
|
|
# define MLTK_CDOUBLE MLTK_CLONGDOUBLE
|
|
# endif
|
|
# elif defined(THINK_C) || defined(SYMANTEC_C) || defined(SYMANTEC_CPLUS)
|
|
# if __option(int_4)
|
|
# define MLTK_CINT MLTK_32BIT_SIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER
|
|
# else
|
|
# define MLTK_CINT MLTK_16BIT_SIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER
|
|
# endif
|
|
# if __option(native_fp) && !__option(mc68881)
|
|
# define MLTK_CLONGDOUBLE MLTK_80BIT_SANE_EXTENDED
|
|
# else
|
|
# define MLTK_CLONGDOUBLE MLTK_96BIT_68881_EXTENDED
|
|
# endif
|
|
# if __option(double_8)
|
|
# define MLTK_CDOUBLE MLTK_BIGENDIAN_IEEE754_DOUBLE
|
|
# else
|
|
# define MLTK_CDOUBLE MLTK_CLONGDOUBLE
|
|
# endif
|
|
# else /* applec */
|
|
# define MLTK_CINT MLTK_32BIT_SIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER
|
|
# define MLTK_CDOUBLE MLTK_BIGENDIAN_IEEE754_DOUBLE
|
|
# if mc68881
|
|
# define MLTK_CLONGDOUBLE MLTK_96BIT_68881_EXTENDED
|
|
# else
|
|
# define MLTK_CLONGDOUBLE MLTK_80BIT_SANE_EXTENDED
|
|
# endif
|
|
# endif
|
|
|
|
# if 0 /* no more statically linked Macintosh libraries STATICALLY_LINKED_MATHLINK */
|
|
# define MLTK_MLSHORT MLTK_CSHORT
|
|
# define MLTK_MLINT MLTK_CINT
|
|
# define MLTK_MLLONG MLTK_CLONG
|
|
# define MLTK_MLFLOAT MLTK_CFLOAT
|
|
# define MLTK_MLDOUBLE MLTK_CDOUBLE
|
|
# define MLTK_MLLONGDOUBLE MLTK_CLONGDOUBLE
|
|
# else
|
|
# define MLTK_MLSHORT MLTK_16BIT_SIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER
|
|
# define MLTK_MLINT MLTK_32BIT_SIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER
|
|
# define MLTK_MLLONG MLTK_32BIT_SIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER
|
|
# define MLTK_MLFLOAT MLTK_BIGENDIAN_IEEE754_SINGLE
|
|
# define MLTK_MLDOUBLE MLTK_BIGENDIAN_IEEE754_DOUBLE
|
|
# define MLTK_MLLONGDOUBLE MLTK_80BIT_SANE_EXTENDED
|
|
# endif
|
|
|
|
#elif POWERMACINTOSH_MATHLINK
|
|
# define MATHLINK_NUMERICS_ENVIRONMENT_ID "newdog"
|
|
|
|
# define MLTK_CSHORT MLTK_16BIT_SIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER
|
|
# define MLTK_CINT MLTK_32BIT_SIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER
|
|
# define MLTK_CLONG MLTK_32BIT_SIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER
|
|
|
|
# define MLTK_CFLOAT MLTK_BIGENDIAN_IEEE754_SINGLE
|
|
# define MLTK_CDOUBLE MLTK_BIGENDIAN_IEEE754_DOUBLE
|
|
|
|
|
|
# ifndef MLTK_CLONGDOUBLE
|
|
# if defined(__MWERKS__) || defined(SYMANTEC_C) || defined(SYMANTEC_CPLUS)
|
|
# define MLTK_CLONGDOUBLE MLTK_BIGENDIAN_IEEE754_DOUBLE
|
|
# elif defined(__MRC__) && __MRC__ >= 0x0300 && __MRC__ != 0x0800
|
|
/* MrC version 1.0 defined __MRC__ to be 0x0800 presumably because of its Symantec heritage */
|
|
/* One cannot querry value of -ldsize with old MrC or PPCC -- assume -ldsize 128 */
|
|
# if __option(ldsize128)
|
|
# define MLTK_CLONGDOUBLE MLTK_128BIT_LONGDOUBLE
|
|
# else
|
|
# define MLTK_CLONGDOUBLE MLTK_BIGENDIAN_IEEE754_DOUBLE
|
|
# endif
|
|
# else
|
|
# define MLTK_CLONGDOUBLE MLTK_128BIT_LONGDOUBLE
|
|
# endif
|
|
# endif
|
|
|
|
# define MLTK_MLSHORT MLTK_16BIT_SIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER
|
|
# define MLTK_MLINT MLTK_32BIT_SIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER
|
|
# define MLTK_MLLONG MLTK_32BIT_SIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER
|
|
# define MLTK_MLFLOAT MLTK_BIGENDIAN_IEEE754_SINGLE
|
|
# define MLTK_MLDOUBLE MLTK_BIGENDIAN_IEEE754_DOUBLE
|
|
# define MLTK_MLLONGDOUBLE MLTK_128BIT_LONGDOUBLE
|
|
|
|
#elif SUN_MATHLINK
|
|
|
|
|
|
# if __sparc || __sparc__ || sparc
|
|
|
|
# define MLTK_CSHORT MLTK_16BIT_SIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER
|
|
# define MLTK_CINT MLTK_32BIT_SIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER
|
|
# define MLTK_CLONG MLTK_32BIT_SIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER
|
|
# define MLTK_CFLOAT MLTK_BIGENDIAN_IEEE754_SINGLE
|
|
# define MLTK_CDOUBLE MLTK_BIGENDIAN_IEEE754_DOUBLE
|
|
# ifndef MLTK_CLONGDOUBLE
|
|
# if __SUNPRO_C >= 0x301
|
|
/* one private token */
|
|
# define MLTK_128BIT_LONGDOUBLE 158 /* ((unsigned char)'\236') */
|
|
# define MLTK_CLONGDOUBLE MLTK_128BIT_LONGDOUBLE
|
|
# elif defined(__GNUC__) || defined(__GNUG__)
|
|
# define MLTK_CLONGDOUBLE MLTK_CDOUBLE
|
|
# else
|
|
/* no error directive here as the user may be
|
|
* using a different compiler. Some macros
|
|
* simply won't be available.
|
|
*/
|
|
# endif
|
|
# endif
|
|
|
|
# define MLTK_MLSHORT MLTK_16BIT_SIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER
|
|
# define MLTK_MLINT MLTK_32BIT_SIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER
|
|
# define MLTK_MLLONG MLTK_32BIT_SIGNED_2sCOMPLEMENT_BIGENDIAN_INTEGER
|
|
# define MLTK_MLFLOAT MLTK_BIGENDIAN_IEEE754_SINGLE
|
|
# define MLTK_MLDOUBLE MLTK_BIGENDIAN_IEEE754_DOUBLE
|
|
# define MLTK_MLLONGDOUBLE MLTK_128BIT_LONGDOUBLE
|
|
|
|
# elif __i386 || __i386__ || i386
|
|
|
|
/* syntax error */ )
|
|
|
|
# if __SUNPRO_C >= 0x301
|
|
/* one private token */
|
|
/* Interval[{-1.189731495357231765e+4932, 1.189731495357231765e+4932}] */
|
|
# define MLTK_96BIT_HIGHPADDED_INTEL_80BIT_EXTENDED 218 /* ((unsigned char)'\332') */
|
|
# define MLTK_CSHORT MLTK_16BIT_SIGNED_2sCOMPLEMENT_LITTLEENDIAN_INTEGER
|
|
# define MLTK_CINT MLTK_32BIT_SIGNED_2sCOMPLEMENT_LITTLEENDIAN_INTEGER
|
|
# define MLTK_CLONG MLTK_32BIT_SIGNED_2sCOMPLEMENT_LITTLEENDIAN_INTEGER
|
|
# define MLTK_CFLOAT MLTK_LITTLEENDIAN_IEEE754_SINGLE
|
|
# define MLTK_CDOUBLE MLTK_LITTLEENDIAN_IEEE754_DOUBLE
|
|
# define MLTK_CLONGDOUBLE MLTK_96BIT_HIGHPADDED_INTEL_80BIT_EXTENDED
|
|
# elif defined(__GNUC__) || defined(__GNUG__)
|
|
/* no error directive here as the user may be
|
|
* using a different compiler. Some macros
|
|
* simply won't be available.
|
|
*/
|
|
# else
|
|
/* no error directive here as the user may be
|
|
* using a different compiler. Some macros
|
|
* simply won't be available.
|
|
*/
|
|
# endif
|
|
|
|
|
|
# else
|
|
/* syntax error */ )
|
|
# endif
|
|
|
|
|
|
#elif WIN16_MATHLINK || (WIN32_MATHLINK && NEW_WIN32_NUMENV)
|
|
# if WIN16_MATHLINK
|
|
# define MATHLINK_NUMERICS_ENVIRONMENT_ID "poodle"
|
|
# elif WIN32_MATHLINK
|
|
# define MATHLINK_NUMERICS_ENVIRONMENT_ID "setter"
|
|
# endif
|
|
|
|
# define MLTK_CSHORT MLTK_16BIT_SIGNED_2sCOMPLEMENT_LITTLEENDIAN_INTEGER
|
|
# define MLTK_CLONG MLTK_32BIT_SIGNED_2sCOMPLEMENT_LITTLEENDIAN_INTEGER
|
|
# define MLTK_CFLOAT MLTK_LITTLEENDIAN_IEEE754_SINGLE
|
|
# define MLTK_CDOUBLE MLTK_LITTLEENDIAN_IEEE754_DOUBLE
|
|
|
|
# if WIN16_MATHLINK
|
|
# define MLTK_CINT MLTK_CSHORT
|
|
# elif WIN32_MATHLINK
|
|
# define MLTK_CINT MLTK_CLONG
|
|
# endif
|
|
|
|
# if __WATCOMC__ || __SC__
|
|
# define MLTK_CLONGDOUBLE MLTK_LITTLEENDIAN_IEEE754_DOUBLE
|
|
# elif __BORLANDC__ || __BCPLUSPLUS__ || __TURBOC__ || __TCPLUSPLUS__
|
|
# define MLTK_CLONGDOUBLE MLTK_INTEL_80BIT_EXTENDED
|
|
# elif _MSC_VER
|
|
# if WIN16_MATHLINK
|
|
# define MLTK_CLONGDOUBLE MLTK_INTEL_80BIT_EXTENDED
|
|
# elif WIN32_MATHLINK
|
|
# define MLTK_CLONGDOUBLE MLTK_LITTLEENDIAN_IEEE754_DOUBLE
|
|
# endif
|
|
# endif
|
|
|
|
|
|
# define MLTK_MLSHORT MLTK_16BIT_SIGNED_2sCOMPLEMENT_LITTLEENDIAN_INTEGER
|
|
# if WIN16_MATHLINK
|
|
# define MLTK_MLINT MLTK_16BIT_SIGNED_2sCOMPLEMENT_LITTLEENDIAN_INTEGER
|
|
# elif WIN32_MATHLINK
|
|
# define MLTK_MLINT MLTK_32BIT_SIGNED_2sCOMPLEMENT_LITTLEENDIAN_INTEGER
|
|
# endif
|
|
# define MLTK_MLLONG MLTK_32BIT_SIGNED_2sCOMPLEMENT_LITTLEENDIAN_INTEGER
|
|
# define MLTK_MLFLOAT MLTK_LITTLEENDIAN_IEEE754_SINGLE
|
|
# define MLTK_MLDOUBLE MLTK_LITTLEENDIAN_IEEE754_DOUBLE
|
|
# define MLTK_MLLONGDOUBLE MLTK_INTEL_80BIT_EXTENDED
|
|
|
|
#else
|
|
|
|
# if WIN32_MATHLINK
|
|
# define MATHLINK_NUMERICS_ENVIRONMENT_ID "Sep 13 1996, 13:46:34"
|
|
# endif
|
|
|
|
# define MLTK_CSHORT MLTK_CSHORT_P
|
|
# define MLTK_CINT MLTK_CINT_P
|
|
# define MLTK_CLONG MLTK_CLONG_P
|
|
# define MLTK_CFLOAT MLTK_CFLOAT_P
|
|
# define MLTK_CDOUBLE MLTK_CDOUBLE_P
|
|
# define MLTK_CLONGDOUBLE MLTK_CLONGDOUBLE_P
|
|
|
|
# define MLTK_MLSHORT MLTK_CSHORT_P
|
|
# define MLTK_MLINT MLTK_CINT_P
|
|
# define MLTK_MLLONG MLTK_CLONG_P
|
|
# define MLTK_MLFLOAT MLTK_CFLOAT_P
|
|
# define MLTK_MLDOUBLE MLTK_CDOUBLE_P
|
|
# define MLTK_MLLONGDOUBLE MLTK_CLONGDOUBLE_P
|
|
|
|
#endif
|
|
|
|
/* Objects of these numeric types exist in MathLink only in the numerics
|
|
* environment and, unfortunately, in the "stack frames" of the functions that
|
|
* put atomic numbers like MLPutInteger. These C types are used by client
|
|
* programs solely for type-checked access to the BinaryNumber functions.
|
|
*/
|
|
typedef unsigned char uchar_nt;
|
|
typedef uchar_nt FAR * ucharp_nt;
|
|
typedef ucharp_nt FAR * ucharpp_nt;
|
|
|
|
typedef short short_nt;
|
|
typedef short_nt FAR * shortp_nt;
|
|
typedef shortp_nt FAR * shortpp_nt;
|
|
|
|
typedef int int_nt;
|
|
typedef int_nt FAR * intp_nt;
|
|
typedef intp_nt FAR * intpp_nt;
|
|
|
|
typedef long long_nt;
|
|
typedef long_nt FAR * longp_nt;
|
|
typedef longp_nt FAR * longpp_nt;
|
|
|
|
typedef float float_nt;
|
|
typedef float_nt FAR * floatp_nt;
|
|
typedef floatp_nt FAR * floatpp_nt;
|
|
|
|
typedef double double_nt;
|
|
typedef double_nt FAR * doublep_nt;
|
|
typedef doublep_nt FAR * doublepp_nt;
|
|
|
|
#ifndef CC_SUPPORTS_LONG_DOUBLE
|
|
# if defined( __STDC__) || defined(__cplusplus) || ! UNIX_MATHLINK
|
|
# define CC_SUPPORTS_LONG_DOUBLE 1
|
|
# else
|
|
# define CC_SUPPORTS_LONG_DOUBLE MLPROTOTYPES
|
|
# endif
|
|
#endif
|
|
|
|
struct _i87extended_nt { unsigned short w[5];};
|
|
|
|
#if CC_SUPPORTS_LONG_DOUBLE
|
|
# ifndef __extended_nt__
|
|
# if WINDOWS_MATHLINK && (MLTK_CLONGDOUBLE != MLTK_MLLONGDOUBLE) /* subtle predicate that works for old and new windows numenvs */
|
|
# define __extended_nt__ struct _i87extended_nt
|
|
# else
|
|
# define __extended_nt__ long double
|
|
# endif
|
|
# endif
|
|
typedef __extended_nt__ extended_nt;
|
|
typedef extended_nt FAR * extendedp_nt;
|
|
typedef extendedp_nt FAR * extendedpp_nt;
|
|
#endif
|
|
|
|
#endif /* _MLNTYPES_H */
|
|
|
|
#ifndef _ML0TYPES_H
|
|
#define _ML0TYPES_H
|
|
|
|
|
|
#if USING_OLD_TYPE_NAMES
|
|
typedef charp_ct ml_charp;
|
|
typedef charpp_ct ml_charpp;
|
|
typedef charppp_ct ml_charppp;
|
|
typedef ucharp_ct ml_ucharp;
|
|
typedef longp_ct ml_longp;
|
|
typedef longpp_ct ml_longpp;
|
|
typedef ulongp_ct ml_ulongp;
|
|
typedef shortp_nt ml_shortp;
|
|
typedef shortpp_nt ml_shortpp;
|
|
typedef intp_nt ml_intp;
|
|
typedef intpp_nt ml_intpp;
|
|
typedef floatp_nt ml_floatp;
|
|
typedef floatpp_nt ml_floatpp;
|
|
typedef doublep_nt ml_doublep;
|
|
typedef doublepp_nt ml_doublepp;
|
|
#if CC_SUPPORTS_LONG_DOUBLE
|
|
typedef extended_nt ml_extended;
|
|
typedef extendedp_nt ml_extendedp;
|
|
typedef extendedpp_nt ml_extendedpp;
|
|
#endif
|
|
typedef charp_ct MLBuffer;
|
|
typedef kcharp_ct MLKBuffer;
|
|
typedef charpp_ct MLBufferArray;
|
|
|
|
#endif
|
|
|
|
#endif /* _ML0TYPES_H */
|
|
|
|
ML_EXTERN_C
|
|
|
|
#ifndef _MLSTDDEV_H
|
|
#define _MLSTDDEV_H
|
|
|
|
|
|
#if WINDOWS_MATHLINK
|
|
#endif
|
|
|
|
#if OS2_MATHLINK
|
|
# include <os2def.h>
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef void FAR * dev_world;
|
|
typedef MLINK dev_cookie;
|
|
|
|
typedef dev_world FAR * dev_worldp;
|
|
typedef dev_cookie FAR * dev_cookiep;
|
|
|
|
typedef MLAllocatorUPP dev_allocator;
|
|
#define call_dev_allocator CallMLAllocatorProc
|
|
#define new_dev_allocator NewMLAllocatorProc
|
|
|
|
typedef MLDeallocatorUPP dev_deallocator;
|
|
#define call_dev_deallocator CallMLDeallocatorProc
|
|
#define new_dev_deallocator NewMLDeallocatorProc
|
|
|
|
|
|
typedef dev_main_type world_main_type;
|
|
|
|
#define MLSTDWORLD_INIT 16
|
|
#define MLSTDWORLD_DEINIT 17
|
|
#define MLSTDWORLD_MAKE 18
|
|
#define MLSTDDEV_CONNECT_READY 19
|
|
#define MLSTDDEV_CONNECT 20
|
|
#define MLSTDDEV_DESTROY 21
|
|
|
|
#define MLSTDDEV_SET_YIELDER 22
|
|
#define MLSTDDEV_GET_YIELDER 23
|
|
|
|
#define MLSTDDEV_WRITE_MSG 24
|
|
#define MLSTDDEV_HAS_MSG 25
|
|
#define MLSTDDEV_READ_MSG 26
|
|
#define MLSTDDEV_SET_HANDLER 27
|
|
#define MLSTDDEV_GET_HANDLER 28
|
|
|
|
|
|
|
|
#define T_WORLD_INIT MLSTDWORLD_INIT
|
|
#define T_WORLD_DEINIT MLSTDWORLD_DEINIT
|
|
#define T_WORLD_MAKE MLSTDWORLD_MAKE
|
|
#define T_DEV_CONNECT_READY MLSTDDEV_CONNECT_READY
|
|
#define T_DEV_CONNECT MLSTDDEV_CONNECT
|
|
#define T_DEV_DESTROY MLSTDDEV_DESTROY
|
|
|
|
#define T_DEV_SET_YIELDER MLSTDDEV_SET_YIELDER
|
|
#define T_DEV_GET_YIELDER MLSTDDEV_GET_YIELDER
|
|
|
|
#define T_DEV_WRITE_MSG MLSTDDEV_WRITE_MSG
|
|
#define T_DEV_HAS_MSG MLSTDDEV_HAS_MSG
|
|
#define T_DEV_READ_MSG MLSTDDEV_READ_MSG
|
|
#define T_DEV_SET_HANDLER MLSTDDEV_SET_HANDLER
|
|
#define T_DEV_GET_HANDLER MLSTDDEV_GET_HANDLER
|
|
|
|
|
|
|
|
|
|
typedef unsigned long dev_mode;
|
|
/* edit here and in mathlink.r */
|
|
#define NOMODE ((dev_mode)0x0000)
|
|
#define LOOPBACKBIT ((dev_mode)0x0001)
|
|
#define LISTENBIT ((dev_mode)0x0002)
|
|
#define CONNECTBIT ((dev_mode)0x0004)
|
|
#define LAUNCHBIT ((dev_mode)0x0008)
|
|
#define PARENTCONNECTBIT ((dev_mode)0x0010)
|
|
#define READBIT ((dev_mode)0x0020)
|
|
#define WRITEBIT ((dev_mode)0x0040)
|
|
#define SERVERBIT ((dev_mode)0x0080)
|
|
#define ANYMODE (~(dev_mode)0)
|
|
|
|
typedef dev_mode FAR * dev_modep;
|
|
|
|
|
|
|
|
|
|
|
|
typedef unsigned long dev_options;
|
|
|
|
#define _DefaultOptions ((dev_options)0x00000000)
|
|
|
|
#define _NetworkVisibleMask ((dev_options)0x00000003)
|
|
#define _BrowseMask ((dev_options)0x00000010)
|
|
#define _NonBlockingMask ((dev_options)0x00000020)
|
|
#define _InteractMask ((dev_options)0x00000100)
|
|
#define _YieldMask ((dev_options)0x00000200)
|
|
#define _VersionMask ((dev_options)0x0F000000)
|
|
|
|
#define _NetworkVisible ((dev_options)0x00000000)
|
|
#define _LocallyVisible ((dev_options)0x00000001)
|
|
#define _InternetVisible ((dev_options)0x00000002)
|
|
|
|
#define _Browse ((dev_options)0x00000000)
|
|
#define _DontBrowse ((dev_options)0x00000010)
|
|
|
|
#define _NonBlocking ((dev_options)0x00000000)
|
|
#define _Blocking ((dev_options)0x00000020)
|
|
|
|
#define _Interact ((dev_options)0x00000000)
|
|
#define _DontInteract ((dev_options)0x00000100)
|
|
|
|
#define _ForceYield ((dev_options)0x00000200)
|
|
|
|
|
|
|
|
|
|
/* values returned by selector DEVICE_TYPE */
|
|
#define UNREGISTERED_TYPE 0
|
|
#define UNIXPIPE_TYPE 1
|
|
#define UNIXSOCKET_TYPE 2
|
|
#define PPC_TYPE 3
|
|
#define MACTCP_TYPE 4
|
|
#define LOOPBACK_TYPE 5
|
|
#define COMMTB_TYPE 6
|
|
#define ADSP_TYPE 7
|
|
#define LOCAL_TYPE 8
|
|
#define WINLOCAL_TYPE 9
|
|
#define WINFMAP_TYPE 10
|
|
#define WINSHM_TYPE 11
|
|
|
|
/* selectors */
|
|
#define DEVICE_TYPE 0 /* long */
|
|
#define DEVICE_NAME 1 /* char */
|
|
#define DEVICE_WORLD_ID 5 /* char */
|
|
#define PIPE_FD (UNIXPIPE_TYPE * 256 + 0) /* int */
|
|
#define PIPE_CHILD_PID (UNIXPIPE_TYPE * 256 + 1) /* int */
|
|
#define SOCKET_FD (UNIXSOCKET_TYPE * 256 + 0) /* int */
|
|
#define SOCKET_PARTNER_ADDR (UNIXSOCKET_TYPE * 256 + 1) /* unsigned long */
|
|
#define SOCKET_PARTNER_PORT (UNIXSOCKET_TYPE * 256 + 2) /* unsigned short */
|
|
#define PPC_SESS_REF_NUM (PPC_TYPE * 256 + 0) /* PPCSessRefNum */
|
|
#define PPC_PARTNER_PSN (PPC_TYPE * 256 + 1) /* ProcessSerialNumber */
|
|
#define PPC_PARTNER_LOCATION (PPC_TYPE * 256 + 2) /* LocationNameRec */
|
|
#define PPC_PARTNER_PORT (PPC_TYPE * 256 + 3) /* PPCPortRec */
|
|
#define MACTCP_STREAM (MACTCP_TYPE * 256 + 0) /* StreamPtr */
|
|
#define MACTCP_PARTNER_ADDR (MACTCP_TYPE * 256 + 1) /* ip_addr */
|
|
#define MACTCP_PARTNER_PORT (MACTCP_TYPE * 256 + 2) /* tcp_port */
|
|
#define MACTCP_IPDRIVER (MACTCP_TYPE * 256 + 3) /* short */
|
|
#define MACTCP_SETSIMPLESOCKET (MACTCP_TYPE * 256 + 9) /* buf, buflen ignored */
|
|
#define COMMTB_CONNHANDLE (COMMTB_TYPE * 256 + 0) /* ConnHandle */
|
|
#define ADSP_CCBREFNUM (ADSP_TYPE * 256 + 0) /* short */
|
|
#define ADSP_IOCREFNUM (ADSP_TYPE * 256 + 3) /* short */
|
|
|
|
#define WINDOWS_SET_NOTIFY_WINDOW 2330 /* HWND */
|
|
#define WINDOWS_REMOVE_NOTIFY_WINDOW 2331 /* HWND */
|
|
|
|
/* info selectors */
|
|
#define WORLD_THISLOCATION 1 /* char */
|
|
#define WORLD_MODES 2 /* dev_mode */
|
|
#define WORLD_PROTONAME 3 /* char */
|
|
#define WORLD_STREAMCAPACITY 4 /* long */ /*this belongs in mlolddev.h*/
|
|
#define WORLD_ID DEVICE_WORLD_ID /* char */
|
|
|
|
|
|
|
|
#ifndef MATHLINK_DEVICE_WORLD_ID
|
|
#define MATHLINK_DEVICE_WORLD_ID (__DATE__ ", " __TIME__)
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#define YIELDVERSION 1
|
|
|
|
typedef long devyield_result;
|
|
typedef long devyield_place;
|
|
typedef long devyield_count;
|
|
typedef unsigned long devyield_sleep;
|
|
|
|
#define INTERNAL_YIELDING 0
|
|
#define MAKE_YIELDING 1
|
|
#define CONNECT_YIELDING 2
|
|
#define READ_YIELDING 3
|
|
#define WRITE_YIELDING 4
|
|
#define DESTROY_YIELDING 5
|
|
#define READY_YIELDING 6
|
|
|
|
|
|
typedef struct MLYieldParams FAR * MLYieldParameters;
|
|
|
|
|
|
#define MAX_SLEEP (600)
|
|
typedef struct MLYieldData{
|
|
union {long l; double d; void FAR * p;} private_data[8];
|
|
} FAR * MLYieldDataPointer;
|
|
|
|
void MLNewYieldData P(( MLYieldDataPointer ydp /* , dev_allocator, dev_deallocator */));
|
|
void MLFreeYieldData P(( MLYieldDataPointer ydp));
|
|
MLYieldParameters MLResetYieldData P(( MLYieldDataPointer ydp, devyield_place func_id));
|
|
mlapi_result MLSetYieldParameter P(( MLYieldParameters yp, unsigned long selector, void* data, unsigned long* len));
|
|
mlapi_result MLYieldParameter P(( MLYieldParameters yp, unsigned long selector, void* data, unsigned long* len));
|
|
devyield_sleep MLSetSleepYP P(( MLYieldParameters yp, devyield_sleep sleep));
|
|
devyield_count MLSetCountYP P(( MLYieldParameters yp, devyield_count count));
|
|
|
|
|
|
enum { MLSleepParameter = 1, MLCountParameter, MLPlaceParameter};
|
|
|
|
|
|
|
|
|
|
|
|
MLYPROC( devyield_result, MLYielderProcPtr, (MLINK mlp, MLYieldParameters yp));
|
|
typedef MLYielderProcPtr MLDeviceYielderProcPtr;
|
|
|
|
#if MACINTOSH_MATHLINK
|
|
enum {
|
|
uppMLYielderProcInfo = kPascalStackBased
|
|
| RESULT_SIZE(SIZE_CODE(sizeof(devyield_result)))
|
|
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(MLINK)))
|
|
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(MLYieldParameters))),
|
|
uppMLDeviceYielderProcInfo = uppMLYielderProcInfo
|
|
};
|
|
#endif /* MACINTOSH_MATHLINK */
|
|
|
|
|
|
#if MACINTOSH_MATHLINK
|
|
#if GENERATINGCFM
|
|
typedef UniversalProcPtr MLYielderUPP, MLDeviceYielderUPP;
|
|
# define NewMLYielderProc(userRoutine) \
|
|
NewRoutineDescriptor(MLYielderCast((userRoutine)), uppMLYielderProcInfo, GetCurrentArchitecture())
|
|
#else /* !GENERATINGCFM */
|
|
typedef MLYielderProcPtr MLYielderUPP, MLDeviceYielderUPP;
|
|
# define NewMLYielderProc(userRoutine) (userRoutine)
|
|
#endif /* GENERATINGCFM */
|
|
#elif WIN16_MATHLINK
|
|
typedef __MLProcPtr__ MLYielderUPP, MLDeviceYielderUPP;
|
|
# define NewMLYielderProc( userRoutine) \
|
|
(MakeProcInstance( MLYielderCast(userRoutine), MLInstance))
|
|
#else
|
|
typedef MLYielderProcPtr MLYielderUPP, MLDeviceYielderUPP;
|
|
# define NewMLYielderProc(userRoutine) (userRoutine)
|
|
#endif
|
|
|
|
#define NewMLDeviceYielderProc NewMLYielderProc
|
|
|
|
typedef MLYielderUPP MLYieldFunctionType;
|
|
typedef unsigned long MLYieldFunctionObject; /* bugcheck should I change this back to void* for 64 bit machines */
|
|
|
|
typedef MLYieldFunctionObject dev_yielder;
|
|
typedef dev_yielder FAR* dev_yielderp;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef unsigned long dev_message;
|
|
typedef dev_message FAR * dev_messagep;
|
|
|
|
|
|
MLMPROC( void, MLHandlerProcPtr, (MLINK mlp, dev_message m, dev_message n));
|
|
typedef MLHandlerProcPtr MLDeviceHandlerProcPtr;
|
|
|
|
|
|
#if MACINTOSH_MATHLINK
|
|
enum {
|
|
uppMLHandlerProcInfo = kPascalStackBased
|
|
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(MLINK)))
|
|
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(dev_message)))
|
|
| STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(dev_message))),
|
|
uppMLDeviceHandlerProcInfo = uppMLHandlerProcInfo
|
|
};
|
|
#endif /* MACINTOSH_MATHLINK */
|
|
|
|
#if MACINTOSH_MATHLINK
|
|
#if GENERATINGCFM
|
|
typedef UniversalProcPtr MLHandlerUPP, MLDeviceHandlerUPP;
|
|
# define NewMLHandlerProc(userRoutine) \
|
|
NewRoutineDescriptor(MLHandlerCast((userRoutine)), uppMLHandlerProcInfo, GetCurrentArchitecture())
|
|
#else /* !GENERATINGCFM */
|
|
typedef MLHandlerProcPtr MLHandlerUPP, MLDeviceHandlerUPP;
|
|
# define NewMLHandlerProc(userRoutine) (userRoutine)
|
|
#endif /* GENERATINGCFM */
|
|
#elif WIN16_MATHLINK
|
|
typedef __MLProcPtr__ MLHandlerUPP, MLDeviceHandlerUPP;
|
|
# define NewMLHandlerProc( userRoutine) \
|
|
(MakeProcInstance( MLHandlerCast(userRoutine), MLInstance))
|
|
#else
|
|
typedef MLHandlerProcPtr MLHandlerUPP, MLDeviceHandlerUPP;
|
|
# define NewMLHandlerProc(userRoutine) (userRoutine)
|
|
#endif
|
|
|
|
#define NewMLDeviceHandlerProc NewMLHandlerProc
|
|
|
|
typedef MLHandlerUPP MLMessageHandlerType;
|
|
typedef unsigned long MLMessageHandlerObject;
|
|
|
|
typedef MLMessageHandlerObject dev_msghandler;
|
|
typedef dev_msghandler FAR* dev_msghandlerp;
|
|
|
|
|
|
|
|
#endif /* _MLSTDDEV_H */
|
|
|
|
|
|
|
|
/* explicitly not protected by _MLSTDDEV_H in case MLDECL is redefined for multiple inclusion */
|
|
|
|
/*bugcheck //should the rest of YP stuff be exported? */
|
|
MLDECL( devyield_sleep, MLSleepYP, ( MLYieldParameters yp));
|
|
MLDECL( devyield_count, MLCountYP, ( MLYieldParameters yp));
|
|
MLDECL( MLYieldFunctionObject, MLCreateYieldFunction, ( MLEnvironment ep, MLYieldFunctionType yf, MLPointer reserved)); /* reserved must be 0 */
|
|
#ifndef MLINTERFACE
|
|
/* syntax error */ )
|
|
#endif
|
|
#if MLINTERFACE > 1
|
|
MLDECL( MLYieldFunctionObject, MLCreateYieldFunction0, ( MLEnvironment ep, MLYieldFunctionType yf, MLPointer reserved)); /* reserved must be 0 */
|
|
#endif
|
|
MLDECL( MLYieldFunctionType, MLDestroyYieldFunction, ( MLYieldFunctionObject yfo));
|
|
MLDECL( devyield_result, MLCallYieldFunction, ( MLYieldFunctionObject yfo, MLINK mlp, MLYieldParameters p));
|
|
MLDECL( MLMessageHandlerObject, MLCreateMessageHandler, ( MLEnvironment ep, MLMessageHandlerType mh, MLPointer reserved)); /* reserved must be 0 */
|
|
#if MLINTERFACE > 1
|
|
MLDECL( MLMessageHandlerObject, MLCreateMessageHandler0, ( MLEnvironment ep, MLMessageHandlerType mh, MLPointer reserved)); /* reserved must be 0 */
|
|
#endif
|
|
MLDECL( MLMessageHandlerType, MLDestroyMessageHandler, ( MLMessageHandlerObject mho));
|
|
MLDECL( void, MLCallMessageHandler, ( MLMessageHandlerObject mho, MLINK mlp, dev_message m, dev_message n));
|
|
|
|
|
|
/* just some type-safe casts */
|
|
MLDECL( __MLProcPtr__, MLYielderCast, ( MLYielderProcPtr yp));
|
|
MLDECL( __MLProcPtr__, MLHandlerCast, ( MLHandlerProcPtr mh));
|
|
|
|
ML_END_EXTERN_C
|
|
|
|
|
|
|
|
#ifndef _MLMAKE_H
|
|
#define _MLMAKE_H
|
|
|
|
/* --binding layer-- */
|
|
/*************** Starting MathLink ***************/
|
|
|
|
#define MLPARAMETERSIZE_R1 256
|
|
#define MLPARAMETERSIZE 256
|
|
typedef char FAR * MLParametersPointer;
|
|
typedef char MLParameters[MLPARAMETERSIZE];
|
|
|
|
#define MLLoopBackOpen MLLoopbackOpen
|
|
|
|
|
|
|
|
ML_EXTERN_C
|
|
MLUPROC( void, MLUserProcPtr, (MLINK));
|
|
ML_END_EXTERN_C
|
|
|
|
#if MACINTOSH_MATHLINK
|
|
enum {
|
|
uppMLUserFunctionProcInfo = kPascalStackBased
|
|
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(MLINK)))
|
|
};
|
|
#endif /* MACINTOSH_MATHLINK */
|
|
|
|
#if MACINTOSH_MATHLINK
|
|
#if GENERATINGCFM
|
|
typedef UniversalProcPtr MLUserUPP;
|
|
# define NewMLUserProc(userRoutine) \
|
|
NewRoutineDescriptor(MLUserCast((userRoutine)), uppMLUserFunctionProcInfo, GetCurrentArchitecture())
|
|
#else /* !GENERATINGCFM */
|
|
typedef MLUserProcPtr MLUserUPP;
|
|
# define NewMLUserProc(userRoutine) (userRoutine)
|
|
#endif /* GENERATINGCFM */
|
|
#else /* !MACINTOSH_MATHLINK */
|
|
typedef MLUserProcPtr MLUserUPP;
|
|
# define NewMLUserProc(userRoutine) (userRoutine)
|
|
#endif /* MACINTOSH_MATHLINK */
|
|
|
|
typedef MLUserUPP MLUserFunctionType;
|
|
typedef MLUserFunctionType FAR * MLUserFunctionTypePointer;
|
|
|
|
|
|
|
|
|
|
|
|
/* The following defines are
|
|
* currently for internal use only.
|
|
*/
|
|
|
|
|
|
/* edit here and in mldevice.h and mathlink.r */
|
|
#define MLNetworkVisibleMask ((unsigned long)0x00000003)
|
|
#define MLBrowseMask ((unsigned long)0x00000010)
|
|
#define MLNonBlockingMask ((unsigned long)0x00000020)
|
|
#define MLInteractMask ((unsigned long)0x00000100)
|
|
#define MLYieldMask ((unsigned long)0x00000200)
|
|
#define MLVersionMask ((unsigned long)0x0000F000)
|
|
|
|
#define MLDefaultOptions ((unsigned long)0x00000000)
|
|
#define MLNetworkVisible ((unsigned long)0x00000000)
|
|
#define MLLocallyVisible ((unsigned long)0x00000001)
|
|
#define MLInternetVisible ((unsigned long)0x00000002)
|
|
|
|
#define MLBrowse ((unsigned long)0x00000000)
|
|
#define MLDontBrowse ((unsigned long)0x00000010)
|
|
|
|
#define MLNonBlocking ((unsigned long)0x00000000)
|
|
#define MLBlocking ((unsigned long)0x00000020)
|
|
|
|
#define MLInteract ((unsigned long)0x00000000)
|
|
#define MLDontInteract ((unsigned long)0x00000100)
|
|
|
|
#define MLForceYield ((unsigned long)0x00000200)
|
|
|
|
#endif /* _MLMAKE_H */
|
|
|
|
|
|
/* explicitly not protected by _MLMAKE_H in case MLDECL is redefined for multiple inclusion */
|
|
|
|
|
|
ML_EXTERN_C
|
|
MLDECL( ulong_ct, MLNewParameters, ( MLParametersPointer p, ulong_ct rev, ulong_ct apirev));
|
|
MLDECL( void, MLSetAllocParameter, ( MLParametersPointer p, MLAllocator allocator, MLDeallocator deallocator));
|
|
#ifndef MLINTERFACE
|
|
/* syntax error */ )
|
|
#endif
|
|
#if MLINTERFACE > 1
|
|
MLDECL( long, MLAllocParameter, (MLParametersPointer p, MLAllocatorp allocatorp, MLDeallocatorp deallocatorp));
|
|
MLDECL( long, MLSetResourceParameter, (MLParametersPointer p, kcharp_ct path));
|
|
MLDECL( long, MLSetDeviceParameter, (MLParametersPointer p, kcharp_ct devspec));
|
|
#endif
|
|
MLDECL( long, MLErrorParameter, ( MLParametersPointer p));
|
|
|
|
MLDECL( MLEnvironment, MLInitialize, ( MLParametersPointer p)); /* pass in NULL */
|
|
MLDECL( void, MLDeinitialize, ( MLEnvironment env));
|
|
|
|
/* or, if you use MLOpenArgv, ...*/
|
|
|
|
MLDECL( MLEnvironment, MLBegin, ( MLParametersPointer p)); /* pass in NULL */
|
|
MLDECL( void, MLEnd, ( MLEnvironment env));
|
|
|
|
#if MLNTESTPOINTS < 1
|
|
#undef MLNTESTPOINTS
|
|
#define MLNTESTPOINTS 1
|
|
#endif
|
|
MLDECL( long_et, MLTestPoint1, ( MLEnvironment ep, ulong_ct selector, voidp_ct p1, voidp_ct p2, longp_ct np));
|
|
|
|
#ifndef MLINTERFACE
|
|
/* syntax error */ )
|
|
#endif
|
|
#if MLINTERFACE > 1
|
|
|
|
#if MLNTESTPOINTS < 2
|
|
#undef MLNTESTPOINTS
|
|
#define MLNTESTPOINTS 2
|
|
#endif
|
|
MLDECL( void, MLTestPoint2, ( MLINK mlp));
|
|
|
|
#if MLNTESTPOINTS < 3
|
|
#undef MLNTESTPOINTS
|
|
#define MLNTESTPOINTS 3
|
|
#endif
|
|
MLDECL( ulong_ct, MLTestPoint3, ( MLINK mlp));
|
|
|
|
#if MLNTESTPOINTS < 4
|
|
#undef MLNTESTPOINTS
|
|
#define MLNTESTPOINTS 4
|
|
#endif
|
|
MLDECL( ulong_ct, MLTestPoint4, ( MLINK mlp));
|
|
|
|
MLDECL( long_et, MLNumberControl0, ( MLEnvironment ep, ulong_ct selector, voidp_ct p1, voidp_ct p2, longp_ct np));
|
|
#else
|
|
extern long_et MLNumberControl0( MLEnvironment ep, ulong_ct selector, voidp_ct p1, voidp_ct p2, longp_ct np);
|
|
#endif
|
|
|
|
|
|
/*************** Connection interface ***************/
|
|
MLDECL( MLINK, MLCreate0, ( MLEnvironment ep, dev_type dev, dev_main_type dev_main, longp_ct errp));
|
|
MLDECL( MLINK, MLMake, ( MLPointer ep, dev_type dev, dev_main_type dev_main, longp_ct errp));
|
|
MLDECL( void, MLDestroy, ( MLINK mlp, dev_typep devp, dev_main_typep dev_mainp));
|
|
|
|
MLDECL( long, MLFeatureString, ( MLINK mlp, charp_ct buf, long buffsize));
|
|
MLDECL( charpp_ct, MLFilterArgv0, ( MLEnvironment ep, charpp_ct argv, charpp_ct argv_end));
|
|
MLDECL( MLINK, MLOpenArgv, ( MLEnvironment ep, charpp_ct argv, charpp_ct argv_end, longp_ct errp));
|
|
MLDECL( MLINK, MLOpenString, ( MLEnvironment ep, kcharp_ct command_line, longp_ct errp));
|
|
MLDECL( MLINK, MLLoopbackOpen, ( MLEnvironment ep, longp_ct errp));
|
|
MLDECL( MLINK, MLLoopbackOpen0, ( MLEnvironment ep, kcharp_ct features, longp_ct errp));
|
|
MLDECL( int_ct, MLStringToArgv, ( kcharp_ct commandline, charp_ct buf, charpp_ct argv, int_ct len));
|
|
MLDECL( long, MLScanString, ( charpp_ct argv, charppp_ct argv_end, charpp_ct commandline, charpp_ct buf));
|
|
MLDECL( long, MLPrintArgv, ( charp_ct buf, charpp_ct buf_endp, charppp_ct argvp, charpp_ct argv_end));
|
|
|
|
MLDECL( kcharp_ct, MLErrorMessage, ( MLINK mlp));
|
|
MLDECL( kcharp_ct, MLErrorString, ( MLEnvironment env, long err));
|
|
|
|
MLDECL( MLINK, MLOpen, ( int_ct argc, charpp_ct argv));
|
|
MLDECL( MLINK, MLOpenInEnv, ( MLEnvironment env, int_ct argc, charpp_ct argv, longp_ct errp));
|
|
MLDECL( MLINK, MLOpenS, ( kcharp_ct command_line));
|
|
|
|
MLDECL( MLINK, MLDuplicateLink, ( MLINK parentmlp, kcharp_ct name, longp_ct errp ));
|
|
MLDECL( mlapi_result, MLConnect, ( MLINK mlp));
|
|
#define MLActivate MLConnect
|
|
|
|
#ifndef __feature_setp__
|
|
#define __feature_setp__
|
|
typedef struct feature_set* feature_setp;
|
|
#endif
|
|
MLDECL( mlapi_result, MLEstablish, ( MLINK mlp, feature_setp features));
|
|
|
|
MLDECL( mlapi_result, MLEstablishString, ( MLINK mlp, kcharp_ct features));
|
|
MLDECL( void, MLClose, ( MLINK mlp));
|
|
|
|
MLDECL( void, MLSetUserData, ( MLINK mlp, MLPointer data, MLUserFunctionType f));
|
|
MLDECL( MLPointer, MLUserData, ( MLINK mlp, MLUserFunctionTypePointer fp));
|
|
MLDECL( void, MLSetUserBlock, ( MLINK mlp, MLPointer userblock));
|
|
MLDECL( MLPointer, MLUserBlock, ( MLINK mlp));
|
|
|
|
/* just a type-safe cast */
|
|
MLDECL( __MLProcPtr__, MLUserCast, ( MLUserProcPtr f));
|
|
|
|
|
|
|
|
|
|
|
|
/* MLName returns a pointer to the link's name.
|
|
* Links are generally named when they are created
|
|
* and are based on information that is potentially
|
|
* useful and is available at that time.
|
|
* Do not attempt to deallocate the name's storage
|
|
* through this pointer. The storage should be
|
|
* considered in read-only memory.
|
|
*/
|
|
MLDECL( kcharp_ct, MLName, ( MLINK mlp));
|
|
MLDECL( long, MLNumber, ( MLINK mlp));
|
|
#if MLINTERFACE > 1
|
|
MLDECL( long, MLToLinkID, ( MLINK mlp));
|
|
MLDECL( MLINK, MLFromLinkID, ( MLEnvironment ep, long n));
|
|
#else
|
|
extern MLINK MLFromLinkID( MLEnvironment ep, long n);
|
|
#endif
|
|
MLDECL( charp_ct, MLSetName, ( MLINK mlp, kcharp_ct name));
|
|
|
|
|
|
|
|
/* The following functions are
|
|
* currently for internal use only.
|
|
*/
|
|
|
|
MLDECL( MLPointer, MLInit, ( MLallocator alloc, MLdeallocator dealloc, MLPointer enclosing_environment));
|
|
MLDECL( void, MLDeinit, ( MLPointer env));
|
|
MLDECL( MLPointer, MLEnclosingEnvironment, ( MLPointer ep));
|
|
MLDECL( MLPointer, MLinkEnvironment, ( MLINK mlp));
|
|
|
|
/* the following two functions are for internal use only */
|
|
MLDECL( MLYieldFunctionObject, MLDefaultYieldFunction, ( MLEnvironment env));
|
|
MLDECL( mlapi_result, MLSetDefaultYieldFunction, ( MLEnvironment env, MLYieldFunctionObject yf));
|
|
|
|
ML_END_EXTERN_C
|
|
|
|
|
|
#ifndef _MLERRORS_H
|
|
#define _MLERRORS_H
|
|
|
|
|
|
/*************** MathLink errors ***************/
|
|
/*
|
|
* When some problem is detected within MathLink, routines
|
|
* will return a simple indication of failure and store
|
|
* an error code internally. (For routines that have nothing
|
|
* else useful to return, success is indicated by returning
|
|
* non-zero and failure by returning 0.) MLerror() returns
|
|
* the current error code; MLErrorMessage returns an English
|
|
* language description of the error.
|
|
* The error MLEDEAD is irrecoverable. For the others, MLClearError()
|
|
* will reset the error code to MLEOK.
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _MLERRNO_H
|
|
#define _MLERRNO_H
|
|
|
|
/* edit here and in mlerrstr.h */
|
|
|
|
#define MLEUNKNOWN -1
|
|
#define MLEOK 0
|
|
#define MLEDEAD 1
|
|
#define MLEGBAD 2
|
|
#define MLEGSEQ 3
|
|
#define MLEPBTK 4
|
|
#define MLEPSEQ 5
|
|
#define MLEPBIG 6
|
|
#define MLEOVFL 7
|
|
#define MLEMEM 8
|
|
#define MLEACCEPT 9
|
|
#define MLECONNECT 10
|
|
#define MLECLOSED 11
|
|
#define MLEDEPTH 12 /* internal error */
|
|
#define MLENODUPFCN 13 /* stream cannot be duplicated */
|
|
|
|
#define MLENOACK 15 /* */
|
|
#define MLENODATA 16 /* */
|
|
#define MLENOTDELIVERED 17 /* */
|
|
#define MLENOMSG 18 /* */
|
|
#define MLEFAILED 19 /* */
|
|
|
|
#define MLEGETENDEXPR 20
|
|
#define MLEPUTENDPACKET 21 /* unexpected call of MLEndPacket */
|
|
/* currently atoms aren't
|
|
* counted on the way out so this error is raised only when
|
|
* MLEndPacket is called in the midst of an atom
|
|
*/
|
|
#define MLENEXTPACKET 22
|
|
#define MLEUNKNOWNPACKET 23
|
|
#define MLEGETENDPACKET 24
|
|
#define MLEABORT 25
|
|
#define MLEMORE 26 /* internal error */
|
|
#define MLENEWLIB 27
|
|
#define MLEOLDLIB 28
|
|
#define MLEBADPARAM 29
|
|
#define MLENOTIMPLEMENTED 30
|
|
|
|
|
|
#define MLEINIT 32
|
|
#define MLEARGV 33
|
|
#define MLEPROTOCOL 34
|
|
#define MLEMODE 35
|
|
#define MLELAUNCH 36
|
|
#define MLELAUNCHAGAIN 37
|
|
#define MLELAUNCHSPACE 38
|
|
#define MLENOPARENT 39
|
|
#define MLENAMETAKEN 40
|
|
#define MLENOLISTEN 41
|
|
#define MLEBADNAME 42
|
|
#define MLEBADHOST 43
|
|
#define MLERESOURCE 44 /* a required resource was missing */
|
|
#define MLELAUNCHFAILED 45
|
|
#define MLELAUNCHNAME 46
|
|
#define MLELAST MLELAUNCHNAME /* for internal use only */
|
|
|
|
#define MLETRACEON 996 /* */
|
|
#define MLETRACEOFF 997 /* */
|
|
#define MLEDEBUG 998 /* */
|
|
#define MLEASSERT 999 /* an internal assertion failed */
|
|
#define MLEUSER 1000 /* start of user defined errors */
|
|
|
|
|
|
#endif /* _MLERRNO_H */
|
|
|
|
|
|
#endif /* _MLERRORS_H */
|
|
|
|
/* explicitly not protected by _MLERRORS_H in case MLDECL is redefined for multiple inclusion */
|
|
|
|
ML_EXTERN_C
|
|
MLDECL( mlapi_error, MLError, ( MLINK mlp));
|
|
MLDECL( mlapi_result, MLClearError, ( MLINK mlp));
|
|
MLDECL( mlapi_result, MLSetError, ( MLINK mlp, mlapi_error err));
|
|
ML_END_EXTERN_C
|
|
|
|
|
|
#ifndef _MLYLDMSG_H
|
|
#define _MLYLDMSG_H
|
|
|
|
|
|
|
|
enum { MLTerminateMessage = 1, MLInterruptMessage, MLAbortMessage,
|
|
MLEndPacketMessage, MLSynchronizeMessage, MLImDyingMessage,
|
|
MLWaitingAcknowledgment, MLMarkTopLevelMessage,
|
|
MLFirstUserMessage = 128, MLLastUserMessage = 255 };
|
|
|
|
typedef unsigned long devinfo_selector;
|
|
|
|
|
|
#endif /* _MLYLDMSG_H */
|
|
|
|
/* explicitly not protected by _MLYLDMSG_H in case MLDECL is redefined for multiple inclusion */
|
|
|
|
ML_EXTERN_C
|
|
MLDECL( mlapi_result, MLPutMessage, ( MLINK mlp, dev_message msg));
|
|
MLDECL( mlapi_result, MLMessageReady, ( MLINK mlp));
|
|
MLDECL( mlapi_result, MLGetMessage, ( MLINK mlp, dev_messagep mp, dev_messagep np));
|
|
|
|
MLDECL( MLMessageHandlerObject, MLMessageHandler, ( MLINK mlp));
|
|
MLDECL( mlapi_result, MLSetMessageHandler, ( MLINK mlp, MLMessageHandlerObject h));
|
|
MLDECL( MLYieldFunctionObject, MLYieldFunction, ( MLINK mlp));
|
|
MLDECL( mlapi_result, MLSetYieldFunction, ( MLINK mlp, MLYieldFunctionObject yf));
|
|
#ifndef MLINTERFACE
|
|
/* syntax error */ )
|
|
#endif
|
|
#if MLINTERFACE > 1
|
|
MLDECL( mlapi_result, MLSetYieldFunction0, ( MLINK mlp, MLYieldFunctionObject yf, MLINK cookie));
|
|
MLDECL( mlapi_result, MLSetMessageHandler0, ( MLINK mlp, MLMessageHandlerObject func, MLINK cookie));
|
|
#endif
|
|
|
|
|
|
MLDECL( mlapi_result, MLDeviceInformation, ( MLINK mlp, devinfo_selector selector, MLPointer buf, longp_st buflen));
|
|
ML_END_EXTERN_C
|
|
|
|
/*************** Textual interface ***************/
|
|
|
|
|
|
#ifndef _MLGET_H
|
|
#define _MLGET_H
|
|
|
|
|
|
#endif /* _MLGET_H */
|
|
|
|
/* explicitly not protected by _MLGET_H in case MLDECL is redefined for multiple inclusion */
|
|
|
|
ML_EXTERN_C
|
|
MLDECL( mlapi_token, MLGetNext, ( MLINK mlp));
|
|
MLDECL( mlapi_token, MLGetNextRaw, ( MLINK mlp));
|
|
MLDECL( mlapi_token, MLGetType, ( MLINK mlp));
|
|
MLDECL( mlapi_token, MLGetRawType, ( MLINK mlp));
|
|
MLDECL( mlapi_result, MLGetRawData, ( MLINK mlp, ucharp_ct data, long_st size, longp_st gotp));
|
|
MLDECL( mlapi_result, MLGetData, ( MLINK mlp, charp_ct data, long_st size, longp_st gotp));
|
|
MLDECL( mlapi_result, MLGetArgCount, ( MLINK mlp, longp_st countp));
|
|
MLDECL( mlapi_result, MLGetRawArgCount, ( MLINK mlp, longp_st countp));
|
|
MLDECL( mlapi_result, MLBytesToGet, ( MLINK mlp, longp_st leftp));
|
|
MLDECL( mlapi_result, MLRawBytesToGet, ( MLINK mlp, longp_st leftp));
|
|
MLDECL( mlapi_result, MLExpressionsToGet, ( MLINK mlp, longp_st countp));
|
|
MLDECL( mlapi_result, MLNewPacket, ( MLINK mlp));
|
|
MLDECL( mlapi_result, MLTakeLast, ( MLINK mlp, long_st eleft));
|
|
MLDECL( mlapi_result, MLReady, ( MLINK mlp));
|
|
MLDECL( mlapi_result, MLFill, ( MLINK mlp));
|
|
ML_END_EXTERN_C
|
|
|
|
|
|
#ifndef _MLPUT_H
|
|
#define _MLPUT_H
|
|
|
|
|
|
#define MLPutExpression is obsolete, use MLPutComposite
|
|
|
|
#endif /* _MLPUT_H */
|
|
|
|
/* explicitly not protected by _MLPUT_H in case MLDECL is redefined for multiple inclusion */
|
|
|
|
ML_EXTERN_C
|
|
MLDECL( mlapi_result, MLPutNext, ( MLINK mlp, mlapi_token tok));
|
|
MLDECL( mlapi_result, MLPutType, ( MLINK mlp, mlapi__token tok));
|
|
MLDECL( mlapi_result, MLPutRawSize, ( MLINK mlp, long_st size));
|
|
MLDECL( mlapi_result, MLPutRawData, ( MLINK mlp, kucharp_ct data, long_st len));
|
|
MLDECL( mlapi_result, MLPutArgCount, ( MLINK mlp, long_st argc));
|
|
MLDECL( mlapi_result, MLPutComposite, ( MLINK mlp, long_st argc));
|
|
MLDECL( mlapi_result, MLBytesToPut, ( MLINK mlp, longp_st leftp));
|
|
MLDECL( mlapi_result, MLEndPacket, ( MLINK mlp));
|
|
MLDECL( mlapi_result, MLFlush, ( MLINK mlp));
|
|
ML_END_EXTERN_C
|
|
|
|
|
|
#ifndef _MLTK_H
|
|
#define _MLTK_H
|
|
|
|
|
|
#define MLTKOLDINT 'I' /* 73 Ox49 01001001 */ /* integer leaf node */
|
|
#define MLTKOLDREAL 'R' /* 82 Ox52 01010010 */ /* real leaf node */
|
|
|
|
|
|
#define MLTKFUNC 'F' /* 70 Ox46 01000110 */ /* non-leaf node */
|
|
|
|
#define MLTKERROR (0) /* bad token */
|
|
#define MLTKERR (0) /* bad token */
|
|
|
|
/* text token bit patterns: 0010x01x --exactly 2 bits worth chosen to make things somewhat readable */
|
|
#define MLTK__IS_TEXT( tok) ( (tok & 0x00F6) == 0x0022)
|
|
|
|
#define MLTKSTR '"' /* 00100010 */
|
|
#define MLTKSYM '\043' /* 00100011 */ /* octal here as hash requires a trigraph */
|
|
|
|
#define MLTKREAL '*' /* 00101010 */
|
|
#define MLTKINT '+' /* 00101011 */
|
|
|
|
|
|
|
|
/* The following defines are for internal use only */
|
|
#define MLTKPCTEND ']' /* at end of top level expression */
|
|
#define MLTKAPCTEND '\n' /* at end of top level expression */
|
|
#define MLTKEND '\n'
|
|
#define MLTKAEND '\r'
|
|
#define MLTKSEND ','
|
|
|
|
#define MLTKCONT '\\'
|
|
#define MLTKELEN ' '
|
|
|
|
#define MLTKNULL '.'
|
|
#define MLTKOLDSYM 'Y' /* 89 0x59 01011001 */
|
|
#define MLTKOLDSTR 'S' /* 83 0x53 01010011 */
|
|
|
|
|
|
typedef unsigned long decoder_mask;
|
|
#define MLTKPACKED 'P' /* 80 0x50 01010000 */
|
|
#define MLTKARRAY 'A' /* 65 0x41 01000001 */
|
|
#define MLTKDIM 'D' /* 68 0x44 01000100 */
|
|
|
|
#define MLLENGTH_DECODER ((decoder_mask) 1<<16)
|
|
#define MLTKPACKED_DECODER ((decoder_mask) 1<<17)
|
|
#define MLTKARRAY_DECODER ((decoder_mask) 1<<18)
|
|
#define MLTKMODERNCHARS_DECODER ((decoder_mask) 1<<19)
|
|
#if 0
|
|
#define MLTKNULLSEQUENCE_DECODER ((decoder_mask) 1<<20)
|
|
#else
|
|
#define MLTKNULLSEQUENCE_DECODER ((decoder_mask) 0)
|
|
#endif
|
|
#define MLTKALL_DECODERS (MLLENGTH_DECODER | MLTKPACKED_DECODER | MLTKARRAY_DECODER | MLTKMODERNCHARS_DECODER | MLTKNULLSEQUENCE_DECODER)
|
|
|
|
#define MLTK_FIRSTUSER '\x30' /* user token */
|
|
#define MLTK_LASTUSER '\x3F'
|
|
|
|
|
|
|
|
#endif /* _MLTK_H */
|
|
|
|
/*************** Native C types interface ***************/
|
|
|
|
|
|
#ifndef _MLCGET_H
|
|
#define _MLCGET_H
|
|
|
|
|
|
|
|
#define MLGetReal MLGetDouble
|
|
|
|
#endif /* _MLCGET_H */
|
|
|
|
|
|
/* explicitly not protected by _MLCGET_H in case MLDECL is redefined for multiple inclusion */
|
|
|
|
ML_EXTERN_C
|
|
MLDECL( mlapi_result, MLGetBinaryNumber, ( MLINK mlp, voidp_ct np, long type));
|
|
MLDECL( mlapi_result, MLGetShortInteger, ( MLINK mlp, shortp_nt hp));
|
|
MLDECL( mlapi_result, MLGetInteger, ( MLINK mlp, intp_nt ip));
|
|
MLDECL( mlapi_result, MLGetLongInteger, ( MLINK mlp, longp_nt lp));
|
|
MLDECL( mlapi_result, MLGetFloat, ( MLINK mlp, floatp_nt fp));
|
|
MLDECL( mlapi_result, MLGetDouble, ( MLINK mlp, doublep_nt dp));
|
|
#if CC_SUPPORTS_LONG_DOUBLE
|
|
MLDECL( mlapi_result, MLGetLongDouble, ( MLINK mlp, extendedp_nt xp));
|
|
#endif
|
|
|
|
MLDECL( mlapi_result, MLGet16BitCharacters, ( MLINK mlp, longp_st chars_left, ushortp_ct buf, long_st cardof_buf, longp_st got));
|
|
MLDECL( mlapi_result, MLGet8BitCharacters, ( MLINK mlp, longp_st chars_left, ucharp_ct buf, long_st cardof_buf, longp_st got, long missing));
|
|
MLDECL( mlapi_result, MLGet7BitCharacters, ( MLINK mlp, longp_st chars_left, charp_ct buf, long_st cardof_buf, longp_st got));
|
|
|
|
MLDECL( mlapi_result, MLGetUnicodeString, ( MLINK mlp, kushortpp_ct sp, longp_st lenp));
|
|
MLDECL( mlapi_result, MLGetByteString, ( MLINK mlp, kucharpp_ct sp, longp_st lenp, long missing));
|
|
MLDECL( mlapi_result, MLGetString, ( MLINK mlp, kcharpp_ct sp));
|
|
#ifndef MLINTERFACE
|
|
/* syntax error */ )
|
|
#endif
|
|
#if MLINTERFACE > 1
|
|
MLDECL( mlapi_result, MLGetUnicodeString0, ( MLINK mlp, kushortpp_ct sp, longp_st lenp));
|
|
MLDECL( mlapi_result, MLGetByteString0, ( MLINK mlp, kucharpp_ct sp, longp_st lenp, long missing));
|
|
MLDECL( mlapi_result, MLGetString0, ( MLINK mlp, kcharpp_ct sp));
|
|
#endif
|
|
|
|
MLDECL( mlapi_result, MLGetUnicodeSymbol, ( MLINK mlp, kushortpp_ct sp, longp_st lenp));
|
|
MLDECL( mlapi_result, MLGetByteSymbol, ( MLINK mlp, kucharpp_ct sp, longp_st lenp, long missing));
|
|
MLDECL( mlapi_result, MLGetSymbol, ( MLINK mlp, kcharpp_ct sp));
|
|
|
|
MLDECL( void, MLDisownUnicodeString, ( MLINK mlp, kushortp_ct s, long_st len));
|
|
MLDECL( void, MLDisownByteString, ( MLINK mlp, kucharp_ct s, long_st len));
|
|
MLDECL( void, MLDisownString, ( MLINK mlp, kcharp_ct s));
|
|
|
|
MLDECL( void, MLDisownUnicodeSymbol, ( MLINK mlp, kushortp_ct s, long_st len));
|
|
MLDECL( void, MLDisownByteSymbol, ( MLINK mlp, kucharp_ct s, long_st len));
|
|
MLDECL( void, MLDisownSymbol, ( MLINK mlp, kcharp_ct s));
|
|
|
|
|
|
|
|
MLDECL( mlapi_result, MLCheckString, ( MLINK mlp, kcharp_ct name));
|
|
MLDECL( mlapi_result, MLCheckSymbol, ( MLINK mlp, kcharp_ct name));
|
|
MLDECL( mlapi_result, MLGetFunction, ( MLINK mlp, kcharpp_ct sp, longp_st countp));
|
|
MLDECL( mlapi_result, MLCheckFunction, ( MLINK mlp, kcharp_ct s, longp_st countp));
|
|
MLDECL( mlapi_result, MLCheckFunctionWithArgCount, ( MLINK mlp, kcharp_ct s, longp_st countp));
|
|
ML_END_EXTERN_C
|
|
|
|
|
|
#ifndef _MLCPUT_H
|
|
#define _MLCPUT_H
|
|
|
|
|
|
#define MLPutReal MLPutDouble
|
|
|
|
#endif /* _MLCPUT_H */
|
|
|
|
/* explicitly not protected by _MLCPUT_H in case MLDECL is redefined for multiple inclusion */
|
|
|
|
ML_EXTERN_C
|
|
MLDECL( mlapi_result, MLPutBinaryNumber, ( MLINK mlp, voidp_ct np, long type));
|
|
MLDECL( mlapi_result, MLPutShortInteger, ( MLINK mlp, int_nt h));
|
|
MLDECL( mlapi_result, MLPutInteger, ( MLINK mlp, int_nt i));
|
|
MLDECL( mlapi_result, MLPutLongInteger, ( MLINK mlp, long_nt l));
|
|
MLDECL( mlapi_result, MLPutFloat, ( MLINK mlp, double_nt f));
|
|
MLDECL( mlapi_result, MLPutDouble, ( MLINK mlp, double_nt d));
|
|
#if CC_SUPPORTS_LONG_DOUBLE
|
|
MLDECL( mlapi_result, MLPutLongDouble, ( MLINK mlp, extended_nt x));
|
|
#endif
|
|
|
|
MLDECL( mlapi_result, MLPut16BitCharacters, ( MLINK mlp, long_st chars_left, kushortp_ct codes, long_st ncodes));
|
|
MLDECL( mlapi_result, MLPut8BitCharacters, ( MLINK mlp, long_st chars_left, kucharp_ct bytes, long_st nbytes));
|
|
MLDECL( mlapi_result, MLPut7BitCount, ( MLINK mlp, long_st count, long_st size));
|
|
MLDECL( mlapi_result, MLPut7BitCharacters, ( MLINK mlp, long_st chars_left, kcharp_ct bytes, long_st nbytes, long_st nchars_now));
|
|
|
|
MLDECL( mlapi_result, MLPutUnicodeString, ( MLINK mlp, kushortp_ct s, long_st len));
|
|
MLDECL( mlapi_result, MLPutByteString, ( MLINK mlp, kucharp_ct s, long_st len));
|
|
MLDECL( mlapi_result, MLPutString, ( MLINK mlp, kcharp_ct s));
|
|
#ifndef MLINTERFACE
|
|
/* syntax error */ )
|
|
#endif
|
|
#if MLINTERFACE > 1
|
|
MLDECL( mlapi_result, MLPutRealUnicodeString0, ( MLINK mlp, ushortp_ct s));
|
|
MLDECL( mlapi_result, MLPutRealByteString0, ( MLINK mlp, ucharp_ct s));
|
|
#endif
|
|
|
|
MLDECL( mlapi_result, MLPutUnicodeSymbol, ( MLINK mlp, kushortp_ct s, long_st len));
|
|
MLDECL( mlapi_result, MLPutByteSymbol, ( MLINK mlp, kucharp_ct s, long_st len));
|
|
MLDECL( mlapi_result, MLPutSymbol, ( MLINK mlp, kcharp_ct s));
|
|
|
|
MLDECL( mlapi_result, MLPutFunction, ( MLINK mlp, kcharp_ct s, long_st argc));
|
|
|
|
|
|
MLDECL( mlapi_result, MLPutSize, ( MLINK mlp, long_st size));
|
|
MLDECL( mlapi_result, MLPutData, ( MLINK mlp, kcharp_ct buff, long_st len));
|
|
ML_END_EXTERN_C
|
|
|
|
|
|
|
|
#ifndef _MLSTRING_H
|
|
#define _MLSTRING_H
|
|
|
|
|
|
|
|
#define MAX_BYTES_PER_OLD_CHARACTER 3
|
|
#define MAX_BYTES_PER_NEW_CHARACTER 6
|
|
|
|
#define ML_MAX_BYTES_PER_CHARACTER MAX_BYTES_PER_NEW_CHARACTER
|
|
|
|
/* for source code compatibility with earlier versions of MathLink */
|
|
|
|
#if POWERMACINTOSH_MATHLINK
|
|
#pragma options align=mac68k
|
|
#endif
|
|
|
|
typedef struct {
|
|
kcharp_ct str;
|
|
kcharp_ct end;
|
|
} MLStringPosition;
|
|
|
|
#if POWERMACINTOSH_MATHLINK
|
|
#pragma options align=reset
|
|
#endif
|
|
|
|
typedef MLStringPosition FAR * MLStringPositionPointer;
|
|
|
|
#define MLStringFirstPos(s,pos) MLStringFirstPosFun( s, &(pos))
|
|
|
|
#define MLforString( s, pos) \
|
|
for( MLStringFirstPos(s,pos); MLStringCharacter( (pos).str, (pos).end) >= 0; MLNextCharacter(&(pos).str, (pos).end))
|
|
|
|
#define MLStringChar( pos) MLStringCharacter( (pos).str, (pos).end)
|
|
|
|
#define MLPutCharToString MLConvertCharacter
|
|
|
|
|
|
/* for internal use only */
|
|
|
|
#if POWERMACINTOSH_MATHLINK
|
|
#pragma options align=mac68k
|
|
#endif
|
|
|
|
typedef struct {
|
|
ucharp_ct cc;
|
|
int_ct mode;
|
|
int_ct more;
|
|
ucharp_ct head;
|
|
} MLOldStringPosition;
|
|
|
|
#if POWERMACINTOSH_MATHLINK
|
|
#pragma options align=reset
|
|
#endif
|
|
|
|
typedef MLOldStringPosition FAR * MLOldStringPositionPointer;
|
|
|
|
|
|
#define MLOldforString( s, pos) \
|
|
for ( MLOldStringFirstPos( s, pos); (pos).more; MLOldStringNextPos( pos))
|
|
|
|
#define MLOldStringChar(pos) \
|
|
( ((pos).mode <= 1) ? (uint_ct)(*(ucharp_ct)((pos).cc)) : MLOldStringCharFun( &pos) )
|
|
|
|
|
|
#define MLOldStringFirstPos(s,pos) MLOldStringFirstPosFun( s, &(pos))
|
|
|
|
#define MLOldStringNextPos(pos) ( \
|
|
((pos).mode == 0) \
|
|
? ((*(*(pos).cc ? ++(pos).cc : (pos).cc) ? 0 : ((pos).more = 0)), (pos).cc) \
|
|
: MLOldStringNextPosFun( &pos) )
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* _MLSTRING_H */
|
|
|
|
|
|
|
|
|
|
/* explicitly not protected by _MLXDATA_H in case MLDECL is redefined for multiple inclusion */
|
|
|
|
ML_EXTERN_C
|
|
/* assumes *startp aligned on char boundary, if n == -1, returns ~(char_count) */
|
|
MLDECL( long, MLCharacterOffset, ( kcharpp_ct startp, kcharp_ct end, long n));
|
|
MLDECL( long, MLStringCharacter, ( kcharp_ct start, kcharp_ct end));
|
|
MLDECL( long, MLNextCharacter, ( kcharpp_ct startp, kcharp_ct end));
|
|
#ifndef MLINTERFACE
|
|
/* syntax error */ )
|
|
#endif
|
|
#if MLINTERFACE > 1
|
|
MLDECL( long, MLNextCharacter0, ( kcharp_ct str, longp_ct indexp, long len));
|
|
#endif
|
|
|
|
MLDECL( long, MLConvertNewLine, ( charpp_ct sp));
|
|
MLDECL( long, MLConvertCharacter, ( ulong_ct ch, charpp_ct sp));
|
|
MLDECL( long, MLConvertByteString, ( ucharp_ct codes, long len, charpp_ct strp, charp_ct str_end));
|
|
MLDECL( long, MLConvertByteStringNL, ( ucharp_ct codes, long len, charpp_ct strp, charp_ct str_end, ulong_ct nl));
|
|
MLDECL( long, MLConvertUnicodeString, ( ushortp_ct codes, long len, charpp_ct strp, charp_ct str_end));
|
|
MLDECL( long, MLConvertUnicodeStringNL, ( ushortp_ct codes, long len, charpp_ct strp, charp_ct str_end, ulong_ct nl));
|
|
MLDECL( long, MLConvertDoubleByteString, ( ucharp_ct codes, long len, charpp_ct strp, charp_ct str_end));
|
|
MLDECL( long, MLConvertDoubleByteStringNL, ( ucharp_ct codes, long len, charpp_ct strp, charp_ct str_end, ulong_ct nl));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* for source code compatibility with earlier versions of MathLink */
|
|
MLDECL( kcharp_ct, MLStringFirstPosFun, ( kcharp_ct s, MLStringPositionPointer p));
|
|
|
|
/* for internal use only */
|
|
MLDECL( mlapi_result, MLOldPutCharToString, ( uint_ct ch, charpp_ct sp));
|
|
MLDECL( ucharp_ct, MLOldStringNextPosFun, ( MLOldStringPositionPointer p));
|
|
MLDECL( ucharp_ct, MLOldStringFirstPosFun, ( charp_ct s, MLOldStringPositionPointer p));
|
|
MLDECL( uint_ct, MLOldStringCharFun, ( MLOldStringPositionPointer p));
|
|
MLDECL( long, MLOldConvertByteString, ( ucharp_ct codes, long len, charpp_ct strp, charp_ct str_end));
|
|
MLDECL( long, MLOldConvertUnicodeString, ( ushortp_ct codes, long len, charpp_ct strp, charp_ct str_end));
|
|
|
|
ML_END_EXTERN_C
|
|
|
|
|
|
#ifndef _MLCAPUT_H
|
|
#define _MLCAPUT_H
|
|
|
|
#ifndef MLINTERFACE
|
|
/* syntax error */ )
|
|
#endif
|
|
|
|
#ifndef __array_meterp__
|
|
#define __array_meterp__
|
|
typedef struct array_meter FAR * array_meterp;
|
|
typedef array_meterp FAR * array_meterpp;
|
|
#endif
|
|
|
|
|
|
#define MLPutRealArray MLPutDoubleArray
|
|
|
|
#endif /* _MLCAPUT_H */
|
|
|
|
|
|
/* explicitly not protected by _MLCAPUT_H in case MLDECL is redefined for multiple inclusion */
|
|
|
|
/*bugcheck: bugcheck need FAR here */
|
|
ML_EXTERN_C
|
|
MLDECL( mlapi_result, MLPutArray, ( MLINK mlp, array_meterp meterp));
|
|
MLDECL( mlapi_result, MLPutBinaryNumberArrayData, ( MLINK mlp, array_meterp meterp, voidp_ct datap, long_st count, long type));
|
|
MLDECL( mlapi_result, MLPutByteArrayData, ( MLINK mlp, array_meterp meterp, ucharp_nt datap, long_st count));
|
|
MLDECL( mlapi_result, MLPutShortIntegerArrayData, ( MLINK mlp, array_meterp meterp, shortp_nt datap, long_st count));
|
|
MLDECL( mlapi_result, MLPutIntegerArrayData, ( MLINK mlp, array_meterp meterp, intp_nt datap, long_st count));
|
|
MLDECL( mlapi_result, MLPutLongIntegerArrayData, ( MLINK mlp, array_meterp meterp, longp_nt datap, long_st count));
|
|
MLDECL( mlapi_result, MLPutFloatArrayData, ( MLINK mlp, array_meterp meterp, floatp_nt datap, long_st count));
|
|
MLDECL( mlapi_result, MLPutDoubleArrayData, ( MLINK mlp, array_meterp meterp, doublep_nt datap, long_st count));
|
|
#if CC_SUPPORTS_LONG_DOUBLE
|
|
MLDECL( mlapi_result, MLPutLongDoubleArrayData, ( MLINK mlp, array_meterp meterp, extendedp_nt datap, long_st count));
|
|
#endif
|
|
|
|
MLDECL( mlapi_result, MLPutBinaryNumberArray, ( MLINK mlp, voidp_ct data, longp_st dimp, charpp_ct heads, long_st depth, long type));
|
|
MLDECL( mlapi_result, MLPutByteArray, ( MLINK mlp, ucharp_nt data, longp_st dims, charpp_ct heads, long_st depth));
|
|
MLDECL( mlapi_result, MLPutShortIntegerArray, ( MLINK mlp, shortp_nt data, longp_st dims, charpp_ct heads, long_st depth));
|
|
MLDECL( mlapi_result, MLPutIntegerArray, ( MLINK mlp, intp_nt data, longp_st dims, charpp_ct heads, long_st depth));
|
|
MLDECL( mlapi_result, MLPutLongIntegerArray, ( MLINK mlp, longp_nt data, longp_st dims, charpp_ct heads, long_st depth));
|
|
MLDECL( mlapi_result, MLPutDoubleArray, ( MLINK mlp, doublep_nt data, longp_st dims, charpp_ct heads, long_st depth));
|
|
MLDECL( mlapi_result, MLPutFloatArray, ( MLINK mlp, floatp_nt data, longp_st dims, charpp_ct heads, long_st depth));
|
|
#if CC_SUPPORTS_LONG_DOUBLE
|
|
MLDECL( mlapi_result, MLPutLongDoubleArray, ( MLINK mlp, extendedp_nt data, longp_st dims, charpp_ct heads, long_st depth));
|
|
#endif
|
|
|
|
MLDECL( mlapi_result, MLPutBinaryNumberList, ( MLINK mlp, voidp_ct data, long_st count, long type));
|
|
MLDECL( mlapi_result, MLPutIntegerList, ( MLINK mlp, intp_nt data, long_st count));
|
|
MLDECL( mlapi_result, MLPutRealList, ( MLINK mlp, doublep_nt data, long_st count));
|
|
|
|
#if MLINTERFACE > 1
|
|
MLDECL( mlapi_result, MLPutArrayType0, ( MLINK mlp, MLINK heads, long depth, array_meterpp meterpp));
|
|
MLDECL( mlapi_result, MLPutBinaryNumberArrayData0, ( MLINK mlp, MLINK heads, array_meterp meterp, voidp_ct datap, long_st count, long type));
|
|
MLDECL( mlapi_result, MLReleasePutArrayState0, ( MLINK mlp, MLINK heads, array_meterp meterp));
|
|
MLDECL( mlapi_result, MLPutArrayLeaves0, ( MLINK mlp, MLINK heads, array_meterp meterp, MLINK leaves, long_st count));
|
|
#endif
|
|
|
|
ML_END_EXTERN_C
|
|
|
|
|
|
#ifndef _MLCAGET_H
|
|
#define _MLCAGET_H
|
|
|
|
#ifndef MLINTERFACE
|
|
/* syntax error */ )
|
|
#endif
|
|
|
|
#ifndef __array_meterp__
|
|
#define __array_meterp__
|
|
typedef struct array_meter FAR * array_meterp;
|
|
typedef array_meterp FAR * array_meterpp;
|
|
#endif
|
|
|
|
|
|
#define MLGetRealArray MLGetDoubleArray
|
|
#define MLDisownRealArray MLDisownDoubleArray
|
|
|
|
#endif /* _MLCAGET_H */
|
|
|
|
|
|
|
|
/* explicitly not protected by _MLCAGET_H in case MLDECL is redefined for multiple inclusion */
|
|
|
|
ML_EXTERN_C
|
|
MLDECL( mlapi_result, MLGetBinaryNumberList, ( MLINK mlp, voidpp_ct datap, longp_st countp, long type));
|
|
MLDECL( mlapi_result, MLGetIntegerList, ( MLINK mlp, intpp_nt datap, longp_st countp));
|
|
MLDECL( mlapi_result, MLGetRealList, ( MLINK mlp, doublepp_nt datap, longp_st countp));
|
|
|
|
MLDECL( void, MLDisownBinaryNumberList, ( MLINK mlp, voidp_ct data, long_st count, long type));
|
|
MLDECL( void, MLDisownIntegerList, ( MLINK mlp, intp_nt data, long_st count));
|
|
MLDECL( void, MLDisownRealList, ( MLINK mlp, doublep_nt data, long_st count));
|
|
|
|
MLDECL( mlapi_token, MLGetArrayType, ( MLINK mlp, array_meterp meterp));
|
|
MLDECL( mlapi_result, MLGetArrayDimensions, ( MLINK mlp, array_meterp meterp));
|
|
|
|
MLDECL( mlapi_result, MLGetBinaryNumberArrayData, ( MLINK mlp, array_meterp meterp, voidp_ct datap, long_st count, long type));
|
|
MLDECL( mlapi_result, MLGetByteArrayData, ( MLINK mlp, array_meterp meterp, ucharp_nt datap, long_st count));
|
|
MLDECL( mlapi_result, MLGetShortIntegerArrayData, ( MLINK mlp, array_meterp meterp, shortp_nt datap, long_st count));
|
|
MLDECL( mlapi_result, MLGetIntegerArrayData, ( MLINK mlp, array_meterp meterp, intp_nt datap, long_st count));
|
|
MLDECL( mlapi_result, MLGetLongIntegerArrayData, ( MLINK mlp, array_meterp meterp, longp_nt datap, long_st count));
|
|
MLDECL( mlapi_result, MLGetFloatArrayData, ( MLINK mlp, array_meterp meterp, floatp_nt datap, long_st count));
|
|
MLDECL( mlapi_result, MLGetDoubleArrayData, ( MLINK mlp, array_meterp meterp, doublep_nt datap, long_st count));
|
|
#if CC_SUPPORTS_LONG_DOUBLE
|
|
MLDECL( mlapi_result, MLGetLongDoubleArrayData, ( MLINK mlp, array_meterp meterp, extendedp_nt datap, long_st count));
|
|
#endif
|
|
|
|
#if MLINTERFACE > 1
|
|
MLDECL( mlapi_result, MLGetArrayType0, ( MLINK mlp, MLINK heads, array_meterpp meterpp, longp_st depthp, mlapi__tokenp leaf_tokp));
|
|
MLDECL( mlapi_result, MLGetBinaryNumberArrayData0, ( MLINK mlp, MLINK heads, array_meterp meterp, voidp_ct datap, longp_st countp, long type));
|
|
MLDECL( void, MLReleaseGetArrayState0, ( MLINK mlp, MLINK heads, array_meterp meterp));
|
|
|
|
MLDECL( mlapi_result, MLGetBinaryNumberArray0, ( MLINK mlp, voidpp_ct datap, longpp_st dimpp, charppp_ct headsp, longp_st depthp, long type, mlapi__tokenp leaf_tokp));
|
|
#endif
|
|
MLDECL( mlapi_result, MLGetBinaryNumberArray, ( MLINK mlp, voidpp_ct datap, longpp_st dimpp, charppp_ct headsp, longp_st depthp, long type));
|
|
MLDECL( mlapi_result, MLGetByteArray, ( MLINK mlp, ucharpp_nt datap, longpp_st dimsp, charppp_ct headsp, longp_st depthp));
|
|
MLDECL( mlapi_result, MLGetShortIntegerArray, ( MLINK mlp, shortpp_nt datap, longpp_st dimsp, charppp_ct headsp, longp_st depthp));
|
|
MLDECL( mlapi_result, MLGetIntegerArray, ( MLINK mlp, intpp_nt datap, longpp_st dimsp, charppp_ct headsp, longp_st depthp));
|
|
MLDECL( mlapi_result, MLGetLongIntegerArray, ( MLINK mlp, longpp_nt datap, longpp_st dimsp, charppp_ct headsp, longp_st depthp));
|
|
MLDECL( mlapi_result, MLGetDoubleArray, ( MLINK mlp, doublepp_nt datap, longpp_st dimsp, charppp_ct headsp, longp_st depthp));
|
|
MLDECL( mlapi_result, MLGetFloatArray, ( MLINK mlp, floatpp_nt datap, longpp_st dimsp, charppp_ct headsp, longp_st depthp));
|
|
#if CC_SUPPORTS_LONG_DOUBLE
|
|
MLDECL( mlapi_result, MLGetLongDoubleArray, ( MLINK mlp, extendedpp_nt datap, longpp_st dimsp, charppp_ct headsp, longp_st depthp));
|
|
#endif
|
|
|
|
MLDECL( void, MLDisownBinaryNumberArray, ( MLINK mlp, voidp_ct data, longp_st dimp, charpp_ct heads, long_st len, long type));
|
|
MLDECL( void, MLDisownByteArray, ( MLINK mlp, ucharp_nt data, longp_st dims, charpp_ct heads, long_st depth));
|
|
MLDECL( void, MLDisownShortIntegerArray, ( MLINK mlp, shortp_nt data, longp_st dims, charpp_ct heads, long_st depth));
|
|
MLDECL( void, MLDisownIntegerArray, ( MLINK mlp, intp_nt data, longp_st dims, charpp_ct heads, long_st depth));
|
|
MLDECL( void, MLDisownLongIntegerArray, ( MLINK mlp, longp_nt data, longp_st dims, charpp_ct heads, long_st depth));
|
|
MLDECL( void, MLDisownFloatArray, ( MLINK mlp, floatp_nt data, longp_st dims, charpp_ct heads, long_st depth));
|
|
MLDECL( void, MLDisownDoubleArray, ( MLINK mlp, doublep_nt data, longp_st dims, charpp_ct heads, long_st depth));
|
|
#if CC_SUPPORTS_LONG_DOUBLE
|
|
MLDECL( void, MLDisownLongDoubleArray, ( MLINK mlp, extendedp_nt data, longp_st dims, charpp_ct heads, long_st depth));
|
|
#endif
|
|
ML_END_EXTERN_C
|
|
|
|
|
|
/*************** seeking, transfering and synchronization ***************/
|
|
|
|
#ifndef _MLMARK_H
|
|
#define _MLMARK_H
|
|
|
|
|
|
#endif /* _MLMARK_H */
|
|
|
|
/* explicitly not protected by _MLMARK_H in case MLDECL is redefined for multiple inclusion */
|
|
|
|
ML_EXTERN_C
|
|
MLDECL( MLINKMark, MLCreateMark, ( MLINK mlp));
|
|
MLDECL( MLINKMark, MLSeekToMark, ( MLINK mlp, MLINKMark mark, long index));
|
|
MLDECL( MLINKMark, MLSeekMark, ( MLINK mlp, MLINKMark mark, long index));
|
|
MLDECL( void, MLDestroyMark, ( MLINK mlp, MLINKMark mark));
|
|
ML_END_EXTERN_C
|
|
|
|
|
|
#ifndef _MLXFER_H
|
|
#define _MLXFER_H
|
|
|
|
|
|
#endif /* _MLXFER_H */
|
|
|
|
/* explicitly not protected by _MLXFER_H in case MLDECL is redefined for multiple inclusion */
|
|
|
|
ML_EXTERN_C
|
|
MLDECL( mlapi_result, MLTransferExpression, ( MLINK dmlp, MLINK smlp));
|
|
MLDECL( mlapi_result, MLTransferToEndOfLoopbackLink, ( MLINK dmlp, MLINK smlp));
|
|
#ifndef MLINTERFACE
|
|
/* syntax error */ )
|
|
#endif
|
|
#if MLINTERFACE > 1
|
|
MLDECL( mlapi_result, MLTransfer0, ( MLINK dmlp, MLINK smlp, ulong_ct sequence_no));
|
|
#endif
|
|
ML_END_EXTERN_C
|
|
|
|
|
|
#ifndef _MLSYNC_H
|
|
#define _MLSYNC_H
|
|
|
|
|
|
/* export mls__wait and mls__align(mlsp) */
|
|
|
|
#endif /* _MLSYNC_H */
|
|
|
|
/* explicitly not protected by _MLSYNC_H in case MLDECL is redefined for multiple inclusion */
|
|
|
|
ML_EXTERN_C
|
|
/* in response to a reset message */
|
|
MLDECL( mlapi_result, MLForwardReset, ( MLINK mlp, ulong_ct marker));
|
|
MLDECL( mlapi_result, MLAlign, ( MLINK lmlp, MLINK rmlp));
|
|
ML_END_EXTERN_C
|
|
|
|
/*************************************************************/
|
|
|
|
|
|
#ifndef _MLPKT_H
|
|
#define _MLPKT_H
|
|
|
|
/*************** Mathematica packet interface ***************/
|
|
|
|
/* MLNextPacket returns one of... */
|
|
|
|
|
|
/* edit here and in mlpktstr.h */
|
|
|
|
#ifndef _MLPKTNO_H
|
|
#define _MLPKTNO_H
|
|
|
|
#define ILLEGALPKT 0
|
|
|
|
#define CALLPKT 7
|
|
#define EVALUATEPKT 13
|
|
#define RETURNPKT 3
|
|
|
|
#define INPUTNAMEPKT 8
|
|
#define ENTERTEXTPKT 14
|
|
#define ENTEREXPRPKT 15
|
|
#define OUTPUTNAMEPKT 9
|
|
#define RETURNTEXTPKT 4
|
|
#define RETURNEXPRPKT 16
|
|
|
|
#define DISPLAYPKT 11
|
|
#define DISPLAYENDPKT 12
|
|
|
|
#define MESSAGEPKT 5
|
|
#define TEXTPKT 2
|
|
|
|
#define INPUTPKT 1
|
|
#define INPUTSTRPKT 21
|
|
#define MENUPKT 6
|
|
#define SYNTAXPKT 10
|
|
|
|
#define SUSPENDPKT 17
|
|
#define RESUMEPKT 18
|
|
|
|
#define BEGINDLGPKT 19
|
|
#define ENDDLGPKT 20
|
|
|
|
#define FIRSTUSERPKT 128
|
|
#define LASTUSERPKT 255
|
|
|
|
|
|
#endif /* _MLPKTNO_H */
|
|
|
|
#endif /* _MLPKT_H */
|
|
|
|
/* explicitly not protected by _MLPKT_H in case MLDECL is redefined for multiple inclusion */
|
|
|
|
ML_EXTERN_C
|
|
MLDECL( mlapi_packet, MLNextPacket, ( MLINK mlp));
|
|
ML_END_EXTERN_C
|
|
|
|
|
|
#ifndef _MLALERT_H
|
|
#define _MLALERT_H
|
|
|
|
|
|
|
|
ML_EXTERN_C
|
|
/*************** User interaction--for internal use only ***************/
|
|
typedef long mldlg_result;
|
|
|
|
MLDPROC( mldlg_result, MLAlertProcPtr, ( MLEnvironment env, kcharp_ct message));
|
|
MLDPROC( mldlg_result, MLRequestProcPtr, ( MLEnvironment env, kcharp_ct prompt, charp_ct response, long sizeof_response));
|
|
MLDPROC( mldlg_result, MLConfirmProcPtr, ( MLEnvironment env, kcharp_ct question, mldlg_result default_answer));
|
|
MLDPROC( mldlg_result, MLRequestArgvProcPtr, ( MLEnvironment env, charpp_ct argv, long cardof_argv, charp_ct buf, long sizeof_buf));
|
|
MLDPROC( mldlg_result, MLRequestToInteractProcPtr, ( MLEnvironment env, mldlg_result wait_for_permission));
|
|
MLDPROC( mldlg_result, MLDialogProcPtr, ( MLEnvironment env));
|
|
|
|
#if MACINTOSH_MATHLINK
|
|
enum {
|
|
uppMLAlertFunctionProcInfo = kPascalStackBased
|
|
| RESULT_SIZE(SIZE_CODE(sizeof(mldlg_result)))
|
|
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(MLEnvironment)))
|
|
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(kcharp_ct))),
|
|
uppMLRequestFunctionProcInfo = kPascalStackBased
|
|
| RESULT_SIZE(SIZE_CODE(sizeof(mldlg_result)))
|
|
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(MLEnvironment)))
|
|
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(kcharp_ct)))
|
|
| STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(charp_ct)))
|
|
| STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(long))),
|
|
uppMLConfirmFunctionProcInfo = kPascalStackBased
|
|
| RESULT_SIZE(SIZE_CODE(sizeof(mldlg_result)))
|
|
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(MLEnvironment)))
|
|
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(kcharp_ct)))
|
|
| STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(mldlg_result))),
|
|
uppMLRequestArgvFunctionProcInfo = kPascalStackBased
|
|
| RESULT_SIZE(SIZE_CODE(sizeof(mldlg_result)))
|
|
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(MLEnvironment)))
|
|
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(charpp_ct)))
|
|
| STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long)))
|
|
| STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(charp_ct)))
|
|
| STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(long))),
|
|
uppMLRequestToInteractFunctionProcInfo = kPascalStackBased
|
|
| RESULT_SIZE(SIZE_CODE(sizeof(mldlg_result)))
|
|
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(MLEnvironment)))
|
|
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(mldlg_result)))
|
|
};
|
|
#endif /* MACINTOSH_MATHLINK */
|
|
|
|
|
|
#if MACINTOSH_MATHLINK
|
|
#if GENERATINGCFM
|
|
typedef UniversalProcPtr MLDialogUPP;
|
|
typedef UniversalProcPtr MLAlertUPP;
|
|
typedef UniversalProcPtr MLRequestUPP;
|
|
typedef UniversalProcPtr MLConfirmUPP;
|
|
typedef UniversalProcPtr MLRequestArgvUPP;
|
|
typedef UniversalProcPtr MLRequestToInteractUPP;
|
|
# define NewMLAlertProc(userRoutine) \
|
|
NewRoutineDescriptor((ProcPtr)MLAlertCast((userRoutine)), \
|
|
uppMLAlertFunctionProcInfo, GetCurrentArchitecture())
|
|
# define NewMLRequestProc(userRoutine) \
|
|
NewRoutineDescriptor((ProcPtr)MLRequestCast((userRoutine)), \
|
|
uppMLRequestFunctionProcInfo, GetCurrentArchitecture())
|
|
# define NewMLConfirmProc(userRoutine) \
|
|
NewRoutineDescriptor((ProcPtr)MLConfirmCast((userRoutine)), \
|
|
uppMLConfirmFunctionProcInfo, GetCurrentArchitecture())
|
|
# define NewMLRequestArgvProc(userRoutine) \
|
|
NewRoutineDescriptor((ProcPtr)MLRequestArgvCast((userRoutine)), \
|
|
uppMLRequestArgvFunctionProcInfo, GetCurrentArchitecture())
|
|
# define NewMLRequestToInteractProc(userRoutine) \
|
|
NewRoutineDescriptor((ProcPtr)MLRequestToInteractCast((userRoutine)), \
|
|
uppMLRequestToInteractFunctionProcInfo, GetCurrentArchitecture())
|
|
#else /* GENERATINGCFM */
|
|
typedef MLDialogProcPtr MLDialogUPP;
|
|
typedef MLAlertProcPtr MLAlertUPP;
|
|
typedef MLRequestProcPtr MLRequestUPP;
|
|
typedef MLConfirmProcPtr MLConfirmUPP;
|
|
typedef MLRequestArgvProcPtr MLRequestArgvUPP;
|
|
typedef MLRequestToInteractProcPtr MLRequestToInteractUPP;
|
|
# define NewMLAlertProc(userRoutine) MLAlertCast((userRoutine))
|
|
# define NewMLRequestProc(userRoutine) MLRequestCast((userRoutine))
|
|
# define NewMLConfirmProc(userRoutine) MLConfirmCast((userRoutine))
|
|
# define NewMLRequestArgvProc(userRoutine) MLRequestArgvCast((userRoutine))
|
|
# define NewMLRequestToInteractProc(userRoutine) MLRequestToInteractCast((userRoutine))
|
|
#endif /* GENERATINGCFM */
|
|
#else /* !MACINTOSH_MATHLINK */
|
|
typedef MLDialogProcPtr MLDialogUPP;
|
|
typedef MLAlertProcPtr MLAlertUPP;
|
|
typedef MLRequestProcPtr MLRequestUPP;
|
|
typedef MLConfirmProcPtr MLConfirmUPP;
|
|
typedef MLRequestArgvProcPtr MLRequestArgvUPP;
|
|
typedef MLRequestToInteractProcPtr MLRequestToInteractUPP;
|
|
# define NewMLAlertProc(userRoutine) MLAlertCast((userRoutine))
|
|
# define NewMLRequestProc(userRoutine) MLRequestCast((userRoutine))
|
|
# define NewMLConfirmProc(userRoutine) MLConfirmCast((userRoutine))
|
|
# define NewMLRequestArgvProc(userRoutine) MLRequestArgvCast((userRoutine))
|
|
# define NewMLRequestToInteractProc(userRoutine) MLRequestToInteractCast((userRoutine))
|
|
#endif /* MACINTOSH_MATHLINK */
|
|
|
|
typedef MLAlertUPP MLAlertFunctionType;
|
|
typedef MLRequestUPP MLRequestFunctionType;
|
|
typedef MLConfirmUPP MLConfirmFunctionType;
|
|
typedef MLRequestArgvUPP MLRequestArgvFunctionType;
|
|
typedef MLRequestToInteractUPP MLRequestToInteractFunctionType;
|
|
typedef MLDialogUPP MLDialogFunctionType;
|
|
|
|
|
|
|
|
/*
|
|
MLDDECL( mldlg_result, alert_user, ( MLEnvironment env, kcharp_ct message));
|
|
MLDDEFN( mldlg_result, alert_user, ( MLEnvironment env, kcharp_ct message))
|
|
{
|
|
fprintf( stderr, "%s\n", message);
|
|
}
|
|
|
|
|
|
...
|
|
MLDialogFunctionType f = NewMLAlertProc(alert_user);
|
|
MLSetDialogFunction( ep, MLAlertFunction, f);
|
|
...
|
|
or
|
|
...
|
|
MLSetDialogFunction( ep, MLAlertFunction, NewMLAlertProc(alert_user));
|
|
...
|
|
*/
|
|
|
|
|
|
|
|
enum { MLAlertFunction = 1, MLRequestFunction, MLConfirmFunction,
|
|
MLRequestArgvFunction, MLRequestToInteractFunction };
|
|
|
|
|
|
#define ML_DEFAULT_DIALOG ( (MLDialogFunctionType) 1)
|
|
#define ML_IGNORE_DIALOG ( (MLDialogFunctionType) 0)
|
|
#define ML_SUPPRESS_DIALOG ML_IGNORE_DIALOG
|
|
|
|
|
|
|
|
|
|
#if MACINTOSH_MATHLINK
|
|
|
|
#ifndef _MLMAC_H
|
|
#define _MLMAC_H
|
|
|
|
|
|
ML_EXTERN_C
|
|
|
|
MLDDECL( mldlg_result, MLPermit_application, ( MLEnvironment env, mldlg_result wait_for_permission));
|
|
|
|
MLDDECL( mldlg_result, MLAlert_application, ( MLEnvironment env, kcharp_ct message));
|
|
MLDDECL( mldlg_result, MLAlert_tool, ( MLEnvironment env, kcharp_ct message));
|
|
MLDDECL( mldlg_result, MLAlert_siow, ( MLEnvironment env, kcharp_ct message));
|
|
MLDDECL( mldlg_result, MLAlert_console, ( MLEnvironment env, kcharp_ct message));
|
|
|
|
MLDDECL( mldlg_result, MLRequest_application, ( MLEnvironment env, kcharp_ct prompt, charp_ct response, long sizeof_response));
|
|
MLDDECL( mldlg_result, MLRequest_console, ( MLEnvironment env, kcharp_ct prompt, charp_ct response, long sizeof_response));
|
|
MLDDECL( mldlg_result, MLRequest_tool, ( MLEnvironment env, kcharp_ct prompt, charp_ct response, long sizeof_response));
|
|
MLDDECL( mldlg_result, MLRequest_siow, ( MLEnvironment env, kcharp_ct prompt, charp_ct response, long sizeof_response));
|
|
|
|
MLDDECL( mldlg_result, MLConfirm_application, ( MLEnvironment env, kcharp_ct question, mldlg_result default_answer));
|
|
MLDDECL( mldlg_result, MLConfirm_tool, ( MLEnvironment env, kcharp_ct question, mldlg_result default_answer));
|
|
MLDDECL( mldlg_result, MLConfirm_siow, ( MLEnvironment env, kcharp_ct question, mldlg_result default_answer));
|
|
MLDDECL( mldlg_result, MLConfirm_console, ( MLEnvironment env, kcharp_ct question, mldlg_result default_answer));
|
|
|
|
ML_END_EXTERN_C
|
|
|
|
#endif /* _MLMAC_H */
|
|
#define MLALERT MLAlert_application
|
|
#define MLREQUEST MLRequest_application
|
|
#define MLCONFIRM MLConfirm_application
|
|
#define MLPERMIT MLPermit_application
|
|
#define MLREQUESTARGV default_request_argv
|
|
#endif
|
|
|
|
#if WINDOWS_MATHLINK
|
|
|
|
#ifndef _MLWIN_H
|
|
#define _MLWIN_H
|
|
|
|
|
|
|
|
ML_EXTERN_C
|
|
MLDDECL( mldlg_result, MLAlert_win, ( MLEnvironment ep, kcharp_ct alertstr));
|
|
MLDDECL( mldlg_result, MLRequest_win, ( MLEnvironment ep, kcharp_ct prompt, charp_ct response, long n));
|
|
MLDDECL( mldlg_result, MLConfirm_win, ( MLEnvironment ep, kcharp_ct okcancelquest, mldlg_result default_answer));
|
|
MLDDECL( mldlg_result, MLPermit_win, ( MLEnvironment ep, mldlg_result wait));
|
|
ML_END_EXTERN_C
|
|
|
|
/* edit here and in mlwin.rc -- in both places because of command-line length limitations in dos */
|
|
#define DLG_LINKNAME 101
|
|
#define DLG_TEXT 102
|
|
#define RIDOK 1
|
|
#define RIDCANCEL 104
|
|
|
|
#endif /* _MLWIN_H */
|
|
#define MLALERT MLAlert_win
|
|
#define MLREQUEST MLRequest_win
|
|
#define MLCONFIRM MLConfirm_win
|
|
#define MLPERMIT MLPermit_win
|
|
#define MLREQUESTARGV default_request_argv
|
|
#endif
|
|
|
|
#if UNIX_MATHLINK
|
|
#if DARWIN_MATHLINK && defined (__CONDITIONALMACROS__)
|
|
|
|
#ifndef _MLDARWIN_H
|
|
#define _MLDARWIN_H
|
|
|
|
|
|
ML_EXTERN_C
|
|
|
|
MLDDECL( mldlg_result, MLAlert_darwin, ( MLEnvironment env, kcharp_ct message));
|
|
MLDDECL( mldlg_result, MLRequest_darwin, ( MLEnvironment env, kcharp_ct prompt, charp_ct response, long sizeof_response));
|
|
MLDDECL( mldlg_result, MLConfirm_darwin, ( MLEnvironment env, kcharp_ct question, mldlg_result default_answer));
|
|
MLDDECL( mldlg_result, MLPermit_darwin, ( MLEnvironment env, mldlg_result wait_for_permission));
|
|
MLDDEFN( mldlg_result, MLDontPermit_darwin, ( MLEnvironment ep, mldlg_result wait_for_permission));
|
|
|
|
ML_END_EXTERN_C
|
|
|
|
#endif /* _MLDARWIN_H */
|
|
#define MLALERT MLAlert_darwin
|
|
#define MLREQUEST MLRequest_darwin
|
|
#define MLCONFIRM MLConfirm_darwin
|
|
#define MLPERMIT MLPermit_darwin
|
|
#define MLREQUESTARGV default_request_argv
|
|
#else /* !(DARWIN_MATHLINK && defined (__CONDITIONALMACROS__)) */
|
|
|
|
#ifndef _MLUNIX_H
|
|
#define _MLUNIX_H
|
|
|
|
|
|
ML_EXTERN_C
|
|
|
|
MLDDECL( mldlg_result, MLAlert_unix, ( MLEnvironment env, kcharp_ct message));
|
|
MLDDECL( mldlg_result, MLRequest_unix, ( MLEnvironment env, kcharp_ct prompt, charp_ct response, long sizeof_response));
|
|
MLDDECL( mldlg_result, MLConfirm_unix, ( MLEnvironment env, kcharp_ct question, mldlg_result default_answer));
|
|
MLDDECL( mldlg_result, MLPermit_unix, ( MLEnvironment env, mldlg_result wait_for_permission));
|
|
|
|
ML_END_EXTERN_C
|
|
|
|
#endif /* _MLUNIX_H */
|
|
#define MLALERT MLAlert_unix
|
|
#define MLREQUEST MLRequest_unix
|
|
#define MLCONFIRM MLConfirm_unix
|
|
#define MLPERMIT MLPermit_unix
|
|
#define MLREQUESTARGV default_request_argv
|
|
#endif /* DARWIN_MATHLINK && defined (__CONDITIONALMACROS__) */
|
|
#endif
|
|
|
|
#if OS2_MATHLINK
|
|
|
|
#ifndef _MLOS2_H
|
|
#define _MLOS2_H
|
|
|
|
|
|
|
|
ML_EXTERN_C
|
|
MLDDECL( mldlg_result, MLAlert_os2, ( MLEnvironment ep, kcharp_ct alertstr));
|
|
MLDDECL( mldlg_result, MLRequest_os2, ( MLEnvironment ep, kcharp_ct prompt, charp_ct response, long n));
|
|
MLDDECL( mldlg_result, MLConfirm_os2, ( MLEnvironment ep, kcharp_ct okcancelquest, mldlg_result default_answer));
|
|
MLDDECL( mldlg_result, MLPermit_os2, ( MLEnvironment ep, mldlg_result wait));
|
|
ML_END_EXTERN_C
|
|
|
|
#endif /* _MLOS2_H */
|
|
#define MLALERT MLAlert_os2
|
|
#define MLREQUEST MLRequest_os2
|
|
#define MLCONFIRM MLConfirm_os2
|
|
#define MLPERMIT MLPermit_os2
|
|
#define MLREQUESTARGV default_request_argv
|
|
#endif
|
|
|
|
MLDDECL( mldlg_result, default_request_argv, ( MLEnvironment ep, charpp_ct argv, long len, charp_ct buff, long size));
|
|
ML_END_EXTERN_C
|
|
|
|
#endif /* _MLALERT_H */
|
|
|
|
|
|
/* explicitly not protected by _MLXDATA_H in case MLDECL is redefined for multiple inclusion */
|
|
ML_EXTERN_C
|
|
MLDECL( mldlg_result, MLAlert, ( MLEnvironment env, kcharp_ct message));
|
|
MLDECL( mldlg_result, MLRequest, ( MLEnvironment env, kcharp_ct prompt, charp_ct response, long sizeof_response)); /* initialize response with default*/
|
|
MLDECL( mldlg_result, MLConfirm, ( MLEnvironment env, kcharp_ct question, mldlg_result default_answer));
|
|
MLDECL( mldlg_result, MLRequestArgv, ( MLEnvironment env, charpp_ct argv, long cardof_argv, charp_ct buff, long size));
|
|
MLDECL( mldlg_result, MLRequestToInteract, ( MLEnvironment env, mldlg_result wait_for_permission));
|
|
MLDECL( mlapi_result, MLSetDialogFunction, ( MLEnvironment env, long funcnum, MLDialogFunctionType func));
|
|
|
|
/* just some type-safe casts */
|
|
MLDECL( MLDialogProcPtr, MLAlertCast, ( MLAlertProcPtr f));
|
|
MLDECL( MLDialogProcPtr, MLRequestCast, ( MLRequestProcPtr f));
|
|
MLDECL( MLDialogProcPtr, MLConfirmCast, ( MLConfirmProcPtr f));
|
|
MLDECL( MLDialogProcPtr, MLRequestArgvCast, ( MLRequestArgvProcPtr f));
|
|
MLDECL( MLDialogProcPtr, MLRequestToInteractCast, ( MLRequestToInteractProcPtr f));
|
|
ML_END_EXTERN_C
|
|
|
|
/*************************************************************/
|
|
|
|
#ifdef __CFM68K__
|
|
#pragma import off
|
|
#endif
|
|
|
|
|
|
#ifndef _MLTM_H
|
|
#define _MLTM_H
|
|
|
|
|
|
/*************** Template interface ***************/
|
|
|
|
/* The following are useful only when using template files as
|
|
* their definitions are produced by mprep.
|
|
*/
|
|
|
|
extern MLINK stdlink;
|
|
extern MLEnvironment stdenv;
|
|
extern MLYieldFunctionObject stdyielder;
|
|
extern MLMessageHandlerObject stdhandler;
|
|
extern int MLMain P((int, charpp_ct)); /* pass in argc and argv */
|
|
extern int MLMainString P(( charp_ct commandline));
|
|
extern int MLMainArgv P(( char** argv, char** argv_end)); /* note not FAR pointers */
|
|
|
|
extern int MLInstall P((MLINK));
|
|
extern mlapi_packet MLAnswer P((MLINK));
|
|
extern int MLDoCallPacket P((MLINK));
|
|
extern int MLEvaluate P(( MLINK, charp_ct));
|
|
extern int MLEvaluateString P(( MLINK, charp_ct));
|
|
MLMDECL( void, MLDefaultHandler, ( MLINK, unsigned long, unsigned long));
|
|
MLYDECL( devyield_result, MLDefaultYielder, ( MLINK, MLYieldParameters));
|
|
|
|
#if WINDOWS_MATHLINK
|
|
extern HWND MLInitializeIcon P(( HINSTANCE hinstCurrent, int nCmdShow));
|
|
extern HANDLE MLInstance;
|
|
extern HWND MLIconWindow;
|
|
#endif
|
|
extern int MLAbort, MLDone;
|
|
extern long MLSpecialCharacter;
|
|
|
|
#endif /* _MLTM_H */
|
|
|
|
|
|
|
|
#endif /* _MATHLINK_H */
|