|  line  | 
 stmt  | 
 bran  | 
 cond  | 
 sub  | 
 pod  | 
 time  | 
 code  | 
| 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 $Getopt::EvaP::VERSION |= '2.8';  | 
| 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 package Getopt::EvaP;   | 
| 
4
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
5
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # EvaP.pm - Evaluate Parameters for Perl (the getopt et.al. replacement)  | 
| 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #  | 
| 
7
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # Stephen.O.Lidie@Lehigh.EDU, 94/10/28  | 
| 
8
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #  | 
| 
9
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # Made to conform, as much as possible, to the C function evap. The C, Perl  | 
| 
10
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # and Tcl versions of evap are patterned after the Control Data procedure  | 
| 
11
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # CLP$EVALUATE_PARAMETERS for the NOS/VE operating system, although none  | 
| 
12
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # approach the richness of CDC's implementation.  | 
| 
13
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #  | 
| 
14
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # Availability is via anonymous FTP from ftp.Lehigh.EDU in the directory  | 
| 
15
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # pub/evap/evap-2.x.  | 
| 
16
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #  | 
| 
17
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # Stephen O. Lidie, Lehigh University Computing Center.  | 
| 
18
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #  | 
| 
19
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # Copyright (C) 1993 - 2014 by Stephen O. Lidie.  All rights reserved.  | 
| 
20
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #  | 
| 
21
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # This program is free software; you can redistribute it and/or modify it under  | 
| 
22
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # the same terms as Perl itself.  | 
| 
23
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #  | 
| 
24
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # For related information see the evap/C header file evap.h.  Complete  | 
| 
25
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # help can be found in the man pages evap(2), evap.c(2), EvaP.pm(2),   | 
| 
26
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # evap.tcl(2) and evap_pac(2).  | 
| 
27
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
28
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 require 5.002;  | 
| 
29
 | 
1
 | 
 
 | 
 
 | 
  
1
  
 | 
 
 | 
933
 | 
 use Text::ParseWords;  | 
| 
 
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
977
 | 
    | 
| 
 
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
62
 | 
    | 
| 
30
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
5
 | 
 use subs qw/evap_fin evap_parse_command_line evap_parse_PDT evap_PDT_error  | 
| 
31
 | 
1
 | 
 
 | 
 
 | 
  
1
  
 | 
 
 | 
467
 | 
     evap_set_value/;  | 
| 
 
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
18
 | 
    | 
| 
32
 | 
1
 | 
 
 | 
 
 | 
  
1
  
 | 
 
 | 
54
 | 
 use strict qw/refs subs/;  | 
| 
 
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
3
 | 
    | 
| 
 
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
23
 | 
    | 
| 
33
 | 
1
 | 
 
 | 
 
 | 
  
1
  
 | 
 
 | 
4
 | 
 use Exporter;  | 
| 
 
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1
 | 
    | 
| 
 
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
267
 | 
    | 
