<?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 (www.ufsm.br) - 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>Antonio Barbado - Spanish FAQ translation</li>
        <li>Bruno Boniati, 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 href="http://www.fortran.com/">The Fortran Company</a> - F support (and more)</li>
        <li>Chin Fei Cheah, UIUC - UI features, MSI package</li>
        <li>Nicholas Chen, UIUC - UI features, MSI package</li>
        <li>Sarah de la Cruz, UIUC (CS427 Fa07) - Find All References</li>
        <li>Jeff Dammeyer, UIUC (CS427 Fa08) - Fortran Search</li>
        <li>Andrew Deason, UIUC (CS427 Fa08) - Fortran Search</li>
        <li>Kevin Decker, UIUC (CS427 Fa07) - Find All References</li>
        <li>Joe Digiovanna, UIUC (CS427 Fa08) - Fortran Search</li>
        <li>Charles Felish, UIUC (CS427 Fa07) - Find All References</li>
        <li><!--a href="http://www.laputan.org/"-->Brian Foote, UIUC</li>
        <li>Feanil Patel, UIUC - Prototype Fortran debugger</li>
        <li>Craig Rasmussen, LANL - Managed build support, error parsers</li>
        <li>Dirk Rossow, Flensburger Schiffbau Gesellschaft - Fixed form lexer</li>
        <li>Ken Schultz, UIUC - Prototype Fortran debugger</li>
        <!--li>Mikhail Sennikovsky, Intel - Managed build support (Intel Fortran)</li-->
        <li>Nick Sexmith, UIUC (CS427 Fa08) - Fortran Search</li>
        <li>James Shepherd, UIUC (CS427 Fa07) - Find All References</li>
        <li>Shawn Temming, UIUC - Prototype Fortran debugger</li>
        <!--li>Leo Treggiari, Intel - Managed build support (Intel Fortran)</li-->
        <li><!--a href="http://leto.cs.uiuc.edu/%7Espiros"-->Spiros Xanthos, 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);
?>
