<?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.1</h3>

      <p>Photran 8.1 is part of the Eclipse Kepler release train, along with <a target="_blank" href="http://wiki.eclipse.org/PTP/release_notes/7.0">PTP 7.0</a>.
      Eclipse 4.3 (Kepler) was released on June 26, 2013.
      A list of new features is available in the <a target="_blank" href="http://wiki.eclipse.org/PTP/new_and_noteworthy/7.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.1 requires Eclipse 4.3 (Juno) and CDT 8.2.</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 Kepler update site:<br>
             <b>http://download.eclipse.org/releases/kepler</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);
?>
