Files
resatennis_tyroltenn/www/cgi-bin/Demos/DEMO_tables.pl

319 lines
9.8 KiB
Perl
Executable File

#!/usr/sbin/perl
#**************************************************************************
#* *
#* Copyright (c) 1996 Silicon Graphics, Inc. *
#* All Rights Reserved *
#* *
#* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF SGI *
#* *
#* The copyright notice above does not evidence any actual of intended *
#* publication of such source code, and is an unpublished work by Silicon *
#* Graphics, Inc. This material contains CONFIDENTIAL INFORMATION that is *
#* the property of Silicon Graphics, Inc. Any use, duplication or *
#* disclosure not specifically authorized by Silicon Graphics is strictly *
#* prohibited. *
#* *
#* RESTRICTED RIGHTS LEGEND: *
#* *
#* Use, duplication or disclosure by the Government is subject to *
#* restrictions as set forth in subdivision (c)(1)(ii) of the Rights in *
#* Technical Data and Computer Software clause at DFARS 52.227-7013, *
#* and/or in similar or successor clauses in the FAR, DOD or NASA FAR *
#* Supplement. Unpublished - rights reserved under the Copyright Laws of *
#* the United States. Contractor is SILICON GRAPHICS, INC., 2011 N. *
#* Shoreline Blvd., Mountain View, CA 94039-7311 *
#**************************************************************************
# DEMO_tables.pl
#
# Routines for working with the tables
1; # Return true
sub Source_Table {
local($category, $demos);
undef %demos_under;
$filename = shift;
@list_cat = @_;
open(TABLE, "$filename") || &Print_Error("$ERROR_NO_OPEN", "$filename", "$STATUS_SERIOUS");
while (<TABLE>) {
chop;
($category, $demos) = /(.*)$TABLE_FIRST_DELIM(.*)/;
if (("$category" ne "") && ("$demos" ne "") && (grep(/^$category$/, @list_cat))) {
$demos_under{$category} = $demos;
}
}
close(TABLE);
}
sub Update_Tables {
# unless ($pid = fork) {
# unless (fork) {
# &Shutdown_File_Descriptors;
# &Parse_List_Demos;
# @demo_list = &Generate_Demos_Array;
# &Update_Hardware_Table;
# &Update_Features_Table;
# &Update_Markets_Table;
`$CMD_UPDATE_TABLES $CMD_NULLIFY $CMD_BACKGROUND`;
# exit 0;
# }
# exit 0;
# }
# wait;
}
sub Update_Hardware_Table {
&Print_Error("$ERROR_INFO","Updating Hardware Table","$STATUS_MINOR");
# unless ($pid = fork) {
# unless (fork) {
# &Shutdown_File_Descriptors;
&Parse_Category_Table("$FILE_TABLE_HARDWARE", "HARDWARE", @hardware_categories);
&Print_Error("$ERROR_INFO","Finished Updating Hardware Table","$STATUS_MINOR");
# exit 0;
# }
# exit 0;
# }
}
sub Update_Features_Table {
&Print_Error("$ERROR_INFO","Updating Features Table","$STATUS_MINOR");
# unless ($pid = fork) {
# unless (fork) {
# &Shutdown_File_Descriptors;
&Parse_Category_Table("$FILE_TABLE_FEATURES", "FEATURES", @features_categories);
&Print_Error("$ERROR_INFO","Finished Updating Features Table","$STATUS_MINOR");
# exit 0;
# }
# exit 0;
# }
}
sub Update_Markets_Table {
&Print_Error("$ERROR_INFO","Updating Industry Table","$STATUS_MINOR");
# unless ($pid = fork) {
# unless (fork) {
# &Shutdown_File_Descriptors;
&Parse_Category_Table("$FILE_TABLE_MARKETS", "MARKETS", @markets_categories);
&Print_Error("$ERROR_INFO","Finished Updating Industry Table","$STATUS_MINOR");
# exit 0;
# }
# exit 0;
# }
}
sub Update_List_Demos {
# unless ($pid = fork) {
# unless (fork) {
# &Shutdown_File_Descriptors;
&Parse_List_Demos;
# exit 0;
# }
# exit 0;
# }
}
sub Verify_Custom_Lists {
local($list);
if (&Is_Custom_List) {
&Parse_Name_Space;
for $list (&List_Custom_Lists) {
open(FILE, ">$PATH_TMP/$name_space{$list}") || &Print_Error("$ERROR_INFO","Can't open temp file for verifying lists: $PATH_TMP/$name_space{$list}. ", "$STATUS_MINOR");
for $demo (&Demos_On_List($list)) {
print FILE "$demo\n" if (grep(/^$demo/, @demo_list));
}
close(FILE);
rename("$PATH_TMP/$name_space{$list}", "$PATH_CUSTOM_DIR/$name_space{$list}");
}
}
}
sub Parse_Category_Table {
local($i, $file_name, $demo_name, $demo_tree, $demo_path, $element, $cat, @categories, %link_for);
$file_name = shift(@_);
$element = shift(@_);
@categories = @_;
%links_for = "";
open(TABLE, ">$file_name.$EXT_BAK") || &Print_Error("$ERROR_NO_OPEN", "$file_name", "$STATUS_SERIOUS");
for $str (@demo_list) {
($demo_name, $demo_tree) = split(/$TREES_DELIM/, $str);
$demo_path = &Tree_Path_From_Name("$demo_tree");
&Parse_Demo_Info("$demo_path/$demo_name/$DEMOSRC_INDEX");
@link_items = split(/\n/, $demo_info{$element});
for $cat (@categories) {
if (grep(/^$cat$/i, @link_items)) {
$links_for{$cat} .= "$demo_name$TABLE_THIRD_DELIM$demo_tree$TABLE_SECOND_DELIM";
}
}
}
for (@categories) {
print TABLE "$_$TABLE_FIRST_DELIM$links_for{$_}\n";
}
close(TABLE);
rename("$file_name.$EXT_BAK", "$file_name");
}
sub Parse_List_Demos {
local(@tree_dirs, @legal_demos, $tree_name, $tree_path);
&Print_Error("$ERROR_INFO","Updating Demo Lists","$STATUS_MINOR");
for $tree_name (&List_Tree_Names) {
$tree_path = &Tree_Path_From_Name("$tree_name");
@tree_dirs = &Generate_List_Demo_Dirs("$tree_path");
@legal_demos = &Generate_Legal_Demos_List("$tree_path", @tree_dirs);
&Print_Demo_List_File("$tree_name", @legal_demos);
}
&Print_All_Demos_List_File;
undef @demo_list;
@demo_list = &Generate_Demos_Array;
&Print_Error("$ERROR_INFO","Finished Updating Demo List","$STATUS_MINOR");
}
sub Generate_List_Demo_Dirs {
local(@treedirs);
# Open up demos directory and grab all directories
chdir("$_[0]");
opendir(DIR, ".");
@treedirs = grep(-d, readdir(DIR));
@treedirs = grep(!/^\.\.?$/, @treedirs);
closedir(DIR);
return(&alpha(@treedirs));
}
sub Generate_Legal_Demos_List {
local(@alldirs, $tree_path, @legal_demos);
undef @legal_demos;
$tree_path = shift;
@alldirs = @_;
# For each dir, check for .index, thumbnail.jpg, header.gif, executable
for $dir (@alldirs) {
if (&Legal_Properties("$tree_path/$dir")) {
push(@legal_demos, "$dir");
} else {
&Print_Error("$ERROR_ILLEGAL_DEMO", "$dir", "$STATUS_MINOR");
if (!$directorystate) {
&Print_Error("$ERROR_ILLEGAL_DEMO_REASON", "Directory $dir not writable by user $HTTP_USER.", "$STATUS_MINOR");
}
if (!$thumbstate) {
&Print_Error("$ERROR_ILLEGAL_DEMO_REASON", "$DEMOSRC_THUMBNAIL not found.", "$STATUS_MINOR");
}
if (!$demostate) {
&Print_Error("$ERROR_ILLEGAL_DEMO_REASON", "$DEMOSRC_RUN not found or not executable by user $HTTP_USER.", "$STATUS_MINOR");
}
if (!$picstate) {
&Print_Error("$ERROR_ILLEGAL_DEMO_REASON", "$DEMOSRC_DEMOPIC not found.", "$STATUS_MINOR");
}
if (!$headerstate) {
&Print_Error("$ERROR_ILLEGAL_DEMO_REASON", "$DEMOSRC_HEADER not found or not writable by user $HTTP_USER.", "$STATUS_MINOR");
}
if (!$indexstate) {
&Print_Error("$ERROR_ILLEGAL_DEMO_REASON", "$DEMOSRC_INDEX not found or not writable by user $HTTP_USER.", "$STATUS_MINOR");
}
}
}
@legal_demos = &alpha(@legal_demos);
return(@legal_demos);
}
sub Get_Files_From_Dir {
local(@files, $dir);
$dir = $_[0];
opendir(DIR, "$dir");
@files = readdir(DIR);
closedir(DIR);
return(@files);
}
sub Legal_Properties {
local($dir, @allfiles);
$dir = $_[0];
undef $directorystate;
undef $indexfound;
undef $indexstate;
undef $headerfound;
undef $headerstate;
undef $thumbfound;
undef $thumbstate;
undef $demofound;
undef $demostate;
undef $picfound;
undef $picstate;
@allfiles = &Get_Files_From_Dir("$dir");
chdir("$dir");
# Check for directory permissions
stat("$dir");
$directorystate = 1 if -w _;
# Check for .index
if (grep(/^$DEMOSRC_INDEX$/, @allfiles)) {
$indexfound = 1;
stat("$dir/$DEMOSRC_INDEX");
$indexstate = 1 if -w _;
}
# Check for header.jpg
if (grep(/^$DEMOSRC_HEADER$/, @allfiles)) {
$headerfound = 1;
stat("$dir/$DEMOSRC_HEADER");
$headerstate = 1 if -w _;
}
# Check for thumbnail.gif
if (grep(/^$DEMOSRC_THUMBNAIL$/, @allfiles)) {
$thumbfound = 1;
$thumbstate = 1;
}
# Check for RUN script
if (grep(/^$DEMOSRC_RUN$/, @allfiles)) {
$demofound = 1;
stat("$dir/$DEMOSRC_RUN");
$demostate = 1 if -x _;
}
# Check for demo.jpg
if (grep(/^$DEMOSRC_DEMOPIC$/, @allfiles)) {
$picfound = 1;
$picstate = 1;
}
return( ($directorystate && $demostate && $thumbstate && $headerstate && $indexstate && $picstate) );
}
sub Print_All_Demos_List_File {
`$CMD_RM $FILE_DEMOLIST $CMD_NULLIFY`;
open(LIST_FILE, ">$FILE_DEMOLIST") || &Print_Error("$ERROR_NO_OPEN", "$FILE_DEMOLIST", "$STATUS_SERIOUS");
for $tree_name (&List_Tree_Names) {
$tree_file = &Tree_File_From_Name("$tree_name");
open(TREE_FILE, "$PATH_TREES_DIR/$tree_file") || &Print_Error("$ERROR_NO_OPEN", "$tree_file", "$STATUS_SERIOUS");
while (<TREE_FILE>) {
chop;
if ($_) {
print LIST_FILE "$_";
print LIST_FILE "$TREES_DELIM";
print LIST_FILE "$tree_name\n";
}
}
close(TREE_FILE);
}
close(LIST_FILE);
}
sub Print_Demo_List_File {
local(@legal_demos, $tree_name, $tree_file);
$tree_name = shift;
@legal_demos = @_;
$tree_file = &Tree_File_From_Name("$tree_name");
open(LIST, ">$PATH_TREES_DIR/$tree_file.$EXT_BAK") || &Print_Error("$ERROR_NO_OPEN", "$tree_file.$EXT_BAK", "$STATUS_SERIOUS");
for $demo_name (@legal_demos) {
print LIST "$demo_name\n";
}
close(LIST);
rename("$PATH_TREES_DIR/$tree_file.$EXT_BAK", "$PATH_TREES_DIR/$tree_file") || &Print_Error("$ERROR_NO_OPEN", "$tree_file.$EXT_BAK -> $tree_file", "$STATUS_SERIOUS");;
}