Index: web/trunk/date.txt =================================================================== --- web/trunk/date.txt (revision 1748) +++ web/trunk/date.txt (revision 1749) @@ -1 +1 @@ -Sun 28 Oct 2018 16:45:44 CET +Mon 5 Nov 2018 16:54:57 CET Index: web/trunk/version.dat =================================================================== --- web/trunk/version.dat (revision 1748) +++ web/trunk/version.dat (revision 1749) @@ -1 +1 @@ -0.0.19 +0.0.20 Index: web/trunk/filelist.php =================================================================== --- web/trunk/filelist.php (revision 0) +++ web/trunk/filelist.php (revision 1749) @@ -0,0 +1,1208 @@ +enableIpWhitelist) { + $this->__ipWhitelistCheck(); + } + + $this->__currentDirectory = $this->startDirectory; + + // Sorting + if (isset($_GET['order']) && in_array($_GET['order'], $this->sortableFields)) { + $this->sortBy = $_GET['order']; + } + + if (isset($_GET['sort']) && ($_GET['sort'] == 'asc' || $_GET['sort'] == 'desc')) { + $this->__sortOrder = $_GET['sort']; + } + + if (isset($_GET['dir'])) { + if (isset($_GET['delete']) && $this->enableDirectoryDeletion) { + $this->deleteDirectory(); + } + + $current = $_GET['dir']; + + if ( strpos( $current, "downloads" ) !== 0 ) return; + + $this->__currentDirectory = $current; + return $this->__display(); + } elseif (isset($_GET['preview'])) { + $this->__generatePreview($_GET['preview']); + } else { + return $this->__display(); + } + } + + public function login() { + $password = filter_var($_POST['password'], FILTER_SANITIZE_STRING); + + if ($password === $this->password) { + $_SESSION['evdir_loggedin'] = true; + unset($_SESSION['evdir_loginfail']); + } else { + $_SESSION['evdir_loginfail'] = true; + unset($_SESSION['evdir_loggedin']); + + } + } + + public function upload() { + $files = $this->__formatUploadArray($_FILES['upload']); + + if ($this->enableUploads) { + if ($this->enableMultiFileUploads) { + foreach ($files as $file) { + $status = $this->__processUpload($file); + } + } else { + $file = $files[0]; + $status = $this->__processUpload($file); + } + + return $status; + } + return false; + } + + private function __formatUploadArray($files) { + $fileAry = array(); + $fileCount = count($files['name']); + $fileKeys = array_keys($files); + + for ($i = 0; $i < $fileCount; $i++) { + foreach ($fileKeys as $key) { + $fileAry[$i][$key] = $files[$key][$i]; + } + } + + return $fileAry; + } + + private function __processUpload($file) { + if (isset($_GET['dir'])) { + $this->__currentDirectory = $_GET['dir']; + } + + if (! $this->__currentDirectory) { + $filePath = realpath($this->startDirectory); + } else { + $this->__currentDirectory = str_replace('..', '', $this->__currentDirectory); + $this->__currentDirectory = ltrim($this->__currentDirectory, "/"); + $filePath = realpath($this->__currentDirectory); + } + + $filePath = $filePath . DS . $file['name']; + + if (! empty($file)) { + + if (! $this->overwriteOnUpload) { + if (file_exists($filePath)) { + return 2; + } + } + + if (! in_array(mime_content_type($file['tmp_name']), $this->allowedUploadMimeTypes)) { + return 3; + } + + move_uploaded_file($file['tmp_name'], $filePath); + + if (mime_content_type($filePath) == 'application/zip' && $this->enableUnzipping && class_exists('ZipArchive')) { + + $zip = new ZipArchive; + $result = $zip->open($filePath); + $zip->extractTo(realpath($this->__currentDirectory)); + $zip->close(); + + if ($this->deleteZipAfterUploading) { + // Delete the zip file + unlink($filePath); + } + + + } + + return true; + } + } + + public function deleteFile() { + if (isset($_GET['deleteFile'])) { + $file = $_GET['deleteFile']; + + // Clean file path + $file = str_replace('..', '', $file); + $file = ltrim($file, "/"); + + // Work out full file path + $filePath = __DIR__ . $this->__currentDirectory . '/' . $file; + + if (file_exists($filePath) && is_file($filePath)) { + return unlink($filePath); + } + return false; + } + } + + public function deleteDirectory() { + if (isset($_GET['dir'])) { + $dir = $_GET['dir']; + // Clean dir path + $dir = str_replace('..', '', $dir); + $dir = ltrim($dir, "/"); + + // Work out full directory path + $dirPath = __DIR__ . '/' . $dir; + + if (file_exists($dirPath) && is_dir($dirPath)) { + + $iterator = new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS); + $files = new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::CHILD_FIRST); + + foreach ($files as $file) { + if ($file->isDir()) { + rmdir($file->getRealPath()); + } else { + unlink($file->getRealPath()); + } + } + return rmdir($dir); + } + } + return false; + } + + public function createDirectory() { + if ($this->enableDirectoryCreation) { + $directoryName = $_POST['directory']; + + // Convert spaces + $directoryName = str_replace(' ', '_', $directoryName); + + // Clean up formatting + $directoryName = preg_replace('/[^\w-_]/', '', $directoryName); + + if (isset($_GET['dir'])) { + $this->__currentDirectory = $_GET['dir']; + } + + if (! $this->__currentDirectory) { + $filePath = realpath($this->startDirectory); + } else { + $this->__currentDirectory = str_replace('..', '', $this->__currentDirectory); + $filePath = realpath($this->__currentDirectory); + } + + $filePath = $filePath . DS . strtolower($directoryName); + + if (file_exists($filePath)) { + return false; + } + + return mkdir($filePath, 0755); + + } + return false; + } + + public function sortUrl($sort) { + + // Get current URL parts + $urlParts = parse_url($_SERVER['REQUEST_URI']); + + $url = ''; + + if (isset($urlParts['scheme'])) { + $url = $urlParts['scheme'] . '://'; + } + + if (isset($urlParts['host'])) { + $url .= $urlParts['host']; + } + + if (isset($urlParts['path'])) { + $url .= $urlParts['path']; + } + + + // Extract query string + if (isset($urlParts['query'])) { + $queryString = $urlParts['query']; + + parse_str($queryString, $queryParts); + + // work out if we're already sorting by the current heading + if (isset($queryParts['order']) && $queryParts['order'] == $sort) { + // Yes we are, just switch the sort option! + if (isset($queryParts['sort'])) { + if ($queryParts['sort'] == 'asc') { + $queryParts['sort'] = 'desc'; + } else { + $queryParts['sort'] = 'asc'; + } + } + } else { + $queryParts['order'] = $sort; + $queryParts['sort'] = 'asc'; + } + + // Now convert back to a string + $queryString = http_build_query($queryParts); + + $url .= '?' . $queryString; + } else { + $order = 'asc'; + if ($sort == $this->sortBy) { + $order = 'desc'; + } + $queryString = 'order=' . $sort . '&sort=' . $order; + $url .= '?' . $queryString; + } + + return $url; + } + + public function sortClass($sort) { + $class = $sort . '_'; + + if ($this->sortBy == $sort) { + if ($this->__sortOrder == 'desc') { + $class .= 'desc sort_desc'; + } else { + $class .= 'asc sort_asc'; + } + } else { + $class = ''; + } + return $class; + } + + private function __ipWhitelistCheck() { + // Get the users ip + $userIp = $_SERVER['REMOTE_ADDR']; + + if (! in_array($userIp, $this->ipWhitelist)) { + header('HTTP/1.0 403 Forbidden'); + die('Your IP address (' . $userIp . ') is not authorized to access this file.'); + } + } + + private function __display() { + if ($this->__currentDirectory != '.' && !$this->__endsWith($this->__currentDirectory, DS)) { + $this->__currentDirectory = $this->__currentDirectory . DS; + } + + return $this->__loadDirectory($this->__currentDirectory); + } + + private function __loadDirectory($path) { + $files = $this->__scanDir($path); + + if (! empty($files)) { + // Strip excludes files, directories and filetypes + $files = $this->__cleanFileList($files); + foreach ($files as $file) { + $filePath = realpath($this->__currentDirectory . DS . $file); + + if ($this->__isDirectory($filePath)) { + + if (! $this->includeUrl) { + $urlParts = parse_url($_SERVER['REQUEST_URI']); + + $dirUrl = ''; + + if (isset($urlParts['scheme'])) { + $dirUrl = $urlParts['scheme'] . '://'; + } + + if (isset($urlParts['host'])) { + $dirUrl .= $urlParts['host']; + } + + if (isset($urlParts['path'])) { + $dirUrl .= $urlParts['path']; + } + } else { + $dirUrl = $this->directoryUrl; + } + + if ($this->__currentDirectory != '' && $this->__currentDirectory != '.') { + $dirUrl .= '?dir=' . rawurlencode($this->__currentDirectory) . rawurlencode($file); + } else { + $dirUrl .= '?dir=' . rawurlencode($file); + } + + $this->__directoryList[$file] = array( + 'name' => rawurldecode($file), + 'path' => $filePath, + 'type' => 'dir', + 'url' => $dirUrl + ); + } else { + $this->__fileList[$file] = $this->__getFileType($filePath, $this->__currentDirectory . DS . $file); + } + } + } + + if (! $this->showSubDirectories) { + $this->__directoryList = null; + } + + $data = array( + 'currentPath' => $this->__currentDirectory, + 'directoryTree' => $this->__getDirectoryTree(), + 'files' => $this->__setSorting($this->__fileList), + 'directories' => $this->__directoryList, + 'requirePassword' => $this->passwordProtect, + 'enableUploads' => $this->enableUploads + ); + + return $data; + } + + private function __setSorting($data) { + $sortOrder = ''; + $sortBy = ''; + + // Sort the files + if ($this->sortBy == 'name') { + function compareByName($a, $b) { + return strnatcasecmp($a['name'], $b['name']); + } + + usort($data, 'compareByName'); + $this->soryBy = 'name'; + } elseif ($this->sortBy == 'size') { + function compareBySize($a, $b) { + return strnatcasecmp($a['size_bytes'], $b['size_bytes']); + } + + usort($data, 'compareBySize'); + $this->soryBy = 'size'; + } elseif ($this->sortBy == 'modified') { + function compareByModified($a, $b) { + return strnatcasecmp($a['modified'], $b['modified']); + } + + usort($data, 'compareByModified'); + $this->soryBy = 'modified'; + } + + if ($this->__sortOrder == 'desc') { + $data = array_reverse($data); + } + return $data; + } + + private function __scanDir($dir) { + // Prevent browsing up the directory path. + if (strstr($dir, '../')) { + return false; + } + + if ($dir == '/') { + $dir = $this->startDirectory; + $this->__currentDirectory = $dir; + } + + $strippedDir = str_replace('/', '', $dir); + + $dir = ltrim($dir, "/"); + + // Prevent listing blacklisted directories + if (in_array($strippedDir, $this->ignoredDirectories)) { + return false; + } + + if (! file_exists($dir) || !is_dir($dir)) { + return false; + } + + return scandir($dir); + } + + private function __cleanFileList($files) { + $this->ignoredDirectories[] = '.'; + $this->ignoredDirectories[] = '..'; + foreach ($files as $key => $file) { + + // Remove unwanted directories + if ($this->__isDirectory(realpath($file)) && in_array($file, $this->ignoredDirectories)) { + unset($files[$key]); + } + + // Remove dot directories (if enables) + if ($this->ignoreDotDirectories && substr($file, 0, 1) === '.') { + unset($files[$key]); + } + + // Remove unwanted files + if (! $this->__isDirectory(realpath($file)) && in_array($file, $this->ignoredFileNames)) { + unset($files[$key]); + } + // Remove unwanted file extensions + if (! $this->__isDirectory(realpath($file))) { + + $info = pathinfo(mb_convert_encoding($file, 'UTF-8', 'UTF-8')); + + if (isset($info['extension'])) { + $extension = $info['extension']; + + if (in_array($extension, $this->ignoredFileExtensions)) { + unset($files[$key]); + } + } + + // If dot files want ignoring, do that next + if ($this->ignoreDotFiles) { + + if (substr($file, 0, 1) == '.') { + unset($files[$key]); + } + } + } + } + return $files; + } + + private function __isDirectory($file) { + if ($file == $this->__currentDirectory . DS . '.' || $file == $this->__currentDirectory . DS . '..') { + return true; + } + $file = mb_convert_encoding($file, 'UTF-8', 'UTF-8'); + + if (filetype($file) == 'dir') { + return true; + } + + return false; + } + + /** + * __getFileType + * + * Returns the formatted array of file data used for thre directory listing. + * + * @param string $filePath Full path to the file + * @return array Array of data for the file + */ + private function __getFileType($filePath, $relativePath = null) { + $fi = new finfo(FILEINFO_MIME_TYPE); + + if (! file_exists($filePath)) { + return false; + } + + $type = $fi->file($filePath); + + $filePathInfo = pathinfo($filePath); + + $fileSize = filesize($filePath); + + $fileModified = filemtime($filePath); + + $filePreview = false; + + // Check if the file type supports previews + if ($this->__supportsPreviews($type) && $this->showThumbnails) { + $filePreview = true; + } + + return array( + 'name' => $filePathInfo['basename'], + 'extension' => (isset($filePathInfo['extension']) ? $filePathInfo['extension'] : null), + 'dir' => $filePathInfo['dirname'], + 'path' => $filePath, + 'relativePath' => $relativePath, + 'size' => $this->__formatSize($fileSize), + 'size_bytes' => $fileSize, + 'modified' => $fileModified, + 'type' => 'file', + 'mime' => $type, + 'url' => $this->__getUrl($filePathInfo['basename']), + 'preview' => $filePreview, + 'target' => ($this->openLinksInNewTab ? '_blank' : '_parent') + ); + } + + private function __supportsPreviews($type) { + if (in_array($type, $this->__previewMimeTypes)) { + return true; + } + return false; + } + + /** + * __getUrl + * + * Returns the url to the file. + * + * @param string $file filename + * @return string url of the file + */ + private function __getUrl($file) { + if (! $this->includeUrl) { + $dirUrl = $_SERVER['REQUEST_URI']; + + $urlParts = parse_url($_SERVER['REQUEST_URI']); + + $dirUrl = ''; + + if (isset($urlParts['scheme'])) { + $dirUrl = $urlParts['scheme'] . '://'; + } + + if (isset($urlParts['host'])) { + $dirUrl .= $urlParts['host']; + } + + if (isset($urlParts['path'])) { + $dirUrl .= $urlParts['path']; + } + } else { + $dirUrl = $this->directoryUrl; + } + + if ($this->__currentDirectory != '.') { + $dirUrl = $dirUrl . $this->__currentDirectory; + } + return $dirUrl . rawurlencode($file); + } + + private function __getDirectoryTree() { + $dirString = $this->__currentDirectory; + $directoryTree = array(); + + $directoryTree['./'] = 'Index'; + + if (substr_count($dirString, '/') >= 0) { + $items = explode("/", $dirString); + $items = array_filter($items); + $path = ''; + foreach ($items as $item) { + if ($item == '.' || $item == '..') { + continue; + } + $path .= rawurlencode($item) . '/'; + $directoryTree[$path] = $item; + } + } + + $directoryTree = array_filter($directoryTree); + + return $directoryTree; + } + + private function __endsWith($haystack, $needle) { + return $needle === "" || (($temp = strlen($haystack) - strlen($needle)) >= 0 && strpos($haystack, $needle, $temp) !== false); + } + + private function __generatePreview($filePath) { + $file = $this->__getFileType($filePath); + + if ($file['mime'] == 'image/jpeg') { + $image = imagecreatefromjpeg($file['path']); + } elseif ($file['mime'] == 'image/png') { + $image = imagecreatefrompng($file['path']); + } elseif ($file['mime'] == 'image/gif') { + $image = imagecreatefromgif($file['path']); + } else { + die(); + } + + $oldX = imageSX($image); + $oldY = imageSY($image); + + $newW = 250; + $newH = 250; + + if ($oldX > $oldY) { + $thumbW = $newW; + $thumbH = $oldY * ($newH / $oldX); + } + if ($oldX < $oldY) { + $thumbW = $oldX * ($newW / $oldY); + $thumbH = $newH; + } + if ($oldX == $oldY) { + $thumbW = $newW; + $thumbH = $newW; + } + + header('Content-Type: ' . $file['mime']); + + $newImg = ImageCreateTrueColor($thumbW, $thumbH); + + imagecopyresampled($newImg, $image, 0, 0, 0, 0, $thumbW, $thumbH, $oldX, $oldY); + + if ($file['mime'] == 'image/jpeg') { + imagejpeg($newImg); + } elseif ($file['mime'] == 'image/png') { + imagepng($newImg); + } elseif ($file['mime'] == 'image/gif') { + imagegif($newImg); + } + imagedestroy($newImg); + die(); + } + + private function __formatSize($bytes) { + $units = array('B', 'KB', 'MB', 'GB', 'TB'); + + $bytes = max($bytes, 0); + $pow = floor(($bytes ? log($bytes) : 0) / log(1024)); + $pow = min($pow, count($units) - 1); + + $bytes /= pow(1024, $pow); + + return round($bytes, 2) . ' ' . $units[$pow]; + } + +} + +$listing = new DirectoryListing(); + +$successMsg = null; +$errorMsg = null; + +if (isset($_POST['password'])) { + $listing->login(); + + if (isset($_SESSION['evdir_loginfail'])) { + $errorMsg = 'Login Failed! Please check you entered the correct password an try again.'; + unset($_SESSION['evdir_loginfail']); + } + +} elseif (isset($_FILES['upload'])) { + $uploadStatus = $listing->upload(); + if ($uploadStatus == 1) { + $successMsg = 'Your file was successfully uploaded!'; + } elseif ($uploadStatus == 2) { + $errorMsg = 'Your file could not be uploaded. A file with that name already exists.'; + } elseif ($uploadStatus == 3) { + $errorMsg = 'Your file could not be uploaded as the file type is blocked.'; + } +} elseif (isset($_POST['directory'])) { + if ($listing->createDirectory()) { + $successMsg = 'Directory Created!'; + } else { + $errorMsg = 'There was a problem creating your directory.'; + } +} elseif (isset($_GET['deleteFile']) && $listing->enableFileDeletion) { + if ($listing->deleteFile()) { + $successMsg = 'The file was successfully deleted!'; + } else { + $errorMsg = 'The selected file could not be deleted. Please check your file permissions and try again.'; + } +} elseif (isset($_GET['dir']) && isset($_GET['delete']) && $listing->enableDirectoryDeletion) { + if ($listing->deleteDirectory()) { + $successMsg = 'The directory was successfully deleted!'; + unset($_GET['dir']); + } else { + $errorMsg = 'The selected directory could not be deleted. Please check your file permissions and try again.'; + } +} + +$data = $listing->run(); + +function pr($data, $die = false) { + echo '
';
+	print_r($data);
+	echo '
'; + + if ($die) { + die(); + } +} +?> + + +<?php echo substr(basename($data['currentPath']), 25) . (!empty($listing->pageTitle) ? $listing->pageTitle : null); ?> + + + + enableTheme): ?> + + + + +
+ pageTitle)): ?> +
+
+ + + +
+
+ + + +
+ + + +
+ + + + + +
+
+
+
+
+ + + +
+
+
+
+ + + + +
+
+ +
+
+ + + +
+
+
+ + + + + + + + + + + + + + + + enableDirectoryCreation): ?> + + + + + + +
Directory
+ + + + + enableDirectoryDeletion): ?> + + Delete + + +
+
+
+ + + +
+
+
+
+
+
+ + +
+
+
+