| 
34
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 @ISA = qw/Exporter/;  | 
| 
35
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 @EXPORT = qw/EvaP EvaP_PAC/;  | 
| 
36
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 @EXPORT_OK = qw/evap evap_pac/;  | 
| 
37
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
38
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 *EvaP = \&evap;			# new alias for good 'ol Evaluate Parameters  | 
| 
39
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 *EvaP_PAC = \&evap_pac;		# new alias for Process Application Commands  | 
| 
40
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
41
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 sub evap {			# Parameter Description Table, Message Module  | 
| 
42
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
43
 | 
6
 | 
 
 | 
 
 | 
  
6
  
 | 
  
0
  
 | 
2506
 | 
     my($ref_PDT, $ref_MM, $ref_Opt) = @_;  | 
| 
44
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       | 
| 
45
 | 
6
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
17
 | 
     $evap_DOS = 0 unless defined $evap_DOS; # 1 iff MS-DOS, else Unix  | 
| 
46
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
47
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
9
 | 
     local($pdt_reg_exp1) = '^(.)(.)(.?)$';  | 
| 
48
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
8
 | 
     local($pdt_reg_exp2) = '^TRUE$|^YES$|^ON$|^1$';  | 
| 
49
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
9
 | 
     local($pdt_reg_exp3) = '^FALSE$|^NO$|^OFF$|^0$';  | 
| 
50
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
10
 | 
     local($pdt_reg_exp4) = '^\s*no_file_list\s*$';  | 
| 
51
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
9
 | 
     local($pdt_reg_exp5) = '^\s*optional_file_list\s*$';  | 
| 
52
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
7
 | 
     local($pdt_reg_exp6) = '^\s*required_file_list\s*$';  | 
| 
53
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
6
 | 
     local($full_help) = 0;  | 
| 
54
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
6
 | 
     local($usage_help) = 0;  | 
| 
55
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
11
 | 
     local($file_list) = 'optional_file_list';  | 
| 
56
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
5
 | 
     local($error) = 0;  | 
| 
57
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
22
 | 
     local($pkg) = (caller)[0];  | 
| 
58
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
29
 | 
     local($value, $rt, $type, $required, @P_PARAMETER, %P_INFO, %P_ALIAS,  | 
| 
59
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	  @P_REQUIRED, %P_VALID_VALUES, %P_ENV, %P_SET);  | 
| 
60
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
14
 | 
     local($option, $default_value, $list, $parameter, $alias, @keys,   | 
| 
61
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	  $found, $length, %P_EVALUATE, %P_DEFAULT_VALUE);  | 
| 
62
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
5
 | 
     local(@local_pdt);  | 
| 
63
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
7
 | 
     local($lref_MM) = $ref_MM;	# maintain a local reference  | 
| 
64
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
5
 | 
     local($lref_Opt) = $ref_Opt;  | 
| 
65
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       | 
| 
66
 | 
6
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
15
 | 
     $evap_embed = 0 unless defined $evap_embed; # 1 iff embed evap  | 
| 
67
 | 
6
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
16
 | 
     if ($evap_embed) {		# initialize for a new call  | 
| 
68
 | 
5
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
15
 | 
 	if (defined $lref_Opt) {  | 
| 
69
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
 	    undef %$lref_Opt;  | 
| 
70
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	} else {  | 
| 
71
 | 
1
 | 
 
 | 
 
 | 
  
1
  
 | 
 
 | 
4
 | 
 	    no strict 'refs';  | 
| 
 
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1
 | 
    | 
| 
 
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
776
 | 
    | 
| 
72
 | 
5
 | 
 
 | 
 
 | 
 
 | 
 
 | 
12
 | 
 	    undef %{"${pkg}::Options"};  | 
| 
 
 | 
5
 | 
 
 | 
 
 | 
 
 | 
 
 | 
35
 | 
    | 
| 
73
 | 
5
 | 
 
 | 
 
 | 
 
 | 
 
 | 
8
 | 
 	    undef %{"${pkg}::options"};  | 
| 
 
 | 
5
 | 
 
 | 
 
 | 
 
 | 
 
 | 
23
 | 
    | 
| 
74
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	}  | 
| 
75
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
76
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
77
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
18
 | 
     evap_parse_PDT $ref_PDT;  | 
| 
78
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
15
 | 
     return evap_parse_command_line;  | 
| 
79
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
80
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 } # end evap  | 
| 
81
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
82
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 sub evap_parse_PDT {  | 
| 
83
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
      | 
| 
84
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # Verify correctness of the PDT.  Check for duplicate parameter names and  | 
| 
85
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # aliases.  Extract default values and possible keywords.  Decode the user  | 
| 
86
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # syntax and convert into a simpler form (ala NGetOpt) for internal use.   | 
| 
87
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # Handle 'file list' too.  | 
| 
88
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
89
 | 
6
 | 
 
 | 
 
 | 
  
6
  
 | 
 
 | 
8
 | 
     my($ref_PDT) = @_;  | 
| 
90
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
91
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
5
 | 
     @local_pdt = @{$ref_PDT};   # private copy of the PDT  | 
| 
 
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
70
 | 
    | 
| 
92
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
17
 | 
     unshift @local_pdt, 'help, h: switch'; # supply -help automatically  | 
| 
93
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
10
 | 
     @P_PARAMETER = ();		# no parameter names  | 
| 
94
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
7
 | 
     %P_INFO = ();		# no encoded parameter information  | 
| 
95
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
7
 | 
     %P_ALIAS = ();		# no aliases  | 
| 
96
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
7
 | 
     @P_REQUIRED = ();		# no required parameters  | 
| 
97
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
7
 | 
     %P_VALID_VALUES = ();	# no keywords  | 
| 
98
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
8
 | 
     %P_ENV = ();		# no default environment variables  | 
| 
99
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
5
 | 
     %P_EVALUATE = ();		# no PDT values evaluated yet  | 
| 
100
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
8
 | 
     %P_DEFAULT_VALUE = ();	# no default values yet  | 
| 
101
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
4
 | 
     %P_SET = ();        	# no sets yet  | 
| 
102
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
103
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
   OPTIONS:  | 
| 
104
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
13
 | 
     foreach $option (@local_pdt) {  | 
| 
105
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
106
 | 
72
 | 
 
 | 
 
 | 
 
 | 
 
 | 
509
 | 
 	$option =~ s/\s*$//;	# trim trailing spaces  | 
| 
107
 | 
72
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
454
 | 
 	next OPTIONS if $option =~ /^#.*|PDT\s+|pdt\s+|PDT$|pdt$/;  | 
| 
108
 | 
66
 | 
 
 | 
 
 | 
 
 | 
 
 | 
506
 | 
 	$option =~ s/\s*PDTEND|\s*pdtend//;  | 
| 
109
 | 
66
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
158
 | 
 	next OPTIONS if $option =~ /^ ?$/;  | 
| 
110
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	  | 
| 
111
 | 
66
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
511
 | 
 	if ($option =~ /$pdt_reg_exp4|$pdt_reg_exp5|$pdt_reg_exp6/) {  | 
| 
112
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
8
 | 
 	    $file_list = $option; # remember user specified file_list  | 
| 
113
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
13
 | 
 	    next OPTIONS;  | 
| 
114
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	}  | 
| 
115
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	  | 
| 
116
 | 
60
 | 
 
 | 
 
 | 
 
 | 
 
 | 
267
 | 
         ($parameter, $alias, $_) =   | 
| 
117
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	  ($option =~ /^\s*(\S*)\s*,\s*(\S*)\s*:\s*(.*)$/);  | 
| 
118
 | 
60
 | 
  
 50
  
 | 
  
 33
  
 | 
 
 | 
 
 | 
356
 | 
 	evap_PDT_error "Error in an Evaluate Parameters 'parameter, alias: " .  | 
| 
 
 | 
 
 | 
 
 | 
  
 33
  
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
119
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    "type' option specification:  \"$option\".\n"  | 
| 
120
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    unless defined $parameter and defined $alias and defined $_;  | 
| 
121
 | 
60
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
111
 | 
 	evap_PDT_error "Duplicate parameter $parameter:  \"$option\".\n"   | 
| 
122
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             if defined( $P_INFO{$parameter});  | 
| 
123
 | 
60
 | 
 
 | 
 
 | 
 
 | 
 
 | 
69
 | 
 	push @P_PARAMETER, $parameter; # update the ordered list of parameters  | 
| 
124
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
125
 | 
60
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
181
 | 
 	if (/(\bswitch\b|\binteger\b|\bstring\b|\breal\b|\bfile\b|\bboolean\b|\bkey\b|\bname\b|\bapplication\b|\bintegers\b|\bstrings\b|\breals\b|\bfiles\b|\bbooleans\b|\bkeys\b|\bnames\b|\bapplications\b)/) {  | 
| 
126
 | 
60
 | 
 
 | 
 
 | 
 
 | 
 
 | 
171
 | 
 	    ($list, $type, $_) = ($`, $1, $');  | 
| 
127
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	} else {  | 
| 
128
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
 	    evap_PDT_error "Parameter $parameter has an undefined type:  " .  | 
| 
129
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                 "\"$option\".\n";  | 
| 
130
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	}  | 
| 
131
 | 
60
 | 
  
 50
  
 | 
  
 66
  
 | 
 
 | 
 
 | 
162
 | 
 	evap_PDT_error "Expecting 'list of', found:  \"$list\".\n"   | 
| 
 
 | 
 
 | 
 
 | 
  
 33
  
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
132
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             if $list ne '' and $list !~ /\s*list\s+of\s+/ and  | 
| 
133
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 		$list !~ /\d+\s+/;  | 
| 
134
 | 
60
 | 
 
 | 
 
 | 
 
 | 
 
 | 
57
 | 
 	my($set) = $list =~ /(\d+)\s+/;  | 
| 
135
 | 
60
 | 
 
 | 
 
 | 
 
 | 
 
 | 
93
 | 
 	$P_SET{$parameter} = $set;  | 
| 
136
 | 
60
 | 
 
 | 
 
 | 
 
 | 
 
 | 
56
 | 
 	$list =~ s/\d+\s+//;  | 
| 
137
 | 
60
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
77
 | 
         $list = '1' if $list;	# list state = 1, possible default PDT values  | 
| 
138
 | 
60
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
97
 | 
         $type = 'w' if $type =~ /^switch$/;  | 
| 
139
 | 
60
 | 
 
 | 
 
 | 
 
 | 
 
 | 
70
 | 
 	$type = substr $type, 0, 1;  | 
| 
140
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
141
 | 
60
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
220
 | 
         ($_, $default_value) = /\s*=\s*/ ? ($`, $') :   | 
| 
142
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             ('', ''); # get possible default value  | 
| 
143
 | 
60
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
115
 | 
 	if ($default_value =~ /^([^\(]{1})(\w*)\s*,\s*(.*)/) {   | 
| 
144
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             # If environment variable AND not a list.  | 
| 
145
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
21
 | 
 	    $default_value = $3;  | 
| 
146
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
25
 | 
 	    $P_ENV{$parameter} = $1 . $2;  | 
| 
147
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	}  | 
| 
148
 | 
60
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
83
 | 
         $required = ($default_value eq '$required') ? 'R' : 'O';  | 
| 
149
 | 
60
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
126
 | 
         $P_INFO{$parameter} = defined $type ? $required . $type . $list : "";  | 
| 
150
 | 
60
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
102
 | 
 	push @P_REQUIRED, $parameter if $required =~ /^R$/;  | 
| 
151
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
152
 | 
60
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
87
 | 
         if ($type =~ /^k$/) {  | 
| 
153
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
19
 | 
 	    $_ =~ s/,/ /g;  | 
| 
154
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
20
 | 
 	    @keys = split ' ';  | 
| 
155
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
7
 | 
 	    pop @keys;		# remove 'keyend'  | 
| 
156
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
15
 | 
 	    $P_VALID_VALUES{$parameter} = join ' ', @keys;  | 
| 
157
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         } # ifend keyword type  | 
| 
158
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	  | 
| 
159
 | 
60
 | 
 
 | 
 
 | 
 
 | 
 
 | 
135
 | 
 	foreach $value (keys %P_ALIAS) {  | 
| 
160
 | 
270
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
423
 | 
 	    evap_PDT_error "Duplicate alias $alias:  \"$option\".\n"   | 
| 
161
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                 if $alias eq $P_ALIAS{$value};  | 
| 
162
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	}  | 
| 
163
 | 
60
 | 
 
 | 
 
 | 
 
 | 
 
 | 
95
 | 
 	$P_ALIAS{$parameter} = $alias; # remember alias  | 
| 
164
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
165
 | 
60
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
117
 | 
 	evap_PDT_error "Cannot have 'list of switch':  \"$option\".\n"   | 
| 
166
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             if $P_INFO{$parameter} =~ /^.w1$/;  | 
| 
167
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
168
 | 
60
 | 
  
100
  
 | 
  
100
  
 | 
 
 | 
 
 | 
193
 | 
         if ($default_value ne '' and $default_value ne '$required') {  | 
| 
 
 | 
 
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
169
 | 
42
 | 
  
 50
  
 | 
  
 66
  
 | 
 
 | 
 
 | 
104
 | 
 	    $default_value = $ENV{$P_ENV{$parameter}} if $P_ENV{$parameter}   | 
| 
170
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                 and $ENV{$P_ENV{$parameter}};  | 
| 
171
 | 
42
 | 
 
 | 
 
 | 
 
 | 
 
 | 
52
 | 
 	    $P_DEFAULT_VALUE{$parameter} = $default_value;  | 
| 
172
 | 
42
 | 
 
 | 
 
 | 
 
 | 
 
 | 
81
 | 
             evap_set_value 0,  $type, $list, $default_value, $parameter;  | 
| 
173
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	} elsif ($evap_embed) {  | 
| 
174
 | 
1
 | 
 
 | 
 
 | 
  
1
  
 | 
 
 | 
5
 | 
 	    no strict 'refs';  | 
| 
 
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1
 | 
    | 
| 
 
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1016
 | 
    | 
| 
175
 | 
15
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
27
 | 
 	    undef ${"${pkg}::opt_${parameter}"} if not defined $lref_Opt;  | 
| 
 
 | 
15
 | 
 
 | 
 
 | 
 
 | 
 
 | 
55
 | 
    | 
| 
176
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         }  | 
| 
177
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	  | 
| 
178
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     } # forend OPTIONS  | 
| 
179
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
180
 | 
6
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
15
 | 
     if ($error) {  | 
| 
181
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         print STDERR "Read the `man' page \"EvaP.pm\" for details on PDT syntax.\n";  | 
| 
182
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         exit 1;  | 
| 
183
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
184
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
185
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 } # end evap_parse_PDT  | 
| 
186
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
187
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 sub evap_parse_command_line {  | 
| 
188
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
189
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # Process arguments from the command line, stopping at the first parameter  | 
| 
190
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # without a leading dash, or a --.  Convert a parameter alias into its full  | 
| 
191
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # form, type-check parameter values and store the value into global   | 
| 
192
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # variables for use by the caller.  When complete call evap_fin to   | 
| 
193
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # perform final processing.  | 
| 
194
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       | 
| 
195
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
   ARGUMENTS:  | 
| 
196
 | 
6
 | 
 
 | 
 
 | 
  
6
  
 | 
 
 | 
15
 | 
     while ($#ARGV >= 0) {  | 
| 
197
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	  | 
| 
198
 | 
25
 | 
 
 | 
 
 | 
 
 | 
 
 | 
32
 | 
 	$option = shift @ARGV;	# get next command line parameter  | 
| 
199
 | 
25
 | 
 
 | 
 
 | 
 
 | 
 
 | 
29
 | 
 	$value = undef;		# assume no value  | 
| 
200
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	  | 
| 
201
 | 
25
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
60
 | 
 	$full_help = 1 if $option =~ /^-(full-help|\Q???\E)$/;  | 
| 
202
 | 
25
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
49
 | 
 	$usage_help = 1 if $option =~ /^-(usage-help|\Q??\E)$/;  | 
| 
203
 | 
25
 | 
  
100
  
 | 
  
 66
  
 | 
 
 | 
 
 | 
126
 | 
 	$option = '-help' if $full_help or $usage_help or  | 
| 
 
 | 
 
 | 
 
 | 
  
 66
  
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
204
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    $option  =~ /^-(\Q?\E)$/;  | 
| 
205
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	  | 
| 
206
 | 
25
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
59
 | 
 	if ($option =~ /^(--|-)/) { # check for end of parameters  | 
| 
207
 | 
24
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
36
 | 
 	    if ($option eq '--') {  | 
| 
208
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
 		return evap_fin;  | 
| 
209
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    }  | 
| 
210
 | 
24
 | 
 
 | 
 
 | 
 
 | 
 
 | 
43
 | 
 	    $option = $';	# option name without dash  | 
| 
211
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	} else {		# not an option, push it back on the list  | 
| 
212
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2
 | 
 	    unshift @ARGV, $option;  | 
| 
213
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
15
 | 
 	    return evap_fin;  | 
| 
214
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	}  | 
| 
215
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	  | 
| 
216
 | 
24
 | 
 
 | 
 
 | 
 
 | 
 
 | 
65
 | 
 	foreach $alias (keys %P_ALIAS) { # replace alias with the full spelling  | 
| 
217
 | 
240
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
369
 | 
 	    $option = $alias if $option eq $P_ALIAS{$alias};  | 
| 
218
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	}  | 
| 
219
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	  | 
| 
220
 | 
24
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
60
 | 
 	if (not defined($rt = $P_INFO{$option})) {  | 
| 
221
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2
 | 
 	    $found = 0;  | 
| 
222
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2
 | 
 	    $length = length $option;  | 
| 
223
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
5
 | 
 	    foreach $key (keys %P_INFO) { # try substring match  | 
| 
224
 | 
20
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
31
 | 
 		if ($option eq substr $key, 0, $length) {  | 
| 
225
 | 
1
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
2
 | 
 		    if ($found) {  | 
| 
226
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
 			print STDERR "Ambiguous parameter: -$option.\n";  | 
| 
227
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
 			$error++;  | 
| 
228
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
 			last;  | 
| 
229
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 		    }  | 
| 
230
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1
 | 
 		    $found = $key; # remember full spelling  | 
| 
231
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 		}  | 
| 
232
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    } # forend  | 
| 
233
 | 
2
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
4
 | 
 	    $option = $found ? $found : $option;  | 
| 
234
 | 
2
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
5
 | 
 	    if (not defined($rt = $P_INFO{$option})) {  | 
| 
235
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
9
 | 
 		print STDERR "Invalid parameter: -$option.\n";  | 
| 
236
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1
 | 
 		$error++;  | 
| 
237
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2
 | 
 		next ARGUMENTS;  | 
| 
238
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    }  | 
| 
239
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	} # ifend non-substring match  | 
| 
240
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	  | 
| 
241
 | 
23
 | 
 
 | 
 
 | 
 
 | 
 
 | 
130
 | 
 	($required, $type, $list) = ($rt =~ /$pdt_reg_exp1/);  | 
| 
242
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	  | 
| 
243
 | 
23
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
56
 | 
 	if ($type !~ /^w$/) {  | 
| 
244
 | 
19
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
32
 | 
 	    if ($#ARGV < 0) { # if argument list is exhausted  | 
| 
245
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
12
 | 
 		print STDERR "Value required for parameter -$option.\n";  | 
| 
246
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2
 | 
 		$error++;  | 
| 
247
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
3
 | 
 		next ARGUMENTS;  | 
| 
248
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    } else {  | 
| 
249
 | 
18
 | 
 
 | 
 
 | 
 
 | 
 
 | 
24
 | 
 		$value = shift @ARGV;  | 
| 
250
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    }  | 
| 
251
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	}  | 
| 
252
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	  | 
| 
253
 | 
22
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
93
 | 
 	if ($type =~ /^w$/) {	# switch  | 
| 
 
 | 
 
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
 
 | 
 
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
 
 | 
 
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
 
 | 
 
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
 
 | 
 
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
 
 | 
 
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
254
 | 
4
 | 
 
 | 
 
 | 
 
 | 
 
 | 
5
 | 
 	    $value = 1;  | 
| 
255
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	} elsif ($type =~ /^i$/) { # integer  | 
| 
256
 | 
3
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
12
 | 
 	    if ($value !~ /^[+-]?[0-9]+$/)  {  | 
| 
257
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
19
 | 
 		print STDERR "Expecting integer reference, found \"$value\" for parameter -$option.\n";  | 
| 
258
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2
 | 
 		$error++;  | 
| 
259
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
3
 | 
 		undef $value;  | 
| 
260
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    }  | 
| 
261
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	} elsif ($type =~ /^r$/) { # real number, int is also ok  | 
| 
262
 | 
5
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
27
 | 
 	    if ($value !~ /^\s*[+-]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?\s*$/) {  | 
| 
263
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
57
 | 
 		print STDERR "Expecting real reference, found \"$value\" for parameter -$option.\n";  | 
| 
264
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
4
 | 
 		$error++;  | 
| 
265
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2
 | 
 		undef $value;  | 
| 
266
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    }  | 
| 
267
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	} elsif ($type =~ /^s$|^n$|^a$/) { # string or name or application  | 
| 
268
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	} elsif ($type =~ /^f$/) { # file  | 
| 
269
 | 
1
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
4
 | 
 	    if (length $value > 255) {  | 
| 
270
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
 		print STDERR "Expecting file reference, found \"$value\" for parameter -$option.\n";  | 
| 
271
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
 		$error++;  | 
| 
272
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
 		undef $value;  | 
| 
273
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    }  | 
| 
274
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	} elsif ($type =~ /^b$/) { # boolean  | 
| 
275
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
5
 | 
 	    $value =~ tr/a-z/A-Z/;  | 
| 
276
 | 
2
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
37
 | 
 	    if ($value !~ /$pdt_reg_exp2|$pdt_reg_exp3/i) {  | 
| 
277
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
13
 | 
 		print STDERR "Expecting boolean reference, found \"$value\" for parameter -$option.\n";  | 
| 
278
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2
 | 
 		$error++;  | 
| 
279
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2
 | 
 		undef $value;  | 
| 
280
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             }  | 
| 
281
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	} elsif ($type =~ /^k$/) { # keyword  | 
| 
282
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
283
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    # First try exact match, then substring match.  | 
| 
284
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
285
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
3
 | 
 	    undef $found;  | 
| 
286
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
7
 | 
 	    @keys = split ' ', $P_VALID_VALUES{$option};  | 
| 
287
 | 
2
 | 
 
 | 
  
100
  
 | 
 
 | 
 
 | 
12
 | 
 	    for ($i = 0; $i <= $#keys and not defined $found; $i++) {  | 
| 
288
 | 
5
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
20
 | 
 		$found = 1 if $value eq $keys[$i];  | 
| 
289
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    }  | 
| 
290
 | 
2
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
4
 | 
 	    if (not defined $found) { # try substring match  | 
| 
291
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
3
 | 
 		$length = length $value;  | 
| 
292
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
5
 | 
 		for ($i = 0; $i <= $#keys; $i++) {  | 
| 
293
 | 
4
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
12
 | 
 		    if ($value eq substr $keys[$i], 0, $length) {  | 
| 
294
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
0
 | 
 			if (defined $found) {  | 
| 
295
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
 			    print STDERR "Ambiguous keyword for parameter -$option: $value.\n";  | 
| 
296
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
 			    $error++;  | 
| 
297
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
 			    last; # for  | 
| 
298
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 			}  | 
| 
299
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
 			$found = $keys[$i]; # remember full spelling  | 
| 
300
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 		    }  | 
| 
301
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 		} # forend  | 
| 
302
 | 
1
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
2
 | 
 		$value = defined( $found ) ? $found : $value;  | 
| 
303
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    } # ifend  | 
| 
304
 | 
2
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
5
 | 
 	    if (not defined $found) {  | 
| 
305
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
11
 | 
 		print STDERR "\"$value\" is not a valid value for the parameter -$option.\n";  | 
| 
306
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2
 | 
 		$error++;  | 
| 
307
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1
 | 
 		undef $value;  | 
| 
308
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    }  | 
| 
309
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	} # ifend type-check  | 
| 
310
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	  | 
| 
311
 | 
22
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
43
 | 
 	next ARGUMENTS if not defined $value;  | 
| 
312
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	      | 
| 
313
 | 
18
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
30
 | 
     	$list = '2' if $list =~ /^1$/; # advance list state  | 
| 
314
 | 
18
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
414
 | 
 	evap_set_value 1,  $type, $list, $value, $option if defined $value;  | 
| 
315
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	# Remove from $required list if specified.  | 
| 
316
 | 
18
 | 
 
 | 
 
 | 
 
 | 
 
 | 
41
 | 
 	@P_REQUIRED = grep $option ne $_, @P_REQUIRED;  | 
| 
317
 | 
18
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
46
 | 
 	$P_INFO{$option} = $required . $type . '3' if $list;  | 
| 
318
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
319
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     } # whilend ARGUMENTS  | 
| 
320
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       | 
| 
321
 | 
5
 | 
 
 | 
 
 | 
 
 | 
 
 | 
9
 | 
     return evap_fin;  | 
| 
322
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       | 
| 
323
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 } # end evap_parse_command_line  | 
| 
324
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
325
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 sub evap_fin {  | 
| 
326
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
327
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # Finish up Evaluate Parameters processing:  | 
| 
328
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     #  | 
| 
329
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # If -usage-help, -help or -full-help was requested then do it and exit.  | 
| 
330
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # Else,  | 
| 
331
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     #     | 
| 
332
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     #  . Store program name in `help' variables.  | 
| 
333
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     #  . Perform deferred evaluations.  | 
| 
334
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     #  . Ensure all $required parameters have been given a value.  | 
| 
335
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     #  . Ensure the validity of the trailing file list.  | 
| 
336
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     #  . Exit with a Unix return code of 1 if there were errors and   | 
| 
337
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     #    $evap_embed = 0, else return to the calling Perl program with a   | 
| 
338
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     #    proper return code.  | 
| 
339
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       | 
| 
340
 | 
1
 | 
 
 | 
 
 | 
  
1
  
 | 
 
 | 
6
 | 
     use File::Basename;  | 
| 
 
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1
 | 
    | 
| 
 
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
231
 | 
    | 
| 
341
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       | 
| 
342
 | 
6
 | 
 
 | 
 
 | 
  
6
  
 | 
 
 | 
8
 | 
     my($m, $p, $required, $type, $list, $rt, $def, $element, $is_string,  | 
| 
343
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
        $pager, $do_page);  | 
| 
344
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
345
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # Define Help Hooks text as required.  | 
| 
346
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       | 
| 
347
 | 
6
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
15
 | 
     $evap_Help_Hooks{'P_HHURFL'} = " file(s)\n"   | 
| 
348
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         if not defined $evap_Help_Hooks{'P_HHURFL'};  | 
| 
349
 | 
6
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
11
 | 
     $evap_Help_Hooks{'P_HHUOFL'} = " [file(s)]\n"  | 
| 
350
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         if not defined $evap_Help_Hooks{'P_HHUOFL'};  | 
| 
351
 | 
6
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
11
 | 
     $evap_Help_Hooks{'P_HHUNFL'} = "\n"  | 
| 
352
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         if not defined $evap_Help_Hooks{'P_HHUNFL'};  | 
| 
353
 | 
6
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
11
 | 
     $evap_Help_Hooks{'P_HHBRFL'} = "\nfile(s) required by this command\n\n"  | 
| 
354
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         if not defined $evap_Help_Hooks{'P_HHBRFL'};  | 
| 
355
 | 
6
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
10
 | 
     $evap_Help_Hooks{'P_HHBOFL'} = "\n[file(s)] optionally required by this command\n\n"  | 
| 
356
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         if not defined $evap_Help_Hooks{'P_HHBOFL'};  | 
| 
357
 | 
6
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
10
 | 
     $evap_Help_Hooks{'P_HHBNFL'} = "\n"  | 
| 
358
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         if not defined $evap_Help_Hooks{'P_HHBNFL'};  | 
| 
359
 | 
6
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
13
 | 
     $evap_Help_Hooks{'P_HHERFL'} = "Trailing file name(s) required.\n"  | 
| 
360
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         if not defined $evap_Help_Hooks{'P_HHERFL'};  | 
| 
361
 | 
6
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
13
 | 
     $evap_Help_Hooks{'P_HHENFL'} = "Trailing file name(s) not permitted.\n"  | 
| 
362
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         if not defined $evap_Help_Hooks{'P_HHENFL'};  | 
| 
363
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
364
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
5
 | 
     my $want_help = 0;  | 
| 
365
 | 
6
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
11
 | 
     if (defined $lref_Opt) {  | 
| 
366
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1
 | 
 	$want_help = $lref_Opt->{'help'};  | 
| 
367
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     } else {  | 
| 
368
 | 
1
 | 
 
 | 
 
 | 
  
1
  
 | 
 
 | 
4
 | 
 	no strict 'refs';  | 
| 
 
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1
 | 
    | 
| 
 
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
445
 | 
    | 
| 
369
 | 
5
 | 
 
 | 
 
 | 
 
 | 
 
 | 
6
 | 
 	$want_help = "${pkg}::opt_help";  | 
| 
370
 | 
5
 | 
 
 | 
 
 | 
 
 | 
 
 | 
9
 | 
 	$want_help = $$want_help;  | 
| 
371
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
372
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
373
 | 
6
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
11
 | 
     if ($want_help) {		# see if help was requested  | 
| 
374
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	  | 
| 
375
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
3
 | 
 	my($optional);  | 
| 
376
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
5
 | 
 	my(%parameter_help) = ();  | 
| 
377
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
3
 | 
 	my($parameter_help_in_progress) = 0;  | 
| 
378
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
26
 | 
 	my(%type_list) = (  | 
| 
379
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    'w' => 'switch',  | 
| 
380
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    'i' => 'integer',  | 
| 
381
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    's' => 'string',  | 
| 
382
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    'r' => 'real',  | 
| 
383
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    'f' => 'file',  | 
| 
384
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    'b' => 'boolean',  | 
| 
385
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    'k' => 'key',  | 
| 
386
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    'n' => 'name',  | 
| 
387
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    'a' => 'application',  | 
| 
388
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	);  | 
| 
389
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
390
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	# Establish the pager and open the pipeline.  Do no paging if the   | 
| 
391
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	# boolean environment variable D_EVAP_DO_PAGE is FALSE.  | 
| 
392
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
393
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
5
 | 
 	$pager = 'more';  | 
| 
394
 | 
3
 | 
  
 50
  
 | 
  
 33
  
 | 
 
 | 
 
 | 
10
 | 
 	$pager = $ENV{'PAGER'} if defined $ENV{'PAGER'} and $ENV{'PAGER'};  | 
| 
395
 | 
3
 | 
  
 50
  
 | 
  
 33
  
 | 
 
 | 
 
 | 
11
 | 
 	$pager = $ENV{'MANPAGER'} if defined $ENV{'MANPAGER'} and   | 
| 
396
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    $ENV{'MANPAGER'};  | 
| 
397
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
5
 | 
 	$pager = '|' . $pager;  | 
| 
398
 | 
3
 | 
  
 50
  
 | 
  
 33
  
 | 
 
 | 
 
 | 
8
 | 
 	if (defined $ENV{'D_EVAP_DO_PAGE'} and   | 
| 
399
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    (($do_page = $ENV{'D_EVAP_DO_PAGE'}) ne '')) {  | 
| 
400
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
 	    $do_page =~ tr/a-z/A-Z/;  | 
| 
401
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
0
 | 
 	    $pager = '>-' if $do_page =~ /$pdt_reg_exp3/;  | 
| 
402
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	}  | 
| 
403
 | 
3
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
12
 | 
 	$pager = '>-' if $^O eq 'MacOS';  | 
| 
404
 | 
3
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
4908
 | 
 	open(PAGER, "$pager") or warn "'$pager' open failed:  $!";  | 
| 
405
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	  | 
| 
406
 | 
3
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
34
 | 
 	print PAGER "Command Source:  $0\n\n" if $full_help;  | 
| 
407
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
408
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	# Print the Message Module text and save any full help.  The key is the  | 
| 
409
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	# parameter name and the value is a list of strings with the newline as  | 
| 
410
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	# a separator.  If there is no Message Module or it's empty then   | 
| 
411
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	# display an abbreviated usage message.  | 
| 
412
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	  | 
| 
413
 | 
3
 | 
  
100
  
 | 
  
 66
  
 | 
 
 | 
 
 | 
43
 | 
         if ($usage_help or not @{$lref_MM} or $#{$lref_MM} < 0) {  | 
| 
 
 | 
2
 | 
 
 | 
  
 66
  
 | 
 
 | 
 
 | 
19
 | 
    | 
| 
 
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
8
 | 
    | 
| 
414
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	      | 
| 
415
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
105
 | 
 	    $basename = basename($0, "");  | 
| 
416
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
11
 | 
 	    print PAGER "\nUsage: ", $basename;  | 
| 
417
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2
 | 
 	    $optional = '';  | 
| 
418
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
7
 | 
 	    foreach $p (@P_PARAMETER) {  | 
| 
419
 | 
10
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
23
 | 
 		if ($P_INFO{$p} =~ /^R..?$/) { # if $required  | 
| 
420
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
4
 | 
 		    print PAGER " -$P_ALIAS{$p}";  | 
| 
421
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 		} else {  | 
| 
422
 | 
9
 | 
 
 | 
 
 | 
 
 | 
 
 | 
15
 | 
 		    $optional .= " -$P_ALIAS{$p}";  | 
| 
423
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 		}  | 
| 
424
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    } # forend  | 
| 
425
 | 
1
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
7
 | 
 	    print PAGER " [$optional]" if $optional;  | 
| 
426
 | 
1
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
34
 | 
 	    if ($file_list =~ /$pdt_reg_exp5/) {  | 
| 
 
 | 
 
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
427
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
4
 | 
 		print PAGER "$evap_Help_Hooks{'P_HHUOFL'}";  | 
| 
428
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    } elsif ($file_list =~ /$pdt_reg_exp6/) {  | 
| 
429
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
 		print PAGER "$evap_Help_Hooks{'P_HHURFL'}";  | 
| 
430
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    } else {  | 
| 
431
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
 		print PAGER "$evap_Help_Hooks{'P_HHUNFL'}";  | 
| 
432
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    }  | 
| 
433
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	      | 
| 
434
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         } else {  | 
| 
435
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	      | 
| 
436
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
11
 | 
 	  MESSAGE_LINE:  | 
| 
437
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
7
 | 
 	    foreach $m (@{$lref_MM}) {  | 
| 
438
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 		  | 
| 
439
 | 
122
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
230
 | 
 		if ($m =~ /^\.(.*)$/) { # look for 'dot' leadin character  | 
| 
440
 | 
18
 | 
 
 | 
 
 | 
 
 | 
 
 | 
32
 | 
 		    $p = $1; # full spelling of parameter  | 
| 
441
 | 
18
 | 
 
 | 
 
 | 
 
 | 
 
 | 
12
 | 
 		    $parameter_help_in_progress = 1;  | 
| 
442
 | 
18
 | 
 
 | 
 
 | 
 
 | 
 
 | 
42
 | 
 		    $parameter_help{$p} = "\n";  | 
| 
443
 | 
18
 | 
 
 | 
 
 | 
 
 | 
 
 | 
22
 | 
 		    next MESSAGE_LINE;  | 
| 
444
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 		} # ifend start of help text for a new parameter  | 
| 
445
 | 
104
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
125
 | 
 		if ($parameter_help_in_progress) {   | 
| 
446
 | 
80
 | 
 
 | 
 
 | 
 
 | 
 
 | 
121
 | 
 		    $parameter_help{$p} .=  $m . "\n";  | 
| 
447
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 		} else {  | 
| 
448
 | 
24
 | 
 
 | 
 
 | 
 
 | 
 
 | 
45
 | 
 		    print PAGER $m, "\n";  | 
| 
449
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 		}  | 
| 
450
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 		  | 
| 
451
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    } # forend MESSAGE_LINE  | 
| 
452
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	      | 
| 
453
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	} # ifend usage_help  | 
| 
454
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
455
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	# Pass through the PDT list printing a standard evap help summary.  | 
| 
456
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
457
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
8
 | 
         print PAGER "\nParameters:\n";  | 
| 
458
 | 
3
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
9
 | 
 	if (not $full_help) {print PAGER "\n";}  | 
| 
 
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
3
 | 
    | 
| 
459
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	  | 
| 
460
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       ALL_PARAMETERS:  | 
| 
461
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
8
 | 
         foreach $p (@P_PARAMETER) {  | 
| 
462
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
463
 | 
1
 | 
 
 | 
 
 | 
  
1
  
 | 
 
 | 
5
 | 
 	    no strict 'refs';  | 
| 
 
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1
 | 
    | 
| 
 
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1021
 | 
    | 
| 
464
 | 
30
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
47
 | 
 	    if ($full_help) {print PAGER "\n";}  | 
| 
 
 | 
10
 | 
 
 | 
 
 | 
 
 | 
 
 | 
13
 | 
    | 
| 
465
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	      | 
| 
466
 | 
30
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
50
 | 
 	    if ($p =~ /^help$/) {  | 
| 
467
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
10
 | 
 		print PAGER "-$p, $P_ALIAS{$p}, usage-help, full-help: Display Command Information\n";  | 
| 
468
 | 
3
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
7
 | 
                 if ($full_help) {  | 
| 
469
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
3
 | 
          	    print PAGER <<"end_of_DISCI";  | 
| 
470
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 \n    Display information about this command, which includes a command description with examples, as well as a synopsis of the  | 
| 
471
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     command line parameters. If you specify -full-help rather than -help complete parameter help is displayed if it's available.  | 
| 
472
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 end_of_DISCI  | 
| 
473
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	        }  | 
| 
474
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
6
 | 
 		next ALL_PARAMETERS;  | 
| 
475
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    }  | 
| 
476
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	      | 
| 
477
 | 
27
 | 
 
 | 
 
 | 
 
 | 
 
 | 
36
 | 
 	    $rt = $P_INFO{$p};	# get encoded required/type information  | 
| 
478
 | 
27
 | 
 
 | 
 
 | 
 
 | 
 
 | 
113
 | 
 	    ($required, $type, $list) = ($rt =~ /$pdt_reg_exp1/); # unpack  | 
| 
479
 | 
27
 | 
 
 | 
 
 | 
 
 | 
 
 | 
44
 | 
 	    $type = $type_list{$type};  | 
| 
480
 | 
27
 | 
 
 | 
 
 | 
 
 | 
 
 | 
25
 | 
 	    $is_string = ($type =~ /^string$/);  | 
| 
481
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	      | 
| 
482
 | 
27
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
47
 | 
             my $set = $P_SET{$p} ? "$P_SET{$p} " : '';  | 
| 
483
 | 
27
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
70
 | 
 	    print PAGER "-$p, $P_ALIAS{$p}: ", $list ? "list of " : '', "$set$type";   | 
| 
484
 | 
27
 | 
  
 50
  
 | 
  
 33
  
 | 
 
 | 
 
 | 
57
 | 
             if (defined($P_SET{$p}) and $P_SET{$p} > 1) {print PAGER 's'}  | 
| 
 
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
    | 
| 
485
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	      | 
| 
486
 | 
27
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
56
 | 
 	    print PAGER " ", join(', ', split(' ', $P_VALID_VALUES{$p})), ", keyend" if $type =~ /^key$/;  | 
| 
487
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	      | 
| 
488
 | 
27
 | 
 
 | 
 
 | 
 
 | 
 
 | 
21
 | 
 	    my($ref);  | 
| 
489
 | 
27
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
32
 | 
             if (defined $lref_Opt) {  | 
| 
490
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
                 $ref = \$lref_Opt->{$p};  | 
| 
491
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
0
 | 
                 $ref = \@{$lref_Opt->{$p}} if $list;  | 
| 
 
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
    | 
| 
492
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             } else {  | 
| 
493
 | 
27
 | 
 
 | 
 
 | 
 
 | 
 
 | 
27
 | 
                 $ref = "${pkg}::opt_${p}";  | 
| 
494
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             }  | 
| 
495
 | 
27
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
30
 | 
 	    if ($list) {  | 
| 
496
 | 
3
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
5
 | 
                 $def =  @{$ref} ? 1 : 0;  | 
| 
 
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
8
 | 
    | 
| 
497
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    } else {  | 
| 
498
 | 
24
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
19
 | 
                 $def = defined ${$ref} ? 1 : 0;  | 
| 
 
 | 
24
 | 
 
 | 
 
 | 
 
 | 
 
 | 
59
 | 
    | 
| 
499
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             }  | 
| 
500
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       | 
| 
501
 | 
27
 | 
  
100
  
 | 
  
 66
  
 | 
 
 | 
 
 | 
103
 | 
 	    if ($required =~ /^O$/ or $def == 1) { # if $optional or defined  | 
| 
 
 | 
 
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
502
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 		  | 
| 
503
 | 
24
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
31
 | 
                 if ($def == 0) { # undefined and $optional  | 
| 
504
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
5
 | 
     		    print PAGER "\n";  | 
| 
505
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                 } else {	# defined (either $optional or $required), display the default value(s)  | 
| 
506
 | 
21
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
25
 | 
                     if ($list) {  | 
| 
507
 | 
3
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
8
 | 
 			print PAGER $P_ENV{$p} ? " = $P_ENV{$p}, " : " = ";  | 
| 
508
 | 
3
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
6
 | 
 			print PAGER $is_string ? "(\"" : "(", $is_string ? join('", "', @{$ref}) : join(', ', @{$ref}), $is_string ? "\")\n" : ")\n";  | 
| 
 
 | 
0
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
0
 | 
    | 
| 
 
 | 
3
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
13
 | 
    | 
| 
509
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                     } else {	# not 'list of'  | 
| 
510
 | 
18
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
39
 | 
 			print PAGER $P_ENV{$p} ? " = $P_ENV{$p}, " : " = ";  | 
| 
511
 | 
18
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
22
 | 
 			print PAGER $is_string ? "\"" : "", ${$ref}, $is_string ? "\"\n" : "\n";  | 
| 
 
 | 
18
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
54
 | 
    | 
| 
512
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                     } # ifend 'list of'  | 
| 
513
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                 } # ifend  | 
| 
514
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 		  | 
| 
515
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    } elsif ($required =~ /R/) {  | 
| 
516
 | 
3
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
8
 | 
 		print PAGER $P_ENV{$p} ? " = $P_ENV{$p}, " : " = ";  | 
| 
517
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
5
 | 
 		print PAGER "\$required\n";  | 
| 
518
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    } else {  | 
| 
519
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
 		print PAGER "\n";  | 
| 
520
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    } # ifend $optional or defined parameter  | 
| 
521
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	      | 
| 
522
 | 
27
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
53
 | 
             if ($full_help) {  | 
| 
523
 | 
9
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
17
 | 
 		if (defined $parameter_help{$p}) {  | 
| 
524
 | 
9
 | 
 
 | 
 
 | 
 
 | 
 
 | 
19
 | 
 		    print PAGER "$parameter_help{$p}";  | 
| 
525
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 		} else {  | 
| 
526
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
 		    print PAGER "\n";  | 
| 
527
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 		}  | 
| 
528
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    }  | 
| 
529
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	      | 
| 
530
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	} # forend ALL_PARAMETERS  | 
| 
531
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
532
 | 
3
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
36
 | 
 	if ($file_list =~ /$pdt_reg_exp5/) {  | 
| 
 
 | 
 
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
533
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
9
 | 
 	    print PAGER "$evap_Help_Hooks{'P_HHBOFL'}";  | 
| 
534
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	} elsif ($file_list =~ /$pdt_reg_exp6/) {  | 
| 
535
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
 	    print PAGER "$evap_Help_Hooks{'P_HHBRFL'}";  | 
| 
536
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	} else {  | 
| 
537
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
 	    print PAGER "$evap_Help_Hooks{'P_HHBNFL'}";  | 
| 
538
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	}  | 
| 
539
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
540
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
960
 | 
 	close PAGER;  | 
| 
541
 | 
3
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
11
 | 
 	if ($evap_embed) {  | 
| 
542
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
175
 | 
 	    return -1;  | 
| 
543
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	} else {  | 
| 
544
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
 	    exit 0;  | 
| 
545
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	}  | 
| 
546
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	  | 
| 
547
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     } # ifend help requested  | 
| 
548
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
549
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # Evaluate remaining unspecified command line parameters.  This has been  | 
| 
550
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # deferred until now so that if -help was requested the user sees   | 
| 
551
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # unevaluated boolean, file and backticked values.  | 
| 
552
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
553
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
6
 | 
     foreach $parameter (@P_PARAMETER) {  | 
| 
554
 | 
30
 | 
  
100
  
 | 
  
100
  
 | 
 
 | 
 
 | 
102
 | 
 	if (not $P_EVALUATE{$parameter} and $P_DEFAULT_VALUE{$parameter}) {  | 
| 
555
 | 
14
 | 
 
 | 
 
 | 
 
 | 
 
 | 
91
 | 
 	    ($required, $type, $list) = ($P_INFO{$parameter} =~ /$pdt_reg_exp1/);  | 
| 
556
 | 
14
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
29
 | 
 	    if ($type ne 'w') {  | 
| 
557
 | 
14
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
24
 | 
 		$list = 2 if $list; # force re-initialization of the list  | 
| 
558
 | 
14
 | 
 
 | 
 
 | 
 
 | 
 
 | 
23
 | 
 		evap_set_value 1, $type, $list, $P_DEFAULT_VALUE{$parameter}, $parameter;  | 
| 
559
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    } # ifend non-switch  | 
| 
560
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	} # ifend not specified  | 
| 
561
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     } # forend all PDT parameters  | 
| 
562
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
563
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # Store program name for caller.  | 
| 
564
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
565
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
12
 | 
     evap_set_value 0,  'w', '', $0, 'help';  | 
| 
566
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       | 
| 
567
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # Ensure all $required parameters have been specified on the command line.  | 
| 
568
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
569
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
35
 | 
     foreach $p (@P_REQUIRED) {  | 
| 
570
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
17
 | 
 	print STDERR "Parameter $p is required but was omitted.\n";  | 
| 
571
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
5
 | 
 	$error++;  | 
| 
572
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     } # forend  | 
| 
573
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       | 
| 
574
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # Ensure any required files follow, or none do if that is the case.  | 
| 
575
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
576
 | 
3
 | 
  
 50
  
 | 
  
 33
  
 | 
 
 | 
 
 | 
54
 | 
     if ($file_list =~ /$pdt_reg_exp4/ and $#ARGV > 0 - 1) {  | 
| 
 
 | 
 
 | 
  
 50
  
 | 
  
 33
  
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
577
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         print STDERR "$evap_Help_Hooks{'P_HHENFL'}";  | 
| 
578
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         $error++;  | 
| 
579
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     } elsif ($file_list =~ /$pdt_reg_exp6/ and $#ARGV == 0 - 1) {  | 
| 
580
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         print STDERR "$evap_Help_Hooks{'P_HHERFL'}";  | 
| 
581
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
         $error++;  | 
| 
582
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
583
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       | 
| 
584
 | 
3
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
20
 | 
     print STDERR "Type $0 -h for command line parameter information.\n" if $error;  | 
| 
585
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
586
 | 
3
 | 
  
 50
  
 | 
  
 66
  
 | 
 
 | 
 
 | 
18
 | 
     exit 1 if $error and not $evap_embed;  | 
| 
587
 | 
3
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
9
 | 
     if (not $error) {  | 
| 
588
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
46
 | 
 	return 1;  | 
| 
589
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     } else {  | 
| 
590
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
44
 | 
 	return 0;  | 
| 
591
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
592
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       | 
| 
593
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 } # end evap_fin  | 
| 
594
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
595
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 sub evap_PDT_error {  | 
| 
596
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
597
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # Inform the application developer that they've screwed up!  | 
| 
598
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
599
 | 
0
 | 
 
 | 
 
 | 
  
0
  
 | 
 
 | 
0
 | 
     my($msg) = @_;  | 
| 
600
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
601
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
     print STDERR "$msg";  | 
| 
602
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
     $error++;  | 
| 
603
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
     next OPTIONS;  | 
| 
604
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
605
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 } # end evap_PDT_error  | 
| 
606
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
607
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 sub evap_set_value {  | 
| 
608
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       | 
| 
609
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # Store a parameter's value; some parameter types require special type   | 
| 
610
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # conversion.  Store values the old way in scalar/list variables of the   | 
| 
611
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # form $opt_parameter and @opt_parameter, as well as the new way in hashes  | 
| 
612
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # named %options and %Options.  'list of' parameters are returned as a   | 
| 
613
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # reference in %options/%Options (a simple list in @opt_parameter).  Or,  | 
| 
614
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # just stuff them in a user hash, is specified.  | 
| 
615
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     #  | 
| 
616
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # Evaluate items in grave accents (backticks), boolean and files if   | 
| 
617
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # `evaluate' is TRUE.  | 
| 
618
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     #  | 
| 
619
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # Handle list syntax (item1, item2, ...) for 'list of' types.  | 
| 
620
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     #  | 
| 
621
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # Lists are a little weird as they may already have default values from the  | 
| 
622
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # PDT declaration. The first time a list parameter is specified on the   | 
| 
623
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # command line we must first empty the list of its default values.  The   | 
| 
624
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # P_INFO list flag thus can be in one of three states: 1 = the list has   | 
| 
625
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # possible default values from the PDT, 2 = first time for this command   | 
| 
626
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # line parameter so empty the list and THEN push the parameter's value, and  | 
| 
627
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # 3 = just keep pushing new command line values on the list.  | 
| 
628
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
629
 | 
77
 | 
 
 | 
 
 | 
  
77
  
 | 
 
 | 
140
 | 
     my($evaluate, $type, $list, $v, $hash_index) = @_;  | 
| 
630
 | 
77
 | 
 
 | 
 
 | 
 
 | 
 
 | 
139
 | 
     my($option, $hash1, $hash2) = ("${pkg}::opt_${hash_index}",   | 
| 
631
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 				   "${pkg}::options", "${pkg}::Options");  | 
| 
632
 | 
77
 | 
 
 | 
 
 | 
 
 | 
 
 | 
57
 | 
     my($value, @values);  | 
| 
633
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
634
 | 
77
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
149
 | 
     if ($list =~ /^2$/) {	# empty list of default values  | 
| 
635
 | 
3
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
11
 | 
 	if (defined $lref_Opt) {  | 
| 
636
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
4
 | 
 	    $lref_Opt->{$hash_index} = [];  | 
| 
637
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	} else {  | 
| 
638
 | 
1
 | 
 
 | 
 
 | 
  
1
  
 | 
 
 | 
5
 | 
 	    no strict 'refs';  | 
| 
 
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1
 | 
    | 
| 
 
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
346
 | 
    | 
| 
639
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
3
 | 
 	    @{$option} = ();  | 
| 
 
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
8
 | 
    | 
| 
640
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2
 | 
 	    $hash1->{$hash_index} = \@{$option};  | 
| 
 
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
6
 | 
    | 
| 
641
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2
 | 
 	    $hash2->{$hash_index} = \@{$option};  | 
| 
 
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
4
 | 
    | 
| 
642
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	}  | 
| 
643
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
644
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
645
 | 
77
 | 
  
100
  
 | 
  
100
  
 | 
 
 | 
 
 | 
178
 | 
     if ($list and $v =~ /^\(+.*\)+$/) { # check for list  | 
| 
646
 | 
8
 | 
 
 | 
 
 | 
 
 | 
 
 | 
548
 | 
 	@values = eval "$v"; # let Perl do the walking  | 
| 
647
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     } else {  | 
| 
648
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
649
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # Original line  | 
| 
650
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # $v =~ s/["|'](.*)["|']/$1/s; # remove any bounding superfluous quotes   | 
| 
651
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
652
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 ##########################################################################  | 
| 
653
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # Avner Moshkovitz changed (on 29 Apr 2009):  | 
| 
654
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # ^\s* to force the leading quotes to be in the beginning of the string  | 
| 
655
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # \s$ to force the trailing quotes to be in the end of the string  | 
| 
656
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # /s as a substitution option to match only at the end of the string  | 
| 
657
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # rather then at the end of the line  | 
| 
658
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #  | 
| 
659
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # /s without /m will force ``^'' to match only at the beginning of the   | 
| 
660
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # string and ``$'' to match only at the end (or just before a newline at the end)   | 
| 
661
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # of the string  | 
| 
662
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 ##########################################################################  | 
| 
663
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
664
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # The need came when ingesting a string with multiple lines, such as the   | 
| 
665
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # -analyzers argument in the example below:  | 
| 
666
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #  | 
| 
667
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # /opt/cvi/SENSNET/lib/ExpLhlSensorActivityEvaluator.pl -v -minSensorActivityTime 4 -analyzers '  | 
| 
668
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #   | 
| 
669
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #       | 
| 
670
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #       | 
| 
671
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #       2  | 
| 
672
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #       | 
| 
673
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # '  | 
| 
674
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #  | 
| 
675
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # In this case the leading eand trailing quotes were already removed by perl before even calling the  | 
| 
676
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # EvaP module, as shown below:  | 
| 
677
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #  | 
| 
678
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # Cmd line params: -v -minSensorActivityTime 4 -analyzers   | 
| 
679
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #   | 
| 
680
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #       | 
| 
681
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #       | 
| 
682
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #       2  | 
| 
683
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #       | 
| 
684
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #   | 
| 
685
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #  | 
| 
686
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # Before the change the first double quotes in the first line (i.e. the double quotes "1.0 ... -8" )  | 
| 
687
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # where removed resulting in the next line:  | 
| 
688
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # version="1.0" encoding="UTF-8"?  | 
| 
689
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # After the change there is no change in the string and the quotes are not deleted  | 
| 
690
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
691
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
692
 | 
69
 | 
 
 | 
 
 | 
 
 | 
 
 | 
127
 | 
 $v =~ s/^\s*["|'](.*)["|']\s*$/$1/s; # remove any bounding superfluous quotes  | 
| 
693
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
694
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
695
 | 
69
 | 
 
 | 
 
 | 
 
 | 
 
 | 
100
 | 
 	@values = $v;		# a simple scalar	  | 
| 
696
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     } # ifend initialize list of values  | 
| 
697
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
698
 | 
77
 | 
 
 | 
 
 | 
 
 | 
 
 | 
95
 | 
     foreach $value (@values) {  | 
| 
699
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
700
 | 
93
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
130
 | 
         if ($evaluate) {  | 
| 
701
 | 
36
 | 
 
 | 
 
 | 
 
 | 
 
 | 
56
 | 
             $P_EVALUATE{$hash_index} = 'evaluated';  | 
| 
702
 | 
36
 | 
 
 | 
 
 | 
 
 | 
 
 | 
85
 | 
             $value =~ /^(`*)([^`]*)(`*)$/; # check for backticks  | 
| 
703
 | 
36
 | 
  
100
  
 | 
  
 66
  
 | 
 
 | 
 
 | 
4267
 | 
 	    chop($value = `$2`) if $1 eq '`' and $3 eq '`';  | 
| 
704
 | 
36
 | 
  
100
  
 | 
  
 66
  
 | 
 
 | 
 
 | 
147
 | 
 	    if (not $evap_DOS and $type =~ /^f$/) {  | 
| 
705
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
10
 | 
                 my(@path) = split /\//, $value;  | 
| 
706
 | 
3
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
16
 | 
 	        if ($value =~ /^stdin$/) {  | 
| 
 
 | 
 
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
 
 | 
 
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
707
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
                     $value = '-';  | 
| 
708
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                 } elsif ($value =~ /^stdout$/) {  | 
| 
709
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
4
 | 
                     $value = '>-';  | 
| 
710
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                 } elsif ($path[0] =~ /(^~$|^\$HOME$)/) {  | 
| 
711
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
 		    $path[0] = $ENV{'HOME'};  | 
| 
712
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
                     $value = join '/', @path;  | 
| 
713
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                 }  | 
| 
714
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             } # ifend file type  | 
| 
715
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
716
 | 
36
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
68
 | 
             if ($type =~ /^b$/) {  | 
| 
717
 | 
3
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
23
 | 
 	        $value = '1' if $value =~ /$pdt_reg_exp2/i;  | 
| 
718
 | 
3
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
17
 | 
 	        $value = '0' if $value =~ /$pdt_reg_exp3/i;  | 
| 
719
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             } # ifend boolean type  | 
| 
720
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         } # ifend evaluate  | 
| 
721
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
722
 | 
93
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
105
 | 
         if ($list) {		# extend list with new value  | 
| 
723
 | 
27
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
39
 | 
             if (defined $lref_Opt) {  | 
| 
724
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
5
 | 
                 push @{$lref_Opt->{$hash_index}}, $value;  | 
| 
 
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
14
 | 
    | 
| 
725
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             } else {  | 
| 
726
 | 
1
 | 
 
 | 
 
 | 
  
1
  
 | 
 
 | 
4
 | 
                 no strict 'refs';  | 
| 
 
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2
 | 
    | 
| 
 
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
55
 | 
    | 
| 
727
 | 
21
 | 
 
 | 
 
 | 
 
 | 
 
 | 
20
 | 
 	        push @{$option}, $value;  | 
| 
 
 | 
21
 | 
 
 | 
 
 | 
 
 | 
 
 | 
47
 | 
    | 
| 
728
 | 
21
 | 
 
 | 
 
 | 
 
 | 
 
 | 
16
 | 
                 $hash1->{$hash_index} = \@{$option};  | 
| 
 
 | 
21
 | 
 
 | 
 
 | 
 
 | 
 
 | 
44
 | 
    | 
| 
729
 | 
21
 | 
 
 | 
 
 | 
 
 | 
 
 | 
23
 | 
                 $hash2->{$hash_index} = \@{$option};  | 
| 
 
 | 
21
 | 
 
 | 
 
 | 
 
 | 
 
 | 
71
 | 
    | 
| 
730
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             }  | 
| 
731
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         } else {		# store scalar value  | 
| 
732
 | 
66
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
89
 | 
             if (defined $lref_Opt) {  | 
| 
733
 | 
14
 | 
 
 | 
 
 | 
 
 | 
 
 | 
51
 | 
                 $lref_Opt->{$hash_index} = $value;  | 
| 
734
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             } else {  | 
| 
735
 | 
1
 | 
 
 | 
 
 | 
  
1
  
 | 
 
 | 
4
 | 
                 no strict 'refs';  | 
| 
 
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1
 | 
    | 
| 
 
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
323
 | 
    | 
| 
736
 | 
52
 | 
 
 | 
 
 | 
 
 | 
 
 | 
38
 | 
 	        ${$option} = $value;  | 
| 
 
 | 
52
 | 
 
 | 
 
 | 
 
 | 
 
 | 
161
 | 
    | 
| 
737
 | 
52
 | 
 
 | 
 
 | 
 
 | 
 
 | 
108
 | 
                 $hash1->{$hash_index} = $value;  | 
| 
738
 | 
52
 | 
 
 | 
 
 | 
 
 | 
 
 | 
173
 | 
                 $hash2->{$hash_index} = $value;  | 
| 
739
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                 # ${$hash2}{$hash_index} = $value; EQUIVALENT !  | 
| 
740
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             }  | 
| 
741
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         }  | 
| 
742
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
743
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     } # forend  | 
| 
744
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	  | 
| 
745
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 } # end evap_set_value  | 
| 
746
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
747
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 sub evap_isatty {  | 
| 
748
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
749
 | 
0
 | 
 
 | 
 
 | 
  
0
  
 | 
  
0
  
 | 
 
 | 
     my $in = shift;  | 
| 
750
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     my $s = -t $in;  | 
| 
751
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     return $s;  | 
| 
752
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
753
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 }  | 
| 
754
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
755
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 sub evap_pac {  | 
| 
756
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
757
 | 
0
 | 
 
 | 
 
 | 
  
0
  
 | 
  
0
  
 | 
 
 | 
     eval {  | 
| 
758
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	require Term::ReadLine;  | 
| 
759
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     };  | 
| 
760
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     my $noReadLine = $@;  | 
| 
761
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
762
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # Process Application Commands - an application command can be envoked by entering either its full spelling or the alias.  | 
| 
763
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
764
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     my($prompt, $I, %cmds) = @_;  | 
| 
765
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
766
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     $noReadLine = 1 if not evap_isatty( $I );  | 
| 
767
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
768
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     my($proc, $args, %long, %alias, $name, $long, $alias);  | 
| 
769
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     my $pkg = (caller)[0];  | 
| 
770
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     my $inp = ref($I) ? $I : "${pkg}::${I}";  | 
| 
771
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
772
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     $evap_embed = 1;		# enable embedding  | 
| 
773
 | 
0
 | 
  
  0
  
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
     $shell = (defined $ENV{'SHELL'} and $ENV{'SHELL'} ne '') ?   | 
| 
774
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         $ENV{'SHELL'} : '/bin/sh';  | 
| 
775
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     foreach $name (keys %cmds) {  | 
| 
776
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	$cmds{$name} = $pkg . '::' . $cmds{$name}; # qualify  | 
| 
777
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
778
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     $cmds{'display_application_commands|disac'} = 'evap_disac_proc(%cmds)';  | 
| 
779
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     $cmds{'!'} = 'evap_bang_proc';  | 
| 
780
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
781
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # First, create new hash variables with full/alias names.  | 
| 
782
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
783
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     foreach $name (keys %cmds) {  | 
| 
784
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         if ($name =~ /\|/) {  | 
| 
785
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             ($long, $alias) = ($name =~ /(.*)\|(.*)/);  | 
| 
786
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    $long{$long} = $cmds{$name};  | 
| 
787
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    $alias{$alias} = $cmds{$name};  | 
| 
788
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         } else {  | 
| 
789
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    $long{$name} = $cmds{$name};  | 
| 
790
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	}  | 
| 
791
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
792
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
793
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     my ( $term, $out );  | 
| 
794
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     if ( $noReadLine ) {  | 
| 
795
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	print STDOUT "$prompt";  | 
| 
796
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     } else {  | 
| 
797
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	$term = Term::ReadLine->new( $prompt );  | 
| 
798
 | 
0
 | 
 
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 	$OUT = $term->OUT || \*STDOUT;  | 
| 
799
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
800
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     my $eofCount = $ENV{IGNOREEOF};  | 
| 
801
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     $eofCount = 0 unless defined $eofCount;  | 
| 
802
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
803
 | 
1
 | 
 
 | 
 
 | 
  
1
  
 | 
 
 | 
5
 | 
     no strict 'refs';  | 
| 
 
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1
 | 
    | 
| 
 
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
868
 | 
    | 
| 
804
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
   GET_USER_INPUT:  | 
| 
805
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     while ( 1 ) {  | 
| 
806
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	if ( $noReadLine ) {  | 
| 
807
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    $_ = <$inp>;  | 
| 
808
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	} else {  | 
| 
809
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    $_ = $term->readline( $prompt );  | 
| 
810
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	}  | 
| 
811
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	if ( not defined $_ ) {  | 
| 
812
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    $eofCount--;  | 
| 
813
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    last if $eofCount < 0;  | 
| 
814
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    print "\n";  | 
| 
815
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    next GET_USER_INPUT;  | 
| 
816
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	}  | 
| 
817
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	next GET_USER_INPUT if /^\s*$/;	# ignore empty input lines  | 
| 
818
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
819
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	if (/^\s*!(.+)/) {  | 
| 
820
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    $_ = '! ' . $1;  | 
| 
821
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	}  | 
| 
822
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
823
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         ($0, $args) = /\s*(\S+)\s*(.*)/;  | 
| 
824
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	if ( $0 =~ m/^help$|^h$/i ) {  | 
| 
825
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	     $0 = 'disac';  | 
| 
826
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	     $args = '-do f';  | 
| 
827
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	}  | 
| 
828
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	if (defined $long{$0}) {  | 
| 
 
 | 
 
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
829
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    $proc = $long{$0};  | 
| 
830
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	} elsif (defined $alias{$0}) {  | 
| 
831
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    $proc = $alias{$0};  | 
| 
832
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	} else  {  | 
| 
833
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             print STDERR <<"end_of_ERROR";  | 
| 
834
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 Error - unknown command '$0'.  Type 'help' for a list of valid application commands.  You can then type 'xyzzy -h' for help on application command 'xyzzy'.  | 
| 
835
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 end_of_ERROR  | 
| 
836
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    next GET_USER_INPUT;  | 
| 
837
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         }  | 
| 
838
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
839
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	if ($0 eq '!') {  | 
| 
840
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    @ARGV = $args;  | 
| 
841
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	} else {  | 
| 
842
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    @ARGV = Text::ParseWords::quotewords( '\s+', 0, $args );  | 
| 
843
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	}  | 
| 
844
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
845
 | 
0
 | 
  
  0
  
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 	if ( ($proc =~ m/^evap_(.*)_proc/) or exists &$proc ) {  | 
| 
846
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    eval "&$proc;";		# call the evap/user procedure  | 
| 
847
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    print STDERR $EVAL_ERROR if $EVAL_ERROR;  | 
| 
848
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	} else {  | 
| 
849
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    print STDERR "Procedure '$proc' does not exist in your application and cannot be called.\n";  | 
| 
850
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	}  | 
| 
851
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
852
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	@ARGV = ();  | 
| 
853
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
854
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     } # whilend GET_USER_INPUT  | 
| 
855
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     continue { # while GET_USER_INPUT  | 
| 
856
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         print STDOUT "$prompt" if $noReadLine;  | 
| 
857
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     } # continuend  | 
| 
858
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     print STDOUT "\n" unless $prompt eq "";  | 
| 
859
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
860
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 } # end evap_pac  | 
| 
861
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
862
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 sub evap_bang_proc {  | 
| 
863
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       | 
| 
864
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # Issue commands to the user's shell.  If the SHELL environment variable is  | 
| 
865
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # not defined or is empty, then /bin/sh is used.  | 
| 
866
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
867
 | 
0
 | 
 
 | 
 
 | 
  
0
  
 | 
  
0
  
 | 
 
 | 
     my $cmd = $ARGV[0];  | 
| 
868
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
869
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     if ($cmd ne '') {  | 
| 
870
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	$bang_proc_MM = <<"END";  | 
| 
871
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 !  | 
| 
872
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
873
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     Bang! Issue one or more commands to the shell.  If the SHELL environment variable is not defined or is empty, then /bin/sh is used.  | 
| 
874
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
875
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     Examples:  | 
| 
876
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
877
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       !date  | 
| 
878
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       !del *.o; ls -al  | 
| 
879
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 END  | 
| 
880
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         $bang_proc_PDT = <<"END";  | 
| 
881
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 PDT !  | 
| 
882
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 PDTEND optional_file_list  | 
| 
883
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 END  | 
| 
884
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	$evap_Help_Hooks{'P_HHUOFL'} = " Command(s)\n";  | 
| 
885
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	$evap_Help_Hooks{'P_HHBOFL'} = "\nA list of shell Commands.\n\n";  | 
| 
886
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	@bang_proc_MM = split /\n/, $bang_proc_MM;  | 
| 
887
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	@bang_proc_PDT = split /\n/, $bang_proc_PDT;  | 
| 
888
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	if (EvaP(\@bang_proc_PDT, \@bang_proc_MM) != 1) {return;}  | 
| 
 
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
889
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	system "$shell -c '$cmd'";  | 
| 
890
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     } else {  | 
| 
891
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	print STDOUT "Starting a new `$shell' shell; use `exit' to return to this application.\n";  | 
| 
892
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	system $shell;  | 
| 
893
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
894
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
895
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 } # end evap_bang_proc  | 
| 
896
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
897
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 sub evap_disac_proc {  | 
| 
898
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       | 
| 
899
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     # Display the list of legal application commands.  | 
| 
900
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
901
 | 
0
 | 
 
 | 
 
 | 
  
0
  
 | 
  
0
  
 | 
 
 | 
     my(%commands) = @_;  | 
| 
902
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     my(@brief, @full, $name, $long, $alias);  | 
| 
903
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	$disac_proc_MM = <<"END";  | 
| 
904
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 display_application_commands, display_application_command, disac  | 
| 
905
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
906
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     Displays a list of legal commands for this application.  | 
| 
907
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
908
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     Examples:  | 
| 
909
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
910
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       disac              # the `brief' display  | 
| 
911
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       disac -do f        # the `full' display  | 
| 
912
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 .display_option  | 
| 
913
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     Specifies the level of output desired.  | 
| 
914
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 .output  | 
| 
915
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     Specifies the name of the file to write information to.  | 
| 
916
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 END  | 
| 
917
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         $disac_proc_PDT = <<"END";  | 
| 
918
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 PDT disac  | 
| 
919
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
   display_option, do: key brief, full, keyend = brief  | 
| 
920
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
   output, o: file = stdout  | 
| 
921
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 PDTEND no_file_list  | 
| 
922
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 END  | 
| 
923
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     @disac_proc_MM = split /\n/, $disac_proc_MM;  | 
| 
924
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     @disac_proc_PDT = split /\n/, $disac_proc_PDT;  | 
| 
925
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     if (EvaP(\@disac_proc_PDT, \@disac_proc_MM) != 1) {return;}  | 
| 
 
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
926
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
927
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     my $len = 1;  | 
| 
928
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     foreach $name (keys %commands) {  | 
| 
929
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         if ($name =~ /\|/) {  | 
| 
930
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             ($long, $alias) = ($name =~ /(.*)\|(.*)/);  | 
| 
931
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         } else {  | 
| 
932
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    $long = $name;  | 
| 
933
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             $alias = '';  | 
| 
934
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	}  | 
| 
935
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	my $l = length $long;  | 
| 
936
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	$len = $l if $l > $len;  | 
| 
937
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
938
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     foreach $name (keys %commands) {  | 
| 
939
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         if ($name =~ /\|/) {  | 
| 
940
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             ($long, $alias) = ($name =~ /(.*)\|(.*)/);  | 
| 
941
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         } else {  | 
| 
942
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	    $long = $name;  | 
| 
943
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             $alias = '';  | 
| 
944
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	}  | 
| 
945
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         push @brief, $long;  | 
| 
946
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         push @full, ($alias ne '') ? sprintf("%-${len}s, %s", $long, $alias) : "$long";  | 
| 
947
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
948
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
949
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     open H, ">$Options{'output'}";  | 
| 
950
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     if ($Options{'display_option'} eq 'full') {  | 
| 
951
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         print H "\nFor help on any application command (or command alias) use the -h switch.  For example, try 'disac -h' for help on 'display_application_commands'.\n";  | 
| 
952
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         print H "\nCommand and alias list for this application:\n\n";  | 
| 
953
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 	print H "  ", join("\n  ", sort(@full)), "\n";  | 
| 
954
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     } else {  | 
| 
955
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         print H join("\n", sort(@brief)), "\n";  | 
| 
956
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
957
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     close H;  | 
| 
958
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
959
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 } # end evap_disac_proc  | 
| 
960
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
961
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #sub evap_setup_for_evap {  | 
| 
962
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #      | 
| 
963
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #    # Initialize evap_pac's builtin commands' PDT/MM variables.  | 
| 
964
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #  | 
| 
965
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #    my($command) = @_;  | 
| 
966
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #  | 
| 
967
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #    open IN, "ar p $message_modules ${command}_pdt|";  | 
| 
968
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #    eval "\@${command}_proc_PDT = ;";  | 
| 
969
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #    close IN;  | 
| 
970
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #  | 
| 
971
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #    open IN, "ar p $message_modules ${command}.mm|";  | 
| 
972
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #    eval "\@${command}_proc_MM = grep \$@ = s/\n\$//, ;";  | 
| 
973
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #    close IN;  | 
| 
974
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #  | 
| 
975
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 #} # end evap_setup_for_evap  | 
| 
976
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
977
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 1;  | 
| 
978
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 __END__  |