| <?php require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon()); | 
 |  | 
 | $pageTitle = "Generating the SWT JNI Code for SWT 3.4"; | 
 |  | 
 | ob_start(); | 
 | ?> | 
 | <div id="midcolumn"> | 
 | <h1>Generating the SWT JNI Code for SWT 3.4</h1> | 
 |  | 
 | <p>All of the C code used by SWT is generated by the <b>JNIGeneratorApp</b> | 
 | application from the <i>org.eclipse.swt.tools</i> project in Eclipse CVS. | 
 | This page describes how to use this tool when fixing bugs or adding | 
 | features to SWT.</p> | 
 |  | 
 | <h3>Adding native methods</h3> | 
 |  | 
 | <ol> | 
 | <li>Add the function prototype in <tt>OS.java</tt>, copying the style and structure | 
 |     of the other functions in that file. | 
 |     <p></p> | 
 | <li>Run <b>JNIGeneratorAppUI</b> from <i>org.eclipse.swt.tools</i>.  This | 
 |     is a GUI application for editing the metadata and a front end to the | 
 |     generation phase.  Select the appropriate class in the list and then | 
 |     find the method you added in <tt>OS.java</tt>. | 
 |     <p></p> | 
 |     <center><img src="images/jnigen.png" alt="JNIGeneratorAppUI"></center> | 
 |     <p></p> | 
 | <li>Set any flags and modify the casts for any primitive types. | 
 |     <p></p> | 
 | <li>Hit <i>Generate All</i> to generate the C code and metadata files. | 
 |     <p></p> | 
 | <li>Refresh the <i>org.eclipse.swt</i> project to tell Eclipse about the C | 
 |     changes, and refresh the <i>org.eclipse.swt.tools</i> project to see the | 
 |     metadata changes. | 
 |     <p></p> | 
 | <li>Compile the new C code and copy the new libraries to the appropriate | 
 |     fragment.  To compile the code, right-click on the <tt>build.xml</tt> file in the | 
 |     <tt>Eclipse SWT PI/ws/library</tt> directory for your window system, and choose | 
 | 	"Run As -> Ant Build...". Select the JRE tab, and check "Run in the same JRE as the workspace". | 
 |     Select the Refresh tab, and check "Refresh resources upon completion" to refresh your workspace | 
 |     after running the build to ensure Eclipse picks up the fresh binaries. Now select the "Run" button. | 
 |     <p></p> | 
 |     <center><img src="images/buildxml.png" alt="build.xml"></center> | 
 |     <p></p> | 
 | </ol> | 
 |  | 
 | <h3>Adding structs</h3> | 
 |  | 
 | <p>Often, methods return values or require parameters as a C struct.  To | 
 | add a new structure, simply add a new class in the same package as | 
 | the OS.java file which matches the definition of the C structure. | 
 | This will be picked up and correctly handled by <i>JNIGeneratorApp</i>.</p> | 
 |  | 
 | <p>If a struct is input-only or output-only, this information can be used | 
 | by <i>JNIGeneratorApp</i> to generate more efficient C code.  Use the | 
 | <b>flags</b> attribute of the native function to indicate this in the | 
 | metadata.</p> | 
 |  | 
 | <h3>More Hints</h3> | 
 |  | 
 | <ul> | 
 | <li>For GTK+ and Motif, all native functions must be wrapped in locking | 
 |     code.  When adding functions, simply copy the style and structure of the | 
 |     other native functions. | 
 | <li>Many functions on Mac OS X return structs which use <b>unions</b>.  For | 
 |     an example of how to add the markup for a union, see the | 
 |     <b>ControlFontStyleRec</b> structure and its metadata. | 
 | </ul> | 
 |  | 
 | <p>And there you go!  If you're having trouble, please post to the SWT | 
 | mailing list or file a new bug in bugzilla.</p> | 
 |  | 
 | </div> | 
 | <?php  | 
 | $html = ob_get_clean(); | 
 |  | 
 | # Generate the web page | 
 | $App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html); | 
 | ?> |