Upload A File

+
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+ enableMultiFileUploads): ?> +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ + + +
+
+
+ + + + + + + + + + + + + + + + + +
+ File + + Size + + Last Modified +
+ " target="" class="item _blank "> + + + + + + + enableFileDeletion == true): ?> + Delete + +
+
+
+
+ + +
+

Directory Listing Script © Evoluted, Web Design Sheffield
+
+
+ + enableMultiFileUploads): ?> + + + + + Index: web/trunk/downloads.ihtml =================================================================== --- web/trunk/downloads.ihtml (revision 1748) +++ web/trunk/downloads.ihtml (revision 1749) @@ -1,154 +1,154 @@ #include "applpre.ihtml" #include "applversions.ihtml"
Grid Downloads
Here you can download grids for APPLgrid version APPLVER for fast cross section evaluation. These grids are fully differential and should require no additional scaling. Each should include the non-perturbative (and any additional) bin-by-bin corrections or K-factors, the application of which is discussed in the relevant papers - see the Documentation page for more information.

Please note that these grids should be based on the grids that were used for the relevant papers, and were not necessarily created by the the applgrid authors.

In the future, it is hoped that grids will be distributed using the ploughshare project.

#include "grids.ihtml"
Code Download
Various code for download is available:
  • You can download the latest version (APPLVER) of the standard APPLgrid convolution code here .
  • If you wish to use arbitrary factorisation scale variation, you will need to have hoppet installed first, which you can download from here .
  • There are some simple examples which you can download from here . These examples requires that you have LHAPDF installed which you can find here .
  • In addition, APPLgrid uses root files for storage, although not internally, so you should also install root which you can find here .

