<?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>
    </div>
    
    <div class="homeitem3col">
      <h3>Getting Started with Managed Make</h3>
      <p>If your system has the GNU gfortran compiler installed, try this.</p>
      <ol>
        <li>File | New | Managed Make Fortran Project </li>
        <li>Call it whatever; click Next</li>
        <li>Change the Project Type to Executable (Gnu Fortran),
        and click Next</li>
        <li>Click on the C/C++ Indexer tab; select "No Indexer"
        from the dropdown; 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">
      <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 | Standard Make Fortran Project </li>
        <li>Call it whatever; click Next </li>
        <li>Click on the Binary Parsers tab.&nbsp; If
        you are
        under Windows, you need to change it from Elf Parser to PE Windows
        Parser</li>
        <li>Click on the C/C++ Indexer tab; select "No Indexer"
        from the dropdown</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);
?>
