<?php header('Location: http://wiki.eclipse.org/PTP/photran/documentation');
/*
<?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       = "Documentation for Photran";
    $pageKeywords    = "photran, contributors, developers";
    $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>Documentation?</h3>
      <p>Unfortunately,
      there is no real documentation for
      Photran at this
      time.&nbsp; Documentation is an excellent way to contribute to
      Photran;
      if you are interested in this, please contact us.<br>
      <br>
      That said, Photran is highly based on the CDT, and therefore, the <a
      href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/cdt-home/user/C_C++_Development_Toolkit_User_Guide.pdf?cvsroot=Tools_Project">CDT
      User's Guide</a> translates almost directly into documentation for
      Photran (although there are a few features the CDT has that Photran
      does not).&nbsp; If you are not sure how a part of Photran works, try
      looking there; if you're still not sure, join the <a
      href="mailinglists.php">Photran mailing list</a> and
      post your question there.</p>
      
      <h4>On this page...</h4>
      <ol>
        <li><a href="#mm">Getting Started with Managed Make</a></li>
        <li><a href="#sm">Getting Started with Standard Make</a></li>
      </ol>
      
      <h4>Elsewhere on the Photran site...</h4>
      <ol>
        <li><a href="refactoring.php">Overview of Refactoring Support</a></li>
      </ol>
      
      <h4>Elsewhere on the Web...</h4>
      <ol>
        <li><a href="http://g95.sourceforge.net/howto.html#photran">How to use Photran with g95</a>
            (<a href="http://vinyl2.sentex.ca/~tcc/g95/How_to_use_Photran_with_g95.html">alternate link</a>)</li>
        <!--li><a href="http://vinyl2.sentex.ca/~tcc/g95/How_to_use_mkmf_with_g95.html">How to use mkmf with g95</a></li-->
        <li><a href="ftp://ftp.swcp.com/pub/walt/F/photran.pdf">Photran Tutorial</a> from the <a href="http://www.fortran.com">F Tools</a> suite (slightly outdated)</li>
      </ol>
    </div>
    
    <div class="homeitem3col">
      <a name="mm"></a><h3>Getting Started with Managed Make</h3>
      <p>If your system has the GNU gfortran compiler installed, try this.</p>
      <ol>
        <li>File | New | Fortran Project </li>
        <li>Call it whatever</li>
        <li>Choose the Executable (Gnu Fortran) from the project type list</li>
        <li>Choose GCC Toolchain from the toolchain list (you may need to uncheck
            the &quot;Show project types...&quot; check box at the bottom of the
            window)
        <li>Click Next</li>
        <li>Click on Advanced Settings</li>
        <li>Expand C/C++ Build in the list on the left, and click on Settings</li>
        <li>Click on the Binary Parsers tab.&nbsp; Check the appropriate
        parsers for your platform.  If you are using Windows, check
        PE Windows Parser and/or Cygwin PE Parser; if you are using Linux,
        check Elf Parser; if you are using Mac, check Mach-O parser.</li>
        <li>Click on the Error Parsers tab.  Check the error parser(s) for the
        Fortran compiler(s) you will use.</li>
        <li>Click OK</li>
        <li>Click Finish</li>
        <li>Click File | New | Source File </li>
        <li>Call it hello.f90; click Finish</li>
        <li>Type the standard "Hello, World" program, and click
        File | Save.<br>
        <br>
        <samp>program hello<br>
        &nbsp;&nbsp;&nbsp; print *, "Hello World"<br>
        &nbsp;&nbsp;&nbsp; stop<br>
        end program hello<br>
        </samp><br>
        </li>
        <li>Open the Console view, and make sure "make" ran OK
        and compiled your program </li>
        <li>In the Fortran Projects view, expand the Binaries
        entry, and click on your
        executable (e.g., "whatever - [x86le]") </li>
        <li>Run | Run As | Run Local C/C++ Application (yeah, I
        know, it should say "Fortran Application", but it doesn't) </li>
        <li>Choose GDB Debugger (Cygwin GDB Debugger if you're
        under Windows) </li>
        <li>Check the Console view, and make sure Hello World appeared.</li>
      </ol>
    </div>
    
    <div class="homeitem3col">
      <a name="sm"></a><h3>Getting Started with Standard Make</h3>
        <p>To get started, try this.&nbsp; If you're under Windows, you need
        to be running Cygwin, c:\cygwin\bin and c:\cygwin\usr\bin should be in
        your system path, and the g95 libraries need to be copied into /usr/lib
        (to make things easier for yourself, at least).</p>
      <ol>
        <li>File | New | Fortran Project </li>
        <li>Call it whatever</li>
        <li>Expand &quot;Makefile project&quot; in the project type list (it has a folder icon),
            and choose Empty Project</li>
        <li>Make sure &quot;-- Other Toolchain --&quot; is selected in the
        toolchain list in the right-hand column, and
        click Next</li>
        <li>Click on Advanced Settings</li>
        <li>Expand C/C++ Build in the list on the left, and click on Settings</li>
        <li>Click on the Binary Parsers tab.&nbsp; Check the appropriate
        parsers for your platform.  If you are using Windows, check
        PE Windows Parser and/or Cygwin PE Parser; if you are using Linux,
        check Elf Parser; if you are using Mac, check Mach-O parser.</li>
        <li>Click on the Error Parsers tab.  Check the error parser(s) for the
        Fortran compiler(s) you will use.</li>
        <li>Click OK</li-->
        <li>Click Finish</li>
        <li>File | New | File </li>
        <li>Call it Makefile </li>
        <li>Click Finish </li>
        <li>We assume you're familiar with how to format a
        Makefile.&nbsp; Something like this will work for now.&nbsp;
        Remember
        to start the g95 line with a tab, not spaces. &nbsp;The -g switch
        instructs g95 to include debugging symbols in the generated executable
        so that it can be debugged later.<br>
        <br>
        <samp>all:<br>
        &nbsp;&nbsp;&nbsp; g95 -g hello.f90<br>
        <br>
        clean:<br>
        <br>
        </samp><br>
        </li>
        <li>File | New | Source File </li>
        <li>Call it hello.f90 </li>
        <li>Click Finish </li>
        <li>Type the standard "Hello, World" program.<br>
        <br>
        <samp>program hello<br>
        &nbsp;&nbsp;&nbsp; print *, "Hello World"<br>
        &nbsp;&nbsp;&nbsp; stop<br>
        end program hello<br>
        </samp><br>
        </li>
        <li>Project | Clean; then click OK </li>
        <li>Open the Console view, and make sure "make" ran OK
        and compiled your program </li>
        <li>In the Fortran Projects view, expand the Binaries
        entry, and click on your
        executable (e.g., "whatever - [x86le]") </li>
        <li>Run | Run As | Run Local C/C++ Application (yeah, I
        know, it should say "Fortran Application", but it doesn't) </li>
        <li>Choose GDB Debugger (Cygwin GDB Debugger if you're
        under Windows) </li>
        <li>Check the Console view, and make sure Hello World appeared.</li>
      </ol>
    </div>

  </div>
</div>    
EOHTML;

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