Calculation Code
If you wish to generate your own grids, we currently have NLOjet++ available for jet production at NLO and MCFM for most other processes.

  • For NLOjet++ we have our own custom version 4.0.1 which can be downloaded from here .
    This requires the nlojet pdf module that you can download from here .
    The user module can be downloaded from here

  • For MCFM, you should download the standard version of MCFM (6.7 or later). To link with applgrid, before installing MCFM, you should download and install the mcfm-bridge code, which you install with the usual ./configure ; make ; make install etc.

    After running this you will need to patch the standard installation using the patch file which you should untar in the MCFM base directory and then remove the file
        src/User/gridwrap.f 
     
    then just build using make. To link with applgrid, before running make, you should set the LDFLAGS enviroment variable to the output from
        mcfm-bridge --ldflags
     
    NB: you should not use the standard install script that comes with MCFM.
Other interfaces are being developed and will be released when available.


Downloads Archive
The old downloads directory can be found - + here (Warning, not for the faint of heart)

#include "applpost.ihtml" Index: web/trunk/makefile =================================================================== --- web/trunk/makefile (revision 1748) +++ web/trunk/makefile (revision 1749) @@ -1,75 +1,78 @@ VPATH += $(SRCDIR) VPATH += $(OBJDIR) .SUFFIXES: .ihtml .html SRCDIR = . OBJDIR = ../public_html SITE = $(OBJDIR)/index.htm $(OBJDIR)/documentation.htm $(OBJDIR)/downloads.htm \ $(OBJDIR)/links.htm $(OBJDIR)/developerguide.htm $(OBJDIR)/news.htm \ - $(OBJDIR)/nightlies.htm + $(OBJDIR)/nightlies.htm $(OBJDIR)/filelist.php HEADERS = $(SRCDIR)/applcolours.ihtml $(SRCDIR)/applpre.ihtml $(SRCDIR)/applpost.ihtml \ $(SRCDIR)/applsidebar.ihtml $(SRCDIR)/applbar.ihtml $(SRCDIR)/appllogo.ihtml \ $(SRCDIR)/grids.ihtml all: date $(SITE) $(OBJDIR)/.d figs style appltest nightlies %/.d: mkdir -p $(@D) touch $@ $(SRCDIR)/grids.ihtml : $(SRCDIR)/gprint $(SRCDIR)/gprint > $@ $(SRCDIR)/news.ihtml : $(SRCDIR)/gnews $(SRCDIR)/news.dat $(SRCDIR)/gnews > $@ $(OBJDIR)/%.htm : $(SRCDIR)/%.ihtml $(HEADERS) $(OBJDIR)/.d cpp -I. $< > /tmp/_%.html cat /tmp/_%.html | grep -v "\# " | grep -v "\#define" | sed 's|[[:space:]].tgz|.tgz|g' > $@ +$(OBJDIR)/%.php : $(SRCDIR)/%.php + cp $< $@ + figs: $(OBJDIR)/.d $(OBJDIR)/figs/.d $(SRCDIR)/figs/*.jpg $(SRCDIR)/figs/*.png $(SRCDIR)/figs/*.ico cp $(SRCDIR)/figs/* $(OBJDIR)/figs appltest: $(SRCDIR)/appltest/* cp -r $(SRCDIR)/appltest $(OBJDIR)/ nightlies: $(SRCDIR)/nightlies/* cp -r $(SRCDIR)/nightlies $(OBJDIR)/ style : $(SRCDIR)/style.css cp $(SRCDIR)/style.css $(OBJDIR)/style.css archive: tar -czf appldoc.tgz makefile *.ihtml figs style.css clean: rm -rf $(OBJDIR)/*.html $(OBJDIR)/*.{htm,css} ./*~ date: date > $(SRCDIR)/date.txt $(SRCDIR)/gprint : $(SRCDIR)/gprint.cxx $(SRCDIR)/grids.h g++ $(SRCDIR)/gprint.cxx -o $@ $(SRCDIR)/gnews : $(SRCDIR)/gnews.cxx g++ $(SRCDIR)/gnews.cxx -o $@ install: all - scp -P 222 -r ../public_html/*.htm date.txt appltest nightlies login.hepforge.org:applgrid/public_html - scp -P 222 ../public_html/figs/applicon.{png,ico} login.hepforge.org:applgrid/public_html/figs + scp -P 222 -r ../public_html/*.{htm,php} date.txt appltest nightlies login.hepforge.org:applgrid/public_html + scp -P 222 ../public_html/figs/applicon.{png,ico} login.hepforge.org:applgrid/public_html/figs