<?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'

    $pageTitle       = "Downloading Photran";
    $pageKeywords    = "photran, download";
    $pageAuthor      = "Jeffrey Overbey";
    
    # Paste your HTML content between the EOHTML markers!    
    $html = <<<EOHTML

<div id="maincontent">
  <div id="midcolumn">
    <h1>$pageTitle</h1>

    <div class="homeitem3col">
      <h3>Photran 8.0</h3>

      <p>Photran 8.0 is part of the Eclipse Juno release train, along with <a target="_blank" href="http://wiki.eclipse.org/PTP/release_notes/5.0">PTP 6.0</a>.
      Eclipse 4.2 (Juno) was released on June 27, 2012.
      A list of new features is available in the <a target="_blank" href="http://wiki.eclipse.org/PTP/new_and_noteworthy/6.0.0#Fortran_.28Photran.29">New &amp; Noteworthy</a>,
      and comprehensive <a target="_blank" href="http://wiki.eclipse.org/PTP/photran/documentation">documentation</a>
      is available.
      
      <p><b>Photran 8 requires Eclipse 4.2 (Juno) and CDT 8.1.</b>

      <ul>
         <li>If you have not installed Photran before, or if you run into any problems during installation, please read the
             <a href="http://wiki.eclipse.org/PTP/photran/documentation/photran8installation">installation instructions</a>.
         <li>If you are familiar with the installation procedure, Photran can be installed from the Eclipse Juno update site:<br>
             <b>http://download.eclipse.org/releases/juno</b>
      </ul>

      <p>Please also join the <b><a href="https://dev.eclipse.org/mailman/listinfo/photran">Photran mailing list</a></b>;
      if you have any problems installing or using Photran, that is a great place to ask for help.
    </div>

    <!--div class="homeitem3col">
      <h3>Photran 7.0</h3>

      <p>Photran 7.0 is part of the Eclipse Indigo release train, along with <a target="_blank" href="http://wiki.eclipse.org/PTP/release_notes/5.0">PTP 5.0</a>.
      Eclipse 3.6 (Indigo) was released on June 23, 2010.
      A list of new features is available in the <a target="_blank" href="http://wiki.eclipse.org/PTP/new_and_noteworthy/5.0.0#Photran">New &amp; Noteworthy</a>,
      and comprehensive <a target="_blank" href="http://wiki.eclipse.org/PTP/photran/documentation">documentation</a>
      is available.
      
      <p><b>Photran 7 requires Eclipse 3.7 (Indigo) and CDT 8.0.</b>

      <ul>
         <li>If you have not installed Photran before, or if you run into any problems during installation, please read the
             <a href="http://wiki.eclipse.org/PTP/photran/documentation/photran7installation">installation instructions</a>.
         <li>If you are familiar with the installation procedure, Photran can be installed from the Eclipse Indigo update site:<br>
             <b>http://download.eclipse.org/releases/indigo</b>
      </ul>

      <p>Please also join the <b><a href="https://dev.eclipse.org/mailman/listinfo/photran">Photran mailing list</a></b>;
      if you have any problems installing or using Photran, that is a great place to ask for help.
    </div-->

    <p>&nbsp;
    <p><small>Old versions are available in the <a href="download-archive.php">Photran Download Archive</a>.</small></p>
 </div>
</div>    
EOHTML;

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