<?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>The Short Version</h3>
      
      <p>Install into Eclipse 3.4 (Ganymede) from the remote update site<br>
      <b>http://download.eclipse.org/technology/photran/updates/eclipse3.4cdt5.0</b-->
      
      <h3>Photran 4.0 Prereleases</h3>
      
      <p>Photran 4.0 will be officially released in September, 2009.
      <ul>
        <li> <a href="http://wiki.eclipse.org/PTP/builds/photran/4.0">The latest prerelease can be downloaded here</a>
        <li> <a href="http://wiki.eclipse.org/PTP/photran/installation">Installation instructions are available here</a></p>
      </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>The Long Version</h3>
      
      <h4>System Requirements</h4>
      
      <p>To install Photran 4.0 beta 5,
      <ol>
        <li>you must have Eclipse 3.4 (Ganymede) installed,
        <li>it must be running on a Java 1.5 JVM, and
        <li>if you want to compile and build Fortran applications,
          you must have a
          <span style="font-family: monospace;">make</span>
          utility and a Fortran compiler in your system path.
      </ol>
      
      <p>If you do not already have the C/C++ Development Tools (CDT) 5.0
      installed in Eclipse, they will be installed automatically along with
      Photran.  To get reasonable performance from Eclipse, we recommend
      <a href="http://java.sun.com">Sun</a> or
      <a href="http://wiki.eclipse.org/index.php/J9">IBM's</a> JVM.
      
      <p>&nbsp;&nbsp;

      <h4>Installation Procedure</h4>
      
      <p>To install Photran, start Eclipse 3.4, then...
      <ol>
        <li> Click on Help &gt; Software Updates...
        <li> Click on the &quot;Available Software&quot; tab
        <li> Click on &quot;Add Site...&quot;
        <li> Enter the URL
        <b>http://download.eclipse.org/technology/photran/updates/eclipse3.4cdt5.0</b>
        and click OK
        <li> The URL should appear in the list.  Expand it.
        <li> Expand &quot;Photran (Eclipse Fortran Development Tools)&quot; and
             check the box next to &quot;Photran (Eclipse Fortran Development
             Tools) (Eclipse Technology Incubation)&quot;
        <li> If you have Intel Fortran installed on Linux or IBM XLF installed
             on Mac, then expand &quot;Photran Compiler Support&quot; and
             select the appropriate compiler as well.
        <li> Click on the &quot;Install...&quot; button in the upper-right
             corner of the dialog box.
      </ol>
    </div>
    
    <div class="homeitem3col">
      <h3>If You Have Problems</h3>

      <p>If you have problems installing from the update site (e.g., in some cases,
      the &quot;Photran (Eclipse Fortran Development Tools)&quot; item cannot
      be expanded), you can also
      download an update site archive and install from it instead.  To do this,
      <ol>
        <li> Download <a href="http://www.eclipse.org/downloads/download.php?file=/technology/photran/updates/photran40b5-master.zip">photran40b5-master.zip</a>
        <li> Click on Help &gt; Software Updates...
        <li> Click on the &quot;Available Software&quot; tab
        <li> Click on &quot;Add Site...&quot;
        <li> Click on &quot;Archive...&quot;
        <li> Select the photran40b5-master.zip file you downloaded
        <li> This file should appear in the list (prefixed with &quot;jar:file:&quot;).  Expand it.
        <li> Expand &quot;Photran (Eclipse Fortran Development Tools)&quot; and
             check the box next to &quot;Photran (Eclipse Fortran Development
             Tools) (Eclipse Technology Incubation)&quot;
        <li> If you have Intel Fortran installed on Linux or IBM XLF installed
             on Mac, then expand &quot;Photran Compiler Support&quot; and
             select the appropriate compiler as well.
        <li> Click on the &quot;Install...&quot; button in the upper-right
             corner of the dialog box.
      </ol>
    </div-->
    

    <p>Older releases are available in the <a href="download-archive.php">Photran Download Archive</a>.</p>
 </div>
</div>    
EOHTML;

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