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