JManager.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:51k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /*
  2.      File:       JManager.h
  3.  
  4.      Contains:   Routines that can be used to invoke the Java Virtual Machine in MRJ
  5.  
  6.      Version:    Technology: MRJ 2.1
  7.                  Release:    QuickTime 6.0.2
  8.  
  9.      Copyright:  (c) 1996-2001 by Apple Computer, Inc., all rights reserved.
  10.  
  11.      Bugs?:      For bug reports, consult the following page on
  12.                  the World Wide Web:
  13.  
  14.                      http://developer.apple.com/bugreporter/
  15.  
  16. */
  17. #ifndef __JMANAGER__
  18. #define __JMANAGER__
  19. /*
  20.  *  Note:   If you want to use any JManger routines which use JNI or JRI functionality,
  21.  *          you must #include "jni.h" or <jri.h> before this file.
  22.  *
  23.  */
  24. #ifndef __CONDITIONALMACROS__
  25. #include "ConditionalMacros.h"
  26. #endif
  27. #ifndef __MACTYPES__
  28. #include "MacTypes.h"
  29. #endif
  30. #ifndef __FILES__
  31. #include "Files.h"
  32. #endif
  33. #ifndef __DRAG__
  34. #include "Drag.h"
  35. #endif
  36. #ifndef __QUICKDRAW__
  37. #include "Quickdraw.h"
  38. #endif
  39. #ifndef __MENUS__
  40. #include "Menus.h"
  41. #endif
  42. #ifndef __TEXTCOMMON__
  43. #include "TextCommon.h"
  44. #endif
  45. #ifndef __CODEFRAGMENTS__
  46. #include "CodeFragments.h"
  47. #endif
  48. #if PRAGMA_ONCE
  49. #pragma once
  50. #endif
  51. #ifdef __cplusplus
  52. extern "C" {
  53. #endif
  54. #if PRAGMA_IMPORT
  55. #pragma import on
  56. #endif
  57. #if PRAGMA_STRUCT_ALIGN
  58.     #pragma options align=mac68k
  59. #elif PRAGMA_STRUCT_PACKPUSH
  60.     #pragma pack(push, 2)
  61. #elif PRAGMA_STRUCT_PACK
  62.     #pragma pack(2)
  63. #endif
  64. #if PRAGMA_ENUM_ALWAYSINT
  65.     #if defined(__fourbyteints__) && !__fourbyteints__ 
  66.         #define __JMANAGER__RESTORE_TWOBYTEINTS
  67.         #pragma fourbyteints on
  68.     #endif
  69.     #pragma enumsalwaysint on
  70. #elif PRAGMA_ENUM_OPTIONS
  71.     #pragma option enum=int
  72. #elif PRAGMA_ENUM_PACK
  73.     #if __option(pack_enums)
  74.         #define __JMANAGER__RESTORE_PACKED_ENUMS
  75.         #pragma options(!pack_enums)
  76.     #endif
  77. #endif
  78. enum {
  79.     kJMVersion                  = 0x11800007,                   /* using Sun's 1.1.8 APIs, our rev 7 APIs. */
  80.     kDefaultJMTime              = 0x00000400                    /* how much time to give the JM library on "empty" events, in milliseconds. */
  81. };
  82. enum {
  83.     kJMVersionError             = -60000L,
  84.     kJMExceptionOccurred        = -60001L,
  85.     kJMBadClassPathError        = -60002L
  86. };
  87. /*
  88.  * Special codes for JMFrameKey, JMFrameKeyRelease:
  89.  *
  90.  * When your app notices that a modifiers is pressed (must be done by polling,
  91.  * unless Mac OS changes to support sending modifiers as events)
  92.  * you should notify the runtime using JMFrameKey, JMFrameKeyRelease, using
  93.  * these constants for asciiChar and keyCode.  This will allow the AWT to
  94.  * synthesize the appropriate events
  95.  */
  96. enum {
  97.     kModifierAsciiChar          = 0,
  98.     kModifierKeyCode            = 0
  99. };
  100. /*
  101.  *  Private data structures
  102.  *
  103.  *  JMClientData        - enough bits to reliably store a pointer to arbitrary, client-specific data. 
  104.  *  JMSessionRef        - references the entire java runtime 
  105.  *  JMTextRef           - a Text string, length, and encoding 
  106.  *  JMTextEncoding      - which encoding to use when converting in and out of Java strings.
  107.  *  JMFrameRef          - a java frame 
  108.  *  JMAWTContextRef     - a context for the AWT to request frames, process events 
  109.  *  JMAppletLocatorRef  - a device for locating, fetching, and parsing URLs that may contain applets 
  110.  *  JMAppletViewerRef   - an object that displays applets in a Frame 
  111.  *  JMAppletPageRef     - a way to group JMAWTContextRef's so they share the same class loader
  112.  */
  113. typedef void *                          JMClientData;
  114. typedef struct OpaqueJMSessionRef*      JMSessionRef;
  115. typedef struct OpaqueJMFrameRef*        JMFrameRef;
  116. typedef struct OpaqueJMTextRef*         JMTextRef;
  117. typedef struct OpaqueJMAWTContextRef*   JMAWTContextRef;
  118. typedef struct OpaqueJMAppletLocatorRef*  JMAppletLocatorRef;
  119. typedef struct OpaqueJMAppletViewerRef*  JMAppletViewerRef;
  120. typedef struct OpaqueJMAppletPageRef*   JMAppletPageRef;
  121. typedef TextEncoding                    JMTextEncoding;
  122. /*
  123.  * The runtime requires certain callbacks be used to communicate between
  124.  * session events and the embedding application.
  125.  *
  126.  * In general, you can pass nil as a callback and a "good" default will be used.
  127.  *
  128.  *  JMConsoleProcPtr        - redirect stderr or stdout - the message is delivered in the encoding specified when
  129.  *                              you created the session, or possibly binary data.
  130.  *  JMConsoleReadProcPtr    - take input from the user from a console or file.  The input is expected to 
  131.  *                              be in the encoding specified when you opened the session.
  132.  *  JMExitProcPtr           - called via System.exit(int), return "true" to kill the current thread,
  133.  *                              false, to cause a 'QUIT' AppleEvent to be sent to the current process,
  134.  *                              or just tear down the runtime and exit to shell immediately
  135.  * JMLowMemoryProcPtr       - This callback is available to notify the embedding application that
  136.  *                              a low memory situation has occurred so it can attempt to recover appropriately.
  137.  * JMAuthenicateURLProcPtr  - prompt the user for autentication based on the URL.  If you pass
  138.  *                              nil, JManager will prompt the user.  Return false if the user pressed cancel.
  139.  */
  140. typedef CALLBACK_API_C( void , JMConsoleProcPtr )(JMSessionRef session, const void *message, SInt32 messageLengthInBytes);
  141. typedef CALLBACK_API_C( SInt32 , JMConsoleReadProcPtr )(JMSessionRef session, void *buffer, SInt32 maxBufferLength);
  142. typedef CALLBACK_API_C( Boolean , JMExitProcPtr )(JMSessionRef session, SInt32 status);
  143. typedef CALLBACK_API_C( Boolean , JMAuthenticateURLProcPtr )(JMSessionRef session, const char *url, const char *realm, char userName[255], char password[255])/*  into C string parameters  */;
  144. typedef CALLBACK_API_C( void , JMLowMemoryProcPtr )(JMSessionRef session);
  145. struct JMSessionCallbacks {
  146.     UInt32                          fVersion;                   /* should be set to kJMVersion */
  147.     JMConsoleProcPtr                fStandardOutput;            /* JM will route "stdout" to this function. */
  148.     JMConsoleProcPtr                fStandardError;             /* JM will route "stderr" to this function. */
  149.     JMConsoleReadProcPtr            fStandardIn;                /* read from console - can be nil for default behavior (no console IO) */
  150.     JMExitProcPtr                   fExitProc;                  /* handle System.exit(int) requests */
  151.     JMAuthenticateURLProcPtr        fAuthenticateProc;          /* present basic authentication dialog */
  152.     JMLowMemoryProcPtr              fLowMemProc;                /* Low Memory notification Proc */
  153. };
  154. typedef struct JMSessionCallbacks       JMSessionCallbacks;
  155. enum JMVerifierOptions {
  156.     eDontCheckCode              = 0,
  157.     eCheckRemoteCode            = 1,
  158.     eCheckAllCode               = 2
  159. };
  160. typedef enum JMVerifierOptions JMVerifierOptions;
  161. /*
  162.  * JMRuntimeOptions is a mask that allows you to specify certain attributes
  163.  * for the runtime. Bitwise or the fields together, or use one of the "premade" entries.
  164.  * eJManager2Defaults is the factory default, and best bet to use.
  165.  */
  166. enum JMRuntimeOptions {
  167.     eJManager2Defaults          = 0,
  168.     eUseAppHeapOnly             = (1 << 0),
  169.     eDisableJITC                = (1 << 1),
  170.     eEnableDebugger             = (1 << 2),
  171.     eDisableInternetConfig      = (1 << 3),
  172.     eInhibitClassUnloading      = (1 << 4),
  173.     eEnableProfiling            = (1 << 5),
  174.     eJManager1Compatible        = (eDisableInternetConfig | eInhibitClassUnloading)
  175. };
  176. typedef enum JMRuntimeOptions JMRuntimeOptions;
  177. /*
  178.  * Returns the version of the currently installed JManager library.
  179.  * Compare to kJMVersion.  This is the only call that doesn't
  180.  * require a session, or a reference to something that references
  181.  * a session.
  182.  */
  183. #if CALL_NOT_IN_CARBON
  184. EXTERN_API_C( unsigned long )
  185. JMGetVersion                    (void);
  186. /*
  187.  * Returns the version number of the MRJ installation.  This is an
  188.  * official version number that will change for each official release
  189.  * of MRJ, whereas for an incremental MRJ release, the version number
  190.  * returned by JMGetVersion may not change.
  191.  */
  192. EXTERN_API_C( UInt32 )
  193. JMGetMRJRuntimeVersion          (void);
  194. /*
  195.  * JMOpenSession creates a new Java Runtime.  Note that JManger 2.0 doesn't set 
  196.  * security options at the time of runtime instantiation.  AppletViewer Objecs have
  197.  * seperate security attributes bound to them, and the verifier is availiable elsewhere
  198.  * as well.  The client data parameter lets a client associate an arbitgrary tagged pointer
  199.  * with the seession.
  200.  * When you create the session, you must specify the desired Text Encoding to use for
  201.  * console IO.  Usually, its OK to use "kTextEncodingMacRoman".  See TextCommon.h for the list.
  202.  */
  203. EXTERN_API_C( OSStatus )
  204. JMOpenSession                   (JMSessionRef *         session,
  205.                                  JMRuntimeOptions       runtimeOptions,
  206.                                  JMVerifierOptions      verifyMode,
  207.                                  const JMSessionCallbacks * callbacks,
  208.                                  JMTextEncoding         desiredEncoding,
  209.                                  JMClientData           data);
  210. EXTERN_API_C( OSStatus )
  211. JMCloseSession                  (JMSessionRef           session);
  212. /*
  213.  * Client data getter/setter functions.
  214.  */
  215. EXTERN_API_C( OSStatus )
  216. JMGetSessionData                (JMSessionRef           session,
  217.                                  JMClientData *         data);
  218. EXTERN_API_C( OSStatus )
  219. JMSetSessionData                (JMSessionRef           session,
  220.                                  JMClientData           data);
  221. /*
  222.  * Prepend the target of the FSSpec to the class path.
  223.  * If a file, .zip or other known archive file - not a .class file
  224.  */
  225. EXTERN_API_C( OSStatus )
  226. JMAddToClassPath                (JMSessionRef           session,
  227.                                  const FSSpec *         spec);
  228. /*
  229.  * Utility returns (client owned) null terminated handle containing "file://xxxx", or nil if fnfErr
  230.  */
  231. EXTERN_API_C( Handle )
  232. JMFSSToURL                      (JMSessionRef           session,
  233.                                  const FSSpec *         spec);
  234. /*
  235.  * Turns "file:///disk/file" into an FSSpec.  other handlers return paramErr
  236.  */
  237. EXTERN_API_C( OSStatus )
  238. JMURLToFSS                      (JMSessionRef           session,
  239.                                  JMTextRef              urlString,
  240.                                  FSSpec *               spec);
  241. /*
  242.  * JMIdle gives time to all Java threads. Giving more time makes Java programs run faster,
  243.  * but can reduce overall system responsiveness. JMIdle will return sooner if low-level (user)
  244.  * events appear in the event queue.
  245.  */
  246. EXTERN_API_C( OSStatus )
  247. JMIdle                          (JMSessionRef           session,
  248.                                  UInt32                 jmTimeMillis);
  249. #endif  /* CALL_NOT_IN_CARBON */
  250. /*
  251.  * JMGetCurrenvEnv gives access to the underlying JRI interface, if available.
  252.  * This gives the client more control over the underlying Java runtime, without
  253.  * exposing the implementation too much.
  254.  * NOTE: JRI is deprecated; please upgrade your code to work with JNI instead.
  255.  */
  256. #ifdef JRI_H
  257. #if CALL_NOT_IN_CARBON
  258. EXTERN_API_C( JRIRuntimeInstance *)
  259. JMGetJRIRuntimeInstance         (JMSessionRef           session);
  260. EXTERN_API_C( JRIEnv *)
  261. JMGetCurrentJRIEnv              (JMSessionRef           session);
  262. #endif  /* CALL_NOT_IN_CARBON */
  263. #endif  /* defined(JRI_H) */
  264. /*
  265.  * JNI is to be preferred.
  266.  */
  267. #ifdef JNI_H
  268. #if CALL_NOT_IN_CARBON
  269. EXTERN_API_C( JNIEnv *)
  270. JMGetCurrentEnv                 (JMSessionRef           session);
  271. #endif  /* CALL_NOT_IN_CARBON */
  272. #endif  /* defined(JNI_H) */
  273. /*
  274.  * Since JManager calls reutrn jref (JRI Java references)
  275.  * you need to convert between them and JNI references (jobjects) if you're
  276.  * using JNI.  These routines facilitate that conversion.
  277.  */
  278. #if defined(JRI_H) && defined(JNI_H)
  279. #if CALL_NOT_IN_CARBON
  280. EXTERN_API_C( jobject )
  281. JMJRIRefToJNIObject             (JMSessionRef           session,
  282.                                  JNIEnv *               env,
  283.                                  jref                   jriRef);
  284. EXTERN_API_C( jref )
  285. JMJNIObjectToJRIRef             (JMSessionRef           session,
  286.                                  JNIEnv *               env,
  287.                                  jobject                jniObject);
  288. #endif  /* CALL_NOT_IN_CARBON */
  289. #endif  /* defined(JRI_H) && defined(JNI_H) */
  290. /*
  291.  * Java defines system-wide properties that applets can use to make queries about the
  292.  * host system. Many of these properties correspond to defaults provided by "Internet Config."
  293.  * JMPutSessionProperty can be used by a client program to modify various system-wide properties.
  294.  */
  295. #if CALL_NOT_IN_CARBON
  296. EXTERN_API_C( OSStatus )
  297. JMGetSessionProperty            (JMSessionRef           session,
  298.                                  JMTextRef              propertyName,
  299.                                  JMTextRef *            propertyValue);
  300. EXTERN_API_C( OSStatus )
  301. JMPutSessionProperty            (JMSessionRef           session,
  302.                                  JMTextRef              propertyName,
  303.                                  JMTextRef              propertyValue);
  304. #endif  /* CALL_NOT_IN_CARBON */
  305. /*
  306.  * Returns a com.apple.mrj.JManager.JMSession object
  307.  */
  308. #ifdef JNI_H
  309. #if CALL_NOT_IN_CARBON
  310. EXTERN_API_C( jobject )
  311. JMGetSessionJNIObject           (JMSessionRef           session,
  312.                                  JNIEnv *               env);
  313. #endif  /* CALL_NOT_IN_CARBON */
  314. #endif  /* defined(JNI_H) */
  315. #ifdef JRI_H
  316. #if CALL_NOT_IN_CARBON
  317. EXTERN_API_C( jref )
  318. JMGetSessionObject              (JMSessionRef           session);
  319. #endif  /* CALL_NOT_IN_CARBON */
  320. #endif  /* defined(JRI_H) */
  321. /*
  322.  * JMText: opaque object that encapsulates a string, length, and
  323.  * character encoding.  Strings passed between JManager and the
  324.  * embedding application goes through this interface.  Only the most
  325.  * rudimentary conversion routines are supplied - it is expected that
  326.  * the embedding application will most of its work in the System Script.
  327.  *
  328.  * These APIs present some questions about who actually owns the 
  329.  * JMText.  The rule is, if you created a JMTextRef, you are responsible
  330.  * for deleting it after passing it into the runtime.  If the runtime passes
  331.  * one to you, it will be deleted after the callback.
  332.  *
  333.  * If a pointer to an uninitialised JMTextRef is passed in to a routine (eg JMGetSessionProperty),
  334.  * it is assumed to have been created for the caller, and it is the callers responsibility to
  335.  * dispose of it.
  336.  *
  337.  * The encoding types are taken verbatim from the Text Encoding Converter,
  338.  * which handles the ugly backside of script conversion.
  339.  */
  340. /*
  341.  * JMNewTextRef can create from a buffer of data in the specified encoding
  342.  */
  343. #if CALL_NOT_IN_CARBON
  344. EXTERN_API_C( OSStatus )
  345. JMNewTextRef                    (JMSessionRef           session,
  346.                                  JMTextRef *            textRef,
  347.                                  JMTextEncoding         encoding,
  348.                                  const void *           charBuffer,
  349.                                  UInt32                 bufferLengthInBytes);
  350. /*
  351.  * JMCopyTextRef clones a text ref.
  352.  */
  353. EXTERN_API_C( OSStatus )
  354. JMCopyTextRef                   (JMTextRef              textRefSrc,
  355.                                  JMTextRef *            textRefDst);
  356. /*
  357.  * Disposes of a text ref passed back from the runtime, or created explicitly through JMNewTextRef
  358.  */
  359. EXTERN_API_C( OSStatus )
  360. JMDisposeTextRef                (JMTextRef              textRef);
  361. /*
  362.  * Returns the text length, in characters
  363.  */
  364. EXTERN_API_C( OSStatus )
  365. JMGetTextLength                 (JMTextRef              textRef,
  366.                                  UInt32 *               textLengthInCharacters);
  367. /*
  368.  * Returns the text length, in number of bytes taken in the destination encoding
  369.  */
  370. EXTERN_API_C( OSStatus )
  371. JMGetTextLengthInBytes          (JMTextRef              textRef,
  372.                                  JMTextEncoding         dstEncoding,
  373.                                  UInt32 *               textLengthInBytes);
  374. /*
  375.  * Copies the specified number of characters to the destination buffer with the appropriate
  376.  * destination encoding.
  377.  */
  378. EXTERN_API_C( OSStatus )
  379. JMGetTextBytes                  (JMTextRef              textRef,
  380.                                  JMTextEncoding         dstEncoding,
  381.                                  void *                 textBuffer,
  382.                                  UInt32                 textBufferLength,
  383.                                  UInt32 *               numCharsCopied);
  384. #endif  /* CALL_NOT_IN_CARBON */
  385. /*
  386.  * Return the JMText as a reference to a Java String.  Note that
  387.  * this is the only reference to the string - it will be collected if you don't
  388.  * hang on to it.
  389.  */
  390. #ifdef JNI_H
  391. #if CALL_NOT_IN_CARBON
  392. EXTERN_API_C( jstring )
  393. JMTextToJNIJavaString           (JMTextRef              textRef,
  394.                                  JMSessionRef           session,
  395.                                  JNIEnv *               env);
  396. #endif  /* CALL_NOT_IN_CARBON */
  397. #endif  /* defined(JNI_H) */
  398. #ifdef JRI_H
  399. #if CALL_NOT_IN_CARBON
  400. EXTERN_API_C( jref )
  401. JMTextToJavaString              (JMTextRef              textRef);
  402. #endif  /* CALL_NOT_IN_CARBON */
  403. #endif  /* defined(JRI_H) */
  404. /*
  405.  * Returns a Handle to a null terminated, "C" string in the System Script.
  406.  * Note that using this routine could result in data loss, if the characters
  407.  * are not availiable in the System Script.
  408.  */
  409. #if CALL_NOT_IN_CARBON
  410. EXTERN_API_C( Handle )
  411. JMTextToMacOSCStringHandle      (JMTextRef              textRef);
  412. /*
  413.  * Proxy properties in the runtime.
  414.  *
  415.  * These will only be checked if InternetConfig isn't used to specify properties,
  416.  * or if it doesn't have the data for these.
  417.  */
  418. #endif  /* CALL_NOT_IN_CARBON */
  419. struct JMProxyInfo {
  420.     Boolean                         useProxy;
  421.     char                            proxyHost[255];
  422.     UInt16                          proxyPort;
  423. };
  424. typedef struct JMProxyInfo              JMProxyInfo;
  425. enum JMProxyType {
  426.     eHTTPProxy                  = 0,
  427.     eFirewallProxy              = 1,
  428.     eFTPProxy                   = 2
  429. };
  430. typedef enum JMProxyType JMProxyType;
  431. #if CALL_NOT_IN_CARBON
  432. EXTERN_API_C( OSStatus )
  433. JMGetProxyInfo                  (JMSessionRef           session,
  434.                                  JMProxyType            proxyType,
  435.                                  JMProxyInfo *          proxyInfo);
  436. EXTERN_API_C( OSStatus )
  437. JMSetProxyInfo                  (JMSessionRef           session,
  438.                                  JMProxyType            proxyType,
  439.                                  const JMProxyInfo *    proxyInfo);
  440. /*
  441.  * Security - JManager 2.0 security is handled on a per-applet basis.
  442.  * There are some security settings that are inherited from InternetConfig
  443.  * (Proxy Servers) but the verifier can now be enabled and disabled.
  444.  */
  445. EXTERN_API_C( OSStatus )
  446. JMGetVerifyMode                 (JMSessionRef           session,
  447.                                  JMVerifierOptions *    verifierOptions);
  448. EXTERN_API_C( OSStatus )
  449. JMSetVerifyMode                 (JMSessionRef           session,
  450.                                  JMVerifierOptions      verifierOptions);
  451. /*
  452.  * The basic unit of AWT interaction is the JMFrame.  A JMFrame is bound to top level
  453.  * awt Frame, Window, or Dialog.  When a user event occurs for a MacOS window, the event is passed
  454.  * to the corrosponding frame object.  Similarly, when an AWT event occurs that requires the
  455.  * Mac OS Window to change, a callback is made.  JManager 1.x bound the frame to the window through
  456.  * a callback to set and restore the windows GrafPort.  In JManager 2.0, a GrafPort, Offset, and 
  457.  * ClipRgn are specified up front - changes in visibility and structure require that these be re-set.
  458.  * This enables support for the JavaSoft DrawingSurface API - and also improves graphics performance.
  459.  * You should reset the graphics attributes anytime the visiblity changes, like when scrolling.
  460.  * You should also set it initially when the AWTContext requests the frame.
  461.  * At various times, JM will call back to the client to register a new JMFrame, 
  462.  * indicating the frame type.  The client should take the following steps:
  463.  *
  464.  *  o   Create a new invisible window of the specified type
  465.  *  o   Fill in the callbacks parameter with function pointers
  466.  *  o   Do something to bind the frame to the window (like stuff the WindowPtr in the JMClientData of the frame)
  467.  *  o   Register the visiblity parameters (GrafPtr, etc) with the frame
  468.  */
  469. #endif  /* CALL_NOT_IN_CARBON */
  470. enum ReorderRequest {
  471.     eBringToFront               = 0,                            /* bring the window to front */
  472.     eSendToBack                 = 1,                            /* send the window to back */
  473.     eSendBehindFront            = 2                             /* send the window behind the front window */
  474. };
  475. typedef enum ReorderRequest ReorderRequest;
  476. typedef CALLBACK_API_C( void , JMSetFrameSizeProcPtr )(JMFrameRef frame, const Rect *newBounds);
  477. typedef CALLBACK_API_C( void , JMFrameInvalRectProcPtr )(JMFrameRef frame, const Rect *r);
  478. typedef CALLBACK_API_C( void , JMFrameShowHideProcPtr )(JMFrameRef frame, Boolean showFrameRequested);
  479. typedef CALLBACK_API_C( void , JMSetTitleProcPtr )(JMFrameRef frame, JMTextRef title);
  480. typedef CALLBACK_API_C( void , JMCheckUpdateProcPtr )(JMFrameRef frame);
  481. typedef CALLBACK_API_C( void , JMReorderFrame )(JMFrameRef frame, ReorderRequest theRequest);
  482. typedef CALLBACK_API_C( void , JMSetResizeable )(JMFrameRef frame, Boolean resizeable);
  483. typedef CALLBACK_API_C( void , JMGetFrameInsets )(JMFrameRef frame, Rect *insets);
  484. /*
  485.  * New in JManager 2.1:
  486.  *  If the AWT needs to set focus to a frame (in the case of multiple JMFrames within
  487.  *  a single Mac OS Frame) it will call back to the embedding application using
  488.  *  JMRRequestFocus.  The application should then defocus what it thought did have the
  489.  *  focus, and set the focus to the new frame.
  490.  *  If the user is tabbing within a JMFrame, and the focus reaches the last focusable
  491.  *  component (or the first, if focus is traversing backwards) JMNexetFocus will be called.
  492.  *  The application should defocus the component that requests this, and focus the next application
  493.  *  visible focusable element.  (If none, send focus back to the frame.)
  494.  */
  495. typedef CALLBACK_API_C( void , JMNextFocus )(JMFrameRef frame, Boolean forward);
  496. typedef CALLBACK_API_C( void , JMRequestFocus )(JMFrameRef frame);
  497. struct JMFrameCallbacks {
  498.     UInt32                          fVersion;                   /* should be set to kJMVersion */
  499.     JMSetFrameSizeProcPtr           fSetFrameSize;
  500.     JMFrameInvalRectProcPtr         fInvalRect;
  501.     JMFrameShowHideProcPtr          fShowHide;
  502.     JMSetTitleProcPtr               fSetTitle;
  503.     JMCheckUpdateProcPtr            fCheckUpdate;
  504.     JMReorderFrame                  fReorderFrame;
  505.     JMSetResizeable                 fSetResizeable;
  506.     JMGetFrameInsets                fGetInsets;
  507.     JMNextFocus                     fNextFocus;
  508.     JMRequestFocus                  fRequestFocus;
  509. };
  510. typedef struct JMFrameCallbacks         JMFrameCallbacks;
  511. #if CALL_NOT_IN_CARBON
  512. EXTERN_API_C( OSStatus )
  513. JMSetFrameVisibility            (JMFrameRef             frame,
  514.                                  GrafPtr                famePort,
  515.                                  Point                  frameOrigin,
  516.                                  RgnHandle              frameClip);
  517. EXTERN_API_C( OSStatus )
  518. JMGetFrameData                  (JMFrameRef             frame,
  519.                                  JMClientData *         data);
  520. EXTERN_API_C( OSStatus )
  521. JMSetFrameData                  (JMFrameRef             frame,
  522.                                  JMClientData           data);
  523. EXTERN_API_C( OSStatus )
  524. JMGetFrameSize                  (JMFrameRef             frame,
  525.                                  Rect *                 result);
  526. /* note that the top left indicates the "global" position of this frame */
  527. /* use this to update the frame position when it gets moved */
  528. EXTERN_API_C( OSStatus )
  529. JMSetFrameSize                  (JMFrameRef             frame,
  530.                                  const Rect *           newSize);
  531. /*
  532.  * Dispatch a particular event to an embedded frame
  533.  */
  534. EXTERN_API_C( OSStatus )
  535. JMFrameClickWithEventRecord     (JMFrameRef             frame,
  536.                                  Point                  localPos,
  537.                                  const EventRecord *    event);
  538. EXTERN_API_C( OSStatus )
  539. JMFrameKey                      (JMFrameRef             frame,
  540.                                  char                   asciiChar,
  541.                                  char                   keyCode,
  542.                                  short                  modifiers);
  543. EXTERN_API_C( OSStatus )
  544. JMFrameKeyRelease               (JMFrameRef             frame,
  545.                                  char                   asciiChar,
  546.                                  char                   keyCode,
  547.                                  short                  modifiers);
  548. EXTERN_API_C( OSStatus )
  549. JMFrameUpdate                   (JMFrameRef             frame,
  550.                                  RgnHandle              updateRgn);
  551. EXTERN_API_C( OSStatus )
  552. JMFrameActivate                 (JMFrameRef             frame,
  553.                                  Boolean                activate);
  554. EXTERN_API_C( OSStatus )
  555. JMFrameResume                   (JMFrameRef             frame,
  556.                                  Boolean                resume);
  557. EXTERN_API_C( OSStatus )
  558. JMFrameMouseOver                (JMFrameRef             frame,
  559.                                  Point                  localPos,
  560.                                  short                  modifiers);
  561. EXTERN_API_C( OSStatus )
  562. JMFrameShowHide                 (JMFrameRef             frame,
  563.                                  Boolean                showFrame);
  564. EXTERN_API_C( OSStatus )
  565. JMFrameGoAway                   (JMFrameRef             frame);
  566. EXTERN_API_C( JMAWTContextRef )
  567. JMGetFrameContext               (JMFrameRef             frame);
  568. EXTERN_API_C( OSStatus )
  569. JMFrameDragTracking             (JMFrameRef             frame,
  570.                                  DragTrackingMessage    message,
  571.                                  DragReference          theDragRef);
  572. EXTERN_API_C( OSStatus )
  573. JMFrameDragReceive              (JMFrameRef             frame,
  574.                                  DragReference          theDragRef);
  575. /*
  576.  * JMFrameClick is deprecated - please use JMFrameClickWithEventRecord instead.
  577.  */
  578. EXTERN_API_C( OSStatus )
  579. JMFrameClick                    (JMFrameRef             frame,
  580.                                  Point                  localPos,
  581.                                  short                  modifiers);
  582. /*
  583.  * If you may have multiple JMFrames in a single Mac OS Window (for example,
  584.  * in a browser) then use JMFrameFocus to control when you believe the
  585.  * frame should logically contain the focus.  This will allow for the correct
  586.  * appearance of Controls and Text Fields.  If you will only have one
  587.  * JMFrame per Mac OS Window, use JMFrameFocus as well as JMFrameActivate to
  588.  * control hiliting.
  589.  */
  590. EXTERN_API_C( OSStatus )
  591. JMFrameFocus                    (JMFrameRef             frame,
  592.                                  Boolean                gotFocus);
  593. /*
  594.  * Cause a Frame and its contents to be rendered in a GrafPort.
  595.  * This is typically going to be used to cause an applet to print itself
  596.  * into a PrGrafPort.
  597.  * If you pass 'true' as the last parameter, the paint(Graphics) method of the
  598.  * frame is called, rather than print(Graphics).
  599.  */
  600. EXTERN_API_C( OSStatus )
  601. JMDrawFrameInPort               (JMFrameRef             frame,
  602.                                  GrafPtr                framePort,
  603.                                  Point                  frameOrigin,
  604.                                  RgnHandle              clipRgn,
  605.                                  Boolean                callPaintAsOpposedToPrint);
  606. #endif  /* CALL_NOT_IN_CARBON */
  607. /* 
  608.  * returns the java.awt.Frame for this frame 
  609. */
  610. #ifdef JNI_H
  611. #if CALL_NOT_IN_CARBON
  612. EXTERN_API_C( jobject )
  613. JMGetAWTFrameJNIObject          (JMFrameRef             frame,
  614.                                  JNIEnv *               env);
  615. #endif  /* CALL_NOT_IN_CARBON */
  616. #endif  /* defined(JNI_H) */
  617. #ifdef JRI_H
  618. #if CALL_NOT_IN_CARBON
  619. EXTERN_API_C( jref )
  620. JMGetAWTFrameObject             (JMFrameRef             frame);
  621. #endif  /* CALL_NOT_IN_CARBON */
  622. #endif  /* defined(JRI_H) */
  623. /* 
  624.  * returns the com.apple.mrj.JManager.JMFrame for this frame 
  625.  */
  626. #ifdef JNI_H
  627. #if CALL_NOT_IN_CARBON
  628. EXTERN_API_C( jobject )
  629. JMGetJMFrameJNIObject           (JMFrameRef             frame,
  630.                                  JNIEnv *               env);
  631. #endif  /* CALL_NOT_IN_CARBON */
  632. #endif  /* defined(JNI_H) */
  633. #ifdef JRI_H
  634. #if CALL_NOT_IN_CARBON
  635. EXTERN_API_C( jref )
  636. JMGetJMFrameObject              (JMFrameRef             frame);
  637. #endif  /* CALL_NOT_IN_CARBON */
  638. #endif  /* defined(JRI_H) */
  639. /*
  640.  * Window types
  641.  */
  642. enum JMFrameKind {
  643.     eBorderlessModelessWindowFrame = 0,
  644.     eModelessWindowFrame        = 1,
  645.     eModalWindowFrame           = 2,
  646.     eModelessDialogFrame        = 3
  647. };
  648. typedef enum JMFrameKind JMFrameKind;
  649. /* JMAppletPageRef -
  650.  * Creating a "page" is optional. 
  651.  * Applets will share the same class loader (and thus static variables) iff
  652.  * they are share the same JMAppletPageRef and have the same codebase.
  653.  */
  654. #if CALL_NOT_IN_CARBON
  655. EXTERN_API_C( OSStatus )
  656. JMNewAppletPage                 (JMAppletPageRef *      page,
  657.                                  JMSessionRef           session);
  658. EXTERN_API_C( OSStatus )
  659. JMDisposeAppletPage             (JMAppletPageRef        page);
  660. /* JMAWTContext -
  661.  * To create a top level frame, you must use a JMAWTContext object.
  662.  * The JMAWTContext provides a context for the AWT to request frames.
  663.  * A AWTContext has a threadgroup associated with it - all events and processing occurs
  664.  * there.  When you create one, it is quiescent, you must call resume before it begins executing.
  665.  */
  666. #endif  /* CALL_NOT_IN_CARBON */
  667. typedef CALLBACK_API_C( OSStatus , JMRequestFrameProcPtr )(JMAWTContextRef context, JMFrameRef newFrame, JMFrameKind kind, const Rect *initialBounds, Boolean resizeable, JMFrameCallbacks *callbacks);
  668. typedef CALLBACK_API_C( OSStatus , JMReleaseFrameProcPtr )(JMAWTContextRef context, JMFrameRef oldFrame);
  669. typedef CALLBACK_API_C( SInt16 , JMUniqueMenuIDProcPtr )(JMAWTContextRef context, Boolean isSubmenu);
  670. typedef CALLBACK_API_C( void , JMExceptionOccurredProcPtr )(JMAWTContextRef context, JMTextRef exceptionName, JMTextRef exceptionMsg, JMTextRef stackTrace);
  671. struct JMAWTContextCallbacks {
  672.     UInt32                          fVersion;                   /* should be set to kJMVersion */
  673.     JMRequestFrameProcPtr           fRequestFrame;              /* a new frame is being created. */
  674.     JMReleaseFrameProcPtr           fReleaseFrame;              /* an existing frame is being destroyed. */
  675.     JMUniqueMenuIDProcPtr           fUniqueMenuID;              /* a new menu will be created with this id. */
  676.     JMExceptionOccurredProcPtr      fExceptionOccurred;         /* just some notification that some recent operation caused an exception.  You can't do anything really from here. */
  677. };
  678. typedef struct JMAWTContextCallbacks    JMAWTContextCallbacks;
  679. #if CALL_NOT_IN_CARBON
  680. EXTERN_API_C( OSStatus )
  681. JMNewAWTContext                 (JMAWTContextRef *      context,
  682.                                  JMSessionRef           session,
  683.                                  const JMAWTContextCallbacks * callbacks,
  684.                                  JMClientData           data);
  685. EXTERN_API_C( OSStatus )
  686. JMNewAWTContextInPage           (JMAWTContextRef *      context,
  687.                                  JMSessionRef           session,
  688.                                  JMAppletPageRef        page,
  689.                                  const JMAWTContextCallbacks * callbacks,
  690.                                  JMClientData           data);
  691. EXTERN_API_C( OSStatus )
  692. JMDisposeAWTContext             (JMAWTContextRef        context);
  693. EXTERN_API_C( OSStatus )
  694. JMGetAWTContextData             (JMAWTContextRef        context,
  695.                                  JMClientData *         data);
  696. EXTERN_API_C( OSStatus )
  697. JMSetAWTContextData             (JMAWTContextRef        context,
  698.                                  JMClientData           data);
  699. EXTERN_API_C( OSStatus )
  700. JMCountAWTContextFrames         (JMAWTContextRef        context,
  701.                                  UInt32 *               frameCount);
  702. EXTERN_API_C( OSStatus )
  703. JMGetAWTContextFrame            (JMAWTContextRef        context,
  704.                                  UInt32                 frameIndex,
  705.                                  JMFrameRef *           frame);
  706. /*
  707.  * Starting in MRJ 2.1, JMMenuSelected is deprecated.  Please use JMMenuSelectedWithModifiers instead.
  708.  */
  709. EXTERN_API_C( OSStatus )
  710. JMMenuSelected                  (JMAWTContextRef        context,
  711.                                  MenuHandle             hMenu,
  712.                                  short                  menuItem);
  713. /*
  714.  * Starting in MRJ 2.1, this call takes an additional 'modifiers' parameter that you can get
  715.  * from your event record.
  716.  */
  717. EXTERN_API_C( OSStatus )
  718. JMMenuSelectedWithModifiers     (JMAWTContextRef        context,
  719.                                  MenuHandle             hMenu,
  720.                                  short                  menuItem,
  721.                                  short                  modifiers);
  722. #endif  /* CALL_NOT_IN_CARBON */
  723. #ifdef JRI_H
  724. /*
  725.  * JRI Access APIs
  726.  */
  727. #if CALL_NOT_IN_CARBON
  728. EXTERN_API_C( OSStatus )
  729. JMExecMethodInContext           (JMAWTContextRef        context,
  730.                                  jref                   objref,
  731.                                  JRIMethodID            methodID,
  732.                                  UInt32                 argCount,
  733.                                  JRIValue               args[]);
  734. EXTERN_API_C( OSStatus )
  735. JMExecStaticMethodInContext     (JMAWTContextRef        context,
  736.                                  JRIClassID             classID,
  737.                                  JRIMethodID            methodID,
  738.                                  UInt32                 argCount,
  739.                                  JRIValue               args[]);
  740. #endif  /* CALL_NOT_IN_CARBON */
  741. #endif  /* defined(JRI_H) */
  742. #ifdef JNI_H
  743. /*
  744.  * JNI Access APIs
  745.  * Note that you must pass the JNIEnv to these as well.
  746.  */
  747. #if CALL_NOT_IN_CARBON
  748. EXTERN_API_C( OSStatus )
  749. JMExecJNIMethodInContext        (JMAWTContextRef        context,
  750.                                  JNIEnv *               env,
  751.                                  jobject                objref,
  752.                                  jmethodID              methodID,
  753.                                  UInt32                 argCount,
  754.                                  jvalue                 args[]);
  755. EXTERN_API_C( OSStatus )
  756. JMExecJNIStaticMethodInContext  (JMAWTContextRef        context,
  757.                                  JNIEnv *               env,
  758.                                  jclass                 classID,
  759.                                  jmethodID              methodID,
  760.                                  UInt32                 argCount,
  761.                                  jvalue                 args[]);
  762. #endif  /* CALL_NOT_IN_CARBON */
  763. #endif  /* defined(JNI_H) */
  764. /*
  765.  * return a com.apple.mrj.JManager.JMAWTContext
  766.  */
  767. #ifdef JNI_H
  768. #if CALL_NOT_IN_CARBON
  769. EXTERN_API_C( jobject )
  770. JMGetAwtContextJNIObject        (JMAWTContextRef        context,
  771.                                  JNIEnv *               env);
  772. #endif  /* CALL_NOT_IN_CARBON */
  773. #endif  /* defined(JNI_H) */
  774. #ifdef JRI_H
  775. #if CALL_NOT_IN_CARBON
  776. EXTERN_API_C( jref )
  777. JMGetAwtContextObject           (JMAWTContextRef        context);
  778. #endif  /* CALL_NOT_IN_CARBON */
  779. #endif  /* defined(JRI_H) */
  780. #ifdef JNI_H
  781. /*
  782.  * Beginning in 2.1, this function maps a JNIEnv to the owning AWTContext, if one exists
  783.  */
  784. #if CALL_NOT_IN_CARBON
  785. EXTERN_API_C( JMAWTContextRef )
  786. JMJNIToAWTContext               (JMSessionRef           session,
  787.                                  JNIEnv *               env);
  788. #endif  /* CALL_NOT_IN_CARBON */
  789. #endif  /* defined(JNI_H) */
  790. /*
  791.  * JMAppletLocator - Since Java applets are always referenced by a Uniform Resource Locator
  792.  * (see RFC 1737, http://www.w3.org/pub/WWW/Addressing/rfc1738.txt), we provide an object
  793.  * that encapsulates the information about a set of applets. A JMAppletLocator is built
  794.  * by providing a base URL, which must point at a valid HTML document containing applet
  795.  * tags. To save a network transaction, the contents of the document may be passed optionally. 
  796.  *
  797.  * You can also use a JMLocatorInfoBlock for a synchronous resolution of the applet,
  798.  * assuming that you already have the info for the tag.
  799.  */
  800. enum JMLocatorErrors {
  801.     eLocatorNoErr               = 0,                            /* the html was retrieved successfully*/
  802.     eHostNotFound               = 1,                            /* the host specified by the url could not be found*/
  803.     eFileNotFound               = 2,                            /* the file could not be found on the host*/
  804.     eLocatorTimeout             = 3,                            /* a timeout occurred retrieving the html text*/
  805.     eLocatorKilled              = 4                             /* in response to a JMDisposeAppletLocator before it has completed*/
  806. };
  807. typedef enum JMLocatorErrors JMLocatorErrors;
  808. typedef CALLBACK_API_C( void , JMFetchCompleted )(JMAppletLocatorRef ref, JMLocatorErrors status);
  809. struct JMAppletLocatorCallbacks {
  810.     UInt32                          fVersion;                   /* should be set to kJMVersion */
  811.     JMFetchCompleted                fCompleted;                 /* called when the html has been completely fetched */
  812. };
  813. typedef struct JMAppletLocatorCallbacks JMAppletLocatorCallbacks;
  814. /*
  815.  * These structures are used to pass pre-parsed parameter
  816.  * tags to the AppletLocator.  Implies synchronous semantics.
  817.  */
  818. struct JMLIBOptionalParams {
  819.     JMTextRef                       fParamName;                 /* could be from a <parameter name=foo value=bar> or "zipbase", etc */
  820.     JMTextRef                       fParamValue;                /* the value of this optional tag */
  821. };
  822. typedef struct JMLIBOptionalParams      JMLIBOptionalParams;
  823. struct JMLocatorInfoBlock {
  824.     UInt32                          fVersion;                   /* should be set to kJMVersion */
  825.                                                                 /* These are required to be present and not nil */
  826.     JMTextRef                       fBaseURL;                   /* the URL of this applet's host page */
  827.     JMTextRef                       fAppletCode;                /* code= parameter */
  828.     short                           fWidth;                     /* width= parameter */
  829.     short                           fHeight;                    /* height= parameter */
  830.                                                                 /* These are optional parameters */
  831.     SInt32                          fOptionalParameterCount;    /* how many in this array */
  832.     JMLIBOptionalParams *           fParams;                    /* pointer to an array of these (points to first element) */
  833. };
  834. typedef struct JMLocatorInfoBlock       JMLocatorInfoBlock;
  835. #if CALL_NOT_IN_CARBON
  836. EXTERN_API_C( OSStatus )
  837. JMNewAppletLocator              (JMAppletLocatorRef *   locatorRef,
  838.                                  JMSessionRef           session,
  839.                                  const JMAppletLocatorCallbacks * callbacks,
  840.                                  JMTextRef              url,
  841.                                  JMTextRef              htmlText,
  842.                                  JMClientData           data);
  843. EXTERN_API_C( OSStatus )
  844. JMNewAppletLocatorFromInfo      (JMAppletLocatorRef *   locatorRef,
  845.                                  JMSessionRef           session,
  846.                                  const JMLocatorInfoBlock * info,
  847.                                  JMClientData           data);
  848. EXTERN_API_C( OSStatus )
  849. JMDisposeAppletLocator          (JMAppletLocatorRef     locatorRef);
  850. EXTERN_API_C( OSStatus )
  851. JMGetAppletLocatorData          (JMAppletLocatorRef     locatorRef,
  852.                                  JMClientData *         data);
  853. EXTERN_API_C( OSStatus )
  854. JMSetAppletLocatorData          (JMAppletLocatorRef     locatorRef,
  855.                                  JMClientData           data);
  856. EXTERN_API_C( OSStatus )
  857. JMCountApplets                  (JMAppletLocatorRef     locatorRef,
  858.                                  UInt32 *               appletCount);
  859. EXTERN_API_C( OSStatus )
  860. JMGetAppletDimensions           (JMAppletLocatorRef     locatorRef,
  861.                                  UInt32                 appletIndex,
  862.                                  UInt32 *               width,
  863.                                  UInt32 *               height);
  864. EXTERN_API_C( OSStatus )
  865. JMGetAppletTag                  (JMAppletLocatorRef     locatorRef,
  866.                                  UInt32                 appletIndex,
  867.                                  JMTextRef *            tagRef);
  868. EXTERN_API_C( OSStatus )
  869. JMGetAppletName                 (JMAppletLocatorRef     locatorRef,
  870.                                  UInt32                 appletIndex,
  871.                                  JMTextRef *            nameRef);
  872. /*
  873.  * JMAppletViewer - Applets are instantiated, one by one, by specifying a JMAppletLocator and
  874.  * a zero-based index (Macintosh API's usually use one-based indexing, the Java language
  875.  * uses zero, however.). The resulting applet is encapsulated in a JMAppletViewer object. 
  876.  * Since applets can have one or more visible areas to draw in, one or more JMFrame objects
  877.  * may be requested while the viewer is being created, or at a later time, thus the client
  878.  * must provide callbacks to satisfy these requests.
  879.  *
  880.  * The window name for the ShowDocument callback is one of:
  881.  *   _self      show in current frame
  882.  *   _parent    show in parent frame
  883.  *   _top       show in top-most frame
  884.  *   _blank     show in new unnamed top-level window
  885.  *   <other>    show in new top-level window named <other> 
  886.  */
  887. #endif  /* CALL_NOT_IN_CARBON */
  888. typedef CALLBACK_API_C( void , JMShowDocumentProcPtr )(JMAppletViewerRef viewer, JMTextRef urlString, JMTextRef windowName);
  889. typedef CALLBACK_API_C( void , JMSetStatusMsgProcPtr )(JMAppletViewerRef viewer, JMTextRef statusMsg);
  890. struct JMAppletViewerCallbacks {
  891.     UInt32                          fVersion;                   /* should be set to kJMVersion */
  892.     JMShowDocumentProcPtr           fShowDocument;              /* go to a url, optionally in a new window */
  893.     JMSetStatusMsgProcPtr           fSetStatusMsg;              /* applet changed status message */
  894. };
  895. typedef struct JMAppletViewerCallbacks  JMAppletViewerCallbacks;
  896. /*
  897.  * NEW: per-applet security settings
  898.  * Previously, these settings were attached to the session.
  899.  * JManager 2.0 allows them to be attached to each viewer.
  900.  */
  901. enum JMNetworkSecurityOptions {
  902.     eNoNetworkAccess            = 0,
  903.     eAppletHostAccess           = 1,
  904.     eUnrestrictedAccess         = 2
  905. };
  906. typedef enum JMNetworkSecurityOptions JMNetworkSecurityOptions;
  907. enum JMFileSystemOptions {
  908.     eNoFSAccess                 = 0,
  909.     eLocalAppletAccess          = 1,
  910.     eAllFSAccess                = 2
  911. };
  912. typedef enum JMFileSystemOptions JMFileSystemOptions;
  913. /*
  914.  * Lists of packages are comma separated,
  915.  * the default for mrj.security.system.access is
  916.  * "sun,netscape,com.apple".
  917.  */
  918. struct JMAppletSecurity {
  919.     UInt32                          fVersion;                   /* should be set to kJMVersion */
  920.     JMNetworkSecurityOptions        fNetworkSecurity;           /* can this applet access network resources */
  921.     JMFileSystemOptions             fFileSystemSecurity;        /* can this applet access network resources */
  922.     Boolean                         fRestrictSystemAccess;      /* restrict access to system packages (com.apple.*, sun.*, netscape.*) also found in the property "mrj.security.system.access" */
  923.     Boolean                         fRestrictSystemDefine;      /* restrict classes from loading system packages (com.apple.*, sun.*, netscape.*) also found in the property "mrj.security.system.define" */
  924.     Boolean                         fRestrictApplicationAccess; /* restrict access to application packages found in the property "mrj.security.application.access" */
  925.     Boolean                         fRestrictApplicationDefine; /* restrict access to application packages found in the property "mrj.security.application.access" */
  926. };
  927. typedef struct JMAppletSecurity         JMAppletSecurity;
  928. /*
  929.  * AppletViewer methods
  930.  */
  931. #if CALL_NOT_IN_CARBON
  932. EXTERN_API_C( OSStatus )
  933. JMNewAppletViewer               (JMAppletViewerRef *    viewer,
  934.                                  JMAWTContextRef        context,
  935.                                  JMAppletLocatorRef     locatorRef,
  936.                                  UInt32                 appletIndex,
  937.                                  const JMAppletSecurity * security,
  938.                                  const JMAppletViewerCallbacks * callbacks,
  939.                                  JMClientData           data);
  940. EXTERN_API_C( OSStatus )
  941. JMDisposeAppletViewer           (JMAppletViewerRef      viewer);
  942. EXTERN_API_C( OSStatus )
  943. JMGetAppletViewerData           (JMAppletViewerRef      viewer,
  944.                                  JMClientData *         data);
  945. EXTERN_API_C( OSStatus )
  946. JMSetAppletViewerData           (JMAppletViewerRef      viewer,
  947.                                  JMClientData           data);
  948. /*
  949.  * You can change the applet security on the fly
  950.  */
  951. EXTERN_API_C( OSStatus )
  952. JMGetAppletViewerSecurity       (JMAppletViewerRef      viewer,
  953.                                  JMAppletSecurity *     data);
  954. EXTERN_API_C( OSStatus )
  955. JMSetAppletViewerSecurity       (JMAppletViewerRef      viewer,
  956.                                  const JMAppletSecurity * data);
  957. /*
  958.  * JMReloadApplet reloads viewer's applet from the source.
  959.  * JMRestartApplet reinstantiates the applet without reloading.
  960.  */
  961. EXTERN_API_C( OSStatus )
  962. JMReloadApplet                  (JMAppletViewerRef      viewer);
  963. EXTERN_API_C( OSStatus )
  964. JMRestartApplet                 (JMAppletViewerRef      viewer);
  965. /*
  966.  * JMSuspendApplet tells the Java thread scheduler to stop executing the viewer's applet.
  967.  * JMResumeApplet resumes execution of the viewer's applet.
  968.  */
  969. EXTERN_API_C( OSStatus )
  970. JMSuspendApplet                 (JMAppletViewerRef      viewer);
  971. EXTERN_API_C( OSStatus )
  972. JMResumeApplet                  (JMAppletViewerRef      viewer);
  973. /* 
  974.  * To get back to the JMAppletViewerRef instance from whence a frame came,
  975.  * as well as the ultimate frame parent (the one created _for_ the applet viewer)
  976.  */
  977. EXTERN_API_C( OSStatus )
  978. JMGetFrameViewer                (JMFrameRef             frame,
  979.                                  JMAppletViewerRef *    viewer,
  980.                                  JMFrameRef *           parentFrame);
  981. /*
  982.  * To get a ref back to the Frame that was created for this JMAppletViewerRef
  983.  */
  984. EXTERN_API_C( OSStatus )
  985. JMGetViewerFrame                (JMAppletViewerRef      viewer,
  986.                                  JMFrameRef *           frame);
  987. #endif  /* CALL_NOT_IN_CARBON */
  988. /*
  989.  * To get the ref of the com.apple.mrj.JManager.JMAppletViewer java object
  990.  */
  991. #ifdef JNI_H
  992. #if CALL_NOT_IN_CARBON
  993. EXTERN_API_C( jobject )
  994. JMGetAppletViewerJNIObject      (JMAppletViewerRef      viewer,
  995.                                  JNIEnv *               env);
  996. #endif  /* CALL_NOT_IN_CARBON */
  997. #endif  /* defined(JNI_H) */
  998. #ifdef JRI_H
  999. #if CALL_NOT_IN_CARBON
  1000. EXTERN_API_C( jref )
  1001. JMGetAppletViewerObject         (JMAppletViewerRef      viewer);
  1002. #endif  /* CALL_NOT_IN_CARBON */
  1003. #endif  /* defined(JRI_H) */
  1004. /*
  1005.  * To get the ref of the java.applet.Applet itself
  1006.  */
  1007. #ifdef JNI_H
  1008. #if CALL_NOT_IN_CARBON
  1009. EXTERN_API_C( jobject )
  1010. JMGetAppletJNIObject            (JMAppletViewerRef      viewer,
  1011.                                  JNIEnv *               env);
  1012. #endif  /* CALL_NOT_IN_CARBON */
  1013. #endif  /* defined(JNI_H) */
  1014. #ifdef JRI_H
  1015. #if CALL_NOT_IN_CARBON
  1016. EXTERN_API_C( jref )
  1017. JMGetAppletObject               (JMAppletViewerRef      viewer);
  1018. #endif  /* CALL_NOT_IN_CARBON */
  1019. #endif  /* defined(JRI_H) */
  1020. /*
  1021.  * Tell MRJ to add connID to its list of shared libraries used when searching for
  1022.  * JNI (and JRI) native methods. This is useful for overriding or redirecting
  1023.  * a java call to System.loadLibrary().  In particular System.loadLibrary()
  1024.  * does not reuse CFM connections to libraries already open by someone outside
  1025.  * of the java session.  It always forces its own private copy of a shared library 
  1026.  * to be opened.  This can result in multiple instances of the data/TOC section
  1027.  * of a shared library.  
  1028.  * Note: This function has no effect on JDirect based native methods.
  1029.  * If connID exports a function named "JNI_OnLoad", it is immediately called.
  1030.  * If javaShouldClose is true, MRJ will close the connection when the session is closed.
  1031.  * Returns false and does nothing if a library with that name is already registered.
  1032.  */
  1033. #if CALL_NOT_IN_CARBON
  1034. EXTERN_API_C( Boolean )
  1035. JMRegisterLibrary               (JMSessionRef           session,
  1036.                                  ConstStr63Param        libraryName,
  1037.                                  CFragConnectionID      connID,
  1038.                                  Boolean                javaShouldClose);
  1039. #endif  /* CALL_NOT_IN_CARBON */
  1040. #if PRAGMA_ENUM_ALWAYSINT
  1041.     #pragma enumsalwaysint reset
  1042.     #ifdef __JMANAGER__RESTORE_TWOBYTEINTS
  1043.         #pragma fourbyteints off
  1044.     #endif
  1045. #elif PRAGMA_ENUM_OPTIONS
  1046.     #pragma option enum=reset
  1047. #elif defined(__JMANAGER__RESTORE_PACKED_ENUMS)
  1048.     #pragma options(pack_enums)
  1049. #endif
  1050. #if PRAGMA_STRUCT_ALIGN
  1051.     #pragma options align=reset
  1052. #elif PRAGMA_STRUCT_PACKPUSH
  1053.     #pragma pack(pop)
  1054. #elif PRAGMA_STRUCT_PACK
  1055.     #pragma pack()
  1056. #endif
  1057. #ifdef PRAGMA_IMPORT_OFF
  1058. #pragma import off
  1059. #elif PRAGMA_IMPORT
  1060. #pragma import reset
  1061. #endif
  1062. #ifdef __cplusplus
  1063. }
  1064. #endif
  1065. #endif /* __JMANAGER__ */