1*b1cdbd2cSJim Jagielski#!/usr/bin/perl 2*b1cdbd2cSJim Jagielski######################################################################### 3*b1cdbd2cSJim Jagielski 4*b1cdbd2cSJim Jagielski #************************************************************** 5*b1cdbd2cSJim Jagielski# 6*b1cdbd2cSJim Jagielski# Licensed to the Apache Software Foundation (ASF) under one 7*b1cdbd2cSJim Jagielski# or more contributor license agreements. See the NOTICE file 8*b1cdbd2cSJim Jagielski# distributed with this work for additional information 9*b1cdbd2cSJim Jagielski# regarding copyright ownership. The ASF licenses this file 10*b1cdbd2cSJim Jagielski# to you under the Apache License, Version 2.0 (the 11*b1cdbd2cSJim Jagielski# "License"); you may not use this file except in compliance 12*b1cdbd2cSJim Jagielski# with the License. You may obtain a copy of the License at 13*b1cdbd2cSJim Jagielski# 14*b1cdbd2cSJim Jagielski# http://www.apache.org/licenses/LICENSE-2.0 15*b1cdbd2cSJim Jagielski# 16*b1cdbd2cSJim Jagielski# Unless required by applicable law or agreed to in writing, 17*b1cdbd2cSJim Jagielski# software distributed under the License is distributed on an 18*b1cdbd2cSJim Jagielski# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 19*b1cdbd2cSJim Jagielski# KIND, either express or implied. See the License for the 20*b1cdbd2cSJim Jagielski# specific language governing permissions and limitations 21*b1cdbd2cSJim Jagielski# under the License. 22*b1cdbd2cSJim Jagielski# 23*b1cdbd2cSJim Jagielski#************************************************************** 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski#################################################################### 28*b1cdbd2cSJim Jagielski# File Name: test_driver.pl 29*b1cdbd2cSJim Jagielski# Version : 1.0 30*b1cdbd2cSJim Jagielski# Project : Xmerge 31*b1cdbd2cSJim Jagielski# Author : Brian Cameron 32*b1cdbd2cSJim Jagielski# Date : 5th Sept. 2001 33*b1cdbd2cSJim Jagielski# 34*b1cdbd2cSJim Jagielski# 35*b1cdbd2cSJim Jagielski# This script does the following: 36*b1cdbd2cSJim Jagielski# 37*b1cdbd2cSJim Jagielski# Processes the input file, and runs the tests specified in that 38*b1cdbd2cSJim Jagielski# file. This will do the following for each test: 39*b1cdbd2cSJim Jagielski# 40*b1cdbd2cSJim Jagielski# 1. Convert a file from XML to PDB format 41*b1cdbd2cSJim Jagielski# 2. Starts up the Palm OS emulator with the appropriate program 42*b1cdbd2cSJim Jagielski# running and the converted file loaded the program. 43*b1cdbd2cSJim Jagielski# 3. Makes automated changes as specified in the inputfile to 44*b1cdbd2cSJim Jagielski# this script.. 45*b1cdbd2cSJim Jagielski# 4. Returns to the main applications window. 46*b1cdbd2cSJim Jagielski# 47*b1cdbd2cSJim Jagielski# Parameter 48*b1cdbd2cSJim Jagielski# Filename to convert and change 49*b1cdbd2cSJim Jagielski# 50*b1cdbd2cSJim Jagielski########################################################################## 51*b1cdbd2cSJim Jagielski 52*b1cdbd2cSJim Jagielski# Turn on auto-flushing 53*b1cdbd2cSJim Jagielski# 54*b1cdbd2cSJim Jagielski$|=1; 55*b1cdbd2cSJim Jagielski 56*b1cdbd2cSJim Jagielskiuse EmRPC; 57*b1cdbd2cSJim Jagielski 58*b1cdbd2cSJim Jagielski# Directory where converterlib is located... 59*b1cdbd2cSJim Jagielski# 60*b1cdbd2cSJim Jagielski#use lib "/export/home/test/qadir/qa/lib"; 61*b1cdbd2cSJim Jagielskiuse lib $ENV{'QA_LIB_HOME'}; 62*b1cdbd2cSJim Jagielskiuse converterlib; 63*b1cdbd2cSJim Jagielski 64*b1cdbd2cSJim Jagielski#-------------------- Start of main script ------------------------------------ 65*b1cdbd2cSJim Jagielski 66*b1cdbd2cSJim Jagielski# Environmental Settings 67*b1cdbd2cSJim Jagielski 68*b1cdbd2cSJim Jagielski$pose_exe = ""; 69*b1cdbd2cSJim Jagielski$pose_prc = ""; 70*b1cdbd2cSJim Jagielski$test_list = ""; 71*b1cdbd2cSJim Jagielski$infile = ""; 72*b1cdbd2cSJim Jagielski$merge_opt = 0; 73*b1cdbd2cSJim Jagielski# if testcase hasn't completed in 10 mins, then kill it off 74*b1cdbd2cSJim Jagielski$testcase_timeout=600; 75*b1cdbd2cSJim Jagielski 76*b1cdbd2cSJim Jagielski# You may need to change this from the default if your pose emulator 77*b1cdbd2cSJim Jagielski# starts faster or slower than mine. 78*b1cdbd2cSJim Jagielski# 79*b1cdbd2cSJim Jagielskiif ($ENV{'POSE_TIMEOUT'}) 80*b1cdbd2cSJim Jagielski{ 81*b1cdbd2cSJim Jagielski $pose_timeout = "$ENV{'POSE_TIMEOUT'}"; 82*b1cdbd2cSJim Jagielski} 83*b1cdbd2cSJim Jagielskielse 84*b1cdbd2cSJim Jagielski{ 85*b1cdbd2cSJim Jagielski $pose_timeout = 15; 86*b1cdbd2cSJim Jagielski} 87*b1cdbd2cSJim Jagielski 88*b1cdbd2cSJim Jagielski$cmdline_len = @ARGV; 89*b1cdbd2cSJim Jagielskiif ($cmdline_len <= 0) 90*b1cdbd2cSJim Jagielski{ 91*b1cdbd2cSJim Jagielski print_usage(); 92*b1cdbd2cSJim Jagielski exit (0); 93*b1cdbd2cSJim Jagielski} 94*b1cdbd2cSJim Jagielski 95*b1cdbd2cSJim Jagielski&process_cmdline(@ARGV); 96*b1cdbd2cSJim Jagielski&print_env(); 97*b1cdbd2cSJim Jagielski&verify_env_options(); 98*b1cdbd2cSJim Jagielski 99*b1cdbd2cSJim Jagielski# Make the output directories with timestamps included in the 100*b1cdbd2cSJim Jagielski# directory names. 101*b1cdbd2cSJim Jagielski# 102*b1cdbd2cSJim Jagielskimkdir $pdb_orig, 0777 || die "can not create directory <$pdb_orig>."; 103*b1cdbd2cSJim Jagielski`chmod 777 $pdb_orig`; 104*b1cdbd2cSJim Jagielskimkdir $pdb_new, 0777 || die "can not create directory <$pdb_new>."; 105*b1cdbd2cSJim Jagielski`chmod 777 $pdb_new`; 106*b1cdbd2cSJim Jagielskimkdir $xml_new, 0777 || die "can not create directory <$xml_new>."; 107*b1cdbd2cSJim Jagielski`chmod 777 $xml_new`; 108*b1cdbd2cSJim Jagielski 109*b1cdbd2cSJim Jagielski&verify_prcs_exist("DBExporter.prc"); 110*b1cdbd2cSJim Jagielski 111*b1cdbd2cSJim Jagielskiif ($test_list ne "") 112*b1cdbd2cSJim Jagielski{ 113*b1cdbd2cSJim Jagielski open (TESTLIST, $test_list) || die "Couldn't open testcase list file $test_list"; 114*b1cdbd2cSJim Jagielski 115*b1cdbd2cSJim Jagielski while (<TESTLIST>) 116*b1cdbd2cSJim Jagielski { 117*b1cdbd2cSJim Jagielski &process_testcase($_); 118*b1cdbd2cSJim Jagielski } 119*b1cdbd2cSJim Jagielski} 120*b1cdbd2cSJim Jagielskielsif ($infile ne "") 121*b1cdbd2cSJim Jagielski{ 122*b1cdbd2cSJim Jagielski if (!defined($child_pid = fork())) 123*b1cdbd2cSJim Jagielski { 124*b1cdbd2cSJim Jagielski # there was an error forking a process 125*b1cdbd2cSJim Jagielski print "ERROR: Unable to fork process\n"; 126*b1cdbd2cSJim Jagielski die "ERROR: Unable to fork process\n"; 127*b1cdbd2cSJim Jagielski } 128*b1cdbd2cSJim Jagielski elsif ($child_pid) 129*b1cdbd2cSJim Jagielski { 130*b1cdbd2cSJim Jagielski # this is the parent process 131*b1cdbd2cSJim Jagielski # run the actual test here 132*b1cdbd2cSJim Jagielskiprint "********\tPARENT (pid = $$): process_testcase...\n"; 133*b1cdbd2cSJim Jagielski &process_testcase($infile); 134*b1cdbd2cSJim Jagielskiprint "********\tPARENT (pid = $$): ...process_testcase finished normally\n"; 135*b1cdbd2cSJim Jagielski 136*b1cdbd2cSJim Jagielski # test finished normally, so kill the monitor 137*b1cdbd2cSJim Jagielski # that is running in the child process 138*b1cdbd2cSJim Jagielskiprint "********\tPARENT (pid = $$): kill child process ($child_pid)\n"; 139*b1cdbd2cSJim Jagielskiprint "********\tPARENT Before:\n"; 140*b1cdbd2cSJim Jagielskisystem( "/usr/bin/ptree" ); 141*b1cdbd2cSJim Jagielski kill( $child_pid ); 142*b1cdbd2cSJim Jagielski kill( 9, $child_pid ); 143*b1cdbd2cSJim Jagielskiprint "********\tPARENT After:\n"; 144*b1cdbd2cSJim Jagielskisystem( "/usr/bin/ptree" ); 145*b1cdbd2cSJim Jagielski } 146*b1cdbd2cSJim Jagielski else 147*b1cdbd2cSJim Jagielski { 148*b1cdbd2cSJim Jagielskiprint "********\tCHILD (pid = $$): sleep for $testcase_timeout seconds\n"; 149*b1cdbd2cSJim Jagielski # this is the child process 150*b1cdbd2cSJim Jagielski # wait on the test running in the parent, and 151*b1cdbd2cSJim Jagielski # kill it if it hasn't finished on time 152*b1cdbd2cSJim Jagielski sleep( $testcase_timeout ); 153*b1cdbd2cSJim Jagielski 154*b1cdbd2cSJim Jagielski # if the parent hasn't killed this process before it 155*b1cdbd2cSJim Jagielski # gets here, then it's probably hung, so we need to 156*b1cdbd2cSJim Jagielski # kill it. 157*b1cdbd2cSJim Jagielski print "********\tCHILD (pid = $$): TEST HUNG? still " 158*b1cdbd2cSJim Jagielski ."running after [$testcase_timeout] seconds - " 159*b1cdbd2cSJim Jagielski ."need to kill test process\n"; 160*b1cdbd2cSJim Jagielski $parent = getppid; 161*b1cdbd2cSJim Jagielski 162*b1cdbd2cSJim Jagielski if ( $parent != 1 ) { 163*b1cdbd2cSJim Jagielski print "********\nCHILD (pid = $$): Killing process ($parent)\n"; 164*b1cdbd2cSJim Jagielski kill( $parent ); 165*b1cdbd2cSJim Jagielski kill( 9, $parent ); 166*b1cdbd2cSJim Jagielski } else { 167*b1cdbd2cSJim Jagielski # If we cannot get the ppid, then the parent might 168*b1cdbd2cSJim Jagielski # have died abnormally, before it got a chance to 169*b1cdbd2cSJim Jagielski # kill this (child) process. 170*b1cdbd2cSJim Jagielski print "********\nCHILD (pid = $$): cannot determine ppid - " 171*b1cdbd2cSJim Jagielski ."terminating\n"; 172*b1cdbd2cSJim Jagielskisystem( "/usr/bin/ptree" ); 173*b1cdbd2cSJim Jagielski exit(2); 174*b1cdbd2cSJim Jagielski } 175*b1cdbd2cSJim Jagielski 176*b1cdbd2cSJim Jagielski exit(1); 177*b1cdbd2cSJim Jagielski } 178*b1cdbd2cSJim Jagielski} 179*b1cdbd2cSJim Jagielskielse 180*b1cdbd2cSJim Jagielski{ 181*b1cdbd2cSJim Jagielski die ("You didn't supply any test cases to process"); 182*b1cdbd2cSJim Jagielski} 183*b1cdbd2cSJim Jagielski 184*b1cdbd2cSJim Jagielskiprint "Finished.\n"; 185*b1cdbd2cSJim Jagielskiexit(0); 186*b1cdbd2cSJim Jagielski 187*b1cdbd2cSJim Jagielski#-------------------- End of main script ---------------------------------------- 188*b1cdbd2cSJim Jagielski 189*b1cdbd2cSJim Jagielski#-------------------------------------------------------------------------------- 190*b1cdbd2cSJim Jagielski# Various sub routines 191*b1cdbd2cSJim Jagielski#-------------------------------------------------------------------------------- 192*b1cdbd2cSJim Jagielski 193*b1cdbd2cSJim Jagielski# process_testcase 194*b1cdbd2cSJim Jagielski# infile - test case file name 195*b1cdbd2cSJim Jagielski# 196*b1cdbd2cSJim Jagielski# This is the main driver function 197*b1cdbd2cSJim Jagielski# Opens the infile, reads it in parses it, runs the appropriate conversion 198*b1cdbd2cSJim Jagielski# starts pose and load the file into the emulator. It launches the 199*b1cdbd2cSJim Jagielski# appropriate editor and then runs the commands specified in the test case. 200*b1cdbd2cSJim Jagielski# It then exports the file and saves it locally. Finally it is converted 201*b1cdbd2cSJim Jagielski# back to the original office format. 202*b1cdbd2cSJim Jagielski# 203*b1cdbd2cSJim Jagielskisub process_testcase 204*b1cdbd2cSJim Jagielski{ 205*b1cdbd2cSJim Jagielski my $infile = $_[0]; 206*b1cdbd2cSJim Jagielski my $convert_file = ""; 207*b1cdbd2cSJim Jagielski my $rc; 208*b1cdbd2cSJim Jagielski 209*b1cdbd2cSJim Jagielski # Process the inputfile 210*b1cdbd2cSJim Jagielski # 211*b1cdbd2cSJim Jagielski open (INFILE, $infile) || die "Failed to open test case <$infile>"; 212*b1cdbd2cSJim Jagielski 213*b1cdbd2cSJim Jagielski $running_testtype = ""; 214*b1cdbd2cSJim Jagielski 215*b1cdbd2cSJim Jagielski # Process the input file. 216*b1cdbd2cSJim Jagielski # 217*b1cdbd2cSJim Jagielski while ($c_inline = <INFILE>) 218*b1cdbd2cSJim Jagielski { 219*b1cdbd2cSJim Jagielski chomp $c_inline; 220*b1cdbd2cSJim Jagielski @entry = split('\|', $c_inline); 221*b1cdbd2cSJim Jagielski 222*b1cdbd2cSJim Jagielski # Process TEST 223*b1cdbd2cSJim Jagielski # 224*b1cdbd2cSJim Jagielski if ($c_inline =~ /^ *#/ || $c_inline =~ /^[ \t]*$/) 225*b1cdbd2cSJim Jagielski { 226*b1cdbd2cSJim Jagielski # skip comments and blank lines. 227*b1cdbd2cSJim Jagielski # 228*b1cdbd2cSJim Jagielski next; 229*b1cdbd2cSJim Jagielski } 230*b1cdbd2cSJim Jagielski elsif ("$entry[0]" eq "TEST") 231*b1cdbd2cSJim Jagielski { 232*b1cdbd2cSJim Jagielski # Close the test if one is running. 233*b1cdbd2cSJim Jagielski # 234*b1cdbd2cSJim Jagielski &close_program($convert_file); 235*b1cdbd2cSJim Jagielski $running_testtype = ""; 236*b1cdbd2cSJim Jagielski 237*b1cdbd2cSJim Jagielski $valid_test = 0; 238*b1cdbd2cSJim Jagielski 239*b1cdbd2cSJim Jagielski if ($#entry != 3) 240*b1cdbd2cSJim Jagielski { 241*b1cdbd2cSJim Jagielski print "\nERROR, $entry[0] invalid number of arguments\n\n"; 242*b1cdbd2cSJim Jagielski } 243*b1cdbd2cSJim Jagielski else 244*b1cdbd2cSJim Jagielski { 245*b1cdbd2cSJim Jagielski # Start the test. 246*b1cdbd2cSJim Jagielski # 247*b1cdbd2cSJim Jagielski print "\nStarting test: $entry[1]\n"; 248*b1cdbd2cSJim Jagielski $convert_file = $entry[3]; 249*b1cdbd2cSJim Jagielski 250*b1cdbd2cSJim Jagielski if ("$entry[2]" =~ /[Qq][Uu][Ii][Cc][Kk][Ww][Oo][Rr][Dd]/) 251*b1cdbd2cSJim Jagielski { 252*b1cdbd2cSJim Jagielski $xml_extension = "sxw"; 253*b1cdbd2cSJim Jagielski $convert_to = "application/x-aportisdoc"; 254*b1cdbd2cSJim Jagielski 255*b1cdbd2cSJim Jagielski # Convert XML file to pdb format. 256*b1cdbd2cSJim Jagielski # 257*b1cdbd2cSJim Jagielski $rc = &convert_to_pdb("$xml_orig", $convert_file, $xml_extension , 258*b1cdbd2cSJim Jagielski $convert_to,"$pdb_orig"); 259*b1cdbd2cSJim Jagielski if ($rc != 0) 260*b1cdbd2cSJim Jagielski { 261*b1cdbd2cSJim Jagielski print "\nERROR, problem converting file $convert_file\n\n"; 262*b1cdbd2cSJim Jagielski } 263*b1cdbd2cSJim Jagielski else 264*b1cdbd2cSJim Jagielski { 265*b1cdbd2cSJim Jagielski # Start pose 266*b1cdbd2cSJim Jagielski # 267*b1cdbd2cSJim Jagielski $rc = &start_pose("$pose_exe", 268*b1cdbd2cSJim Jagielski "$pose_prc/Quickword.PRC,$pose_prc/DBExporter.prc,$pdb_orig/$convert_file.pdb", 269*b1cdbd2cSJim Jagielski "Quickword", $pose_timeout); 270*b1cdbd2cSJim Jagielski 271*b1cdbd2cSJim Jagielski if ($rc == 0) 272*b1cdbd2cSJim Jagielski { 273*b1cdbd2cSJim Jagielski &start_quickword(); 274*b1cdbd2cSJim Jagielski $valid_test = 1; 275*b1cdbd2cSJim Jagielski $running_testtype = "QUICKWORD"; 276*b1cdbd2cSJim Jagielski print "\npose launched, begin automated test sequence for QuickWord\n"; 277*b1cdbd2cSJim Jagielski } 278*b1cdbd2cSJim Jagielski else 279*b1cdbd2cSJim Jagielski { 280*b1cdbd2cSJim Jagielski &kill_pose(); 281*b1cdbd2cSJim Jagielski $running_testtype = ""; 282*b1cdbd2cSJim Jagielski } 283*b1cdbd2cSJim Jagielski } 284*b1cdbd2cSJim Jagielski } 285*b1cdbd2cSJim Jagielski elsif ("$entry[2]" =~ /[Mm][Ii][Nn][Ii][Cc][Aa][Ll][Cc]/) 286*b1cdbd2cSJim Jagielski { 287*b1cdbd2cSJim Jagielski $xml_extension = "sxc"; 288*b1cdbd2cSJim Jagielski $convert_to = "application/x-minicalc"; 289*b1cdbd2cSJim Jagielski 290*b1cdbd2cSJim Jagielski # Convert XML file to pdb format. 291*b1cdbd2cSJim Jagielski # 292*b1cdbd2cSJim Jagielski $rc = &convert_to_pdb("$xml_orig", $convert_file, 293*b1cdbd2cSJim Jagielski $xml_extension, $convert_to,"$pdb_orig"); 294*b1cdbd2cSJim Jagielski if ($rc != 0) 295*b1cdbd2cSJim Jagielski { 296*b1cdbd2cSJim Jagielski print "\nERROR, problem converting file $convert_file\n\n"; 297*b1cdbd2cSJim Jagielski } 298*b1cdbd2cSJim Jagielski else 299*b1cdbd2cSJim Jagielski { 300*b1cdbd2cSJim Jagielski # Get minicalc PDB file names, since an SXC file can 301*b1cdbd2cSJim Jagielski # be converted to more than one. 302*b1cdbd2cSJim Jagielski # 303*b1cdbd2cSJim Jagielski $pdb_files=""; 304*b1cdbd2cSJim Jagielski $i = 1; 305*b1cdbd2cSJim Jagielski while (-f "$pdb_orig/$convert_file-Sheet$i.pdb") 306*b1cdbd2cSJim Jagielski { 307*b1cdbd2cSJim Jagielski if ($i > 1) 308*b1cdbd2cSJim Jagielski { 309*b1cdbd2cSJim Jagielski $pdb_files .= ","; 310*b1cdbd2cSJim Jagielski } 311*b1cdbd2cSJim Jagielski $pdb_files .= "$pdb_orig/$convert_file-Sheet$i.pdb"; 312*b1cdbd2cSJim Jagielski $i++; 313*b1cdbd2cSJim Jagielski } 314*b1cdbd2cSJim Jagielski $number = $i-1; 315*b1cdbd2cSJim Jagielski 316*b1cdbd2cSJim Jagielski # Start pose 317*b1cdbd2cSJim Jagielski # 318*b1cdbd2cSJim Jagielski $rc = &start_pose("$pose_exe", 319*b1cdbd2cSJim Jagielski "$pose_prc/MiniCalc.prc,$pose_prc/DBExporter.prc,$pdb_files", 320*b1cdbd2cSJim Jagielski "MiniCalc", $pose_timeout); 321*b1cdbd2cSJim Jagielski 322*b1cdbd2cSJim Jagielski if ($rc == 0) 323*b1cdbd2cSJim Jagielski { 324*b1cdbd2cSJim Jagielski &start_minicalc(); 325*b1cdbd2cSJim Jagielski $valid_test = 1; 326*b1cdbd2cSJim Jagielski $running_testtype = "MINICALC"; 327*b1cdbd2cSJim Jagielski print "pose launched, begin automated test sequence for MiniCalc\n"; 328*b1cdbd2cSJim Jagielski } 329*b1cdbd2cSJim Jagielski else 330*b1cdbd2cSJim Jagielski { 331*b1cdbd2cSJim Jagielski &kill_pose(); 332*b1cdbd2cSJim Jagielski $running_testtype = ""; 333*b1cdbd2cSJim Jagielski } 334*b1cdbd2cSJim Jagielski } 335*b1cdbd2cSJim Jagielski } 336*b1cdbd2cSJim Jagielski else 337*b1cdbd2cSJim Jagielski { 338*b1cdbd2cSJim Jagielski print "\nERROR, invalid extension <$entry[2]>\n\n"; 339*b1cdbd2cSJim Jagielski } 340*b1cdbd2cSJim Jagielski } 341*b1cdbd2cSJim Jagielski } 342*b1cdbd2cSJim Jagielski 343*b1cdbd2cSJim Jagielski # Process DB_EXPORT 344*b1cdbd2cSJim Jagielski # 345*b1cdbd2cSJim Jagielski elsif ("$entry[0]" eq "DB_EXPORT") 346*b1cdbd2cSJim Jagielski { 347*b1cdbd2cSJim Jagielski if ($#entry != 1) 348*b1cdbd2cSJim Jagielski { 349*b1cdbd2cSJim Jagielski print "\nERROR, $entry[0] invalid number of arguments\n\n"; 350*b1cdbd2cSJim Jagielski } 351*b1cdbd2cSJim Jagielski else 352*b1cdbd2cSJim Jagielski { 353*b1cdbd2cSJim Jagielski &db_export($entry[1]); 354*b1cdbd2cSJim Jagielski } 355*b1cdbd2cSJim Jagielski } 356*b1cdbd2cSJim Jagielski 357*b1cdbd2cSJim Jagielski # Process TAP_APPLICATIONS 358*b1cdbd2cSJim Jagielski # 359*b1cdbd2cSJim Jagielski elsif ("$entry[0]" eq "TAP_APPLICATIONS") 360*b1cdbd2cSJim Jagielski { 361*b1cdbd2cSJim Jagielski if ($#entry != 0) 362*b1cdbd2cSJim Jagielski { 363*b1cdbd2cSJim Jagielski print "\nERROR, $entry[0] invalid number of arguments\n\n"; 364*b1cdbd2cSJim Jagielski } 365*b1cdbd2cSJim Jagielski else 366*b1cdbd2cSJim Jagielski { 367*b1cdbd2cSJim Jagielski &tap_applications(0); 368*b1cdbd2cSJim Jagielski } 369*b1cdbd2cSJim Jagielski } 370*b1cdbd2cSJim Jagielski 371*b1cdbd2cSJim Jagielski # Process ENTER_STRING_AT_LOCATION 372*b1cdbd2cSJim Jagielski # 373*b1cdbd2cSJim Jagielski elsif ("$entry[0]" eq "ENTER_STRING_AT_LOCATION") 374*b1cdbd2cSJim Jagielski { 375*b1cdbd2cSJim Jagielski if ($#entry != 3) 376*b1cdbd2cSJim Jagielski { 377*b1cdbd2cSJim Jagielski print "\nERROR, $entry[0] invalid number of arguments\n\n"; 378*b1cdbd2cSJim Jagielski } 379*b1cdbd2cSJim Jagielski elsif ($valid_test == 0) 380*b1cdbd2cSJim Jagielski { 381*b1cdbd2cSJim Jagielski print "\nERROR, can not process $entry[0] for invalid test\n\n"; 382*b1cdbd2cSJim Jagielski } 383*b1cdbd2cSJim Jagielski else 384*b1cdbd2cSJim Jagielski { 385*b1cdbd2cSJim Jagielski &enter_string_at_location($entry[1], $entry[2], 386*b1cdbd2cSJim Jagielski $entry[3], $running_testtype); 387*b1cdbd2cSJim Jagielski } 388*b1cdbd2cSJim Jagielski } 389*b1cdbd2cSJim Jagielski 390*b1cdbd2cSJim Jagielski # Process TAP_PEN 391*b1cdbd2cSJim Jagielski # 392*b1cdbd2cSJim Jagielski elsif ("$entry[0]" eq "TAP_PEN") 393*b1cdbd2cSJim Jagielski { 394*b1cdbd2cSJim Jagielski if ($#entry != 2) 395*b1cdbd2cSJim Jagielski { 396*b1cdbd2cSJim Jagielski print "\nERROR, $entry[0] invalid number of arguments\n\n"; 397*b1cdbd2cSJim Jagielski } 398*b1cdbd2cSJim Jagielski elsif ($valid_test == 0) 399*b1cdbd2cSJim Jagielski { 400*b1cdbd2cSJim Jagielski print "\nERROR, can not process $entry[0] for invalid test\n\n"; 401*b1cdbd2cSJim Jagielski } 402*b1cdbd2cSJim Jagielski else 403*b1cdbd2cSJim Jagielski { 404*b1cdbd2cSJim Jagielski &pose_tap_pen($entry[1], $entry[2], 0); 405*b1cdbd2cSJim Jagielski } 406*b1cdbd2cSJim Jagielski } 407*b1cdbd2cSJim Jagielski 408*b1cdbd2cSJim Jagielski # Process TAP_BUTTON 409*b1cdbd2cSJim Jagielski # 410*b1cdbd2cSJim Jagielski elsif ("$entry[0]" eq "TAP_BUTTON") 411*b1cdbd2cSJim Jagielski { 412*b1cdbd2cSJim Jagielski if ($#entry != 1) 413*b1cdbd2cSJim Jagielski { 414*b1cdbd2cSJim Jagielski print "\nERROR, $entry[0] invalid number of arguments\n\n"; 415*b1cdbd2cSJim Jagielski } 416*b1cdbd2cSJim Jagielski elsif ($valid_test == 0) 417*b1cdbd2cSJim Jagielski { 418*b1cdbd2cSJim Jagielski print "\nERROR, can not process $entry[0] for invalid test\n\n"; 419*b1cdbd2cSJim Jagielski } 420*b1cdbd2cSJim Jagielski else 421*b1cdbd2cSJim Jagielski { 422*b1cdbd2cSJim Jagielski &pose_tap_button($entry[1], 0); 423*b1cdbd2cSJim Jagielski } 424*b1cdbd2cSJim Jagielski } 425*b1cdbd2cSJim Jagielski 426*b1cdbd2cSJim Jagielski # Process TAP_PEN_HARD 427*b1cdbd2cSJim Jagielski # 428*b1cdbd2cSJim Jagielski elsif ("$entry[0]" eq "TAP_PEN_HARD") 429*b1cdbd2cSJim Jagielski { 430*b1cdbd2cSJim Jagielski if ($#entry != 2) 431*b1cdbd2cSJim Jagielski { 432*b1cdbd2cSJim Jagielski print "\nERROR, $entry[0] invalid number of arguments\n\n"; 433*b1cdbd2cSJim Jagielski } 434*b1cdbd2cSJim Jagielski elsif ($valid_test == 0) 435*b1cdbd2cSJim Jagielski { 436*b1cdbd2cSJim Jagielski print "\nERROR, can not process $entry[0] for invalid test\n\n"; 437*b1cdbd2cSJim Jagielski } 438*b1cdbd2cSJim Jagielski else 439*b1cdbd2cSJim Jagielski { 440*b1cdbd2cSJim Jagielski &pose_tap_pen_hard($entry[1],$entry[2], 0); 441*b1cdbd2cSJim Jagielski } 442*b1cdbd2cSJim Jagielski } 443*b1cdbd2cSJim Jagielski 444*b1cdbd2cSJim Jagielski 445*b1cdbd2cSJim Jagielski # Process SLEEP 446*b1cdbd2cSJim Jagielski # 447*b1cdbd2cSJim Jagielski elsif ("$entry[0]" eq "SLEEP") 448*b1cdbd2cSJim Jagielski { 449*b1cdbd2cSJim Jagielski if ($#entry != 1) 450*b1cdbd2cSJim Jagielski { 451*b1cdbd2cSJim Jagielski print "\nERROR, $entry[0] invalid number of arguments\n\n"; 452*b1cdbd2cSJim Jagielski } 453*b1cdbd2cSJim Jagielski else 454*b1cdbd2cSJim Jagielski { 455*b1cdbd2cSJim Jagielski &pose_sleep($entry[1]); 456*b1cdbd2cSJim Jagielski } 457*b1cdbd2cSJim Jagielski } 458*b1cdbd2cSJim Jagielski 459*b1cdbd2cSJim Jagielski # Process MINICALC_ENTER_CELL 460*b1cdbd2cSJim Jagielski # 461*b1cdbd2cSJim Jagielski elsif ("$entry[0]" eq "MINICALC_ENTER_CELL") 462*b1cdbd2cSJim Jagielski { 463*b1cdbd2cSJim Jagielski if ($#entry != 3) 464*b1cdbd2cSJim Jagielski { 465*b1cdbd2cSJim Jagielski print "\nERROR, $entry[0] invalid number of arguments\n\n"; 466*b1cdbd2cSJim Jagielski } 467*b1cdbd2cSJim Jagielski elsif ($valid_test == 0) 468*b1cdbd2cSJim Jagielski { 469*b1cdbd2cSJim Jagielski print "\nERROR, can not process $entry[0] for invalid test\n\n"; 470*b1cdbd2cSJim Jagielski } 471*b1cdbd2cSJim Jagielski else 472*b1cdbd2cSJim Jagielski { 473*b1cdbd2cSJim Jagielski &minicalc_enter_cell($entry[1], $entry[2], $entry[3]); 474*b1cdbd2cSJim Jagielski } 475*b1cdbd2cSJim Jagielski } 476*b1cdbd2cSJim Jagielski 477*b1cdbd2cSJim Jagielski # Process QUICKWORD_FIND_REPLACE 478*b1cdbd2cSJim Jagielski # 479*b1cdbd2cSJim Jagielski elsif ("$entry[0]" eq "QUICKWORD_FIND_REPLACE") 480*b1cdbd2cSJim Jagielski { 481*b1cdbd2cSJim Jagielski if ($#entry != 2) 482*b1cdbd2cSJim Jagielski { 483*b1cdbd2cSJim Jagielski print "\nERROR, $entry[0] invalid number of arguments\n\n"; 484*b1cdbd2cSJim Jagielski } 485*b1cdbd2cSJim Jagielski elsif ($valid_test == 0) 486*b1cdbd2cSJim Jagielski { 487*b1cdbd2cSJim Jagielski print "\nERROR, can not process $entry[0] for invalid test\n\n"; 488*b1cdbd2cSJim Jagielski } 489*b1cdbd2cSJim Jagielski else 490*b1cdbd2cSJim Jagielski { 491*b1cdbd2cSJim Jagielski &quickword_find_replace($entry[1], $entry[2]); 492*b1cdbd2cSJim Jagielski } 493*b1cdbd2cSJim Jagielski } 494*b1cdbd2cSJim Jagielski else 495*b1cdbd2cSJim Jagielski { 496*b1cdbd2cSJim Jagielski print "\nERROR, invalid line <$c_inline>\n"; 497*b1cdbd2cSJim Jagielski } 498*b1cdbd2cSJim Jagielski } 499*b1cdbd2cSJim Jagielski 500*b1cdbd2cSJim Jagielski &close_program($convert_file); 501*b1cdbd2cSJim Jagielski} 502*b1cdbd2cSJim Jagielski 503*b1cdbd2cSJim Jagielski# close_program 504*b1cdbd2cSJim Jagielski# convert_file - file to export 505*b1cdbd2cSJim Jagielski# 506*b1cdbd2cSJim Jagielski# closes the program running in pose and kills pose 507*b1cdbd2cSJim Jagielski# 508*b1cdbd2cSJim Jagielskisub close_program 509*b1cdbd2cSJim Jagielski{ 510*b1cdbd2cSJim Jagielski my $convert_file = $_[0]; 511*b1cdbd2cSJim Jagielski 512*b1cdbd2cSJim Jagielski if ($running_testtype eq "QUICKWORD") 513*b1cdbd2cSJim Jagielski { 514*b1cdbd2cSJim Jagielski print "QuickWord test completed.\n"; 515*b1cdbd2cSJim Jagielski &close_program_quickword($convert_file); 516*b1cdbd2cSJim Jagielski } 517*b1cdbd2cSJim Jagielski elsif ($running_testtype eq "MINICALC") 518*b1cdbd2cSJim Jagielski { 519*b1cdbd2cSJim Jagielski print "MiniCalc test completed.\n"; 520*b1cdbd2cSJim Jagielski &close_program_minicalc($convert_file, $number); 521*b1cdbd2cSJim Jagielski } 522*b1cdbd2cSJim Jagielski} 523*b1cdbd2cSJim Jagielski 524*b1cdbd2cSJim Jagielski# close_program_quickword 525*b1cdbd2cSJim Jagielski# convert_file - file to export 526*b1cdbd2cSJim Jagielski# 527*b1cdbd2cSJim Jagielski# Closes quickword and kills pose 528*b1cdbd2cSJim Jagielski# 529*b1cdbd2cSJim Jagielskisub close_program_quickword 530*b1cdbd2cSJim Jagielski{ 531*b1cdbd2cSJim Jagielski my $convert_file = $_[0]; 532*b1cdbd2cSJim Jagielski my $error_file = "./error.txt"; 533*b1cdbd2cSJim Jagielski my $rc; 534*b1cdbd2cSJim Jagielski 535*b1cdbd2cSJim Jagielski &close_quickword(); 536*b1cdbd2cSJim Jagielski 537*b1cdbd2cSJim Jagielski &db_export($convert_file); 538*b1cdbd2cSJim Jagielski print "Moving /tmp/$convert_file.pdb to $pdb_new\n"; 539*b1cdbd2cSJim Jagielski `mv /tmp/$convert_file.pdb $pdb_new`; 540*b1cdbd2cSJim Jagielski `chmod 666 $pdb_new/$convert_file.pdb`; 541*b1cdbd2cSJim Jagielski 542*b1cdbd2cSJim Jagielski &close_connection(1); 543*b1cdbd2cSJim Jagielski &kill_pose(); 544*b1cdbd2cSJim Jagielski print "\nFinishing test...\n"; 545*b1cdbd2cSJim Jagielski 546*b1cdbd2cSJim Jagielski # The path of where to put the error file should be specified 547*b1cdbd2cSJim Jagielski # in the properties file. Not sure if it is really necessary 548*b1cdbd2cSJim Jagielski # to put this out to a separate file. STDOUT should be fine. 549*b1cdbd2cSJim Jagielski # 550*b1cdbd2cSJim Jagielski $rc = &convert_to_xml($xml_new, $xml_orig, 551*b1cdbd2cSJim Jagielski "$pdb_new/$convert_file.pdb", "application/x-aportisdoc" , 552*b1cdbd2cSJim Jagielski "sxw", $convert_file, $merge_opt); 553*b1cdbd2cSJim Jagielski if ($rc != 0) 554*b1cdbd2cSJim Jagielski { 555*b1cdbd2cSJim Jagielski print "\nERROR, problem converting file $pdb_new/$convert_file.pdb\n\n"; 556*b1cdbd2cSJim Jagielski } 557*b1cdbd2cSJim Jagielski} 558*b1cdbd2cSJim Jagielski 559*b1cdbd2cSJim Jagielski# close_program_minicalc 560*b1cdbd2cSJim Jagielski# convert_file - file to export 561*b1cdbd2cSJim Jagielski# 562*b1cdbd2cSJim Jagielski# Closes minicalc and kills pose 563*b1cdbd2cSJim Jagielski# 564*b1cdbd2cSJim Jagielskisub close_program_minicalc 565*b1cdbd2cSJim Jagielski{ 566*b1cdbd2cSJim Jagielski my $convert_file = $_[0]; 567*b1cdbd2cSJim Jagielski my $num_files = $_[1]; 568*b1cdbd2cSJim Jagielski my $list=""; 569*b1cdbd2cSJim Jagielski my $rc; 570*b1cdbd2cSJim Jagielski 571*b1cdbd2cSJim Jagielski &close_minicalc(); 572*b1cdbd2cSJim Jagielski 573*b1cdbd2cSJim Jagielski for ($a=1; $a <= $num_files; $a++) 574*b1cdbd2cSJim Jagielski { 575*b1cdbd2cSJim Jagielski &db_export("$convert_file-Sheet$a"); 576*b1cdbd2cSJim Jagielski print "Moving /tmp/$convert_file-Sheet$a.pdb to $pdb_new/\n"; 577*b1cdbd2cSJim Jagielski `mv /tmp/$convert_file-Sheet$a.pdb $pdb_new/`; 578*b1cdbd2cSJim Jagielski `chmod 666 $pdb_new/$convert_file-Sheet$a.pdb`; 579*b1cdbd2cSJim Jagielski } 580*b1cdbd2cSJim Jagielski 581*b1cdbd2cSJim Jagielski &close_connection(1); 582*b1cdbd2cSJim Jagielski &kill_pose(); 583*b1cdbd2cSJim Jagielski print "\nFinishing test...\n"; 584*b1cdbd2cSJim Jagielski 585*b1cdbd2cSJim Jagielski for ($a=1; $a <= $num_files; $a++) 586*b1cdbd2cSJim Jagielski { 587*b1cdbd2cSJim Jagielski $list .="$pdb_new/$convert_file-Sheet$a.pdb " 588*b1cdbd2cSJim Jagielski } 589*b1cdbd2cSJim Jagielski 590*b1cdbd2cSJim Jagielski $rc = &convert_to_xml($xml_new, $xml_orig, "$list", 591*b1cdbd2cSJim Jagielski "application/x-minicalc", "sxc", $convert_file, $merge_opt); 592*b1cdbd2cSJim Jagielski if ($rc != 0) 593*b1cdbd2cSJim Jagielski { 594*b1cdbd2cSJim Jagielski print "\nERROR, problem converting file(s) $list\n\n"; 595*b1cdbd2cSJim Jagielski } 596*b1cdbd2cSJim Jagielski 597*b1cdbd2cSJim Jagielski &pose_sleep(5); 598*b1cdbd2cSJim Jagielski} 599*b1cdbd2cSJim Jagielski 600*b1cdbd2cSJim Jagielski# print_usage 601*b1cdbd2cSJim Jagielski# 602*b1cdbd2cSJim Jagielski# prints the usage for this program. 603*b1cdbd2cSJim Jagielski# 604*b1cdbd2cSJim Jagielskisub print_usage 605*b1cdbd2cSJim Jagielski{ 606*b1cdbd2cSJim Jagielski print "Usage : test_driver.pl\n"; 607*b1cdbd2cSJim Jagielski print "\t-test=<file> \t\t: individual test case file to run\n"; 608*b1cdbd2cSJim Jagielski print "\t-list=<file> \t\t: list of test case files\n"; 609*b1cdbd2cSJim Jagielski print "\t-env=<file> \t\t: Properites like file defining env\n"; 610*b1cdbd2cSJim Jagielski print "\t-pose-exe=<fullpath> \t: path to pose executable\n"; 611*b1cdbd2cSJim Jagielski print "\t-pose-prc=<path> \t: path to directory holding prc files\n"; 612*b1cdbd2cSJim Jagielski print "\t-pdb-orig=<path> \t: directory to hold original pdb files\n"; 613*b1cdbd2cSJim Jagielski print "\t-pdb-new=<path> \t: directory to hold new pdb files\n"; 614*b1cdbd2cSJim Jagielski print "\t-xml-orig=<path> \t: directory to hold original office documents\n"; 615*b1cdbd2cSJim Jagielski print "\t-xml-new=<path> \t: directory to hold new office documents\n"; 616*b1cdbd2cSJim Jagielski print "\t-merge \t: Invokes the merge option when converting\n"; 617*b1cdbd2cSJim Jagielski print "\t \t from PDB back to XML.\n"; 618*b1cdbd2cSJim Jagielski} 619*b1cdbd2cSJim Jagielski 620*b1cdbd2cSJim Jagielski# print_env 621*b1cdbd2cSJim Jagielski# 622*b1cdbd2cSJim Jagielski# Prints the current environment. 623*b1cdbd2cSJim Jagielski# 624*b1cdbd2cSJim Jagielskisub print_env 625*b1cdbd2cSJim Jagielski{ 626*b1cdbd2cSJim Jagielski print "\nUsing the following environment:\n"; 627*b1cdbd2cSJim Jagielski print "\tPOSE_EXE = $pose_exe\n"; 628*b1cdbd2cSJim Jagielski print "\tPOSE_PRC = $pose_prc\n"; 629*b1cdbd2cSJim Jagielski print "\tPDB_ORIG = $pdb_orig\n"; 630*b1cdbd2cSJim Jagielski print "\tPDB_NEW = $pdb_new\n"; 631*b1cdbd2cSJim Jagielski print "\tXML_ORIG = $xml_orig\n"; 632*b1cdbd2cSJim Jagielski print "\tXML_NEW = $xml_new\n"; 633*b1cdbd2cSJim Jagielski} 634*b1cdbd2cSJim Jagielski 635*b1cdbd2cSJim Jagielski# process_cmdline 636*b1cdbd2cSJim Jagielski# 637*b1cdbd2cSJim Jagielski# command line options come in as key/value pairs. 638*b1cdbd2cSJim Jagielski# read them and set the appropriate global variable 639*b1cdbd2cSJim Jagielski# 640*b1cdbd2cSJim Jagielski# Sets these globals: pose_exe, pose_prc, xml_orig, xml_new_dir, 641*b1cdbd2cSJim Jagielski# xml_new, pdb_orig_dir, pdb_orig, pdb_new_dir, pdb_new. 642*b1cdbd2cSJim Jagielski# 643*b1cdbd2cSJim Jagielskisub process_cmdline 644*b1cdbd2cSJim Jagielski{ 645*b1cdbd2cSJim Jagielski foreach $i (@_) 646*b1cdbd2cSJim Jagielski { 647*b1cdbd2cSJim Jagielski my @arg= split('=', $i); 648*b1cdbd2cSJim Jagielski @arg[0] =~ tr/A-Z/a-z/; 649*b1cdbd2cSJim Jagielski 650*b1cdbd2cSJim Jagielski if (@arg[0] eq "-pose-exe") 651*b1cdbd2cSJim Jagielski { 652*b1cdbd2cSJim Jagielski $pose_exe=$arg[1]; 653*b1cdbd2cSJim Jagielski } 654*b1cdbd2cSJim Jagielski elsif (@arg[0] eq "-pose-prc") 655*b1cdbd2cSJim Jagielski { 656*b1cdbd2cSJim Jagielski $pose_prc=$arg[1]; 657*b1cdbd2cSJim Jagielski } 658*b1cdbd2cSJim Jagielski elsif (@arg[0] eq "-pdb-orig") 659*b1cdbd2cSJim Jagielski { 660*b1cdbd2cSJim Jagielski $pdb_orig_dir=$arg[1]; 661*b1cdbd2cSJim Jagielski $pdb_orig=$arg[1]; 662*b1cdbd2cSJim Jagielski } 663*b1cdbd2cSJim Jagielski elsif (@arg[0] eq "-pdb-new") 664*b1cdbd2cSJim Jagielski { 665*b1cdbd2cSJim Jagielski $pdb_new_dir=$arg[1]; 666*b1cdbd2cSJim Jagielski $pdb_new=$arg[1]; 667*b1cdbd2cSJim Jagielski } 668*b1cdbd2cSJim Jagielski elsif (@arg[0] eq "-xml-orig") 669*b1cdbd2cSJim Jagielski { 670*b1cdbd2cSJim Jagielski $xml_orig=$arg[1]; 671*b1cdbd2cSJim Jagielski } 672*b1cdbd2cSJim Jagielski elsif (@arg[0] eq "-xml-new") 673*b1cdbd2cSJim Jagielski { 674*b1cdbd2cSJim Jagielski $xml_new_dir=$arg[1]; 675*b1cdbd2cSJim Jagielski $xml_new=$arg[1]; 676*b1cdbd2cSJim Jagielski } 677*b1cdbd2cSJim Jagielski elsif (@arg[0] eq "-env") 678*b1cdbd2cSJim Jagielski { 679*b1cdbd2cSJim Jagielski &set_env_from_props($arg[1]); 680*b1cdbd2cSJim Jagielski } 681*b1cdbd2cSJim Jagielski elsif (@arg[0] eq "-list") 682*b1cdbd2cSJim Jagielski { 683*b1cdbd2cSJim Jagielski $test_list = $arg[1]; 684*b1cdbd2cSJim Jagielski } 685*b1cdbd2cSJim Jagielski elsif (@arg[0] eq "-test") 686*b1cdbd2cSJim Jagielski { 687*b1cdbd2cSJim Jagielski $infile = $arg[1]; 688*b1cdbd2cSJim Jagielski } 689*b1cdbd2cSJim Jagielski elsif (@arg[0] eq "-merge") 690*b1cdbd2cSJim Jagielski { 691*b1cdbd2cSJim Jagielski $merge_opt = 1; 692*b1cdbd2cSJim Jagielski } 693*b1cdbd2cSJim Jagielski else 694*b1cdbd2cSJim Jagielski { 695*b1cdbd2cSJim Jagielski print_usage(); 696*b1cdbd2cSJim Jagielski die "Incorrect command line"; 697*b1cdbd2cSJim Jagielski } 698*b1cdbd2cSJim Jagielski } 699*b1cdbd2cSJim Jagielski} 700*b1cdbd2cSJim Jagielski 701*b1cdbd2cSJim Jagielski# set_env_from_props 702*b1cdbd2cSJim Jagielski# infile - property file 703*b1cdbd2cSJim Jagielski# 704*b1cdbd2cSJim Jagielski# Read the properties file, of the form key=value 705*b1cdbd2cSJim Jagielski# Valid key values are : 706*b1cdbd2cSJim Jagielski# POSE_EXE 707*b1cdbd2cSJim Jagielski# POSE_PRC 708*b1cdbd2cSJim Jagielski# PDB_ORIG 709*b1cdbd2cSJim Jagielski# PDB_NEW 710*b1cdbd2cSJim Jagielski# XML_ORIG 711*b1cdbd2cSJim Jagielski# XML_NEW 712*b1cdbd2cSJim Jagielski# If a value is found the appropriate global variable is set. 713*b1cdbd2cSJim Jagielski# 714*b1cdbd2cSJim Jagielski# Sets these globals: pose_exe, pose_prc, xml_orig, xml_new_dir, 715*b1cdbd2cSJim Jagielski# xml_new, pdb_orig_dir, pdb_orig, pdb_new_dir, pdb_new. 716*b1cdbd2cSJim Jagielski# 717*b1cdbd2cSJim Jagielskisub set_env_from_props 718*b1cdbd2cSJim Jagielski{ 719*b1cdbd2cSJim Jagielski my $infile = $_[0]; 720*b1cdbd2cSJim Jagielski 721*b1cdbd2cSJim Jagielski open(PROPSFILE, $infile) || die "Could not open properties file <$infile>"; 722*b1cdbd2cSJim Jagielski 723*b1cdbd2cSJim Jagielski while (<PROPSFILE>) 724*b1cdbd2cSJim Jagielski { 725*b1cdbd2cSJim Jagielski chomp $_; 726*b1cdbd2cSJim Jagielski my @arg = split('=', $_); 727*b1cdbd2cSJim Jagielski @arg[0] =~ tr/a-z/A-Z/; 728*b1cdbd2cSJim Jagielski my $len = @arg; 729*b1cdbd2cSJim Jagielski if ($len != 2) 730*b1cdbd2cSJim Jagielski { 731*b1cdbd2cSJim Jagielski die "Malformed property in $arg[0]"; 732*b1cdbd2cSJim Jagielski } 733*b1cdbd2cSJim Jagielski if (@arg[0] eq "POSE_EXE") 734*b1cdbd2cSJim Jagielski { 735*b1cdbd2cSJim Jagielski $pose_exe=$arg[1]; 736*b1cdbd2cSJim Jagielski } 737*b1cdbd2cSJim Jagielski elsif (@arg[0] eq "POSE_PRC") 738*b1cdbd2cSJim Jagielski { 739*b1cdbd2cSJim Jagielski $pose_prc=$arg[1]; 740*b1cdbd2cSJim Jagielski } 741*b1cdbd2cSJim Jagielski elsif (@arg[0] eq "PDB_ORIG") 742*b1cdbd2cSJim Jagielski { 743*b1cdbd2cSJim Jagielski $pdb_orig_dir=$arg[1]; 744*b1cdbd2cSJim Jagielski $pdb_orig=$arg[1]; 745*b1cdbd2cSJim Jagielski } 746*b1cdbd2cSJim Jagielski elsif (@arg[0] eq "PDB_NEW") 747*b1cdbd2cSJim Jagielski { 748*b1cdbd2cSJim Jagielski $pdb_new_dir=$arg[1]; 749*b1cdbd2cSJim Jagielski $pdb_new=$arg[1]; 750*b1cdbd2cSJim Jagielski } 751*b1cdbd2cSJim Jagielski elsif (@arg[0] eq "XML_ORIG") 752*b1cdbd2cSJim Jagielski { 753*b1cdbd2cSJim Jagielski $xml_orig=$arg[1]; 754*b1cdbd2cSJim Jagielski } 755*b1cdbd2cSJim Jagielski elsif (@arg[0] eq "XML_NEW") 756*b1cdbd2cSJim Jagielski { 757*b1cdbd2cSJim Jagielski $xml_new_dir=$arg[1]; 758*b1cdbd2cSJim Jagielski $xml_new=$arg[1]; 759*b1cdbd2cSJim Jagielski } 760*b1cdbd2cSJim Jagielski 761*b1cdbd2cSJim Jagielski } 762*b1cdbd2cSJim Jagielski close PROPSFILE; 763*b1cdbd2cSJim Jagielski} 764*b1cdbd2cSJim Jagielski 765*b1cdbd2cSJim Jagielski# verify_env_options 766*b1cdbd2cSJim Jagielski# 767*b1cdbd2cSJim Jagielski# Verify that input options are correctly set. 768*b1cdbd2cSJim Jagielski# Assumes pose_exe, pose_prc, xml_orig, xml_new_dir, 769*b1cdbd2cSJim Jagielski# pdb_orig_dir, and pdb_new_dir are already set. 770*b1cdbd2cSJim Jagielski# 771*b1cdbd2cSJim Jagielskisub verify_env_options 772*b1cdbd2cSJim Jagielski{ 773*b1cdbd2cSJim Jagielski if (!-e "$pose_exe") 774*b1cdbd2cSJim Jagielski { 775*b1cdbd2cSJim Jagielski die "The pose executable cannot be found at $pose_exe."; 776*b1cdbd2cSJim Jagielski } 777*b1cdbd2cSJim Jagielski if (!-x $pose_exe) 778*b1cdbd2cSJim Jagielski { 779*b1cdbd2cSJim Jagielski die "$pose_exe exists but is not executable."; 780*b1cdbd2cSJim Jagielski } 781*b1cdbd2cSJim Jagielski 782*b1cdbd2cSJim Jagielski if (!-e "$pose_prc") 783*b1cdbd2cSJim Jagielski { 784*b1cdbd2cSJim Jagielski die "The PRC directory specified as $pose_prc does not exist."; 785*b1cdbd2cSJim Jagielski } 786*b1cdbd2cSJim Jagielski if (!-d "$pose_prc") 787*b1cdbd2cSJim Jagielski { 788*b1cdbd2cSJim Jagielski die "The PRC location specified as $pose_prc exists, but is not a directory."; 789*b1cdbd2cSJim Jagielski } 790*b1cdbd2cSJim Jagielski 791*b1cdbd2cSJim Jagielski if (!-e "$pdb_orig_dir") 792*b1cdbd2cSJim Jagielski { 793*b1cdbd2cSJim Jagielski die "The original PDB directory specified as $pdb_orig_dir does not exist."; 794*b1cdbd2cSJim Jagielski } 795*b1cdbd2cSJim Jagielski if (!-d "$pdb_orig_dir") 796*b1cdbd2cSJim Jagielski { 797*b1cdbd2cSJim Jagielski die "The original PDB directory specified as $pdb_orig_dir exists but is not a directory."; 798*b1cdbd2cSJim Jagielski } 799*b1cdbd2cSJim Jagielski 800*b1cdbd2cSJim Jagielski if (!-e "$pdb_new_dir") 801*b1cdbd2cSJim Jagielski { 802*b1cdbd2cSJim Jagielski die "The new PDB directory specified as $pdb_new_dir does not exist."; 803*b1cdbd2cSJim Jagielski } 804*b1cdbd2cSJim Jagielski if (!-d "$pdb_new_dir") 805*b1cdbd2cSJim Jagielski { 806*b1cdbd2cSJim Jagielski die "The new PDB directory specified as $pdb_new_dir exists but is not a directory."; 807*b1cdbd2cSJim Jagielski } 808*b1cdbd2cSJim Jagielski 809*b1cdbd2cSJim Jagielski if (!-e "$xml_orig") 810*b1cdbd2cSJim Jagielski { 811*b1cdbd2cSJim Jagielski die "The original Office document directory specified as $xml_orig does not exist."; 812*b1cdbd2cSJim Jagielski } 813*b1cdbd2cSJim Jagielski if (!-d "$xml_orig") 814*b1cdbd2cSJim Jagielski { 815*b1cdbd2cSJim Jagielski die "The original Office document location specified as $xml_orig exists but is not a directory."; 816*b1cdbd2cSJim Jagielski } 817*b1cdbd2cSJim Jagielski 818*b1cdbd2cSJim Jagielski if (!-e "$xml_new_dir") 819*b1cdbd2cSJim Jagielski { 820*b1cdbd2cSJim Jagielski die "The new Office document directory specified as $xml_new_dir does not exist."; 821*b1cdbd2cSJim Jagielski } 822*b1cdbd2cSJim Jagielski if (!-d "$xml_new_dir") 823*b1cdbd2cSJim Jagielski { 824*b1cdbd2cSJim Jagielski die "The new Office document location specified as $xml_new_dir exists but is not a directory."; 825*b1cdbd2cSJim Jagielski } 826*b1cdbd2cSJim Jagielski} 827*b1cdbd2cSJim Jagielski 828*b1cdbd2cSJim Jagielski# verify_prcs_exist 829*b1cdbd2cSJim Jagielski# prcfile - the PRC file to check 830*b1cdbd2cSJim Jagielski# 831*b1cdbd2cSJim Jagielski# Verifies that the specified PRC file exists. 832*b1cdbd2cSJim Jagielski# 833*b1cdbd2cSJim Jagielskisub verify_prcs_exist 834*b1cdbd2cSJim Jagielski{ 835*b1cdbd2cSJim Jagielski my $prcfile = $_[0]; 836*b1cdbd2cSJim Jagielski 837*b1cdbd2cSJim Jagielski if (!-e "$pose_prc/$prcfile") 838*b1cdbd2cSJim Jagielski { 839*b1cdbd2cSJim Jagielski die "The pose PRC directory ($pose_prc) is correct, but I can't find $prcfile there."; 840*b1cdbd2cSJim Jagielski } 841*b1cdbd2cSJim Jagielski} 842*b1cdbd2cSJim Jagielski 843