<?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       = "Contributors to 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>
    
    <p>Photran is primarily being developed at the University of Illinois at Urbana-Champaign,
    although we have received many valuable contributions from elsewhere.
    In alphabetical order by last name...</p>
    
    <div class="homeitem3col">
      <h3>Leads</h3>
      <ul>
        <li><a href="http://st-www.cs.uiuc.edu/users/johnson">Ralph Johnson</a>, UIUC - Principal investigator</li>
        <li><a href="http://jeff.over.bz/">Jeff Overbey</a>, UIUC - Lead developer; parser, refactoring infrastructure, indexer/VPG, refactorings, UI features, error parsers, CDT integration</li>
        <li><b>Greg Watson</b>, IBM - PTP project lead; release engineering</li>
      </ul>
    </div>
    
    <div class="homeitem3col">
      <h3>Active Committers and Contributors</h3>
      <ul>
        <li><b>Matt Fotzler</b>, UIUC - PTP integration</li>
        <li><b>Bill Hilliard</b>, Intel - Committer; managed build support (Intel Fortran)</li>
        <li><b>Kurt Hendle</b>, UIUC - Committer; refactorings, editor folding</li>
        <li><b>Matthew Michelotti</b>, UIUC - C preprocessor support</li>
        <li><b>Stas Negara</b>, UIUC - Preliminary Fortran indexer, Move Save Variables to Common Block refactoring</li>
        <li><b>Gustavo Rissetti</b>, Universidade Federal de Santa Maria - Remove Unused Variables, Standardize Statements, and Data to Parameter refactorings</li>
        <li><b>Timofey Yuvashev</b>, UIUC - Committer; UI features, managed build support, refactorings</li>
      </ul>
    </div>
    
    <div class="homeitem3col">
      <h3>Past Contributors and Committers</h3>
      <ul>
        <li><b>Antonio Barbado</b> - Spanish FAQ translation</li>
        <li><b>Bruno Boniati</b>, Universidade Regional do Noroeste do Estado do Rio Grande do Sul - Replace Obsolete Operators refactoring</li>
        <li><a href="http://www.fortran.com/fortran/walt.html">Walt Brainerd</a>, <a href="http://www.fortran.com/">The Fortran Company</a> - F support (and more)</li>
        <li><b>Chin Fei Cheah</b>, UIUC - UI features, MSI package</li>
        <li><b>Nicholas Chen</b>, UIUC - UI features, MSI package</li>
        <li><b>Sarah de la Cruz</b>, UIUC (CS427 Fa07) - Find All References</li>
        <li><b>Jeff Dammeyer</b>, UIUC (CS427 Fa08) - Fortran Search</li>
        <li><b>Andrew Deason</b>, UIUC (CS427 Fa08) - Fortran Search</li>
        <li><b>Kevin Decker</b>, UIUC (CS427 Fa07) - Find All References</li>
        <li><b>Joe Digiovanna</b>, UIUC (CS427 Fa08) - Fortran Search</li>
        <li><b>Charles Felish</b>, UIUC (CS427 Fa07) - Find All References</li>
        <li><a href="http://www.laputan.org/">Brian Foote</a>, UIUC</li>
        <li><b>Feanil Patel</b>, UIUC - Prototype Fortran debugger</li>
        <li><b>Craig Rasmussen</b>, LANL - Managed build support, error parsers</li>
        <li><b>Dirk Rossow</b>, Flensburger Schiffbau Gesellschaft - Fixed form lexer</li>
        <li><b>Ken Schultz</b>, UIUC - Prototype Fortran debugger</li>
        <!--li><b>Mikhail Sennikovsky</b>, Intel - Managed build support (Intel Fortran)</li-->
        <li><b>Matt Scarpino</b>, Eclipse Engineering, LLC - Fortran Nature, Convert to Fortran Project Wizard, Help Plug-in Generator</li>
        <li><b>Nick Sexmith</b>, UIUC (CS427 Fa08) - Fortran Search</li>
        <li><b>James Shepherd</b>, UIUC (CS427 Fa07) - Find All References</li>
        <li><b>Shawn Temming</b>, UIUC - Prototype Fortran debugger</li>
        <!--li><b>Leo Treggiari</b>, Intel - Managed build support (Intel Fortran)</li-->
        <li><a href="http://opera.ucsd.edu/~xanthos2/">Spiros Xanthos</a>, UIUC</li>
      </ul>
      <p><i>Special thanks to
      Prof. Ralph Johnson,
      Nicholas Chen,
      and TAs 
      Dustin Bortner,
      Yun Young Lee,
      Maurice Rabb,
      Mohsen Vakilian
      for supervising contributions completed as part of CS427 (Software Engineering I) at UIUC.
      </i>
    </div>

  </div> 
</div>    
EOHTML;

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