packages icon
 /*************************************************************************

         Copyright 1986 through 1996 by Wolfram Research Inc.
         All rights reserved

 $Id: mathlink.h,v 1.6 1996/07/12 04:27:09 shawn Exp $

 *************************************************************************/

 #ifndef _MATHLINK_H #define _MATHLINK_H

 #if __BORLANDC__ && ! __BCPLUSPLUS__ #pragma warn -stu #endif

 #ifndef MLVERSION #       define MLVERSION 3 #endif


 /* The current revision number.
  * Incremented every time a change is made to the source  and  MathLink  is
 rebuilt and distributed.
  * (Bug fixes or performance improvements increment _only_ this number.)
  * Compiled into client applications and the MathLink shared library.
  */ #define MLREVISION 5


 /* The oldest library implementation that can be used identically in  place
 of this one by clients that link with this one.
  * synchronized to MLREVISION when when existing functions change  behavior
 or new functions are added.
  * copied into app when the app is built
  */ #define MLAPIREVISION 1


 /* The oldest clients that this library still supports.
  * synchronized to MLREVISION when existing functions change behavior or go
 away.
  * copied into the MathLink shared library and used at runtime-bind time.
  */ #define MLOLDDEFINITION 1


 /* The oldest revision whose API is still supported by this revision.
  * If MLOLDREVISION < MLAPIREVISION, the client app must be  aware  of  the
 differences
  */ #define MLOLDREVISION 1





 #if 0  MLParameters  s;  MLNewParameters(  s,  MLREVISION,  MLAPIREVISION);
 MLSetAllocParameter( s, allocator, deallocator); MLIntialize(s); #endif

 #ifndef ML_EXTERN_C

 #if  defined(__cplusplus)   #       define   ML_EXTERN_C   extern   "C"   {
 #       define   ML_END_EXTERN_C   }   #else   #       define   ML_EXTERN_C
 #       define ML_END_EXTERN_C #endif

 #endif



 #if ! MACINTOSH_MATHLINK && ! WINDOWS_MATHLINK  &&  !  UNIX_MATHLINK  &&  !
 OS2_MATHLINK #       define UNIX_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 #endif


 #if WINDOWS_MATHLINK #       if  defined(WIN32)  ||  defined(__WIN32__)  ||
 defined(__NT__)  || defined(_WIN32) #               define WIN32_MATHLINK 1
 #       else #               define WIN16_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   UNIX_MATHLINK   #       if   (__sun   ||   __sun__   ||    sun)    &&
 !defined(SUN_MATHLINK)  #               define SUN_MATHLINK 1 #       endif
 #endif

 #ifndef _MLCFM_H #define _MLCFM_H


 #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


 #if MACINTOSH_MATHLINK #       include <MixedMode.h> #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 FAR

 #if WINDOWS_MATHLINK

 #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

 #       ifndef  FAR  #       define  UNIX_MATHLINK  1  #       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

 #ifndef _MLTYPES_H #define _MLTYPES_H


 #if   WINDOWS_MATHLINK   #       ifndef  APIENTRY    #               define
 APIENTRY far pascal #       endif #       if WIN32_MATHLINK
  /*    try    this    #define     MLEXPORT     __declspec(dllexport)     */
 #               define    MLEXPORT    #       else   #               define
 MLEXPORT  __export  #       endif  #       define  MLCB  APIENTRY  MLEXPORT
 #       define MLAPI APIENTRY #endif

 #define MLAPI_ MLAPI



 #if   !   WINDOWS_MATHLINK   #       define   MLCB   #       define   MLAPI
 #       define MLEXPORT #endif


 #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 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

 #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  FARPROC  __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; #if WINDOWS_MATHLINK typedef DWORD  dev_type;
 #else  typedef dev_voidp dev_type; #endif 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));

 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)))
 };

 #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

         typedef      MLDeviceProcPtr      MLDeviceUPP;       #       define
 CallMLDeviceProc(userRoutine,       thing,      selector,      p1,      p2)
 (*(userRoutine))((thing),  (selector),  (dev_voidp)(p1),   (dev_voidp)(p2))
 #       define NewMLDeviceProc(userRoutine) (userRoutine)

 #endif

 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));

 enum {         uppMLAllocatorProcInfo = kPascalStackBased
 |      RESULT_SIZE(SIZE_CODE(sizeof(MLPointer)))                          |
 STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(unsigned long))) };

 #if   GENERATINGCFM           typedef   UniversalProcPtr    MLAllocatorUPP;
 #       define            CallMLAllocatorProc(userRoutine,            size)
           (MLPointer)CallUniversalProc((userRoutine),
 uppMLAllocatorProcInfo,                (size))               #       define
 NewMLAllocatorProc(userRoutine)
          NewRoutineDescriptor(MLAllocatorCast((userRoutine)),
 uppMLAllocatorProcInfo,  GetCurrentArchitecture())  #else           typedef
 MLAllocatorProcPtr              MLAllocatorUPP;              #       define
 CallMLAllocatorProc(userRoutine,       size)       (*(userRoutine))((size))
 #       define NewMLAllocatorProc(userRoutine) (userRoutine) #endif




 MLFPROC( void, MLDeallocatorProcPtr, (MLPointer));

 enum     {             uppMLDeallocatorProcInfo     =     kPascalStackBased
                  | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(MLPointer)))
 };

 #if  GENERATINGCFM           typedef   UniversalProcPtr   MLDeallocatorUPP;
 #       define             CallMLDeallocatorProc(userRoutine,            p)
            CallUniversalProc((userRoutine), uppMLDeallocatorProcInfo,  (p))
 #       define                            NewMLDeallocatorProc(userRoutine)
                NewRoutineDescriptor(MLDeallocatorCast((userRoutine)),
 uppMLDeallocatorProcInfo,  GetCurrentArchitecture())  #else         typedef
 MLDeallocatorProcPtr            MLDeallocatorUPP;            #       define
 CallMLDeallocatorProc(userRoutine,  p) (*(userRoutine))((p)) #       define
 NewMLDeallocatorProc(userRoutine) (userRoutine) #endif



 #endif /* _MLALLOC_H */


 /* eplicitly 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;     #define     MLCallAllocator
 CallMLAllocatorProc #define MLNewAllocator NewMLAllocatorProc

 typedef   MLDeallocatorUPP   MLDeallocator;    #define    MLCallDeallocator
 CallMLDeallocatorProc #define MLNewDeallocator NewMLDeallocatorProc

 #define MLallocator MLAllocator #define MLdeallocator MLDeallocator

 #endif /* _MLAPI_H */

 #ifndef _ML0TYPES_H #define _ML0TYPES_H


 #ifndef _MLNTYPES_H #define _MLNTYPES_H


 #ifndef __extended_ct__ #define __extended_ct__


 #ifndef _MLCTK_H #define _MLCTK_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')     */     /*     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')   */   /*   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') */

 /*                 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')   */   /*   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') */

 /*           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 */

 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*))) };


 #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          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



 ML_END_EXTERN_C


 #endif /* _MLNUMENV_H */


 #define MLTK_CUCHAR 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 M68KMACINTOSH_MATHLINK

 //is this correct for cfm68k?

 #       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

 #elif POWERMACINTOSH_MATHLINK

 /* one private  token  */  #       define  MLTK_128BIT_LONGDOUBLE   158  /*
 ((unsigned char)'236') */

 #       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                          #               else
 #                       define   MLTK_CLONGDOUBLE    MLTK_128BIT_LONGDOUBLE
 #               endif #       endif


 #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


 #       elif __i386 || __i386__ || i386


 #               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 #       define UNIX_MATHLINK 1 #       endif


 #else

 #       define MLTK_CSHORT       (( BINARY_MASK |  SIZEVARIANT_MASK  |  1))
 #       define  MLTK_CINT          ((  BINARY_MASK | SIZEVARIANT_MASK | 2))
 #       define MLTK_CLONG        (( BINARY_MASK |  SIZEVARIANT_MASK  |  3))
 #       define   MLTK_CFLOAT        ((  BINARY_MASK  |  SIZEVARIANT_MASK  |
 REAL_MASK  |  1))  #       define  MLTK_CDOUBLE        ((   BINARY_MASK   |
 SIZEVARIANT_MASK  |  REAL_MASK  |  2))  #       define MLTK_CLONGDOUBLE  ((
 BINARY_MASK | SIZEVARIANT_MASK | REAL_MASK | 3))


 #endif



 #endif    /*    _MLCTK_H    */    #       if    defined(    __STDC__)    ||
 defined(__cplusplus) || ! UNIX_MATHLINK || MLTK_CLONGDOUBLE != MLTK_CDOUBLE
                 typedef    long    double     extended_ct;     #       else
                 typedef    double    extended_ct;    #               define
 ML_EXTENDED_IS_DOUBLE #       endif

 #endif /* __extended_ct__ */

 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;

 typedef  extended_ct         extended_nt;  typedef   extended_nt    FAR   *
 extendedp_nt; typedef extendedp_nt FAR * extendedpp_nt;


 #endif /* _MLNTYPES_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; typedef extended_nt  ml_extended;  typedef
 extendedp_nt ml_extendedp; typedef extendedpp_nt ml_extendedpp;

 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 WINDOWS_MATHLINK typedef DWORD  dev_world;  typedef  DWORD  dev_cookie;
 #else typedef void FAR * dev_world; typedef void FAR * dev_cookie; #endif

 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; #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 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               _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)




 /*    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

 /*        selectors        */         #define         DEVICE_TYPE         0
 /*  long  */ #define DEVICE_NAME 1                                       /*
 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 */


 /* info selectors */ #define WORLD_THISLOCATION 1        /* char */ #define
 WORLD_MODES  2                /*  dev_mode  */  #define  WORLD_PROTONAME  3
 /* char */ #define WORLD_STREAMCAPACITY 4      /* long */







 #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;

 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 };

 #if   GENERATINGCFM            typedef    UniversalProcPtr    MLYielderUPP,
 MLDeviceYielderUPP;       #       define      NewMLYielderProc(userRoutine)
            NewRoutineDescriptor(MLYielderCast((userRoutine)),
 uppMLYielderProcInfo,    GetCurrentArchitecture())   #elif   WIN16_MATHLINK
         typedef FARPROC  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;


 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 };

 #if   GENERATINGCFM            typedef    UniversalProcPtr    MLHandlerUPP,
 MLDeviceHandlerUPP;       #       define      NewMLHandlerProc(userRoutine)
            NewRoutineDescriptor(MLHandlerCast((userRoutine)),
 uppMLHandlerProcInfo,    GetCurrentArchitecture())   #elif   WIN16_MATHLINK
         typedef FARPROC  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 */



 /* eplicitly 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 */ 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    */    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

 enum    {             uppMLUserFunctionProcInfo     =     kPascalStackBased
                  | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(MLINK))) };

 #if    GENERATINGCFM            typedef     UniversalProcPtr     MLUserUPP;
 #       define                                   NewMLUserProc(userRoutine)
               NewRoutineDescriptor(MLUserCast((userRoutine)),
 uppMLUserFunctionProcInfo,  GetCurrentArchitecture()) #else         typedef
 MLUserProcPtr    MLUserUPP;    #       define    NewMLUserProc(userRoutine)
 (userRoutine) #endif

 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 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)

 #endif /* _MLMAKE_H */


 /* eplicitly not protected by _MLMAKE_H in case  MLDECL  is  redefined  for
 multiple inclusion */


 ML_EXTERN_C MLDECL( ulong_ct, MLNewParameters,     ( MLParametersPointer p,
 ulong_ct  newrev, ulong_ct oldrev)); MLDECL( void,     MLSetAllocParameter,
 (   MLParametersPointer    p,    MLAllocator    allocator,    MLDeallocator
 deallocator)); 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));

 MLDECL( long_et,  MLTestPoint1,  (  MLEnvironment  ep,  ulong_ct  selector,
 voidp_ct p1, voidp_ct p2, longp_ct np));


 /***************  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( 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( 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));  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 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  MLEINIT           32   /*  the  MathLink   environment   was   not
 initialized  */  #define  MLEARGV          33  /* insufficient arguments to
 open the link */ #define MLEPROTOCOL      34  /*  protocol  unavailable  */
 #define  MLEMODE           35   /*  mode  unavailable  */ #define MLELAUNCH
 36  /* launch unsupported */ #define MLELAUNCHAGAIN   37  /* cannot  launch
 the  program  again  from  the same file */ #define MLELAUNCHSPACE   38  /*
 insufficient space to launch the program */ #define MLENOPARENT      39  /*
 found  no  parent  to  connect  to  */  #define MLENAMETAKEN     40  /* the
 linkname was already in use */ #define MLENOLISTEN      41  /* the linkname
 was  not  found  to  be  listening  */  #define MLEBADNAME       42  /* the
 linkname was missing or not  in  the  proper  form  */  #define  MLEBADHOST
 43   /*  the  location was unreachable or not in the proper form */ #define
 MLERESOURCE      44  /* a required resource was missing */

 #define MLELAST MLERESOURCE  /* 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 */

 /* eplicitly not protected by _MLERRORS_H in case MLDECL is  redefined  for
 multiple inclusion */

 MLDECL( mlapi_error,   MLError,        ( MLINK mlp)); MLDECL( mlapi_result,
 MLClearError,    (  MLINK  mlp));  MLDECL( mlapi_result,  MLSetError,     (
 MLINK mlp, mlapi_error err));


 #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 */

 /* eplicitly not protected by _MLYLDMSG_H in case MLDECL is  redefined  for
 multiple inclusion */

 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));


 MLDECL( mlapi_result, MLDeviceInformation, (  MLINK  mlp,  devinfo_selector
 selector, MLPointer buf, longp_st buflen));

 /*************** Textual interface ***************/


 #ifndef _MLGET_H #define _MLGET_H


 #endif /* _MLGET_H */

 /* eplicitly 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 */

 /* eplicitly 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

 /* begin  filter  */  #if  0  #define MLTKSYM      'U'         /*  85  Ox55
 01010101  */  /*  symbol leaf node */ #define MLTKSTR     'T'         /* 84
 Ox54 01010100 */ /* string leaf node */ /*bugcheck that these  choices  are
 reasonable */ #endif /* end filter */

 #define MLTKOLDINT     'I'              /* 73 Ox49 01001001 */  /*  integer
 leaf node */ #define MLTKOLDREAL    'R'              /* 82 Ox52 01010010 */
 /* real leaf node */

 /* begin filter */ /* should I change MLTKFUNC and MLTKARRAY while  I'm  at
 it to say '(' or ',' (both with bit 1 clear and differ in bit 2)
    and maybe MLTKPACKED and MLTKDIM as '_' and ')' or switched around a bit
 to be "readable" and bit sensible
    wait maybe & for MLTKFUNC and ''' for MLTKARRAY --differ by a bit
    then maybe ',' for MLTKPACKED and hmm for MLTKDIM */ /* end filter */

 #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)

 /* begin filter */ /* ' '   00100000 */ /* '!'   00100001 */ /* end  filter
 */  #define MLTKSTR      '"'   /* 00100010 */ #define MLTKSYM     ' 43'  /*
 00100011 */ /* octal here as hash requires a trigraph */

 /* begin filter */ /* '$'    00100100  */  /*  '%'    00100101  */  /*  '&'
 00100110 */ /* '''  00100111 */ /*candidate for MLTKSYM */


 /* '('   00101000 */ /* ')'   00101001 */ /* end filter */ #define MLTKREAL
 '*'  /* 00101010 */ #define MLTKINT     '+'  /* 00101011 */


 /* begin filter */ /* ','   00101100 */ /*candidate for  MLTKINT*/  /*  '-'
 00101101  */  /*  '.'    00101110  */  /*candidate  for MLTKREAL "taken" by
 MLTKNULL but this could have been changed by disabling an optimazation with
 V2 */ /* '/'   00101111 */ /* end filter */

 /* The following defines are for internal use  only  */  #define MLTKPCTEND
 ']'      /*  at end of top level expression */ #define MLTKAPCTEND '0    /*
 a' #definetMLTKSEND exp','sion */ #define MLTKEND      '0  #define MLTKAEND
 '
 #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)  #define  MLTKALL_DECODERS
 (MLLENGTH_DECODER    |    MLTKPACKED_DECODER    |    MLTKARRAY_DECODER    |
 MLTKMODERNCHARS_DECODER)

 #define MLTK_FIRSTUSER ' #define MLTK_LASTUSER  ''


 /* begin filter */ #if jc //hack for now #endif

 #if 0 #undef MLTKALL_DECODERS #define MLTKALL_DECODERS (MLLENGTH_DECODER  |
 MLTKPACKED_DECODER  |  MLTKARRAY_DECODER)  #undef  MLTKSYM  #define MLTKSYM
 MLTKOLDSYM #undef MLTKSTR #define MLTKSTR MLTKOLDSTR #endif /*  end  filter
 */

 #endif /* _MLTK_H */

 /*************** Native C types interface ***************/


 #ifndef _MLCGET_H #define _MLCGET_H


 /* begin filter */ /* The functions MLGetString, MLGetSymbol, MLGetString,
  * MLGetFunction, MLGetIntegerList, and
  * MLGetRealList return a pointer to a buffer inside
  * of MathLink.  This buffer should be considered read-
  * only and must be returned to MathLink when you are
  * through using it.  MathLink is only lending you
  * access to its internal data.  You MUST not free
  * this buffer as it may not have been allocated on
  * the free store.  You should not change the contents
  * of the buffer as the data may be used elsewhere
  * within MathLink or elsewhere in your program.
  * For example:
  *      f(){
  *              const char* s;
  *              ...
  *              if( MLGetSymbol(stdlink, &s) ){
  *                      deal_with_symbol(s);
  *                      MLDisownSymbol(stdlink, s);
  *              }
  *              ...
  *      }
  */ /* end filter */

 #define MLGetReal MLGetDouble

 #endif /* _MLCGET_H */


 /* eplicitly 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)); MLDECL( mlapi_result,   MLGetLongDouble,    (  MLINK  mlp,
 extendedp_nt xp));


 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));

 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 */

 /* eplicitly 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)); MLDECL(  mlapi_result,    MLPutLongDouble,    (  MLINK  mlp,
 extended_nt x));

 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));

 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


 /* begin filter */ /***************  MathLink  non-ASCII  string  interface
 ***************/

 /*
  * To iterate over the character codes in a MathLink string,
  * do the following.  Alternatively, just call MLGetUnicodeString().
  *
  *      f()
  *      {
  *              MLStringPosition pos;
  *              unsigned short code;
  *              char *s;
  *              if( MLGetString( stdlink, &s)) {
  * #if MLVERSION >= 3
  *                      char *p = s, *end = s + strlen(s);
  *                      while( (code = MLNextCharacter( &p, end)) >= 0)
  *                              use_the_character_code( code);
  * #else
  *                      MLforString( s, pos) {
  *                              code = MLStringChar( pos);
  *                              use_the_character_code( code);
  *                      }
  * #endif
  *                      MLDisownString( stdlink, s);
  *              }
  *      }
  *
  * To construct a MathLink string from a sequence of
  * character codes, do the following.  Or just call MLPutUnicodeString().
  *
  *      g(codes, len)
  *              unsigned short codes[];
  *              int len;
  *      {
  *              int i, size = 0;
  *              char *s, *p;
  * #if MLVERSION >= 3
  *              MLConvertUnicodeString( codes, len, &p, 0);
  *              size = p - (char*)0;
  * #else
  *              for( i = 0; i<len; ++i)
  *                      size += MLPutCharToString(codes[i], NULL);
  * #endif
  *
  *              if( p = s = (char*)malloc(size + 1) ) {
  * #if MLVERSION >= 3
  *                      MLConvertUnicodeString( codes, len, &p, p + size);
  * #else
  *                      for( i = 0; i<len; ++i)
  *                              MLPutCharToString(codes[i], &p);
  * #endif
  *                      *p = ' ';
  *                      MLPutString(stdlink, s);
  *                      free(s);
  *              }
  *      }
  */ /* end filter */

 #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   mode;          int
 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)   ?   (unsigned
 int)(*(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 */




 /* eplicitly 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));

 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   __array_meterp__   #define   __array_meterp__   typedef    struct
 array_meter* array_meterp; #endif


 #define MLPutRealArray MLPutDoubleArray

 #endif /* _MLCAPUT_H */


 /* eplicitly 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  meter)); MLDECL(
 mlapi_result,    MLPutBinaryNumberArrayData,  (  MLINK  mlp,   array_meterp
 meter,   voidp_ct       datap,   long_st   count,   long   type));  MLDECL(
 mlapi_result,    MLPutByteArrayData,          (  MLINK  mlp,   array_meterp
 meter,   ucharp_nt      datap,   long_st   count));  MLDECL(  mlapi_result,
 MLPutShortIntegerArrayData, (  MLINK  mlp,  array_meterp  meter,  shortp_nt
 datap,  long_st  count));  MLDECL(  mlapi_result,    MLPutIntegerArrayData,
 ( MLINK mlp,  array_meterp  meter,  intp_nt       datap,  long_st  count));
 MLDECL(    mlapi_result,     MLPutLongIntegerArrayData,    (   MLINK   mlp,
 array_meterp  meter,   longp_nt       datap,   long_st   count));   MLDECL(
 mlapi_result,     MLPutFloatArrayData,         (  MLINK  mlp,  array_meterp
 meter,  floatp_nt     datap,   long_st   count));   MLDECL(   mlapi_result,
 MLPutDoubleArrayData,        (  MLINK  mlp,  array_meterp meter, doublep_nt
 datap, long_st count)); MLDECL(  mlapi_result,    MLPutLongDoubleArrayData,
 ( MLINK mlp, array_meterp meter, extendedp_nt datap, long_st count));

 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)); MLDECL(
 mlapi_result,    MLPutLongDoubleArray,    (  MLINK  mlp, extendedp_nt data,
 longp_st dims, charpp_ct heads, long_st depth));

 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));
 ML_END_EXTERN_C


 #ifndef _MLCAGET_H #define _MLCAGET_H


 #ifndef   __array_meterp__   #define   __array_meterp__   typedef    struct
 array_meter* array_meterp; #endif


 #define  MLGetRealArray      MLGetDoubleArray   #define   MLDisownRealArray
 MLDisownDoubleArray

 #endif /* _MLCAGET_H */



 /* eplicitly 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 meter)); MLDECL( mlapi_result,   MLGetArrayDimensions,       (
 MLINK mlp, array_meterp meter));

 MLDECL(   mlapi_result,     MLGetBinaryNumberArrayData,   (   MLINK    mlp,
 array_meterp meter, voidp_ct     datap, long_st count, long type)); MLDECL(
 mlapi_result,    MLGetByteArrayData,          (  MLINK  mlp,   array_meterp
 meter,   ucharp_nt      datap,   long_st   count));  MLDECL(  mlapi_result,
 MLGetShortIntegerArrayData, (  MLINK  mlp,  array_meterp  meter,  shortp_nt
 datap,  long_st  count));  MLDECL(  mlapi_result,    MLGetIntegerArrayData,
 ( MLINK mlp,  array_meterp  meter,  intp_nt       datap,  long_st  count));
 MLDECL(    mlapi_result,     MLGetLongIntegerArrayData,    (   MLINK   mlp,
 array_meterp  meter,   longp_nt       datap,   long_st   count));   MLDECL(
 mlapi_result,     MLGetFloatArrayData,         (  MLINK  mlp,  array_meterp
 meter,  floatp_nt     datap,   long_st   count));   MLDECL(   mlapi_result,
 MLGetDoubleArrayData,        (  MLINK  mlp,  array_meterp meter, doublep_nt
 datap, long_st count)); MLDECL(  mlapi_result,    MLGetLongDoubleArrayData,
 ( MLINK mlp, array_meterp meter, extendedp_nt datap, long_st count));

 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)); MLDECL(
 mlapi_result,    MLGetLongDoubleArray,       (  MLINK  mlp,   extendedpp_nt
 datap, longpp_st dimsp, charppp_ct headsp, longp_st depthp));

 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));      MLDECL(      void,
 MLDisownLongDoubleArray,   ( MLINK mlp, extendedp_nt data,  longp_st  dims,
 charpp_ct heads, long_st depth)); ML_END_EXTERN_C


 /*************** seeking, transfering  and synchronization ***************/

 #ifndef _MLMARK_H #define _MLMARK_H


 #endif /* _MLMARK_H */

 /* eplicitly 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 */

 /* eplicitly 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)); ML_END_EXTERN_C


 #ifndef _MLSYNC_H #define _MLSYNC_H


 /* export mls__wait and mls__align(mlsp) */

 #endif /* _MLSYNC_H */

 /* eplicitly 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 */

 /* eplicitly 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));

 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))) };



 #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

         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


 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, "%s0, 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

 #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


 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 */


 /* eplicitly 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(( HANDLE  hinstCurrent,
 int  nCmdShow)); extern HANDLE MLInstance; extern HWND MLIconWindow; #endif
 extern int      MLAbort, MLDone; extern long MLSpecialCharacter;

 #endif /* _MLTM_H */



 #endif /* _MATHLINK_H */