topical media & game development

talk show tell print

lib-of-vs-libs-QTDevWin-CIncludes-JManager.h / h



  /*
       File:       JManager.h
   
       Contains:   Routines that can be used to invoke the Java Virtual Machine in MRJ
   
       Version:    Technology: MRJ 2.1
                   Release:    QuickTime 6.0.2
   
       Copyright:  (c) 1996-2001 by Apple Computer, Inc., all rights reserved.
   
       Bugs?:      For bug reports, consult the following page on
                   the World Wide Web:
   
                       http://developer.apple.com/bugreporter/
   
  */
  ifndef __JMANAGER__
  define __JMANAGER__
  
  /*
   *  Note:   If you want to use any JManger routines which use JNI or JRI functionality,
   *          you must #include <jni.h> or <jri.h> before this file.
   *
   */
  ifndef __CONDITIONALMACROS__
  include <ConditionalMacros.h>
  endif
  
  ifndef __MACTYPES__
  include <MacTypes.h>
  endif
  
  ifndef __FILES__
  include <Files.h>
  endif
  
  ifndef __DRAG__
  include <Drag.h>
  endif
  
  ifndef __QUICKDRAW__
  include <Quickdraw.h>
  endif
  
  ifndef __MENUS__
  include <Menus.h>
  endif
  
  ifndef __TEXTCOMMON__
  include <TextCommon.h>
  endif
  
  ifndef __CODEFRAGMENTS__
  include <CodeFragments.h>
  endif
  
  if PRAGMA_ONCE
  #pragma once
  endif
  
  ifdef __cplusplus
  extern "C" {
  endif
  
  if PRAGMA_IMPORT
  #pragma import on
  endif
  
  if PRAGMA_STRUCT_ALIGN
      #pragma options align=mac68k
  #elif PRAGMA_STRUCT_PACKPUSH
      #pragma pack(push, 2)
  #elif PRAGMA_STRUCT_PACK
      #pragma pack(2)
  endif
  
  if PRAGMA_ENUM_ALWAYSINT
      #if defined(__fourbyteints__) && !__fourbyteints__ 
          #define __JMANAGER__RESTORE_TWOBYTEINTS
          #pragma fourbyteints on
      #endif
      #pragma enumsalwaysint on
  #elif PRAGMA_ENUM_OPTIONS
      #pragma option enum=int
  #elif PRAGMA_ENUM_PACK
      #if __option(pack_enums)
          #define __JMANAGER__RESTORE_PACKED_ENUMS
          #pragma options(!pack_enums)
      #endif
  endif
  
  enum {
      kJMVersion                  = 0x11800007,                   /* using Sun's 1.1.8 APIs, our rev 7 APIs. */
      kDefaultJMTime              = 0x00000400                    /* how much time to give the JM library on "empty" events, in milliseconds. */
  };
  
  enum {
      kJMVersionError             = -60000L,
      kJMExceptionOccurred        = -60001L,
      kJMBadClassPathError        = -60002L
  };
  
  /*
   * Special codes for JMFrameKey, JMFrameKeyRelease:
   *
   * When your app notices that a modifiers is pressed (must be done by polling,
   * unless Mac OS changes to support sending modifiers as events)
   * you should notify the runtime using JMFrameKey, JMFrameKeyRelease, using
   * these constants for asciiChar and keyCode.  This will allow the AWT to
   * synthesize the appropriate events
   */
  enum {
      kModifierAsciiChar          = 0,
      kModifierKeyCode            = 0
  };
  
  /*
   *  Private data structures
   *
   *  JMClientData        - enough bits to reliably store a pointer to arbitrary, client-specific data. 
   *  JMSessionRef        - references the entire java runtime 
   *  JMTextRef           - a Text string, length, and encoding 
   *  JMTextEncoding      - which encoding to use when converting in and out of Java strings.
   *  JMFrameRef          - a java frame 
   *  JMAWTContextRef     - a context for the AWT to request frames, process events 
   *  JMAppletLocatorRef  - a device for locating, fetching, and parsing URLs that may contain applets 
   *  JMAppletViewerRef   - an object that displays applets in a Frame 
   *  JMAppletPageRef     - a way to group JMAWTContextRef's so they share the same class loader
   */
  typedef void *                          JMClientData;
  typedef struct OpaqueJMSessionRef*      JMSessionRef;
  typedef struct OpaqueJMFrameRef*        JMFrameRef;
  typedef struct OpaqueJMTextRef*         JMTextRef;
  typedef struct OpaqueJMAWTContextRef*   JMAWTContextRef;
  typedef struct OpaqueJMAppletLocatorRef*  JMAppletLocatorRef;
  typedef struct OpaqueJMAppletViewerRef*  JMAppletViewerRef;
  typedef struct OpaqueJMAppletPageRef*   JMAppletPageRef;
  typedef TextEncoding                    JMTextEncoding;
  
  /*
   * The runtime requires certain callbacks be used to communicate between
   * session events and the embedding application.
   *
   * In general, you can pass nil as a callback and a "good" default will be used.
   *
   *  JMConsoleProcPtr        - redirect stderr or stdout - the message is delivered in the encoding specified when
   *                              you created the session, or possibly binary data.
   *  JMConsoleReadProcPtr    - take input from the user from a console or file.  The input is expected to 
   *                              be in the encoding specified when you opened the session.
   *  JMExitProcPtr           - called via System.exit(int), return "true" to kill the current thread,
   *                              false, to cause a 'QUIT' AppleEvent to be sent to the current process,
   *                              or just tear down the runtime and exit to shell immediately
   * JMLowMemoryProcPtr       - This callback is available to notify the embedding application that
   *                              a low memory situation has occurred so it can attempt to recover appropriately.
   * JMAuthenicateURLProcPtr  - prompt the user for autentication based on the URL.  If you pass
   *                              nil, JManager will prompt the user.  Return false if the user pressed cancel.
   */
  typedef CALLBACK_API_C( void , JMConsoleProcPtr )(JMSessionRef session, const void *message, SInt32 messageLengthInBytes);
  typedef CALLBACK_API_C( SInt32 , JMConsoleReadProcPtr )(JMSessionRef session, void *buffer, SInt32 maxBufferLength);
  typedef CALLBACK_API_C( Boolean , JMExitProcPtr )(JMSessionRef session, SInt32 status);
  typedef CALLBACK_API_C( Boolean , JMAuthenticateURLProcPtr )(JMSessionRef session, const char *url, const char *realm, char userName[255], char password[255])/*  into C string parameters  */;
  typedef CALLBACK_API_C( void , JMLowMemoryProcPtr )(JMSessionRef session);
  
  struct JMSessionCallbacks {
      UInt32                          fVersion;                   /* should be set to kJMVersion */
      JMConsoleProcPtr                fStandardOutput;            /* JM will route "stdout" to this function. */
      JMConsoleProcPtr                fStandardError;             /* JM will route "stderr" to this function. */
      JMConsoleReadProcPtr            fStandardIn;                /* read from console - can be nil for default behavior (no console IO) */
      JMExitProcPtr                   fExitProc;                  /* handle System.exit(int) requests */
      JMAuthenticateURLProcPtr        fAuthenticateProc;          /* present basic authentication dialog */
      JMLowMemoryProcPtr              fLowMemProc;                /* Low Memory notification Proc */
  };
  typedef struct JMSessionCallbacks       JMSessionCallbacks;
  
  enum JMVerifierOptions {
      eDontCheckCode              = 0,
      eCheckRemoteCode            = 1,
      eCheckAllCode               = 2
  };
  typedef enum JMVerifierOptions JMVerifierOptions;
  
  /*
   * JMRuntimeOptions is a mask that allows you to specify certain attributes
   * for the runtime. Bitwise or the fields together, or use one of the "premade" entries.
   * eJManager2Defaults is the factory default, and best bet to use.
   */
  
  enum JMRuntimeOptions {
      eJManager2Defaults          = 0,
      eUseAppHeapOnly             = (1 << 0),
      eDisableJITC                = (1 << 1),
      eEnableDebugger             = (1 << 2),
      eDisableInternetConfig      = (1 << 3),
      eInhibitClassUnloading      = (1 << 4),
      eEnableProfiling            = (1 << 5),
      eJManager1Compatible        = (eDisableInternetConfig | eInhibitClassUnloading)
  };
  typedef enum JMRuntimeOptions JMRuntimeOptions;
  
  /*
   * Returns the version of the currently installed JManager library.
   * Compare to kJMVersion.  This is the only call that doesn't
   * require a session, or a reference to something that references
   * a session.
   */
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( unsigned long )
  JMGetVersion                    (void);
  
  /*
   * Returns the version number of the MRJ installation.  This is an
   * official version number that will change for each official release
   * of MRJ, whereas for an incremental MRJ release, the version number
   * returned by JMGetVersion may not change.
   */
  EXTERN_API_C( UInt32 )
  JMGetMRJRuntimeVersion          (void);
  
  /*
   * JMOpenSession creates a new Java Runtime.  Note that JManger 2.0 doesn't set 
   * security options at the time of runtime instantiation.  AppletViewer Objecs have
   * seperate security attributes bound to them, and the verifier is availiable elsewhere
   * as well.  The client data parameter lets a client associate an arbitgrary tagged pointer
   * with the seession.
   * When you create the session, you must specify the desired Text Encoding to use for
   * console IO.  Usually, its OK to use "kTextEncodingMacRoman".  See TextCommon.h for the list.
   */
  EXTERN_API_C( OSStatus )
  JMOpenSession                   (JMSessionRef *         session,
                                   JMRuntimeOptions       runtimeOptions,
                                   JMVerifierOptions      verifyMode,
                                   const JMSessionCallbacks * callbacks,
                                   JMTextEncoding         desiredEncoding,
                                   JMClientData           data);
  
  EXTERN_API_C( OSStatus )
  JMCloseSession                  (JMSessionRef           session);
  
  /*
   * Client data getter/setter functions.
   */
  EXTERN_API_C( OSStatus )
  JMGetSessionData                (JMSessionRef           session,
                                   JMClientData *         data);
  
  EXTERN_API_C( OSStatus )
  JMSetSessionData                (JMSessionRef           session,
                                   JMClientData           data);
  
  /*
   * Prepend the target of the FSSpec to the class path.
   * If a file, .zip or other known archive file - not a .class file
   */
  EXTERN_API_C( OSStatus )
  JMAddToClassPath                (JMSessionRef           session,
                                   const FSSpec *         spec);
  
  /*
   * Utility returns (client owned) null terminated handle containing "file://xxxx", or nil if fnfErr
   */
  EXTERN_API_C( Handle )
  JMFSSToURL                      (JMSessionRef           session,
                                   const FSSpec *         spec);
  
  /*
   * Turns "file:

disk/file" into an FSSpec. other handlers return paramErr


*/
EXTERN_API_C( OSStatus ) JMURLToFSS (JMSessionRef session, JMTextRef urlString, FSSpec * spec); /* * JMIdle gives time to all Java threads. Giving more time makes Java programs run faster, * but can reduce overall system responsiveness. JMIdle will return sooner if low-level (user) * events appear in the event queue. */ EXTERN_API_C( OSStatus ) JMIdle (JMSessionRef session, UInt32 jmTimeMillis); endif /* CALL_NOT_IN_CARBON */ /* * JMGetCurrenvEnv gives access to the underlying JRI interface, if available. * This gives the client more control over the underlying Java runtime, without * exposing the implementation too much. * NOTE: JRI is deprecated; please upgrade your code to work with JNI instead. */ ifdef JRI_H if CALL_NOT_IN_CARBON EXTERN_API_C( JRIRuntimeInstance *) JMGetJRIRuntimeInstance (JMSessionRef session); EXTERN_API_C( JRIEnv *) JMGetCurrentJRIEnv (JMSessionRef session); endif /* CALL_NOT_IN_CARBON */ endif /* defined(JRI_H) */ /* * JNI is to be preferred. */ ifdef JNI_H if CALL_NOT_IN_CARBON EXTERN_API_C( JNIEnv *) JMGetCurrentEnv (JMSessionRef session); endif /* CALL_NOT_IN_CARBON */ endif /* defined(JNI_H) */ /* * Since JManager calls reutrn jref (JRI Java references) * you need to convert between them and JNI references (jobjects) if you're * using JNI. These routines facilitate that conversion. */ if defined(JRI_H) && defined(JNI_H) if CALL_NOT_IN_CARBON EXTERN_API_C( jobject ) JMJRIRefToJNIObject (JMSessionRef session, JNIEnv * env, jref jriRef); EXTERN_API_C( jref ) JMJNIObjectToJRIRef (JMSessionRef session, JNIEnv * env, jobject jniObject); endif /* CALL_NOT_IN_CARBON */ endif /* defined(JRI_H) && defined(JNI_H) */ /* * Java defines system-wide properties that applets can use to make queries about the * host system. Many of these properties correspond to defaults provided by "Internet Config." * JMPutSessionProperty can be used by a client program to modify various system-wide properties. */ if CALL_NOT_IN_CARBON EXTERN_API_C( OSStatus ) JMGetSessionProperty (JMSessionRef session, JMTextRef propertyName, JMTextRef * propertyValue); EXTERN_API_C( OSStatus ) JMPutSessionProperty (JMSessionRef session, JMTextRef propertyName, JMTextRef propertyValue); endif /* CALL_NOT_IN_CARBON */ /* * Returns a com.apple.mrj.JManager.JMSession object */ ifdef JNI_H if CALL_NOT_IN_CARBON EXTERN_API_C( jobject ) JMGetSessionJNIObject (JMSessionRef session, JNIEnv * env); endif /* CALL_NOT_IN_CARBON */ endif /* defined(JNI_H) */ ifdef JRI_H if CALL_NOT_IN_CARBON EXTERN_API_C( jref ) JMGetSessionObject (JMSessionRef session); endif /* CALL_NOT_IN_CARBON */ endif /* defined(JRI_H) */ /* * JMText: opaque object that encapsulates a string, length, and * character encoding. Strings passed between JManager and the * embedding application goes through this interface. Only the most * rudimentary conversion routines are supplied - it is expected that * the embedding application will most of its work in the System Script. * * These APIs present some questions about who actually owns the * JMText. The rule is, if you created a JMTextRef, you are responsible * for deleting it after passing it into the runtime. If the runtime passes * one to you, it will be deleted after the callback. * * If a pointer to an uninitialised JMTextRef is passed in to a routine (eg JMGetSessionProperty), * it is assumed to have been created for the caller, and it is the callers responsibility to * dispose of it. * * The encoding types are taken verbatim from the Text Encoding Converter, * which handles the ugly backside of script conversion. */ /* * JMNewTextRef can create from a buffer of data in the specified encoding */ if CALL_NOT_IN_CARBON EXTERN_API_C( OSStatus ) JMNewTextRef (JMSessionRef session, JMTextRef * textRef, JMTextEncoding encoding, const void * charBuffer, UInt32 bufferLengthInBytes); /* * JMCopyTextRef clones a text ref. */ EXTERN_API_C( OSStatus ) JMCopyTextRef (JMTextRef textRefSrc, JMTextRef * textRefDst); /* * Disposes of a text ref passed back from the runtime, or created explicitly through JMNewTextRef */ EXTERN_API_C( OSStatus ) JMDisposeTextRef (JMTextRef textRef); /* * Returns the text length, in characters */ EXTERN_API_C( OSStatus ) JMGetTextLength (JMTextRef textRef, UInt32 * textLengthInCharacters); /* * Returns the text length, in number of bytes taken in the destination encoding */ EXTERN_API_C( OSStatus ) JMGetTextLengthInBytes (JMTextRef textRef, JMTextEncoding dstEncoding, UInt32 * textLengthInBytes); /* * Copies the specified number of characters to the destination buffer with the appropriate * destination encoding. */ EXTERN_API_C( OSStatus ) JMGetTextBytes (JMTextRef textRef, JMTextEncoding dstEncoding, void * textBuffer, UInt32 textBufferLength, UInt32 * numCharsCopied); endif /* CALL_NOT_IN_CARBON */ /* * Return the JMText as a reference to a Java String. Note that * this is the only reference to the string - it will be collected if you don't * hang on to it. */ ifdef JNI_H if CALL_NOT_IN_CARBON EXTERN_API_C( jstring ) JMTextToJNIJavaString (JMTextRef textRef, JMSessionRef session, JNIEnv * env); endif /* CALL_NOT_IN_CARBON */ endif /* defined(JNI_H) */ ifdef JRI_H if CALL_NOT_IN_CARBON EXTERN_API_C( jref ) JMTextToJavaString (JMTextRef textRef); endif /* CALL_NOT_IN_CARBON */ endif /* defined(JRI_H) */ /* * Returns a Handle to a null terminated, "C" string in the System Script. * Note that using this routine could result in data loss, if the characters * are not availiable in the System Script. */ if CALL_NOT_IN_CARBON EXTERN_API_C( Handle ) JMTextToMacOSCStringHandle (JMTextRef textRef); /* * Proxy properties in the runtime. * * These will only be checked if InternetConfig isn't used to specify properties, * or if it doesn't have the data for these. */ endif /* CALL_NOT_IN_CARBON */ struct JMProxyInfo { Boolean useProxy; char proxyHost[255]; UInt16 proxyPort; }; typedef struct JMProxyInfo JMProxyInfo; enum JMProxyType { eHTTPProxy = 0, eFirewallProxy = 1, eFTPProxy = 2 }; typedef enum JMProxyType JMProxyType; if CALL_NOT_IN_CARBON EXTERN_API_C( OSStatus ) JMGetProxyInfo (JMSessionRef session, JMProxyType proxyType, JMProxyInfo * proxyInfo); EXTERN_API_C( OSStatus ) JMSetProxyInfo (JMSessionRef session, JMProxyType proxyType, const JMProxyInfo * proxyInfo); /* * Security - JManager 2.0 security is handled on a per-applet basis. * There are some security settings that are inherited from InternetConfig * (Proxy Servers) but the verifier can now be enabled and disabled. */ EXTERN_API_C( OSStatus ) JMGetVerifyMode (JMSessionRef session, JMVerifierOptions * verifierOptions); EXTERN_API_C( OSStatus ) JMSetVerifyMode (JMSessionRef session, JMVerifierOptions verifierOptions); /* * The basic unit of AWT interaction is the JMFrame. A JMFrame is bound to top level * awt Frame, Window, or Dialog. When a user event occurs for a MacOS window, the event is passed * to the corrosponding frame object. Similarly, when an AWT event occurs that requires the * Mac OS Window to change, a callback is made. JManager 1.x bound the frame to the window through * a callback to set and restore the windows GrafPort. In JManager 2.0, a GrafPort, Offset, and * ClipRgn are specified up front - changes in visibility and structure require that these be re-set. * This enables support for the JavaSoft DrawingSurface API - and also improves graphics performance. * You should reset the graphics attributes anytime the visiblity changes, like when scrolling. * You should also set it initially when the AWTContext requests the frame. * At various times, JM will call back to the client to register a new JMFrame, * indicating the frame type. The client should take the following steps: * * o Create a new invisible window of the specified type * o Fill in the callbacks parameter with function pointers * o Do something to bind the frame to the window (like stuff the WindowPtr in the JMClientData of the frame) * o Register the visiblity parameters (GrafPtr, etc) with the frame */ endif /* CALL_NOT_IN_CARBON */ enum ReorderRequest { eBringToFront = 0, /* bring the window to front */ eSendToBack = 1, /* send the window to back */ eSendBehindFront = 2 /* send the window behind the front window */ }; typedef enum ReorderRequest ReorderRequest; typedef CALLBACK_API_C( void , JMSetFrameSizeProcPtr )(JMFrameRef frame, const Rect *newBounds); typedef CALLBACK_API_C( void , JMFrameInvalRectProcPtr )(JMFrameRef frame, const Rect *r); typedef CALLBACK_API_C( void , JMFrameShowHideProcPtr )(JMFrameRef frame, Boolean showFrameRequested); typedef CALLBACK_API_C( void , JMSetTitleProcPtr )(JMFrameRef frame, JMTextRef title); typedef CALLBACK_API_C( void , JMCheckUpdateProcPtr )(JMFrameRef frame); typedef CALLBACK_API_C( void , JMReorderFrame )(JMFrameRef frame, ReorderRequest theRequest); typedef CALLBACK_API_C( void , JMSetResizeable )(JMFrameRef frame, Boolean resizeable); typedef CALLBACK_API_C( void , JMGetFrameInsets )(JMFrameRef frame, Rect *insets); /* * New in JManager 2.1: * If the AWT needs to set focus to a frame (in the case of multiple JMFrames within * a single Mac OS Frame) it will call back to the embedding application using * JMRRequestFocus. The application should then defocus what it thought did have the * focus, and set the focus to the new frame. * If the user is tabbing within a JMFrame, and the focus reaches the last focusable * component (or the first, if focus is traversing backwards) JMNexetFocus will be called. * The application should defocus the component that requests this, and focus the next application * visible focusable element. (If none, send focus back to the frame.) */ typedef CALLBACK_API_C( void , JMNextFocus )(JMFrameRef frame, Boolean forward); typedef CALLBACK_API_C( void , JMRequestFocus )(JMFrameRef frame); struct JMFrameCallbacks { UInt32 fVersion; /* should be set to kJMVersion */ JMSetFrameSizeProcPtr fSetFrameSize; JMFrameInvalRectProcPtr fInvalRect; JMFrameShowHideProcPtr fShowHide; JMSetTitleProcPtr fSetTitle; JMCheckUpdateProcPtr fCheckUpdate; JMReorderFrame fReorderFrame; JMSetResizeable fSetResizeable; JMGetFrameInsets fGetInsets; JMNextFocus fNextFocus; JMRequestFocus fRequestFocus; }; typedef struct JMFrameCallbacks JMFrameCallbacks; if CALL_NOT_IN_CARBON EXTERN_API_C( OSStatus ) JMSetFrameVisibility (JMFrameRef frame, GrafPtr famePort, Point frameOrigin, RgnHandle frameClip); EXTERN_API_C( OSStatus ) JMGetFrameData (JMFrameRef frame, JMClientData * data); EXTERN_API_C( OSStatus ) JMSetFrameData (JMFrameRef frame, JMClientData data); EXTERN_API_C( OSStatus ) JMGetFrameSize (JMFrameRef frame, Rect * result); /* note that the top left indicates the "global" position of this frame */ /* use this to update the frame position when it gets moved */ EXTERN_API_C( OSStatus ) JMSetFrameSize (JMFrameRef frame, const Rect * newSize); /* * Dispatch a particular event to an embedded frame */ EXTERN_API_C( OSStatus ) JMFrameClickWithEventRecord (JMFrameRef frame, Point localPos, const EventRecord * event); EXTERN_API_C( OSStatus ) JMFrameKey (JMFrameRef frame, char asciiChar, char keyCode, short modifiers); EXTERN_API_C( OSStatus ) JMFrameKeyRelease (JMFrameRef frame, char asciiChar, char keyCode, short modifiers); EXTERN_API_C( OSStatus ) JMFrameUpdate (JMFrameRef frame, RgnHandle updateRgn); EXTERN_API_C( OSStatus ) JMFrameActivate (JMFrameRef frame, Boolean activate); EXTERN_API_C( OSStatus ) JMFrameResume (JMFrameRef frame, Boolean resume); EXTERN_API_C( OSStatus ) JMFrameMouseOver (JMFrameRef frame, Point localPos, short modifiers); EXTERN_API_C( OSStatus ) JMFrameShowHide (JMFrameRef frame, Boolean showFrame); EXTERN_API_C( OSStatus ) JMFrameGoAway (JMFrameRef frame); EXTERN_API_C( JMAWTContextRef ) JMGetFrameContext (JMFrameRef frame); EXTERN_API_C( OSStatus ) JMFrameDragTracking (JMFrameRef frame, DragTrackingMessage message, DragReference theDragRef); EXTERN_API_C( OSStatus ) JMFrameDragReceive (JMFrameRef frame, DragReference theDragRef); /* * JMFrameClick is deprecated - please use JMFrameClickWithEventRecord instead. */ EXTERN_API_C( OSStatus ) JMFrameClick (JMFrameRef frame, Point localPos, short modifiers); /* * If you may have multiple JMFrames in a single Mac OS Window (for example, * in a browser) then use JMFrameFocus to control when you believe the * frame should logically contain the focus. This will allow for the correct * appearance of Controls and Text Fields. If you will only have one * JMFrame per Mac OS Window, use JMFrameFocus as well as JMFrameActivate to * control hiliting. */ EXTERN_API_C( OSStatus ) JMFrameFocus (JMFrameRef frame, Boolean gotFocus); /* * Cause a Frame and its contents to be rendered in a GrafPort. * This is typically going to be used to cause an applet to print itself * into a PrGrafPort. * If you pass 'true' as the last parameter, the paint(Graphics) method of the * frame is called, rather than print(Graphics). */ EXTERN_API_C( OSStatus ) JMDrawFrameInPort (JMFrameRef frame, GrafPtr framePort, Point frameOrigin, RgnHandle clipRgn, Boolean callPaintAsOpposedToPrint); endif /* CALL_NOT_IN_CARBON */ /* * returns the java.awt.Frame for this frame */ ifdef JNI_H if CALL_NOT_IN_CARBON EXTERN_API_C( jobject ) JMGetAWTFrameJNIObject (JMFrameRef frame, JNIEnv * env); endif /* CALL_NOT_IN_CARBON */ endif /* defined(JNI_H) */ ifdef JRI_H if CALL_NOT_IN_CARBON EXTERN_API_C( jref ) JMGetAWTFrameObject (JMFrameRef frame); endif /* CALL_NOT_IN_CARBON */ endif /* defined(JRI_H) */ /* * returns the com.apple.mrj.JManager.JMFrame for this frame */ ifdef JNI_H if CALL_NOT_IN_CARBON EXTERN_API_C( jobject ) JMGetJMFrameJNIObject (JMFrameRef frame, JNIEnv * env); endif /* CALL_NOT_IN_CARBON */ endif /* defined(JNI_H) */ ifdef JRI_H if CALL_NOT_IN_CARBON EXTERN_API_C( jref ) JMGetJMFrameObject (JMFrameRef frame); endif /* CALL_NOT_IN_CARBON */ endif /* defined(JRI_H) */ /* * Window types */ enum JMFrameKind { eBorderlessModelessWindowFrame = 0, eModelessWindowFrame = 1, eModalWindowFrame = 2, eModelessDialogFrame = 3 }; typedef enum JMFrameKind JMFrameKind; /* JMAppletPageRef - * Creating a "page" is optional. * Applets will share the same class loader (and thus static variables) iff * they are share the same JMAppletPageRef and have the same codebase. */ if CALL_NOT_IN_CARBON EXTERN_API_C( OSStatus ) JMNewAppletPage (JMAppletPageRef * page, JMSessionRef session); EXTERN_API_C( OSStatus ) JMDisposeAppletPage (JMAppletPageRef page); /* JMAWTContext - * To create a top level frame, you must use a JMAWTContext object. * The JMAWTContext provides a context for the AWT to request frames. * A AWTContext has a threadgroup associated with it - all events and processing occurs * there. When you create one, it is quiescent, you must call resume before it begins executing. */ endif /* CALL_NOT_IN_CARBON */ typedef CALLBACK_API_C( OSStatus , JMRequestFrameProcPtr )(JMAWTContextRef context, JMFrameRef newFrame, JMFrameKind kind, const Rect *initialBounds, Boolean resizeable, JMFrameCallbacks *callbacks); typedef CALLBACK_API_C( OSStatus , JMReleaseFrameProcPtr )(JMAWTContextRef context, JMFrameRef oldFrame); typedef CALLBACK_API_C( SInt16 , JMUniqueMenuIDProcPtr )(JMAWTContextRef context, Boolean isSubmenu); typedef CALLBACK_API_C( void , JMExceptionOccurredProcPtr )(JMAWTContextRef context, JMTextRef exceptionName, JMTextRef exceptionMsg, JMTextRef stackTrace); struct JMAWTContextCallbacks { UInt32 fVersion; /* should be set to kJMVersion */ JMRequestFrameProcPtr fRequestFrame; /* a new frame is being created. */ JMReleaseFrameProcPtr fReleaseFrame; /* an existing frame is being destroyed. */ JMUniqueMenuIDProcPtr fUniqueMenuID; /* a new menu will be created with this id. */ JMExceptionOccurredProcPtr fExceptionOccurred; /* just some notification that some recent operation caused an exception. You can't do anything really from here. */ }; typedef struct JMAWTContextCallbacks JMAWTContextCallbacks; if CALL_NOT_IN_CARBON EXTERN_API_C( OSStatus ) JMNewAWTContext (JMAWTContextRef * context, JMSessionRef session, const JMAWTContextCallbacks * callbacks, JMClientData data); EXTERN_API_C( OSStatus ) JMNewAWTContextInPage (JMAWTContextRef * context, JMSessionRef session, JMAppletPageRef page, const JMAWTContextCallbacks * callbacks, JMClientData data); EXTERN_API_C( OSStatus ) JMDisposeAWTContext (JMAWTContextRef context); EXTERN_API_C( OSStatus ) JMGetAWTContextData (JMAWTContextRef context, JMClientData * data); EXTERN_API_C( OSStatus ) JMSetAWTContextData (JMAWTContextRef context, JMClientData data); EXTERN_API_C( OSStatus ) JMCountAWTContextFrames (JMAWTContextRef context, UInt32 * frameCount); EXTERN_API_C( OSStatus ) JMGetAWTContextFrame (JMAWTContextRef context, UInt32 frameIndex, JMFrameRef * frame); /* * Starting in MRJ 2.1, JMMenuSelected is deprecated. Please use JMMenuSelectedWithModifiers instead. */ EXTERN_API_C( OSStatus ) JMMenuSelected (JMAWTContextRef context, MenuHandle hMenu, short menuItem); /* * Starting in MRJ 2.1, this call takes an additional 'modifiers' parameter that you can get * from your event record. */ EXTERN_API_C( OSStatus ) JMMenuSelectedWithModifiers (JMAWTContextRef context, MenuHandle hMenu, short menuItem, short modifiers); endif /* CALL_NOT_IN_CARBON */ ifdef JRI_H /* * JRI Access APIs */ if CALL_NOT_IN_CARBON EXTERN_API_C( OSStatus ) JMExecMethodInContext (JMAWTContextRef context, jref objref, JRIMethodID methodID, UInt32 argCount, JRIValue args[]); EXTERN_API_C( OSStatus ) JMExecStaticMethodInContext (JMAWTContextRef context, JRIClassID classID, JRIMethodID methodID, UInt32 argCount, JRIValue args[]); endif /* CALL_NOT_IN_CARBON */ endif /* defined(JRI_H) */ ifdef JNI_H /* * JNI Access APIs * Note that you must pass the JNIEnv to these as well. */ if CALL_NOT_IN_CARBON EXTERN_API_C( OSStatus ) JMExecJNIMethodInContext (JMAWTContextRef context, JNIEnv * env, jobject objref, jmethodID methodID, UInt32 argCount, jvalue args[]); EXTERN_API_C( OSStatus ) JMExecJNIStaticMethodInContext (JMAWTContextRef context, JNIEnv * env, jclass classID, jmethodID methodID, UInt32 argCount, jvalue args[]); endif /* CALL_NOT_IN_CARBON */ endif /* defined(JNI_H) */ /* * return a com.apple.mrj.JManager.JMAWTContext */ ifdef JNI_H if CALL_NOT_IN_CARBON EXTERN_API_C( jobject ) JMGetAwtContextJNIObject (JMAWTContextRef context, JNIEnv * env); endif /* CALL_NOT_IN_CARBON */ endif /* defined(JNI_H) */ ifdef JRI_H if CALL_NOT_IN_CARBON EXTERN_API_C( jref ) JMGetAwtContextObject (JMAWTContextRef context); endif /* CALL_NOT_IN_CARBON */ endif /* defined(JRI_H) */ ifdef JNI_H /* * Beginning in 2.1, this function maps a JNIEnv to the owning AWTContext, if one exists */ if CALL_NOT_IN_CARBON EXTERN_API_C( JMAWTContextRef ) JMJNIToAWTContext (JMSessionRef session, JNIEnv * env); endif /* CALL_NOT_IN_CARBON */ endif /* defined(JNI_H) */ /* * JMAppletLocator - Since Java applets are always referenced by a Uniform Resource Locator * (see RFC 1737, http://www.w3.org/pub/WWW/Addressing/rfc1738.txt), we provide an object * that encapsulates the information about a set of applets. A JMAppletLocator is built * by providing a base URL, which must point at a valid HTML document containing applet * tags. To save a network transaction, the contents of the document may be passed optionally. * * You can also use a JMLocatorInfoBlock for a synchronous resolution of the applet, * assuming that you already have the info for the tag. */ enum JMLocatorErrors { eLocatorNoErr = 0, /* the html was retrieved successfully*/ eHostNotFound = 1, /* the host specified by the url could not be found*/ eFileNotFound = 2, /* the file could not be found on the host*/ eLocatorTimeout = 3, /* a timeout occurred retrieving the html text*/ eLocatorKilled = 4 /* in response to a JMDisposeAppletLocator before it has completed*/ }; typedef enum JMLocatorErrors JMLocatorErrors; typedef CALLBACK_API_C( void , JMFetchCompleted )(JMAppletLocatorRef ref, JMLocatorErrors status); struct JMAppletLocatorCallbacks { UInt32 fVersion; /* should be set to kJMVersion */ JMFetchCompleted fCompleted; /* called when the html has been completely fetched */ }; typedef struct JMAppletLocatorCallbacks JMAppletLocatorCallbacks; /* * These structures are used to pass pre-parsed parameter * tags to the AppletLocator. Implies synchronous semantics. */ struct JMLIBOptionalParams { JMTextRef fParamName; /* could be from a <parameter name=foo value=bar> or "zipbase", etc */ JMTextRef fParamValue; /* the value of this optional tag */ }; typedef struct JMLIBOptionalParams JMLIBOptionalParams; struct JMLocatorInfoBlock { UInt32 fVersion; /* should be set to kJMVersion */ /* These are required to be present and not nil */ JMTextRef fBaseURL; /* the URL of this applet's host page */ JMTextRef fAppletCode; /* code= parameter */ short fWidth; /* width= parameter */ short fHeight; /* height= parameter */ /* These are optional parameters */ SInt32 fOptionalParameterCount; /* how many in this array */ JMLIBOptionalParams * fParams; /* pointer to an array of these (points to first element) */ }; typedef struct JMLocatorInfoBlock JMLocatorInfoBlock; if CALL_NOT_IN_CARBON EXTERN_API_C( OSStatus ) JMNewAppletLocator (JMAppletLocatorRef * locatorRef, JMSessionRef session, const JMAppletLocatorCallbacks * callbacks, JMTextRef url, JMTextRef htmlText, JMClientData data); EXTERN_API_C( OSStatus ) JMNewAppletLocatorFromInfo (JMAppletLocatorRef * locatorRef, JMSessionRef session, const JMLocatorInfoBlock * info, JMClientData data); EXTERN_API_C( OSStatus ) JMDisposeAppletLocator (JMAppletLocatorRef locatorRef); EXTERN_API_C( OSStatus ) JMGetAppletLocatorData (JMAppletLocatorRef locatorRef, JMClientData * data); EXTERN_API_C( OSStatus ) JMSetAppletLocatorData (JMAppletLocatorRef locatorRef, JMClientData data); EXTERN_API_C( OSStatus ) JMCountApplets (JMAppletLocatorRef locatorRef, UInt32 * appletCount); EXTERN_API_C( OSStatus ) JMGetAppletDimensions (JMAppletLocatorRef locatorRef, UInt32 appletIndex, UInt32 * width, UInt32 * height); EXTERN_API_C( OSStatus ) JMGetAppletTag (JMAppletLocatorRef locatorRef, UInt32 appletIndex, JMTextRef * tagRef); EXTERN_API_C( OSStatus ) JMGetAppletName (JMAppletLocatorRef locatorRef, UInt32 appletIndex, JMTextRef * nameRef); /* * JMAppletViewer - Applets are instantiated, one by one, by specifying a JMAppletLocator and * a zero-based index (Macintosh API's usually use one-based indexing, the Java language * uses zero, however.). The resulting applet is encapsulated in a JMAppletViewer object. * Since applets can have one or more visible areas to draw in, one or more JMFrame objects * may be requested while the viewer is being created, or at a later time, thus the client * must provide callbacks to satisfy these requests. * * The window name for the ShowDocument callback is one of: * _self show in current frame * _parent show in parent frame * _top show in top-most frame * _blank show in new unnamed top-level window * <other> show in new top-level window named <other> */ endif /* CALL_NOT_IN_CARBON */ typedef CALLBACK_API_C( void , JMShowDocumentProcPtr )(JMAppletViewerRef viewer, JMTextRef urlString, JMTextRef windowName); typedef CALLBACK_API_C( void , JMSetStatusMsgProcPtr )(JMAppletViewerRef viewer, JMTextRef statusMsg); struct JMAppletViewerCallbacks { UInt32 fVersion; /* should be set to kJMVersion */ JMShowDocumentProcPtr fShowDocument; /* go to a url, optionally in a new window */ JMSetStatusMsgProcPtr fSetStatusMsg; /* applet changed status message */ }; typedef struct JMAppletViewerCallbacks JMAppletViewerCallbacks; /* * NEW: per-applet security settings * Previously, these settings were attached to the session. * JManager 2.0 allows them to be attached to each viewer. */ enum JMNetworkSecurityOptions { eNoNetworkAccess = 0, eAppletHostAccess = 1, eUnrestrictedAccess = 2 }; typedef enum JMNetworkSecurityOptions JMNetworkSecurityOptions; enum JMFileSystemOptions { eNoFSAccess = 0, eLocalAppletAccess = 1, eAllFSAccess = 2 }; typedef enum JMFileSystemOptions JMFileSystemOptions; /* * Lists of packages are comma separated, * the default for mrj.security.system.access is * "sun,netscape,com.apple". */ struct JMAppletSecurity { UInt32 fVersion; /* should be set to kJMVersion */ JMNetworkSecurityOptions fNetworkSecurity; /* can this applet access network resources */ JMFileSystemOptions fFileSystemSecurity; /* can this applet access network resources */ Boolean fRestrictSystemAccess; /* restrict access to system packages (com.apple.*, sun.*, netscape.*) also found in the property "mrj.security.system.access" */ Boolean fRestrictSystemDefine; /* restrict classes from loading system packages (com.apple.*, sun.*, netscape.*) also found in the property "mrj.security.system.define" */ Boolean fRestrictApplicationAccess; /* restrict access to application packages found in the property "mrj.security.application.access" */ Boolean fRestrictApplicationDefine; /* restrict access to application packages found in the property "mrj.security.application.access" */ }; typedef struct JMAppletSecurity JMAppletSecurity; /* * AppletViewer methods */ if CALL_NOT_IN_CARBON EXTERN_API_C( OSStatus ) JMNewAppletViewer (JMAppletViewerRef * viewer, JMAWTContextRef context, JMAppletLocatorRef locatorRef, UInt32 appletIndex, const JMAppletSecurity * security, const JMAppletViewerCallbacks * callbacks, JMClientData data); EXTERN_API_C( OSStatus ) JMDisposeAppletViewer (JMAppletViewerRef viewer); EXTERN_API_C( OSStatus ) JMGetAppletViewerData (JMAppletViewerRef viewer, JMClientData * data); EXTERN_API_C( OSStatus ) JMSetAppletViewerData (JMAppletViewerRef viewer, JMClientData data); /* * You can change the applet security on the fly */ EXTERN_API_C( OSStatus ) JMGetAppletViewerSecurity (JMAppletViewerRef viewer, JMAppletSecurity * data); EXTERN_API_C( OSStatus ) JMSetAppletViewerSecurity (JMAppletViewerRef viewer, const JMAppletSecurity * data); /* * JMReloadApplet reloads viewer's applet from the source. * JMRestartApplet reinstantiates the applet without reloading. */ EXTERN_API_C( OSStatus ) JMReloadApplet (JMAppletViewerRef viewer); EXTERN_API_C( OSStatus ) JMRestartApplet (JMAppletViewerRef viewer); /* * JMSuspendApplet tells the Java thread scheduler to stop executing the viewer's applet. * JMResumeApplet resumes execution of the viewer's applet. */ EXTERN_API_C( OSStatus ) JMSuspendApplet (JMAppletViewerRef viewer); EXTERN_API_C( OSStatus ) JMResumeApplet (JMAppletViewerRef viewer); /* * To get back to the JMAppletViewerRef instance from whence a frame came, * as well as the ultimate frame parent (the one created _for_ the applet viewer) */ EXTERN_API_C( OSStatus ) JMGetFrameViewer (JMFrameRef frame, JMAppletViewerRef * viewer, JMFrameRef * parentFrame); /* * To get a ref back to the Frame that was created for this JMAppletViewerRef */ EXTERN_API_C( OSStatus ) JMGetViewerFrame (JMAppletViewerRef viewer, JMFrameRef * frame); endif /* CALL_NOT_IN_CARBON */ /* * To get the ref of the com.apple.mrj.JManager.JMAppletViewer java object */ ifdef JNI_H if CALL_NOT_IN_CARBON EXTERN_API_C( jobject ) JMGetAppletViewerJNIObject (JMAppletViewerRef viewer, JNIEnv * env); endif /* CALL_NOT_IN_CARBON */ endif /* defined(JNI_H) */ ifdef JRI_H if CALL_NOT_IN_CARBON EXTERN_API_C( jref ) JMGetAppletViewerObject (JMAppletViewerRef viewer); endif /* CALL_NOT_IN_CARBON */ endif /* defined(JRI_H) */ /* * To get the ref of the java.applet.Applet itself */ ifdef JNI_H if CALL_NOT_IN_CARBON EXTERN_API_C( jobject ) JMGetAppletJNIObject (JMAppletViewerRef viewer, JNIEnv * env); endif /* CALL_NOT_IN_CARBON */ endif /* defined(JNI_H) */ ifdef JRI_H if CALL_NOT_IN_CARBON EXTERN_API_C( jref ) JMGetAppletObject (JMAppletViewerRef viewer); endif /* CALL_NOT_IN_CARBON */ endif /* defined(JRI_H) */ /* * Tell MRJ to add connID to its list of shared libraries used when searching for * JNI (and JRI) native methods. This is useful for overriding or redirecting * a java call to System.loadLibrary(). In particular System.loadLibrary() * does not reuse CFM connections to libraries already open by someone outside * of the java session. It always forces its own private copy of a shared library * to be opened. This can result in multiple instances of the data/TOC section * of a shared library. * Note: This function has no effect on JDirect based native methods. * If connID exports a function named "JNI_OnLoad", it is immediately called. * If javaShouldClose is true, MRJ will close the connection when the session is closed. * Returns false and does nothing if a library with that name is already registered. */ if CALL_NOT_IN_CARBON EXTERN_API_C( Boolean ) JMRegisterLibrary (JMSessionRef session, ConstStr63Param libraryName, CFragConnectionID connID, Boolean javaShouldClose); endif /* CALL_NOT_IN_CARBON */ if PRAGMA_ENUM_ALWAYSINT #pragma enumsalwaysint reset #ifdef __JMANAGER__RESTORE_TWOBYTEINTS #pragma fourbyteints off #endif #elif PRAGMA_ENUM_OPTIONS #pragma option enum=reset #elif defined(__JMANAGER__RESTORE_PACKED_ENUMS) #pragma options(pack_enums) endif if PRAGMA_STRUCT_ALIGN #pragma options align=reset #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(pop) #elif PRAGMA_STRUCT_PACK #pragma pack() endif ifdef PRAGMA_IMPORT_OFF #pragma import off #elif PRAGMA_IMPORT #pragma import reset endif ifdef __cplusplus } endif endif /* __JMANAGER__ */


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.