| Server IP : 81.2.241.106 / Your IP : 216.73.216.165 Web Server : Apache/2.4.67 (Debian) System : Linux tranq-f.bakta.org 5.10.0-45-amd64 #1 SMP Debian 5.10.259-1 (2026-07-02) x86_64 User : lisky ( 1002) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /usr/share/perl5/sdf/ |
Upload File : |
# $Id$
$VERSION{''.__FILE__} = '$Revision$';
#
# >>Title:: SDF Values Library
#
# >>Copyright::
# Copyright (c) 1992-1996, Ian Clatworthy (ianc@mincom.com).
# You may distribute under the terms specified in the LICENSE file.
#
# >>History::
# -----------------------------------------------------------------------
# Date Who Change
# 28-Aug-96 ianc SDF 2.000
# -----------------------------------------------------------------------
#
# >>Purpose::
# This library provides the built-in value subroutines for
# [[SDF]] files.
#
# >>Description::
# Value functions are used to calculate derived attributes of a class.
# Values should be accessed via the {{SUB:Value}} subroutine.
# The interface of a value subroutine is:
#
# = $value = class_attr_Value($name, $view);
#
# If a class-attr-specific routine is not found, {{SUB:Value}} looks for
# a class-specific routine. Its interface is:
#
# = $value = class_Value($attr, $name, $view);
#
# >>Limitations::
#
# >>Resources::
#
# >>Implementation::
#
# Switch to the user package
package SDF_USER;
##### Constants #####
# Useful constants
$SECONDS_PER_DAY = 3600 * 24;
##### Variables #####
##### References #####
# Generate a "print document" icon (if the PostScript file exists)
sub references_Printdoc_Value {
local($name, $view) = @_;
# local($result);
local($jump);
local($root);
local($back);
local($title);
# Get the filename and check it exists
$jump = &Value("references", $name, "Jump", $view);
$jump = &'NameSubExt($jump, "ps");
return '' unless -f $jump;
# Build the cgi call, using DIR_ABS_URL to get the absolute URL of
# the directory ultimately holding this file. (This is required
# because the CGI script doesn't have the same position in the
# URL tree as the documents do.) DIR_ABS_URL is also provided
# for backwards comptability.
$root = $var{'PRINTDOC_ROOT'};
$root = $var{'DIR_ABS_URL'} if $root eq '';
$back = $var{'PRINTDOC_BACK'};
$back = "$root$var{'DOC_BASE'}.html" if $back eq '';
$title = &Value("references", $name, "Document", $view);
$title =~ s/ /%20/g;
$jump = "/cgi-bin/printdoc?$root$jump%20$back%20$title";
return "{{IMPORT[alt=\"(PRINT)\";jump=\"$jump\";base='$var{'IMAGES_BASE'}';border] printer.gif}}";
}
# Generate a Printer icon - old name for Printdoc
sub references_Printer_Value {
local($name, $view) = @_;
# local($result);
return &references_Printdoc_Value($name, $view);
}
#
# Default value routine for references:
# If the attribute is all uppercase (e.g. TXT), generate an image
# for a file with that (lowercase) extension (e.g. mydoc.txt),
# using an image matching the extension name (e.g. txt.gif).
# Likewise, an all uppercase attribute with a leading underscore (e.g. _DIR)
# generates an image for a HTML file with that suffix (e.g. mydoc_dir.html)
# using an image matching the extension name (e.g. dir.gif).
#
sub references_Value {
local($attr, $name, $view) = @_;
# local($result);
return AttrToFile($attr, $name, 'references', $view);
}
# This routine maps an attribute to a filename.
# See the comments above references_Value for details.
sub AttrToFile {
local($attr, $name, $class, $view) = @_;
local($suffix);
local($image);
local($jump);
local($dir, $base, $ext);
# Do nothing unless the attribute matches the necessary pattern
return (0) unless $attr =~ /^(_?)([A-Z0-9]+)$/;
$suffix = $1 ne '';
$image = $2;
$image =~ tr/A-Z/a-z/;
# Get the filename
$jump = &Value($class, $name, "Jump", $view);
if ($suffix) {
($dir, $base, $ext) = &'NameSplit($jump);
$jump = &'NameJoin($dir, $base . "_$image", $ext);
}
else {
$jump = &'NameSubExt($jump, $image);
}
# If the name looks like a URL, assume it exists.
# Otherwise, we assume it a filename and only return an icon
# if that file exists.
return (1, '') unless ($jump =~ /^\w+:/ || -f $jump);
# Build the result
return (1,
"{{IMPORT[alt=\"($attr)\";jump=\"$jump\";base='$var{'IMAGES_BASE'}'] $image.gif}}");
}
# Generate a PS icon (if the PostScript file exists)
sub references_PS_Value {
local($name, $view) = @_;
# local($result);
local($jump);
# Get the filename
$jump = &Value("references", $name, "Jump", $view);
$jump = &'NameSubExt($jump, "ps");
# If the name looks like a URL, assume it exists.
# Otherwise, we assume it a filename and only return an icon
# if that file exists.
return '' unless ($jump =~ /^\w+:/ || -f $jump);
# Build the result
return "{{IMPORT[alt=\"(PS)\";jump=\"$jump\";base='$var{'IMAGES_BASE'}';border] postscript.gif}}";
}
# Generate a PDF icon (if the PDF file exists)
sub references_PDF_Value {
local($name, $view) = @_;
# local($result);
local($jump);
# Get the filename
$jump = &Value("references", $name, "Jump", $view);
$jump = &'NameSubExt($jump, "pdf");
# If the name looks like a URL, assume it exists.
# Otherwise, we assume it a filename and only return an icon
# if that file exists.
return '' unless ($jump =~ /^\w+:/ || -f $jump);
# Build the result
return "{{IMPORT[alt=\"(PDF)\";jump=\"$jump\";base='$var{'IMAGES_BASE'}'] pdf.gif}}";
}
# Generate a TXT icon (if the text file exists)
sub references_TXT_Value {
local($name, $view) = @_;
# local($result);
local($jump);
# Get the filename
$jump = &Value("references", $name, "Jump", $view);
$jump = &'NameSubExt($jump, "txt");
# If the name looks like a URL, assume it exists.
# Otherwise, we assume it a filename and only return an icon
# if that file exists.
return '' unless ($jump =~ /^\w+:/ || -f $jump);
# Build the result
return "{{IMPORT[alt=\"(TXT)\";jump=\"$jump\";base='$var{'IMAGES_BASE'}'] text.gif}}";
}
# Generate a DOC icon (if the .doc file exists)
sub references_DOC_Value {
local($name, $view) = @_;
# local($result);
local($jump);
# Get the filename
$jump = &Value("references", $name, "Jump", $view);
$jump = &'NameSubExt($jump, "doc");
# If the name looks like a URL, assume it exists.
# Otherwise, we assume it a filename and only return an icon
# if that file exists.
return '' unless ($jump =~ /^\w+:/ || -f $jump);
# Build the result
return "{{IMPORT[alt=\"(DOC)\";jump=\"$jump\";base='$var{'IMAGES_BASE'}'] doc.gif}}";
}
# Get the last modified date (unformatted)
sub references_Date_Value {
local($name, $view) = @_;
local($modtime);
local($jump);
# Get the filename and check it exists
$jump = &Value("references", $name, "Jump", $view);
return '' unless -f $jump;
# Build the result
$modtime = time - (-M $jump) * $SECONDS_PER_DAY;
return $modtime;
}
# Get the page count (formatted)
sub references_Pages_Value {
local($name, $view) = @_;
local($pages);
local($jump);
local($trailers);
# Get the filename and check it exists
$jump = &Value("references", $name, "Jump", $view);
$jump = &'NameSubExt($jump, "ps");
return '' unless -f $jump;
# build the result
if (open(PSSTRM, $jump)) {
$trailers = 0;
while (<PSSTRM>) {
# Assume the page count is at the end as there
# may be embedded PostScript found first
if (/^%%Pages:\s+(\d+)/) {
$pages = $1;
}
# Count the page trailers as Word doesn't support %%Pages
if (/^%%PageTrailer/) {
$trailers++;
}
}
close(PSSTRM);
# Format the result. If the page count is zero, guess the
# count from the PageTrailer count
$pages = $trailers if $pages == 0;
$pages .= $pages == 1 ? " page" : " pages";
}
else {
$pages = '';
}
# Return result
return $pages;
}
# package return value
1;