
<?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());    # All on the same line to unclutter the user's desktop'

	#*****************************************************************************
	#
	# template.php
	#
	# Author: 		Wayne Beaton
	# Date:			2006-06-06
	#
	# Description: 
	# This page contains pointers to download and tutorial information for
	# individuals interested in using Eclipse for Java development.
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Eclipse for C/C++ Developers";
	$pageKeywords	= "callisto eclipse 3.2 cdt c cpp resource screencam screen cam tutorial ";
	$pageAuthor		= "Wayne Beaton";
	
	# Add page-specific Nav bars here
	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
	# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
	# $Nav->addCustomNav("My Link", "mypage.php", "_self", 1);
	# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 1);
	#$Nav->addCustomNav("<img src=\"http://www.eclipsecon.org/2007/image125x125.gif\"/>","http://www.eclipsecon.org/2007", "_self", 1);
	
	# End: page-specific settings
	#
			
	require_once("links.php");
	
	# Paste your HTML content between the EOHTML markers!	
	$html = <<<EOHTML
<script type="text/javascript">
function show_section(name) {
	if (document.getElementById(name).style.display=='block') return;
	document.getElementById(name +'-down').style.display='none';
	document.getElementById(name).style.display='block'
}
function hide_section(name) {
	if (document.getElementById(name).style.display=='none') return;
	document.getElementById(name +'-down').style.display='inline';
	document.getElementById(name).style.display='none'
}
</script>
<link rel="stylesheet" type="text/css" href="callisto.css" media="screen" />

<div class="callistoRealEstate paddingLeft">
	<div class="maincontent">
        <table cellspacing=0 class="callistoButtons">
        	<tr>
        		<td width="50"><img src="images/c.jpg"></a></td>
				<td width="100%" class="noRightBorder">$pageTitle</td>
			</tr>
		</table>
       
		<a href="http://www.eclipsecon.org/?tag=eclipse-callisto-cdev"><img style="margin-top:5px;" align="right" src="http://www.eclipsecon.org/2007/image125x125.gif"/></a>

		<p>The Eclipse C/C++ Development Tools (CDT) runs on top of the Eclipse
		Platform. The CDT provides advanced functionality for C/C++ developers, 
		including:</p>
		
		<ul>
		  <li>C/C++ Editor (basic functionality, syntax highlighting, code completion etc.) </li>
		  <li>C/C++ Debugger (APIs &amp; Default implementation, using GDB) </li>
		  <li>C/C++ Launcher (APIs &amp; Default implementation, launches and external application) </li>
		  <li>Parser</li>
		  <li>Search Engine</li>
		  <li>Content Assist Provider</li>		
		  <li>Makefile generator</li>
		</ul>
		
		<p>You need to use the <a href="$callisto_discovery">Callisto Discovery Site</a> to add the CDT features.</p>
		
      	<div class="homeitem"  style="min-height:250px" >
      		<h3>What do you need?</h3>
				<p><strong><a href="http://download.eclipse.org/eclipse/downloads/drops/R-3.2-200606291905/index.php">Eclipse 3.2</a> is required for Callisto.</strong> 
				There is no upgrade path from previous versions of Eclipse.</p>
      		
			<ul>
      			<li style="border-style: none">The <a href="$platform_runtime_binaries">Eclipse Platform Runtime</a> <span style="white-space:nowrap">Binaries<img id="platform-down" src="images/down.png" onclick="show_section('platform');"/></span>
  					<div id="platform" style="border-style:solid;border-width:1px;margin-left:5%;display:none">
  						<h3><img onclick="hide_section('platform');" align="right" src="images/close.png"/>Eclipse SDK</h3>
      					The Eclipse Platform Runtime Binaries provides base integrated development 
      					environment (IDE) functionality, but without support for any specific 
      					programming language. Combining the CDT with the Platform Runtime forms 
      					a first-class C/C++ IDE.
  					</div>
      			</li>
      			<li style="border-style: none">The C/C++ Development tools <span style="white-space:nowrap">(<a href="/cdt">CDT</a>)<img id="cdt-down" src="images/down.png" onclick="show_section('cdt');"/></span>
      				<div id="cdt" style="border-style:solid;border-width:1px;margin-left:5%;display:none">
      					<h3><img onclick="hide_section('cdt');" align="right" src="images/close.png"/>CDT</h3>
	      				The CDT provides advanced functionality for C/C++ developers.
	      				Combining the CDT with the Platform Runtime forms 
	      				a first-class C/C++ IDE.
      				</div>
      			</li>
      		</ul>
      	</div>    	
      	<div class="homeitem">
      		<h3>Tutorials and Help</h3>
      		<ul>
      		    <li style="list-style-image: url(images/movie.png);border-style: none"><a href="http://www.eclipse.org/downloads/download.php?r=1&file=/technology/phoenix/demos/install-eclipse/install-eclipse.html">Installing the Eclipse SDK</a></li>
      		    <li style="list-style-image: url(images/movie.png);border-style: none"><a href="$install_cdt">Installing and using the C/C++ Development Tools</a></li>
				<li style="list-style-image: url(images/tutorial.png);border-style: none"><a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/cdt-home/user/Tutorials.html?cvsroot=Tools_Project">CDT Tutorials</a></li>
				<li style="list-style-image: url(images/movie.png);border-style: none"><a href="$install_callisto">Installing Features from the Callisto Discovery Site</a></li>      			    		
      		</ul>
      	</div>
      	
      		
      	<div class="homeitem">
      		<h3>Suggested reading</h3>
      		<ul>
      			<li style="list-style-image: url(images/document.png);border-style: none"><a href="/cdt">The CDT home page</a></li>
				<li style="list-style-image: url(images/document.png);border-style: none"><a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/cdt-home/user/faq.html?cvsroot=Tools_Project">Frequently asked questions about the CDT</a></li>
			</ul>
      	</div>
	</div>
</div>

EOHTML;

	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
