| blib/lib/LoadHtml.pm | |||
|---|---|---|---|
| Criterion | Covered | Total | % |
| statement | 24 | 694 | 3.4 |
| branch | 0 | 274 | 0.0 |
| condition | 0 | 90 | 0.0 |
| subroutine | 8 | 39 | 20.5 |
| pod | 0 | 29 | 0.0 |
| total | 32 | 1126 | 2.8 |
| line | stmt | bran | cond | sub | pod | time | code |
|---|---|---|---|---|---|---|---|
| 1 | package LoadHtml; | ||||||
| 2 | |||||||
| 3 | #use lib '/home1/people/turnerj'; | ||||||
| 4 | |||||||
| 5 | 1 | 1 | 20053 | use strict; | |||
| 1 | 2 | ||||||
| 1 | 44 | ||||||
| 6 | #no strict 'refs'; | ||||||
| 7 | 1 | 1 | 5 | use vars (qw(@ISA @EXPORT $useLWP $err $rtnTime $VERSION)); | |||
| 1 | 2 | ||||||
| 1 | 6567 | ||||||
| 8 | |||||||
| 9 | require Exporter; | ||||||
| 10 | #use LWP::Simple; | ||||||
| 11 | 1 | 1 | 783 | eval 'use LWP::Simple; $useLWP = 1;'; | |||
| 1 | 150253 | ||||||
| 1 | 13 | ||||||
| 12 | #use Socket; | ||||||
| 13 | |||||||
| 14 | @ISA = qw(Exporter); | ||||||
| 15 | @EXPORT = qw(loadhtml_package loadhtml buildhtml dohtml modhtml AllowEvals cnvt set_poc | ||||||
| 16 | SetListSeperator SetRegices SetHtmlHome); | ||||||
| 17 | |||||||
| 18 | our $VERSION = '7.08'; | ||||||
| 19 | |||||||
| 20 | local ($_); | ||||||
| 21 | |||||||
| 22 | local $| = 1; | ||||||
| 23 | my $calling_package = 'main'; #ADDED 20000920 TO ALLOW EVALS IN ASP! | ||||||
| 24 | |||||||
| 25 | my $poc = 'your website administrator'; | ||||||
| 26 | my $listsep = ', '; | ||||||
| 27 | my $evalsok = 0; | ||||||
| 28 | my %cfgOps = ( | ||||||
| 29 | hashes => 0, | ||||||
| 30 | CGIScript => 0, | ||||||
| 31 | includes => 1, | ||||||
| 32 | loops => 1, | ||||||
| 33 | numbers => 1, | ||||||
| 34 | pocs => 0, | ||||||
| 35 | perls => 0, | ||||||
| 36 | embeds => 0, | ||||||
| 37 | ); #ADDED 20010720. | ||||||
| 38 | my ($htmlhome, $roothtmlhome, $hrefhtmlhome, $hrefcase); | ||||||
| 39 | |||||||
| 40 | sub SetListSeperator | ||||||
| 41 | { | ||||||
| 42 | 0 | 0 | 0 | $listsep = shift; | |||
| 43 | } | ||||||
| 44 | |||||||
| 45 | sub cnvt | ||||||
| 46 | { | ||||||
| 47 | 0 | 0 | 0 | my $val = shift; | |||
| 48 | 0 | 0 | return ($val eq '26') ? ('%' . $val) : (pack("c",hex($val))); | ||||
| 49 | } | ||||||
| 50 | |||||||
| 51 | sub set_poc | ||||||
| 52 | { | ||||||
| 53 | 0 | 0 | 0 | 0 | $poc = shift || 'your website administrator'; | ||
| 54 | 0 | $cfgOps{pocs} = 1; | |||||
| 55 | } | ||||||
| 56 | |||||||
| 57 | sub SetRegices | ||||||
| 58 | { | ||||||
| 59 | 0 | 0 | 0 | my (%setregices) = @_; | |||
| 60 | 0 | my ($i, $j); | |||||
| 61 | |||||||
| 62 | 0 | foreach $j (qw(hashes CGIScript includes embeds loops numbers pocs perls)) | |||||
| 63 | { | ||||||
| 64 | 0 | 0 | if ($setregices{"-$j"}) | ||||
| 0 | |||||||
| 65 | { | ||||||
| 66 | 0 | $cfgOps{$j} = 1; | |||||
| 67 | } | ||||||
| 68 | elsif (defined($setregices{"-$j"})) | ||||||
| 69 | { | ||||||
| 70 | 0 | $cfgOps{$j} = 0; | |||||
| 71 | } | ||||||
| 72 | } | ||||||
| 73 | } | ||||||
| 74 | |||||||
| 75 | sub loadhtml | ||||||
| 76 | { | ||||||
| 77 | 0 | 0 | 0 | my %parms = (); | |||
| 78 | 0 | my $html = ''; | |||||
| 79 | |||||||
| 80 | 0 | local ($/) = '\x1A'; | |||||
| 81 | |||||||
| 82 | 0 | 0 | if (&fetchparms(\$html, \%parms, 1, @_)) | ||||
| 83 | { | ||||||
| 84 | 0 | print &modhtml(\$html, \%parms); | |||||
| 85 | 0 | return 1; | |||||
| 86 | } | ||||||
| 87 | else | ||||||
| 88 | { | ||||||
| 89 | 0 | print $html; | |||||
| 90 | 0 | return undef; | |||||
| 91 | } | ||||||
| 92 | } | ||||||
| 93 | |||||||
| 94 | sub buildhtml | ||||||
| 95 | { | ||||||
| 96 | 0 | 0 | 0 | my %parms = (); | |||
| 97 | 0 | my $html = ''; | |||||
| 98 | |||||||
| 99 | 0 | local ($/) = '\x1A'; | |||||
| 100 | 0 | 0 | return &fetchparms(\$html, \%parms, 1, @_) ? &modhtml(\$html, \%parms) : $html; | ||||
| 101 | } | ||||||
| 102 | |||||||
| 103 | sub dohtml | ||||||
| 104 | { | ||||||
| 105 | 0 | 0 | 0 | my %parms = (); | |||
| 106 | 0 | my $html = ''; | |||||
| 107 | |||||||
| 108 | 0 | 0 | return &fetchparms(\$html, \%parms, 0, @_) ? &modhtml(\$html, \%parms) : $html; | ||||
| 109 | } | ||||||
| 110 | |||||||
| 111 | sub fetchparms | ||||||
| 112 | { | ||||||
| 113 | 0 | 0 | 0 | my $html = shift; | |||
| 114 | 0 | my $parms = shift; | |||||
| 115 | 0 | my $fromFile = shift; | |||||
| 116 | 0 | my ($parm0) = shift; | |||||
| 117 | |||||||
| 118 | 0 | my ($v, $i, $t); | |||||
| 119 | |||||||
| 120 | # %loopparms = (); | ||||||
| 121 | |||||||
| 122 | 0 | %{$parms} = (); | |||||
| 0 | |||||||
| 123 | 0 | $$html = ''; | |||||
| 124 | |||||||
| 125 | 0 | $i = 1; | |||||
| 126 | 0 | $parms->{'0'} = $parm0; | |||||
| 127 | 0 | while (@_) | |||||
| 128 | { | ||||||
| 129 | 0 | $v = shift; | |||||
| 130 | 0 | 0 | $parms->{$i++} = (ref($v)) ? $v : "$v"; | ||||
| 131 | 0 | 0 | last unless (@_); | ||||
| 132 | 0 | 0 | if ($v =~ s/^\-([a-zA-Z]+)/$1/) | ||||
| 133 | { | ||||||
| 134 | 0 | $t = shift; | |||||
| 135 | 0 | 0 | if (defined $t) #ADDED 20000523 PREVENT -W WARNING! | ||||
| 136 | { | ||||||
| 137 | 0 | 0 | $parms->{$i} = (ref($t)) ? $t : "$t"; | ||||
| 138 | } | ||||||
| 139 | else | ||||||
| 140 | { | ||||||
| 141 | 0 | $parms->{$i} = ''; | |||||
| 142 | } | ||||||
| 143 | 0 | $parms->{$v} = $parms->{$i++}; | |||||
| 144 | } | ||||||
| 145 | } | ||||||
| 146 | |||||||
| 147 | 0 | 0 | unless ($fromFile) | ||||
| 148 | { | ||||||
| 149 | 0 | $$html = $parm0; | |||||
| 150 | 0 | 0 | return ($$html) ? 1 : 0; | ||||
| 151 | } | ||||||
| 152 | |||||||
| 153 | 0 | 0 | if (open(HTMLIN,$parm0)) | ||||
| 154 | { | ||||||
| 155 | 0 | $$html = ( |
|||||
| 156 | 0 | close HTMLIN; | |||||
| 157 | } | ||||||
| 158 | else | ||||||
| 159 | { | ||||||
| 160 | 0 | 0 | $$html = LWP::Simple::get($parm0) if ($useLWP); | ||||
| 161 | 0 | 0 | 0 | unless(defined($$html) && $$html =~ /\S/o) | |||
| 162 | { | ||||||
| 163 | 0 | $$html = &html_error("Could not load html page: \"$parm0\"!"); | |||||
| 164 | 0 | return undef; | |||||
| 165 | } | ||||||
| 166 | } | ||||||
| 167 | 0 | return 1; | |||||
| 168 | } | ||||||
| 169 | |||||||
| 170 | sub AllowEvals | ||||||
| 171 | { | ||||||
| 172 | 0 | 0 | 0 | $evalsok = shift; | |||
| 173 | } | ||||||
| 174 | |||||||
| 175 | sub makaswap | ||||||
| 176 | { | ||||||
| 177 | 0 | 0 | 0 | my $parms = shift; | |||
| 178 | 0 | my $one = shift; | |||||
| 179 | |||||||
| 180 | 0 | 0 | 0 | return ("\:$one") unless (defined($one) && defined($parms->{$one})); | |||
| 181 | 0 | 0 | if (ref($parms->{$one}) =~ /ARRAY/o) #JWT, TEST LISTS! | ||||
| 0 | |||||||
| 182 | { | ||||||
| 183 | 0 | 0 | return defined($listsep) ? (join($listsep,@{$parms->{$one}})) : ($#{$parms->{$one}}+1); | ||||
| 0 | |||||||
| 0 | |||||||
| 184 | } | ||||||
| 185 | elsif ($parms->{$one} =~ /(ARRAY|HASH)\(.*\)/o) #FIX BUG. | ||||||
| 186 | { | ||||||
| 187 | 0 | return (''); #JWT, TEST LISTS! | |||||
| 188 | } | ||||||
| 189 | else | ||||||
| 190 | { | ||||||
| 191 | 0 | return ($parms->{$one}); | |||||
| 192 | } | ||||||
| 193 | #ACTUALLY, I DON'T THINK THIS IS A BUG, BUT RATHER WAS A PROBLEM | ||||||
| 194 | #WHEN $#PARMS > $#LOOPPARMS, PARMS WITH VALUE='' IN A LOOP WOULD | ||||||
| 195 | #NOT GET SUBSTITUTED DUE TO IF-CONDITION 1 ABOVE, BUT WOULD LATER | ||||||
| 196 | #BE SUBSTITUTED AS SCALERS BY THE GENERAL PARAMETER SUBSTITUTION | ||||||
| 197 | #REGEX AND THUS GET SET TO "ARRAY(...)". CONDITION-2 ABOVE FIXES THIS. | ||||||
| 198 | }; | ||||||
| 199 | |||||||
| 200 | sub makamath #ADDED 20031028 TO SUPPORT IN-PARM EXPRESSIONS. | ||||||
| 201 | { | ||||||
| 202 | 0 | 0 | 0 | my ($one) = shift; | |||
| 203 | |||||||
| 204 | 0 | $_ = eval $one; | |||||
| 205 | 0 | return $_; | |||||
| 206 | }; | ||||||
| 207 | |||||||
| 208 | sub makaloop | ||||||
| 209 | { | ||||||
| 210 | 0 | 0 | 0 | my ($parms, $parmnos, $loopcontent, $looplabel) = @_; | |||
| 211 | #print "---makaloop: args=".join('|',@_)."=\n"; | ||||||
| 212 | 0 | my $rtn = ''; | |||||
| 213 | 0 | my ($lc,$i0,$i,$j,%loopparms); | |||||
| 214 | 0 | my (@forlist); #MOVED UP 20030515. - ORDERED LIST OF ALL HASH KEYS (IFF DRIVING PARAMETER IS A HASHREF). | |||||
| 215 | 0 | $parmnos =~ s/\:(\w+)([\+\-\*]\d+)/eval(&makaswap($parms,$1).$2)/egs; #ALLOW OFFSETS, ie. ":#+1" $parmnos =~ s/\:(\w+)/&makaswap($parms,$1)/egs; #ALLOW ie. | |||||
| 0 | |||||||
| 216 | 0 | $parmnos =~ s/\:(\w+)/&makaswap($parms,$1)/egs; #ALLOW OFFSETS, ie. ":#+1" $parmnos =~ s/\:(\w+)/&makaswap($parms,$1)/egs; #ALLOW ie. | |||||
| 0 | |||||||
| 217 | 0 | $parmnos =~ s/[\:\(\)]//go; | |||||
| 218 | 0 | $parmnos =~ s/\s+,/,/go; | |||||
| 219 | 0 | $parmnos =~ s/,\s+/,/go; | |||||
| 220 | 0 | my @vectorlist = (); #THE ORDERED LIST OF INDICES TO ITERATE OVER (ALWAYS NUMBERS): | |||||
| 221 | # if ($parmnos =~ s/([a-zA-Z]+)\s+([a-zA-Z])/$2/) #CHANGED TO NEXT LN (20070831) TO ALLOW UNDERSCORES IN ITERATOR PARAMETER NAMES. | ||||||
| 222 | 0 | 0 | if ($parmnos =~ s/([a-zA-Z][a-zA-Z_]*)\s+([a-zA-Z])/$2/) | ||||
| 0 | |||||||
| 223 | { | ||||||
| 224 | #print " -LOADHTML: 1=$1= param=$$parms{$1}=\n"; #JWT:ADDED EVAL 20120309 TO PREVENT FATAL ERROR IF REFERENCE ARRAY MISSING!: |
||||||
| 225 | 0 | eval { @vectorlist = @{$parms->{$1}} }; #WE HAVE AN INDEX LIST PARAMETER () | |||||
| 0 | |||||||
| 0 | |||||||
| 226 | #print " -???- 1st arg=$1= VECTOR=".join('|',@vectorlist)."=\n"; |
||||||
| 227 | } | ||||||
| 228 | elsif ($parmnos =~ s/(\d+\,\d+)((?:\,\d+)*)\s+([a-zA-Z])/$3/) #WE HAVE A LITERAL INDEX LIST () | ||||||
| 229 | { | ||||||
| 230 | 0 | eval "\@vectorlist = ($1 $2);"; | |||||
| 231 | } | ||||||
| 232 | 0 | $parmnos =~ s/\s+/,/go; | |||||
| 233 | |||||||
| 234 | 0 | my (@listparms) = split(/\,/o, $parmnos); | |||||
| 235 | #1ST IF-CHOICE ADDED 20070807 TO SUPPORT AN INDEX ARRAY OF HASH KEYS W/DRIVING PARAMETER OF TYPE HASHREF: | ||||||
| 236 | 0 | 0 | 0 | if (ref($parms->{$listparms[0]}) eq 'HASH' && defined($vectorlist[0]) && defined(${$parms->{$listparms[0]}}{$vectorlist[0]})) | |||
| 0 | 0 | 0 | |||||
| 0 | |||||||
| 237 | { | ||||||
| 238 | #print " -???- 1st is HASH: VECTOR=".join('|',@vectorlist)."=\n"; |
||||||
| 239 | #INDEX ARRAY CONTAINS HASH-KEYS AND 1ST (DRIVING) VECTOR IS A HASHREF: | ||||||
| 240 | 0 | @forlist = sort keys(%{$parms->{$listparms[0]}}); | |||||
| 0 | |||||||
| 241 | 0 | my @keys = @vectorlist; | |||||
| 242 | 0 | @vectorlist = (); | |||||
| 243 | 0 | for (my $i=0;$i<=$#keys;$i++) | |||||
| 244 | { | ||||||
| 245 | 0 | for (my $j=0;$j<=$#forlist;$j++) | |||||
| 246 | { | ||||||
| 247 | 0 | 0 | if ($keys[$i] eq $forlist[$j]) | ||||
| 248 | { | ||||||
| 249 | 0 | push (@vectorlist, $j); | |||||
| 250 | 0 | last; | |||||
| 251 | } | ||||||
| 252 | } | ||||||
| 253 | } | ||||||
| 254 | 0 | $i0 = scalar @vectorlist; #NUMBER OF LOOP ITERATIONS TO BE DONE. | |||||
| 255 | } | ||||||
| 256 | elsif (defined($vectorlist[0]) && $vectorlist[0] =~ /^\d+$/o) | ||||||
| 257 | { | ||||||
| 258 | #print " -???2- VL=".join('|',@vectorlist)."=\n"; |
||||||
| 259 | #INDEX ARRAY OF JUST NUMBERS: | ||||||
| 260 | 0 | 0 | if (ref($parms->{$listparms[0]}) eq 'HASH') | ||||
| 261 | { | ||||||
| 262 | 0 | @forlist = sort keys(%{$parms->{$listparms[0]}}); | |||||
| 0 | |||||||
| 263 | } | ||||||
| 264 | 0 | $i0 = scalar @vectorlist; | |||||
| 265 | } | ||||||
| 266 | else #NO INDEX LIST, SEE IF WE HAVE INCREMENT EXPRESSION (ie. "0..10|2"), ELSE DETERMINE FROM 1ST PARAMETER: | ||||||
| 267 | { | ||||||
| 268 | #print " -???3- NO INDEX LIST! vl0=$vectorlist[0]=\n"; |
||||||
| 269 | 0 | my ($istart) = 0; | |||||
| 270 | 0 | my ($iend) = undef; | |||||
| 271 | 0 | my ($iinc) = 1; | |||||
| 272 | 0 | my $parmnos0 = $parmnos; | |||||
| 273 | 0 | 0 | $istart = $1 if ($parmnos =~ s/([+-]?\d+)\.\./\.\./o); | ||||
| 274 | 0 | 0 | $iend = $1 if ($parmnos =~ s/\.\.([+-]?\d+)//o); | ||||
| 275 | 0 | $parmnos =~ s/\.\.//o; #ADDED 19991203 (FIXES "START.. "). | |||||
| 276 | 0 | 0 | $iinc = $1 if ($parmnos =~ s/\|([+-]?\d+)//o); | ||||
| 277 | 0 | $parmnos =~ s/^\s*\,//o; #ADDED 19991203 (FIXES "START.. "). | |||||
| 278 | 0 | 0 | shift @listparms unless ($parmnos eq $parmnos0); #1ST LISTPARM IS THE INCREMENT EXPRESSION, REMOVE IT NOW. | ||||
| 279 | 0 | 0 | if (ref($parms->{$listparms[0]}) eq 'HASH') | ||||
| 280 | { | ||||||
| 281 | 0 | @forlist = sort keys(%{$parms->{$listparms[0]}}); | |||||
| 0 | |||||||
| 282 | 0 | 0 | if ($#vectorlist >= 0) { #THIS IF ADDED 20070914 TO SUPPORT ALTERNATELY SORTED LIST TO DRIVE HASH-DRIVEN LOOPS: | ||||
| 283 | 0 | my @keys = @vectorlist; #IE. | |||||
| 284 | 0 | @vectorlist = (); | |||||
| 285 | 0 | for (my $i=0;$i<=$#keys;$i++) | |||||
| 286 | { | ||||||
| 287 | 0 | for (my $j=0;$j<=$#forlist;$j++) | |||||
| 288 | { | ||||||
| 289 | 0 | 0 | if ($keys[$i] eq $forlist[$j]) | ||||
| 290 | { | ||||||
| 291 | 0 | push (@vectorlist, $forlist[$j]); | |||||
| 292 | 0 | last; | |||||
| 293 | } | ||||||
| 294 | } | ||||||
| 295 | } | ||||||
| 296 | 0 | @forlist = @vectorlist; | |||||
| 297 | } | ||||||
| 298 | 0 | 0 | $iend = $#forlist unless (defined $iend); | ||||
| 299 | #print " -???- 1ST ARG IS HASH: VL=".join('|',@vectorlist)."= FL=".join('|',@forlist)."=\n"; |
||||||
| 300 | } | ||||||
| 301 | else | ||||||
| 302 | { | ||||||
| 303 | #no strict 'refs'; | ||||||
| 304 | #print " -???- lp=".join('|',@listparms)."= parm0=$parms->{$listparms[0]}=\n"; |
||||||
| 305 | #print " -REF=".ref($parms->{$listparms[0]})."=\n"; |
||||||
| 306 | 0 | 0 | unless (defined $iend) | ||||
| 307 | { | ||||||
| 308 | 0 | $iend = (ref($parms->{$listparms[0]}) eq 'ARRAY' | |||||
| 309 | 0 | 0 | ? $#{$parms->{$listparms[0]}} : 0); | ||||
| 310 | } | ||||||
| 311 | #print " -iend=$iend=\n"; |
||||||
| 312 | } | ||||||
| 313 | 0 | @vectorlist = (); | |||||
| 314 | 0 | $i = $istart; | |||||
| 315 | 0 | $i0 = 0; | |||||
| 316 | 0 | while (1) | |||||
| 317 | { | ||||||
| 318 | 0 | 0 | if ($istart <= $iend) | ||||
| 319 | { | ||||||
| 320 | 0 | 0 | 0 | last if ($i > $iend || $iinc <= 0); | |||
| 321 | } | ||||||
| 322 | else | ||||||
| 323 | { | ||||||
| 324 | 0 | 0 | 0 | last if ($i < $iend || $iinc >= 0); | |||
| 325 | } | ||||||
| 326 | 0 | push (@vectorlist, $i); | |||||
| 327 | 0 | $i += $iinc; | |||||
| 328 | 0 | ++$i0; | |||||
| 329 | } | ||||||
| 330 | } | ||||||
| 331 | |||||||
| 332 | 0 | my $icnt = 0; | |||||
| 333 | 0 | foreach $i (@vectorlist) | |||||
| 334 | { | ||||||
| 335 | 0 | $lc = $loopcontent; | |||||
| 336 | 0 | foreach $j (keys %{$parms}) | |||||
| 0 | |||||||
| 337 | { | ||||||
| 338 | #if (@{$parms->{$j}}) #PARM IS A LIST, TAKE ITH ELEMENT. | ||||||
| 339 | 0 | 0 | if (" @listparms " =~ /\s$j\s/) | ||||
| 340 | { | ||||||
| 341 | #@parmlist = @{$parms->{$j}}; | ||||||
| 342 | 0 | 0 | if (ref($parms->{$j}) =~ /HASH/io) #ADDED 20020613 TO ALLOW HASHES AS LOOP-DRIVERS! | ||||
| 0 | |||||||
| 0 | |||||||
| 343 | { | ||||||
| 344 | #WANT_VALUES: $loopparms{$j} = $parms->{$j}->{(keys(%{$parms->{$j}}))[$i]}; | ||||||
| 345 | #$loopparms{$j} = (keys(%{$parms->{$j}}))[$i]; #CHGD. TO NEXT 20030515 | ||||||
| 346 | 0 | $loopparms{$j} = ${$parms->{$j}}{$forlist[$i]}; | |||||
| 0 | |||||||
| 347 | # $lc =~ s/\:\%${looplabel}/$forlist[$i]/eg; #MOVED TO 302l 20070713 ADDED 20031212 TO MAKE :%_loopname HOLD KEY OF 1ST HASH! | ||||||
| 348 | } | ||||||
| 349 | elsif (ref($parms->{$j}) =~ /ARRAY/io) #TEST ADDED SO FOLLOWING SWITCHES COULD BE ADDED 20070615 | ||||||
| 350 | { | ||||||
| 351 | 0 | $loopparms{$j} = ${$parms->{$j}}[$i]; | |||||
| 0 | |||||||
| 352 | } | ||||||
| 353 | elsif ($parms->{$j} =~ /^\$(\w+)/o) | ||||||
| 354 | { | ||||||
| 355 | #ADDED THIS ELSIF AND NEXT ELSE 20070615 TO | ||||||
| 356 | #PLAY NICE W/$dbh->selectall_arrayref() | ||||||
| 357 | #SO WE CAN PASS A 2D ROW-BASED MATRIX OF DB DATA | ||||||
| 358 | #AND ACCCESS EACH COLUMN AS A NAMED PARAMETER BY | ||||||
| 359 | #SPECIFYING: "-fieldname => '$matrix->[*][2]'" | ||||||
| 360 | #WHERE "matrix" IS THE DRIVING LOOP PARAMETER NAME | ||||||
| 361 | #AND "*" IS REPLACED BY NEXT SUBSCRIPT IN LOOP. | ||||||
| 362 | #THIS *AVOIDS* HAVING TO CONVERT ROW-MAJOR ARRAYS | ||||||
| 363 | #TO COLUMN-MAJOR AND PASSING EACH COLUMN SLICE! | ||||||
| 364 | 0 | my $one = $1; | |||||
| 365 | 0 | my $eval = $parms->{$j}; | |||||
| 366 | # $eval =~ s/\*/$i/g; #CHGD. TO NEXT 20070831 TO ALLOW RECURSION, IE. '$matrix->[*][*][0]', ETC. | ||||||
| 367 | 0 | $eval =~ s/\*/$i/; | |||||
| 368 | 0 | my $eval0 = $eval; #ADDED 20070831 TO SAVE FOR POSSIBLE REGRESSION. | |||||
| 369 | 0 | $eval =~ s/$one/parms\-\>\{$one\}/; | |||||
| 370 | 0 | $loopparms{$j} = eval $eval; | |||||
| 371 | #print "\n---- j=$j= parm=$parms->{$j}= eval=$eval= lp now=$loopparms{$j}= at=$@=\n"; | ||||||
| 372 | # $loopparms{$j} = $parms->{$j} if ($@); #CHGD. TO NEXT 20070831 TO ALLOW RECURSION, IE. '$matrix->[*][*][0]', ETC. | ||||||
| 373 | 0 | 0 | if ($@) | ||||
| 374 | { | ||||||
| 375 | 0 | $eval0 =~ s/(?:\-\>)?\[\d+\]//; #STRIP OFF HIGH-ORDER DIMENSION SO THAT REFERENCE IS CORRECT W/N THE RECURSIVE CALL TO MAKALOOP! | |||||
| 376 | 0 | $loopparms{$j} = $eval0; | |||||
| 377 | #print "-!!!- regressing back to lp=$loopparms{$j}=\n"; | ||||||
| 378 | } | ||||||
| 379 | } | ||||||
| 380 | else | ||||||
| 381 | { | ||||||
| 382 | 0 | $loopparms{$j} = $parms->{$j}; | |||||
| 383 | } | ||||||
| 384 | 0 | 0 | $loopparms{$j} = '' unless(defined($loopparms{$j})); | ||||
| 385 | } | ||||||
| 386 | else #PARM IS A SCALER, TAKE IT'S VALUE. | ||||||
| 387 | { | ||||||
| 388 | 0 | $loopparms{$j} = $parms->{$j}; | |||||
| 389 | } | ||||||
| 390 | } | ||||||
| 391 | #print " -???- ll=$looplabel= lc=$lc=\n"; |
||||||
| 392 | # (:# = CURRENT INDEX NUMBER INTO PARAMETER VECTORS; :* = ZERO-BASED ITERATION#; :% = CURRENT HASH KEY, IFF DRIVEN BY A HASHREF; :^ = NO. OF ITERATIONS TO BE DONE) | ||||||
| 393 | 0 | $lc =~ s#<\!\:\%(${looplabel})([^>]*?)>#&makanop2($parms,$forlist[$i],$2)#egs; #MOVED HERE 20070713 FROM 267l TO MAKE :%_loopname HOLD KEY OF 1ST HASH! | |||||
| 0 | |||||||
| 394 | 0 | $lc =~ s/\:\%${looplabel}/$forlist[$i]/egs; #MOVED HERE 20070713 FROM 267l TO MAKE :%_loopname HOLD KEY OF 1ST HASH! | |||||
| 0 | |||||||
| 395 | 0 | $lc =~ s#<\!\:\#(${looplabel})([^>]*?)>#&makanop2($parms,$i,$2)#egs; | |||||
| 0 | |||||||
| 396 | 0 | $lc =~ s/\:\#${looplabel}([\+\-\*]\d+)/eval("$i$1")/egs; #ALLOW OFFSETS, ie. ":#+1" | |||||
| 0 | |||||||
| 397 | 0 | $lc =~ s/\:\#${looplabel}/$i/egs; | |||||
| 0 | |||||||
| 398 | 0 | $lc =~ s#<\!\:\^(${looplabel})([^>]*?)>#&makanop2($parms,$i0,$2)#egs; | |||||
| 0 | |||||||
| 399 | 0 | $lc =~ s/\:\^${looplabel}([\+\-\*]\d+)/eval("$i0$1")/egs; #CHGD. 20020926 FROM :* TO :^. | |||||
| 0 | |||||||
| 400 | 0 | $lc =~ s/\:\^${looplabel}/$i0/egs; | |||||
| 0 | |||||||
| 401 | 0 | $lc =~ s#<\!\:\*(${looplabel})([^>]*?)>#&makanop2($parms,$icnt,$2)#egs; | |||||
| 0 | |||||||
| 402 | 0 | $lc =~ s/\:\*${looplabel}([\+\-\*]\d+)/eval("$icnt$1")/egs; #ADDED 20020926 TO RETURN INCREMENT NUMBER (1ST = 0); | |||||
| 0 | |||||||
| 403 | 0 | $lc =~ s/\:\*${looplabel}/$icnt/egs; | |||||
| 0 | |||||||
| 404 | #foreach my $x (sort keys %loopparms) { print " -loopparm($x)=$loopparms{$x}=\n"; }; |
||||||
| 405 | #print " --------------\n"; |
||||||
| 406 | |||||||
| 407 | #IF-STMT BELOW ADDED 20070830 TO EMULATE Template::Toolkit's ABILITY TO REFERENCE | ||||||
| 408 | #SUBCOMPONENTS OF A REFERENCE BY NAME, IE: | ||||||
| 409 | |||||||
| 410 | #-arg => {'id' => 'value', 'name' => 'value'} | ||||||
| 411 | #... | ||||||
| 412 | # | ||||||
| 413 | 0 | 0 | if (ref($parms->{$listparms[0]}) eq 'HASH') | ||||
| 0 | |||||||
| 414 | { | ||||||
| 415 | 0 | foreach $j (@listparms) | |||||
| 416 | { | ||||||
| 417 | 0 | 0 | unless (defined $loopparms{$j}) | ||||
| 418 | { | ||||||
| 419 | #print " -!!!- will convert $j w/1st parm a HASH! i=$i= j=$j= F=$forlist[$i]= lp0=$listparms[0]= parm=$parms->{$listparms[0]}= val=$parms->{$listparms[0]}{$forlist[$i]}=\n"; |
||||||
| 420 | 0 | $lc =~ s#<\!\:$j([^>]*?)\:>.*?<\!\:\/\1>#&makanop1($parms->{$listparms[0]}{$forlist[$i]},$j,$1)#egs; | |||||
| 0 | |||||||
| 421 | 0 | $lc =~ s#<\!\:$j([^>]*?)>#&makanop1($parms->{$listparms[0]}{$forlist[$i]},$j,$1)#egs; | |||||
| 0 | |||||||
| 422 | 0 | $lc =~ s/\:\{$j\}/&makaswap($parms->{$listparms[0]}{$forlist[$i]},$j)/egs; #ALLOW ":{word}"! | |||||
| 0 | |||||||
| 423 | } | ||||||
| 424 | } | ||||||
| 425 | } | ||||||
| 426 | elsif (ref($parms->{$listparms[0]}) eq 'ARRAY') | ||||||
| 427 | { | ||||||
| 428 | 0 | foreach $j (@listparms) | |||||
| 429 | { | ||||||
| 430 | 0 | 0 | unless (defined $loopparms{$j}) | ||||
| 431 | { | ||||||
| 432 | #print " -!!!- will convert $j w/1st parm an ARRAY! i=$i= j=$j= parm=$parms->{$listparms[0]}= val=$parms->{$listparms[0]}[$i]=\n"; |
||||||
| 433 | 0 | $lc =~ s#<\!\:$j([^>]*?)\:>.*?<\!\:\/\1>#&makanop1($parms->{$listparms[0]}[$i],$j,$1)#egs; | |||||
| 0 | |||||||
| 434 | 0 | $lc =~ s#<\!\:$j([^>]*?)>#&makanop1($parms->{$listparms[0]}[$i],$j,$1)#egs; | |||||
| 0 | |||||||
| 435 | 0 | $lc =~ s/\:\{$j\}/&makaswap($parms->{$listparms[0]}[$i],$j)/egs; #ALLOW ":{word}"! | |||||
| 0 | |||||||
| 436 | } | ||||||
| 437 | } | ||||||
| 438 | } | ||||||
| 439 | 0 | $rtn .= &modhtml(\$lc,\%loopparms); | |||||
| 440 | 0 | ++$icnt; | |||||
| 441 | } | ||||||
| 442 | |||||||
| 443 | # $i += $iinc; #NEXT 2 REMOVED 20070809 - DON'T APPEAR TO BE NEEDED. | ||||||
| 444 | # ++$i0; | ||||||
| 445 | 0 | return ($rtn); | |||||
| 446 | }; | ||||||
| 447 | |||||||
| 448 | sub makasel #JWT: REDONE 05/20/1999! | ||||||
| 449 | { | ||||||
| 450 | 0 | 0 | 0 | my ($parms, $selpart,$opspart,$endpart) = @_; | |||
| 451 | |||||||
| 452 | local *makaselop = sub | ||||||
| 453 | { | ||||||
| 454 | 0 | 0 | my ($selparm,$padding,$valuparm,$valu,$dispvalu) = @_; | ||||
| 455 | 0 | $valu =~ s/\:\{?(\w+)\}?/&makaswap($parms,$1)/eg; #ADDED 19991206 | |||||
| 0 | |||||||
| 456 | 0 | $dispvalu =~ s/\:\{?(\w+)\}?/&makaswap($parms,$1)/eg; #ADDED 19991206 | |||||
| 0 | |||||||
| 457 | 0 | 0 | $valu = $dispvalu unless ($valuparm); #ADDED 05/17/1999 | ||||
| 458 | 0 | my ($res) = "$padding | |||||
| 459 | 0 | 0 | if ($valuparm) | ||||
| 460 | { | ||||||
| 461 | 0 | $res .= $valuparm . '"' . $valu . '"'; | |||||
| 462 | 0 | 0 | $dispvalu = $valu . $dispvalu unless ($dispvalu =~ /\S/); | ||||
| 463 | } | ||||||
| 464 | else | ||||||
| 465 | { | ||||||
| 466 | 0 | $valu = $dispvalu; | |||||
| 467 | 0 | $valu =~ s/\s+$//o; | |||||
| 468 | } | ||||||
| 469 | 0 | $res .= '>' . $dispvalu; | |||||
| 470 | 0 | 0 | if (ref($parms->{$selparm}) =~ /ARRAY/o) #JWT, IF SELECTED IS A LIST, CHECK ALL ELEMENTS! | ||||
| 471 | { | ||||||
| 472 | 0 | my ($i); | |||||
| 473 | 0 | for ($i=0;$i<=$#{$parms->{$selparm}};$i++) | |||||
| 0 | |||||||
| 474 | { | ||||||
| 475 | 0 | 0 | if ($valu eq ${$parms->{$selparm}}[$i]) | ||||
| 0 | |||||||
| 476 | { | ||||||
| 477 | 0 | $res =~ s/\ | |||||
| 478 | 0 | last; | |||||
| 479 | } | ||||||
| 480 | } | ||||||
| 481 | } | ||||||
| 482 | else | ||||||
| 483 | { | ||||||
| 484 | 0 | 0 | $res =~ s/\ | ||||
| 485 | } | ||||||
| 486 | 0 | return $res; | |||||
| 487 | 0 | }; | |||||
| 488 | |||||||
| 489 | #my ($rtn) = $selpart; #CHGD TO NEXT LINE 05/17/1999 | ||||||
| 490 | 0 | my ($rtn); | |||||
| 491 | #if ($opspart =~ s/\s*\:(\w+)// || $selpart =~ s/\:(\w+)\s*>$//) | ||||||
| 492 | #CHANGED 12/18/98 TO PREVENT 1ST OPTION VALUE :# FROM DISAPPEARING! JWT. | ||||||
| 493 | |||||||
| 494 | 0 | 0 | if ($selpart =~ s/\:(\w+)\s*>$//o) | ||||
| 495 | { | ||||||
| 496 | 0 | $selpart .= '>'; | |||||
| 497 | 0 | my $selparm = $1; | |||||
| 498 | 0 | my ($opspart2); | |||||
| 499 | 0 | $opspart =~ s/SELECTED//gio; | |||||
| 500 | 0 | while ($opspart =~ s/(\s*) | |||||
| 501 | { | ||||||
| 502 | 0 | $opspart2 .= &makaselop($selparm,$1,$2,$4,$5); | |||||
| 503 | } | ||||||
| 504 | 0 | $opspart = $opspart2; | |||||
| 505 | } | ||||||
| 506 | 0 | $rtn = $selpart . $opspart . $endpart; | |||||
| 507 | 0 | return ($rtn); | |||||
| 508 | }; | ||||||
| 509 | |||||||
| 510 | sub fetchinclude | ||||||
| 511 | { | ||||||
| 512 | 0 | 0 | 0 | my $parms = shift; | |||
| 513 | 0 | my ($fidurl) = shift; | |||||
| 514 | 0 | my ($modhtmlflag) = shift; | |||||
| 515 | 0 | my $tag = shift; | |||||
| 516 | 0 | my %includeparms; #NEXT 6 ADDED 20030206 TO SUPPORT PARAMETERIZED INCLUDES! | |||||
| 517 | 0 | while (@_) | |||||
| 518 | { | ||||||
| 519 | 0 | $_ = shift; | |||||
| 520 | 0 | $_ =~ s/\-//o; | |||||
| 521 | 0 | $includeparms{$_} = shift; | |||||
| 522 | } | ||||||
| 523 | |||||||
| 524 | 0 | my ($html,$rtn); | |||||
| 525 | |||||||
| 526 | #$fidurl =~ s/\:(\w+)/&makaswap($1)/eg; #JWT 05/19/1999 | ||||||
| 527 | 0 | $fidurl =~ s/^\"//o; #JWT 5 NEXT LINES ADDED 1999/08/31. | |||||
| 528 | 0 | $fidurl =~ s/\"\s*$//o; | |||||
| 529 | 0 | $fidurl =~ s/\:\{?(\w+)\}?/&makaswap($parms,$1)/eg; | |||||
| 0 | |||||||
| 530 | 0 | 0 | 0 | if (defined($roothtmlhome) && $roothtmlhome =~ /\S/o) | |||
| 531 | { | ||||||
| 532 | 0 | $fidurl =~ s#^(?!(/|\w+\:))#$roothtmlhome/$1#ig; | |||||
| 533 | } | ||||||
| 534 | #$fidurl =~ s/\:\{?(\w+)\}?/&makaswap($parms,$1)/eg; #JWT 20010703: MOVED ABOVE PREV. IF | ||||||
| 535 | 0 | 0 | if (open(HTMLIN,$fidurl)) | ||||
| 536 | { | ||||||
| 537 | 0 | $html = ( |
|||||
| 538 | 0 | close HTMLIN; | |||||
| 539 | } | ||||||
| 540 | else | ||||||
| 541 | { | ||||||
| 542 | 0 | 0 | $html = LWP::Simple::get($fidurl) if ($useLWP); | ||||
| 543 | 0 | 0 | 0 | unless(defined($html) && $html =~ /\S/o) | |||
| 544 | { | ||||||
| 545 | 0 | $rtn = &html_error(">Could not include html page: \"$fidurl\"!"); | |||||
| 546 | 0 | return ($rtn); | |||||
| 547 | } | ||||||
| 548 | } | ||||||
| 549 | 0 | 0 | if ($tag) #ADDED 20060117 TO ALLOW PARTIAL FILE INCLUDES BASED ON TAGS. | ||||
| 550 | { | ||||||
| 551 | 0 | 0 | $html =~ s/^.*\<\!\-\-\s+BEGIN\s+$tag\s*\-\-\>//is or $html = ''; | ||||
| 552 | 0 | $html =~ s#\<\!\-\-\s+END\s+$tag\s*\-\-\>.*$##is; | |||||
| 553 | } | ||||||
| 554 | #$rtn = &modhtml(\$html, %parms); #CHGD. 20010720 TO HANDLE EMBEDS. | ||||||
| 555 | #return ($rtn); | ||||||
| 556 | #return $modhtmlflag ? &modhtml(\$html, %parms) : $html; #CHD 20030206 TO SUPPORT PARAMETERIZED INCLUDES. | ||||||
| 557 | 0 | 0 | return $modhtmlflag ? &modhtml(\$html, {%{$parms}, %includeparms}) : $html; | ||||
| 0 | |||||||
| 558 | }; | ||||||
| 559 | |||||||
| 560 | sub doeval | ||||||
| 561 | { | ||||||
| 562 | 0 | 0 | 0 | my ($expn) = shift; | |||
| 563 | 0 | my ($fid) = shift; | |||||
| 564 | 0 | 0 | if ($fid) | ||||
| 565 | { | ||||||
| 566 | 0 | my ($dfltexpn) = $expn; | |||||
| 567 | 0 | $fid =~ s/^\s+//o; | |||||
| 568 | 0 | $fid =~ s/^.*\=\s*//o; | |||||
| 569 | 0 | $fid =~ s/[\"\']//go; | |||||
| 570 | 0 | $fid =~ s/\s+$//o; | |||||
| 571 | 0 | 0 | if (open(HTMLIN,$fid)) | ||||
| 572 | { | ||||||
| 573 | 0 | my @expns = ( |
|||||
| 574 | 0 | $expn = join('', @expns); | |||||
| 575 | 0 | close HTMLIN; | |||||
| 576 | } | ||||||
| 577 | else | ||||||
| 578 | { | ||||||
| 579 | 0 | 0 | $expn = LWP::Simple::get($fid) if ($useLWP); | ||||
| 580 | 0 | 0 | 0 | unless (defined($expn) && $expn =~ /\S/o) | |||
| 581 | { | ||||||
| 582 | 0 | $expn = $dfltexpn; | |||||
| 583 | 0 | 0 | return (&html_error("Could not load embedded perl file: \"$fid\"!")) | ||||
| 584 | unless ($dfltexpn =~ /\S/o); | ||||||
| 585 | } | ||||||
| 586 | } | ||||||
| 587 | } | ||||||
| 588 | 0 | $expn =~ s/^\s*\s*$//o; | |||||
| 590 | 0 | 0 | return ('') if ($expn =~ /\`/o); #DON'T ALLOW GRAVS! | ||||
| 591 | # return ('') if ($expn =~ /\Wsystem\W/o); #DON'T ALLOW SYSTEM CALLS - THIS NOT GOOD WAY TO DETECT! | ||||||
| 592 | |||||||
| 593 | 0 | $expn =~ s/\>/>/go; | |||||
| 594 | 0 | $expn =~ s/\</ | |||||
| 595 | |||||||
| 596 | 0 | $expn = 'package htmlpage; ' . $expn; | |||||
| 597 | 0 | my $x = eval "$expn"; | |||||
| 598 | 0 | 0 | $x = "Invalid Perl Expression - returned $@" unless (defined $x); | ||||
| 599 | 0 | return ($x); | |||||
| 600 | }; | ||||||
| 601 | |||||||
| 602 | sub dovar | ||||||
| 603 | { | ||||||
| 604 | 0 | 0 | 0 | my $var = shift; | |||
| 605 | 0 | my $two = shift; | |||||
| 606 | 0 | $two =~ s/^=//o; | |||||
| 607 | #$var = substr($var,0,1) . 'main::' . substr($var,1) unless ($var =~ /\:\:/); | ||||||
| 608 | #PREV. LINE CHANGED 2 NEXT LINE 20000920 TO ALLOW EVALS IN ASP! | ||||||
| 609 | #$var = substr($var,0,1) . $calling_package . '::' . substr($var,1) unless ($var =~ /\:\:/); | ||||||
| 610 | #PREV. LINE CHGD. TO NEXT 20031006 TO FIX "${$VAR}...". | ||||||
| 611 | 0 | $var =~ s/\$(\w)/\$$calling_package\:\:$1/g; | |||||
| 612 | 0 | my $one = eval $var; | |||||
| 613 | 0 | 0 | $one = $two unless ($one); | ||||
| 614 | 0 | return $one; | |||||
| 615 | }; | ||||||
| 616 | |||||||
| 617 | sub makabutton | ||||||
| 618 | { | ||||||
| 619 | 0 | 0 | 0 | my ($parms,$pre,$one,$two,$parmno,$four) = @_; | |||
| 620 | 0 | my ($rtn) = "$pre$one$two$parmno$four"; | |||||
| 621 | 0 | my ($myvalue); | |||||
| 622 | |||||||
| 623 | local *setbtnval = sub | ||||||
| 624 | { | ||||||
| 625 | 0 | 0 | my ($one,$two,$three) = @_; | ||||
| 626 | #$two =~ s/\:(\w+)/&makaswap($parms,$1)/eg; #CHGD 19990527. JWT. | ||||||
| 627 | 0 | $two =~ s/\:\{?(\w+)\}?/&makaswap($parms,$1)/eg; | |||||
| 0 | |||||||
| 628 | 0 | $myvalue = "$two"; | |||||
| 629 | 0 | return ($one.$two.$three); | |||||
| 630 | 0 | }; | |||||
| 631 | 0 | 0 | 0 | if ($two =~ /VALUE\s*=\"[^\"]*\"/io || $one =~ /CHECKBOX/io) | |||
| 632 | { | ||||||
| 633 | 0 | $two =~ s/(VALUE\s*=\")([^\"]*)(\")/&setbtnval($1,$2,$3)/ei; | |||||
| 0 | |||||||
| 634 | 0 | $rtn = "$pre$one$two$parmno$four"; | |||||
| 635 | # $rtn =~ s/CHECKED//i if (defined($myvalue)); #JWT:CHGD. TO NEXT: 19990609! | ||||||
| 636 | # $rtn =~ s/CHECKED//io if (defined($parms->{$parmno})); #JWT:CHGD. TO NEXT: 20100830 (v7.05)! | ||||||
| 637 | 0 | 0 | $rtn =~ s/\bCHECKED\b//io if (defined($parms->{$parmno})); | ||||
| 638 | #if ((defined($myvalue) && $parms->{$parmno} eq $myvalue) || ($one =~ /CHECKBOX/i && $parms->{$parmno} =~ /\S/)) | ||||||
| 639 | 0 | 0 | 0 | if (ref($parms->{$parmno}) eq 'ARRAY') #NEXT 9 LINES ADDED 20000823 | |||
| 0 | 0 | ||||||
| 0 | |||||||
| 0 | |||||||
| 0 | |||||||
| 640 | { #TO FIX CHECKBOXES W/SAME NAME | ||||||
| 641 | 0 | foreach my $i (@{$parms->{$parmno}}) #IN LOOPS! | |||||
| 0 | |||||||
| 642 | { | ||||||
| 643 | 0 | 0 | if ($i eq $myvalue) | ||||
| 644 | { | ||||||
| 645 | 0 | $rtn =~ s/\:$parmno/ CHECKED/; | |||||
| 646 | 0 | last; | |||||
| 647 | } | ||||||
| 648 | } | ||||||
| 649 | 0 | $rtn =~ s/\:$parmno//; | |||||
| 650 | } | ||||||
| 651 | #elsif ((defined($parms->{$parmno}) && defined($myvalue) && $parms->{$parmno} eq $myvalue) || ($one =~ /CHECKBOX/i && $parms->{$parmno} =~ /\S/)) #JWT: 19990609! - CHGD. 2 NEXT 20041020! | ||||||
| 652 | elsif ((defined($parms->{$parmno}) && defined($myvalue) && $parms->{$parmno} eq $myvalue) || (!defined($myvalue) && $one =~ /CHECKBOX/io && $parms->{$parmno} =~ /\S/o)) | ||||||
| 653 | { #NOTE: IF NO "VALUE=" IS SPECIFIED, THEN CHECKED UNLESS PARAMETER IS EMPTY/UNDEFINED!! | ||||||
| 654 | 0 | $rtn =~ s/\:$parmno/ CHECKED/; | |||||
| 655 | } | ||||||
| 656 | else | ||||||
| 657 | { | ||||||
| 658 | 0 | $rtn =~ s/\:$parmno//; | |||||
| 659 | } | ||||||
| 660 | #print " -loadhtml: myvalue=$myvalue= parmno=$parmno= parmval=".$parms->{$parmno}."= rtn=$rtn=\n"; |
||||||
| 661 | } | ||||||
| 662 | else | ||||||
| 663 | { | ||||||
| 664 | 0 | $rtn =~ s/\:$parmno//; | |||||
| 665 | } | ||||||
| 666 | 0 | return ($rtn); | |||||
| 667 | }; | ||||||
| 668 | |||||||
| 669 | sub makatext | ||||||
| 670 | { | ||||||
| 671 | 0 | 0 | 0 | my $parms = shift; | |||
| 672 | 0 | my $one = shift; | |||||
| 673 | 0 | my $parmno = shift; | |||||
| 674 | 0 | my $dflt = shift; | |||||
| 675 | |||||||
| 676 | 0 | my $val; | |||||
| 677 | 0 | my $rtn = $one; | |||||
| 678 | 0 | 0 | if (defined($parms->{$parmno})) | ||||
| 0 | |||||||
| 679 | { | ||||||
| 680 | 0 | $val = $parms->{$parmno}; | |||||
| 681 | } | ||||||
| 682 | elsif ($dflt =~ /\S/o) | ||||||
| 683 | { | ||||||
| 684 | 0 | $dflt =~ s/^\=//o; | |||||
| 685 | 0 | $dflt =~ s/\"(.*?)\"/$1/; | |||||
| 686 | 0 | $val = $dflt; | |||||
| 687 | } | ||||||
| 688 | 0 | 0 | if (defined($val)) | ||||
| 689 | { | ||||||
| 690 | 0 | 0 | if ($rtn =~ /\sVALUE\s*=/io) | ||||
| 691 | { | ||||||
| 692 | 0 | $rtn =~ s/(\sVALUE\s*=\s*\").*?\"/$1 . $val . '"'/ei; | |||||
| 0 | |||||||
| 693 | } | ||||||
| 694 | else | ||||||
| 695 | { | ||||||
| 696 | 0 | $rtn = $one . ' VALUE="' . $val . '"'; | |||||
| 697 | } | ||||||
| 698 | } | ||||||
| 699 | 0 | return ($rtn); | |||||
| 700 | }; | ||||||
| 701 | |||||||
| 702 | sub makanif | ||||||
| 703 | { | ||||||
| 704 | 0 | 0 | 0 | my ($parms,$regex,$ifhtml,$nestid) = @_; | |||
| 705 | |||||||
| 706 | 0 | my ($x) = ''; | |||||
| 707 | 0 | my ($savesep) = $listsep; | |||||
| 708 | |||||||
| 709 | 0 | $regex =~ s/\</ | |||||
| 710 | 0 | $regex =~ s/\>/>/gio; | |||||
| 711 | 0 | $regex =~ s/\&le/<=/gio; | |||||
| 712 | 0 | $regex =~ s/\&ge/>=/gio; | |||||
| 713 | 0 | $regex =~ s/\\\%/\%/gio; | |||||
| 714 | 0 | $listsep = undef; | |||||
| 715 | |||||||
| 716 | 0 | $regex =~ s/([\'\"])(.*?)\1/ | |||||
| 717 | 0 | my ($q, $body) = ($1, $2); | |||||
| 718 | 0 | 0 | $body =~ s!\:\{?(\w+)\}?!defined($parms->{$1}) ? &makaswap($parms,$1) : ''!eg; | ||||
| 0 | |||||||
| 719 | 0 | $body =~ s!\:!\:\x02!go; #PROTECT AGAINST MULTIPLE SUBSTITUTION! | |||||
| 720 | 0 | $q.$body.$q; | |||||
| 721 | /eg; | ||||||
| 722 | |||||||
| 723 | #$regex =~ s/\:\{?(\w+)\}?/defined($parms->{$1}) ? '"'.&makaswap($parms,$1).'"' : '""'/eg; | ||||||
| 724 | |||||||
| 725 | #PREV. LINE REPLACED BY NEXT REGEX 20000309 TO QUOTE DOUBLE-QUOTES IN PARM. VALUE. | ||||||
| 726 | 0 | $regex =~ s/\:\{?(\w+)\}?/ | |||||
| 727 | 0 | my ($one) = $1; | |||||
| 728 | 0 | my ($res) = '""'; | |||||
| 729 | 0 | 0 | if (defined($parms->{$one})) | ||||
| 730 | { | ||||||
| 731 | 0 | $res = &makaswap($parms,$1); | |||||
| 732 | 0 | $res =~ s!\"!\\\"!go; | |||||
| 733 | 0 | $res = '"'.$res.'"'; | |||||
| 734 | } | ||||||
| 735 | $res | ||||||
| 736 | 0 | /eg; | |||||
| 737 | 0 | $regex =~ s/\x02//go; #UNPROTECT! | |||||
| 738 | 0 | 0 | $regex =~ s/\:([\$\@\%][\w\:\[\{\]\}\$]+)/&dovar($1)/egs if ($evalsok); | ||||
| 0 | |||||||
| 739 | #$regex =~ s/\:([\$\@\%][\w\:\[\{\]\}\$\-\>]+)/&dovar($1)/egs if ($evalsok); | ||||||
| 740 | |||||||
| 741 | 0 | $regex =~ /^([^`]*)$/o; #MAKE SURE EXPRESSION CONTAINS NO GRAVS! | |||||
| 742 | 0 | $regex = $1; #20000626 UNTAINT REGEX FOR EVAL! | |||||
| 743 | 0 | $regex =~ s/([\@\#\$\%])([a-zA-Z_])/\\$1$2/g; #QUOTE ANY SPECIAL PERL CHARS! | |||||
| 744 | #$regex =~ s/\"\"\:\w+\"\"/\"\"/g; #FIX QUOTE BUG -FORCE UNDEFINED PARMS TO RETURN FALSE! | ||||||
| 745 | 0 | $regex = '$x = ' . $regex . ';'; | |||||
| 746 | 0 | eval $regex; | |||||
| 747 | 0 | $listsep = $savesep; | |||||
| 748 | |||||||
| 749 | 0 | my ($ifhtml1,$ifhtml2) = split(/<\!ELSE$nestid>\s*/i,$ifhtml); | |||||
| 750 | 0 | 0 | if ($x) | ||||
| 751 | { | ||||||
| 752 | 0 | 0 | if (defined $ifhtml1) | ||||
| 753 | { | ||||||
| 754 | 0 | $ifhtml1 =~ s#^(\s*)<\!\-\-(.*?)\-\->(\s*)$#$1$2$3#s; | |||||
| 755 | 0 | return ($ifhtml1); | |||||
| 756 | } | ||||||
| 757 | else | ||||||
| 758 | { | ||||||
| 759 | 0 | return (''); | |||||
| 760 | } | ||||||
| 761 | } | ||||||
| 762 | else | ||||||
| 763 | { | ||||||
| 764 | 0 | 0 | if (defined $ifhtml2) | ||||
| 765 | { | ||||||
| 766 | 0 | $ifhtml2 =~ s#^(\s*)<\!\-\-(.*?)\-\->(\s*)$#$1$2$3#s; | |||||
| 767 | 0 | return ($ifhtml2); | |||||
| 768 | } | ||||||
| 769 | else | ||||||
| 770 | { | ||||||
| 771 | 0 | return (''); | |||||
| 772 | } | ||||||
| 773 | } | ||||||
| 774 | }; | ||||||
| 775 | |||||||
| 776 | sub makanop1 | ||||||
| 777 | { | ||||||
| 778 | # | ||||||
| 779 | # SUBSTITUTIONS IN COMMENTS TAKE THE ONE OF THE FORMS: | ||||||
| 780 | # remove ... OR | ||||||
| 781 | # | ||||||
| 782 | # where: "#"=Parameter number to substitute. | ||||||
| 783 | # "default"=Optional default value to use if parameter | ||||||
| 784 | # is empty or omitted. | ||||||
| 785 | # "stuff to remove" is removed. | ||||||
| 786 | # | ||||||
| 787 | # NOTES: ONLY 1 SUCH COMMENT MAY APPEAR PER LINE, | ||||||
| 788 | # THE DEFAULT, BEFORE-STUFF AND AFTER-STUFF MUST FIT ON ONE LINE. | ||||||
| 789 | # DUE TO HTML LIMITATIONS, ANY ">" BETWEEN THE "[...]" MUST BE | ||||||
| 790 | # SPECIFIED AS ">"! | ||||||
| 791 | # | ||||||
| 792 | # THIS IS VERY USEFUL FOR SUBSTITUTING WHERE HTML WILL NOT ACCEPT | ||||||
| 793 | # COMMENTS, EXAMPLE: | ||||||
| 794 | # | ||||||
| 795 | # | ||||||
| 796 | # | ||||||
| 797 | # | ||||||
| 798 | # | ||||||
| 799 | # THIS CAUSES A SUBMIT BUTTON WITH THE WORDS "Create Record" TO | ||||||
| 800 | # BE DISPLAYED IF PAGE IS JUST DISPLAYED, "Add Record" if loaded | ||||||
| 801 | # by loadhtml() (CGI) but no argument passed. NOTE the use of | ||||||
| 802 | # ">" instead of ">" since HTML terminates comments with ">"!!!! | ||||||
| 803 | # | ||||||
| 804 | |||||||
| 805 | 0 | 0 | 0 | my $parms = shift; | |||
| 806 | 0 | my $one = shift; | |||||
| 807 | 0 | my $two = shift; | |||||
| 808 | 0 | my ($rtn) = ''; | |||||
| 809 | 0 | my ($picture); | |||||
| 810 | 0 | 0 | $picture = $1 if ($two =~ s/\%(.*)\%//); | ||||
| 811 | #$three = shift; | ||||||
| 812 | 0 | my $three = ''; ##NEXT 3 LINES REP. PREV. LINE 5/14/98 JWT! | |||||
| 813 | 0 | $two =~ s/^=//o; | |||||
| 814 | 0 | $two =~ s/([^\[]*)(\[.*\])?/$three = $2; $1/e; | |||||
| 0 | |||||||
| 0 | |||||||
| 815 | #$two =~ s/^=//; #MOVED UP 2 LINES 20050523! | ||||||
| 816 | #print "-???- 1=$one= 2=$two= parms=$parms=\n"; | ||||||
| 817 | 0 | 0 | 0 | return ($two) unless(defined($one) && ref($parms) eq 'HASH' && defined($parms->{$one}) && "\Q$parms->{$one}\E"); | |||
| 0 | |||||||
| 0 | |||||||
| 818 | 0 | 0 | if (defined($three) ? ($three =~ s/^\[(.*?)\]/$1/) : 0) | ||||
| 0 | |||||||
| 0 | |||||||
| 819 | { | ||||||
| 820 | #$three =~ s/\:(\w+)/(${parms{$1}}||$two)/egx; #JWT 19990611 | ||||||
| 821 | 0 | 0 | $three =~ s/\:(\w+)/(&makaswap($parms,$1)||$two)/egx; | ||||
| 0 | |||||||
| 822 | 0 | $three =~ s/\>/>/go; | |||||
| 823 | 0 | $rtn = $three; | |||||
| 824 | } | ||||||
| 825 | elsif ($picture) #ALLOW "<:1%10.2f%...> (SPRINTF) FORMATTING! | ||||||
| 826 | { | ||||||
| 827 | 0 | 0 | if ($picture =~ s/^&(.*)/$1/) | ||||
| 828 | { | ||||||
| 829 | 0 | my ($picfn) = $1; | |||||
| 830 | 0 | $picfn =~ s/\:\{?(\w+)\}?/&makaswap($parms,$1)/eg; #ADDED 20050517 TO ALLOW "%&:{alt_package}::commatize%" | |||||
| 0 | |||||||
| 831 | 0 | 0 | $picfn = $calling_package . '::' . $picfn #ADDED 20050517 TO DEFAULT PACKAGE OF commatize TO MAIN RATHER THAN "LoadHtml"! | ||||
| 832 | unless ($picfn =~ /\:\:/o); | ||||||
| 833 | # my (@args) = undef; #CHGD. TO NEXT 20070426 TO PREVENT WARNING. | ||||||
| 834 | 0 | my (@args) = (); | |||||
| 835 | 0 | 0 | (@args) = split(/\,/o,$1) if ($picfn =~ s/\((.*)\)//o); | ||||
| 836 | 1 | 1 | 8 | no strict 'refs'; | |||
| 1 | 6 | ||||||
| 1 | 388 | ||||||
| 837 | # if (defined(@args)) #CHGD. TO NEXT 20070426 TO PREVENT WARNING. | ||||||
| 838 | 0 | 0 | if (@args) | ||||
| 839 | { | ||||||
| 840 | 0 | for my $j (0..$#args) | |||||
| 841 | { | ||||||
| 842 | 0 | $args[$j] =~ s/\:(\w+)/&makaswap($parms,$1)/egs; | |||||
| 0 | |||||||
| 843 | } | ||||||
| 844 | #$rtn = &{$picfn}((${parms{$one}}||$two), @args); #JWT 19990611 | ||||||
| 845 | 0 | 0 | $rtn = &{$picfn}((&makaswap($parms,$one)||$two), @args); | ||||
| 0 | |||||||
| 846 | } | ||||||
| 847 | else | ||||||
| 848 | { | ||||||
| 849 | #$rtn = &{$picfn}(${parms{$one}}||$two); #JWT 19990611 | ||||||
| 850 | 0 | 0 | $rtn = &{$picfn}(&makaswap($parms,$one)||$two); | ||||
| 0 | |||||||
| 851 | } | ||||||
| 852 | } | ||||||
| 853 | else | ||||||
| 854 | { | ||||||
| 855 | #$rtn = sprintf("%$picture",(${parms{$one}}||$two)); #JWT 19990611 | ||||||
| 856 | 0 | 0 | $rtn = sprintf("%$picture",(&makaswap($parms,$one)||$two)); | ||||
| 857 | } | ||||||
| 858 | } | ||||||
| 859 | else | ||||||
| 860 | { | ||||||
| 861 | #$rtn = ${parms{$one}}||$two; #JWT 19990611 | ||||||
| 862 | 0 | 0 | $rtn = &makaswap($parms,$one)||$two; | ||||
| 863 | } | ||||||
| 864 | 0 | return ($rtn); | |||||
| 865 | }; | ||||||
| 866 | |||||||
| 867 | sub makanop2 | ||||||
| 868 | { | ||||||
| 869 | # | ||||||
| 870 | # SUBSTITUTIONS IN COMMENTS TAKE THE ONE OF THE FORMS: | ||||||
| 871 | # remove ... OR | ||||||
| 872 | # | ||||||
| 873 | # ADDED 20070713 | ||||||
| 874 | |||||||
| 875 | 0 | 0 | 0 | my $parms = shift; | |||
| 876 | 0 | my $one = shift; | |||||
| 877 | 0 | my $two = shift; | |||||
| 878 | |||||||
| 879 | 0 | my ($rtn) = ''; | |||||
| 880 | #print " -!!!- makanop2($one|$two)\n"; |
||||||
| 881 | 0 | my ($picture); | |||||
| 882 | 0 | 0 | $picture = $1 if ($two =~ s/\%(.*)\%//); | ||||
| 883 | #$three = shift; | ||||||
| 884 | 0 | my $three = ''; ##NEXT 3 LINES REP. PREV. LINE 5/14/98 JWT! | |||||
| 885 | 0 | $two =~ s/^=//o; | |||||
| 886 | 0 | 0 | if ($picture) #ALLOW "<:1%10.2f%...> (SPRINTF) FORMATTING! | ||||
| 887 | { | ||||||
| 888 | 0 | 0 | if ($picture =~ s/^&(.*)/$1/) | ||||
| 889 | { | ||||||
| 890 | 0 | my ($picfn) = $1; | |||||
| 891 | 0 | $picfn =~ s/\:\{?(\w+)\}?/&makaswap($parms,$1)/eg; #ADDED 20050517 TO ALLOW "%&:{alt_package}::commatize%" | |||||
| 0 | |||||||
| 892 | 0 | 0 | $picfn = $calling_package . '::' . $picfn #ADDED 20050517 TO DEFAULT PACKAGE OF commatize TO MAIN RATHER THAN "LoadHtml"! | ||||
| 893 | unless ($picfn =~ /\:\:/o); | ||||||
| 894 | 0 | my (@args) = (); | |||||
| 895 | 0 | 0 | (@args) = split(/\,/o,$1) if ($picfn =~ s/\((.*)\)//o); | ||||
| 896 | 1 | 1 | 5 | no strict 'refs'; | |||
| 1 | 1 | ||||||
| 1 | 213 | ||||||
| 897 | 0 | 0 | if (@args) | ||||
| 898 | { | ||||||
| 899 | 0 | for my $j (0..$#args) | |||||
| 900 | { | ||||||
| 901 | 0 | $args[$j] =~ s/\:(\w+)/&makaswap($parms,$1)/egs; | |||||
| 0 | |||||||
| 902 | } | ||||||
| 903 | #$rtn = &{$picfn}((${parms{$one}}||$two), @args); #JWT 19990611 | ||||||
| 904 | 0 | $rtn = &{$picfn}($one, @args); | |||||
| 0 | |||||||
| 905 | } | ||||||
| 906 | else | ||||||
| 907 | { | ||||||
| 908 | #$rtn = &{$picfn}(${parms{$one}}||$two); #JWT 19990611 | ||||||
| 909 | 0 | $rtn = &{$picfn}($one); | |||||
| 0 | |||||||
| 910 | } | ||||||
| 911 | } | ||||||
| 912 | else | ||||||
| 913 | { | ||||||
| 914 | #$rtn = sprintf("%$picture",(${parms{$one}}||$two)); #JWT 19990611 | ||||||
| 915 | 0 | $rtn = sprintf("%$picture",$one); | |||||
| 916 | } | ||||||
| 917 | } | ||||||
| 918 | else | ||||||
| 919 | { | ||||||
| 920 | 0 | $rtn = $one; | |||||
| 921 | } | ||||||
| 922 | 0 | return ($rtn); | |||||
| 923 | }; | ||||||
| 924 | |||||||
| 925 | sub buildahash | ||||||
| 926 | { | ||||||
| 927 | 0 | 0 | 0 | my ($one,$two) = @_; | |||
| 928 | |||||||
| 929 | 0 | $two =~ s/^\s*\s*$//o; | |||||
| 931 | 0 | $two =~ s/^\s*\(//o; | |||||
| 932 | 0 | $two =~ s/\)\s*$//o; | |||||
| 933 | 1 | 1 | 5 | no strict 'refs'; | |||
| 1 | 1 | ||||||
| 1 | 105 | ||||||
| 934 | #$evalstr = "\%h1_myhash = ($two)"; | ||||||
| 935 | 0 | my $evalstr = "\%{\"h1_$one\"} = ($two)"; | |||||
| 936 | 0 | my $x = eval $evalstr; | |||||
| 937 | 0 | return (''); | |||||
| 938 | }; | ||||||
| 939 | |||||||
| 940 | sub makahash | ||||||
| 941 | { | ||||||
| 942 | # | ||||||
| 943 | # FORMAT: | ||||||
| 944 | |||||||
| 945 | 0 | 0 | 0 | my ($one,$two,$three) = @_; | |||
| 946 | 1 | 1 | 6 | no strict 'refs'; | |||
| 1 | 2 | ||||||
| 1 | 3625 | ||||||
| 947 | 0 | 0 | return (${"h1_$one"}{$two}) if (defined(${"h1_$one"}{$two})); | ||||
| 0 | |||||||
| 0 | |||||||
| 948 | 0 | return $three; | |||||
| 949 | }; | ||||||
| 950 | |||||||
| 951 | sub makaselect | ||||||
| 952 | { | ||||||
| 953 | # | ||||||
| 954 | # FORMAT: ..stuff to remove... | ||||||
| 955 | # ... | ||||||
| 956 | # ... | ||||||
| 957 | # | ||||||
| 958 | # NOTE: "select-options" MAY CONTAIN "default="value"" AND "value" | ||||||
| 959 | # MAY ALS0 BE A SCALER PARAMETER. THE LIST PARAMETER MUST BE AT | ||||||
| 960 | # THE END JUST BEFORE THE ">" WITH NO SPACE IN BETWEEN! | ||||||
| 961 | # THESE COMMENTS AND ANYTHING IN BETWEEN GETS REPLACED BY A SELECT- | ||||||
| 962 | # LISTBOX CONTAINING THE ITEMS CONTAINED IN THE LIST REFERENCED BY | ||||||
| 963 | # PARAMETER NUMBER "#". (PASS AS "\@list"). | ||||||
| 964 | # "select_options" MAY ALSO CONTAIN A "value=:#" PARAMETER | ||||||
| 965 | # SPECIFYING A SECOND LIST PARAMETER TO BE USED FOR THE ACTUAL | ||||||
| 966 | # VALUES. DEFAULTS TO SAME AS DISPLAYED LIST IF OMITTED. | ||||||
| 967 | # SPECIFYING A SCALAR OR LIST PARAMETER OR VALUE FOR "DEFAULT[SEL]=" | ||||||
| 968 | # CAUSES VALUES WHICH MATCH THIS(THESE) VALUES TO BE SET TO SELECTED | ||||||
| 969 | # BY DEFAULT WHEN THE LIST IS DISPLAYED. DEFAULT= MATCHES THE | ||||||
| 970 | # DEFAULT LIST AGAINST THE VALUES= LIST, DEFAULTSEL= MATCHES THE | ||||||
| 971 | # DEFAULT LIST AGAINST THE *DISPLAYED* VALUES LIST (IF DIFFERENT). | ||||||
| 972 | # IF USING A HASH, BY DEFAULT IT IS CHARACTER SORTED BY KEY, IF | ||||||
| 973 | # "BYVALUE" IS SPECIFIED, IT IS SORTED BY DISPLAYED VALUE. "REVERSE" | ||||||
| 974 | # CAUSES THE HASH OR LIST(S) TO BE DISPLAYED IN REVERSE ORDER. | ||||||
| 975 | # | ||||||
| 976 | 0 | 0 | 0 | my$parms = shift; | |||
| 977 | 0 | my ($one) = shift; | |||||
| 978 | 0 | my ($two) = shift; | |||||
| 979 | 0 | my ($rtn) = ''; | |||||
| 980 | 0 | my ($dflttype) = 'DEFAULT'; | |||||
| 981 | 0 | my ($dfltval) = ''; | |||||
| 982 | 0 | my (%dfltindex) = ('DEFAULT' => 'value', 'DEFAULTSEL' => 'sel'); | |||||
| 983 | |||||||
| 984 | #@value_options = (); | ||||||
| 985 | #@sel_options = (); | ||||||
| 986 | 0 | my $options; | |||||
| 987 | 0 | 0 | if (ref($parms->{$two}) eq 'HASH') | ||||
| 988 | { | ||||||
| 989 | #1ST PART OF NEXT IF ADDED 20031124 TO SUPPORT BOTH VALUE ARRAY AND DESCRIPTION HASH. | ||||||
| 990 | 0 | 0 | if ($one =~ s/value[s]?=(\")?:(\w+)\1?//i) | ||||
| 0 | |||||||
| 991 | { | ||||||
| 992 | 0 | @{$options->{value}} = @{$parms->{$2}}; | |||||
| 0 | |||||||
| 0 | |||||||
| 993 | 0 | foreach my $i (@{$options->{value}}) | |||||
| 0 | |||||||
| 994 | { | ||||||
| 995 | 0 | push (@{$options->{sel}}, ${$parms->{$two}}{$i}); | |||||
| 0 | |||||||
| 0 | |||||||
| 996 | } | ||||||
| 997 | } | ||||||
| 998 | elsif ($one =~ s/BYVALUE//io) | ||||||
| 999 | { | ||||||
| 1000 | 0 | foreach my $i (sort {$parms->{$two}->{$a} cmp $parms->{$two}->{$b}} (keys(%{$parms->{$two}}))) #JWT: SORT'EM (ALPHA). | |||||
| 0 | |||||||
| 0 | |||||||
| 1001 | { | ||||||
| 1002 | 0 | push (@{$options->{value}}, $i); | |||||
| 0 | |||||||
| 1003 | 0 | push (@{$options->{sel}}, ${$parms->{$two}}{$i}); | |||||
| 0 | |||||||
| 0 | |||||||
| 1004 | } | ||||||
| 1005 | } | ||||||
| 1006 | else | ||||||
| 1007 | { | ||||||
| 1008 | 0 | $one =~ s/BYKEY//io; | |||||
| 1009 | 0 | foreach my $i (sort(keys(%{$parms->{$two}}))) #JWT: SORT'EM (ALPHA). | |||||
| 0 | |||||||
| 1010 | { | ||||||
| 1011 | 0 | push (@{$options->{value}}, $i); | |||||
| 0 | |||||||
| 1012 | 0 | push (@{$options->{sel}}, ${$parms->{$two}}{$i}); | |||||
| 0 | |||||||
| 0 | |||||||
| 1013 | } | ||||||
| 1014 | } | ||||||
| 1015 | } | ||||||
| 1016 | else | ||||||
| 1017 | { | ||||||
| 1018 | 0 | @{$options->{sel}} = @{$parms->{$two}}; | |||||
| 0 | |||||||
| 0 | |||||||
| 1019 | |||||||
| 1020 | #NEXT 9 LINES (IF-OPTION) ADDED 20010410 TO ALLOW "VALUE=:#"! | ||||||
| 1021 | 0 | 0 | if ($one =~ s/value[s]?=(\")?:(\#)([\+\-\*]\d+)?\1?//i) | ||||
| 0 | |||||||
| 0 | |||||||
| 1022 | { | ||||||
| 1023 | 0 | my ($indx) = $3; | |||||
| 1024 | 0 | $indx =~ s/\+//; | |||||
| 1025 | 0 | for (my $i=0;$i<=$#{$options->{sel}};$i++) | |||||
| 0 | |||||||
| 1026 | { | ||||||
| 1027 | 0 | push (@{$options->{value}}, $indx++); | |||||
| 0 | |||||||
| 1028 | } | ||||||
| 1029 | } | ||||||
| 1030 | elsif ($one =~ s/value[s]?=(\")?:(\w+)\1?//i) | ||||||
| 1031 | { | ||||||
| 1032 | 0 | @{$options->{value}} = @{$parms->{$2}}; | |||||
| 0 | |||||||
| 0 | |||||||
| 1033 | } | ||||||
| 1034 | elsif ($one =~ s/value[s]?\s*=\s*(\")?:\#([\+\-\*]\d+)?\1?//i) | ||||||
| 1035 | { | ||||||
| 1036 | #JWT(ALLOW "VALUE=:# TO SPECIFY USING NUMERIC ARRAY-INDICES OF | ||||||
| 1037 | #LIST TO BE USED AS ACTUAL VALUES. | ||||||
| 1038 | 0 | for my $i (0..$#{$options->{sel}}) | |||||
| 0 | |||||||
| 1039 | { | ||||||
| 1040 | 0 | push (@{$options->{value}}, eval("$i$2")); | |||||
| 0 | |||||||
| 1041 | } | ||||||
| 1042 | } | ||||||
| 1043 | else | ||||||
| 1044 | { | ||||||
| 1045 | 0 | @{$options->{value}} = @{$options->{sel}}; | |||||
| 0 | |||||||
| 0 | |||||||
| 1046 | } | ||||||
| 1047 | } | ||||||
| 1048 | 0 | 0 | if ($one =~ s/REVERSED?//io) | ||||
| 1049 | { | ||||||
| 1050 | 0 | @{$options->{sel}} = reverse(@{$options->{sel}}); | |||||
| 0 | |||||||
| 0 | |||||||
| 1051 | 0 | @{$options->{value}} = reverse(@{$options->{value}}); | |||||
| 0 | |||||||
| 0 | |||||||
| 1052 | } | ||||||
| 1053 | |||||||
| 1054 | #$one =~ s/default=\"(.*?)\"//i; | ||||||
| 1055 | #$one =~ s/default=\"(.*?)\"//i; | ||||||
| 1056 | #if ($one =~ s/(default|defaultsel)=\"(.*?)\"//i) #20000505: CHGD 2 NEXT 2 LINES 2 MAKE QUOTES OPTIONAL! | ||||||
| 1057 | 0 | 0 | 0 | if (($one =~ s/(default|defaultsel)\s*=\s*\"(.*?)\"//i) | |||
| 1058 | || ($one =~ s/(default|defaultsel)\s*=\s*(\:?\S+)//i)) #20000505: CHGD 2 NEXT LINE 2 MAKE QUOTES OPTIONAL! | ||||||
| 1059 | { | ||||||
| 1060 | 0 | $dflttype = $1; | |||||
| 1061 | 0 | $dfltval = $2; | |||||
| 1062 | 0 | $dflttype =~ tr/a-z/A-Z/; | |||||
| 1063 | #$dfltval =~ s/\:(\w+)/ | ||||||
| 1064 | 0 | $dfltval =~ s/\:\{?(\w+)\}?/ | |||||
| 1065 | 0 | 0 | if (ref($parms->{$1}) eq 'ARRAY') | ||||
| 1066 | { | ||||||
| 1067 | 0 | '(?:'.join('|',@{$parms->{$1}}).')' | |||||
| 0 | |||||||
| 1068 | } | ||||||
| 1069 | else | ||||||
| 1070 | { | ||||||
| 1071 | 0 | quotemeta($parms->{$1}) | |||||
| 1072 | } | ||||||
| 1073 | /eg; | ||||||
| 1074 | } | ||||||
| 1075 | #$one =~ s/\:(\w+)/$parms->{$1}/g; | ||||||
| 1076 | 0 | $one =~ s/\:\{?(\w+)\}?/$parms->{$1}/g; #JWT 05/24/1999 | |||||
| 1077 | 0 | $rtn = " | |||||
| 1078 | 0 | $one = $dfltval; | |||||
| 1079 | 0 | for (my $i=0;$i<=$#{$options->{sel}};$i++) | |||||
| 0 | |||||||
| 1080 | { | ||||||
| 1081 | #if (${$options->{value}}[$i] =~ /^\Q${one}\E$/) | ||||||
| 1082 | # if (${($dfltindex{$dflttype}.'_options')}[$i] =~ /^${one}$/) | ||||||
| 1083 | 0 | 0 | if (${$options->{$dfltindex{$dflttype}}}[$i] =~ /^${one}$/) | ||||
| 0 | |||||||
| 1084 | { | ||||||
| 1085 | 0 | $rtn .= "\n"; | |||||
| 0 | |||||||
| 0 | |||||||
| 1086 | } | ||||||
| 1087 | else | ||||||
| 1088 | { | ||||||
| 1089 | 0 | $rtn .= "\n"; | |||||
| 0 | |||||||
| 0 | |||||||
| 1090 | } | ||||||
| 1091 | } | ||||||
| 1092 | 0 | $rtn .= ''; | |||||
| 1093 | 0 | return ($rtn); | |||||
| 1094 | }; | ||||||
| 1095 | |||||||
| 1096 | sub modhtml | ||||||
| 1097 | { | ||||||
| 1098 | 0 | 0 | 0 | my ($html, $parms) = @_; | |||
| 1099 | 0 | my ($v); | |||||
| 1100 | |||||||
| 1101 | #NOW FOR THE REAL MAGIC (FROM ANCIENT EGYPTIAN TABLETS)!... | ||||||
| 1102 | |||||||
| 1103 | 0 | 0 | if ($cfgOps{loops}) | ||||
| 1104 | { | ||||||
| 1105 | 0 | while ($$html =~ s#<\!LOOP(\S*)\s+(.*?)>\s*(.*?)<\!/LOOP\1>\s*#&makaloop($parms, $2,$3,$1)#eis) {}; | |||||
| 0 | |||||||
| 1106 | } | ||||||
| 1107 | |||||||
| 1108 | 0 | 0 | $$html =~ s#<\!HASH\s+(\w*?)\s*>(.*?)<\!\/HASH[^>]*>\s*#&buildahash($1,$2)#eigs | ||||
| 0 | |||||||
| 1109 | if ($cfgOps{hashes}); | ||||||
| 1110 | |||||||
| 1111 | 0 | 0 | $$html =~ s##\n#i | ||||
| 1112 | if ($cfgOps{CGIScript}); | ||||||
| 1113 | |||||||
| 1114 | #$$html =~ s#<\!INCLUDE\s+(.*?)>\s*#&fetchinclude($parms, $1)#eigs #CHGD. TO NEXT 20010720 TO SUPPORT EMBEDS. | ||||||
| 1115 | 0 | 0 | $$html =~ s!<\!INCLUDE\s+(.*?)>\s*! | ||||
| 1116 | 0 | my $one = $1; | |||||
| 1117 | 0 | $one =~ s/^\"//o; | |||||
| 1118 | 0 | $one =~ s/\"\s*$//o; | |||||
| 1119 | 0 | my $tag = 0; | |||||
| 1120 | 0 | 0 | $tag = $1 if ($one =~ s/\:(\w+)//); #ADDED 20060117 TO ALLOW PARTIAL FILE INCLUDES BASED ON TAGS. | ||||
| 1121 | 0 | 0 | if ($one =~ s/\((.*)\)\s*$//) | ||||
| 1122 | { | ||||||
| 1123 | 0 | my $includeparms = $1; | |||||
| 1124 | 0 | $includeparms =~ s/\=/\=\>/go; | |||||
| 1125 | 0 | eval "&fetchinclude($parms, \"$one\", 1, $tag, $includeparms)"; | |||||
| 1126 | } | ||||||
| 1127 | else | ||||||
| 1128 | { | ||||||
| 1129 | 0 | &fetchinclude($parms, $one, 1, $tag); | |||||
| 1130 | } | ||||||
| 1131 | !eigs if ($cfgOps{includes}); | ||||||
| 1132 | |||||||
| 1133 | 0 | 0 | if ($cfgOps{pocs}) | ||||
| 1134 | { | ||||||
| 1135 | 0 | 0 | $$html =~ s#<\!POC:>(.*?)<\!/POC>#$poc#ig if ($cfgOps{pocs}); #20000606 | ||||
| 1136 | 0 | 0 | $$html =~ s#<\!POC>#$poc#ig if ($cfgOps{pocs}); | ||||
| 1137 | } | ||||||
| 1138 | |||||||
| 1139 | 0 | $$html =~ s#\<\!FILEDATE([^\>]*?)\:\>.*?\<\!\/FILEDATE\>#&filedate($parms,$1,0)#eig; #20020327 | |||||
| 0 | |||||||
| 1140 | 0 | $$html =~ s#\<\!FILEDATE([^\>]*)\>#&filedate($parms,$1,0)#eig; #20020327 | |||||
| 0 | |||||||
| 1141 | 0 | $$html =~ s#\<\!TODAY([^\>]*?)\:\>.*?\<\!\/TODAY\>#&filedate($parms,$1,1)#eig; #20020327 | |||||
| 0 | |||||||
| 1142 | 0 | $$html =~ s#\<\!TODAY([^\>]*)\>#&filedate($parms,$1,1)#eig; #20020327 | |||||
| 0 | |||||||
| 1143 | |||||||
| 1144 | 0 | while ($$html =~ s#<\!IF(\S*)\s+(.*?)>\s*(.*?)<\!/IF\1>\s*#&makanif($parms, $2,$3,$1)#eigs) {}; | |||||
| 0 | |||||||
| 1145 | |||||||
| 1146 | 0 | $$html =~ s#<\!\:(\w+)([^>]*?)\:>.*?<\!\:\/\1>#&makanop1($parms,$1,$2)#egs; | |||||
| 0 | |||||||
| 1147 | 0 | $$html =~ s#<\!\:(\w+)([^>]*?)>#&makanop1($parms,$1,$2)#egs; | |||||
| 0 | |||||||
| 1148 | #JWT:CHGD. TO NEXT 20100920 TO ALLOW STYLES IN SELECT TAG! $$html =~ s#( | ||||||
| 1149 | 0 | $$html =~ s#( | |||||
| 0 | |||||||
| 1150 | 0 | $$html =~ s#<\!SELECTLIST\s+(.*?)\:(\w+)\s*>(.*?)<\!\/SELECTLIST>\s*#&makaselect($parms, $1,$2,$3)#eigs; | |||||
| 0 | |||||||
| 1151 | |||||||
| 1152 | 0 | 0 | $$html =~ s#( | ||||
| 0 | |||||||
| 1153 | 0 | $$html =~ s/(TYPE\s*=\s*\"?)(CHECKBOX|RADIO)([^>]*?\:)(\w+)(\s*>)/&makabutton($parms,$1,$2,$3,$4,$5)/eigs; | |||||
| 0 | |||||||
| 1154 | 0 | $$html =~ s/(<\s*INPUT[^\<]*?)\:(\w+)(\=.*?)?>/&makatext($parms, $1,$2,$3).'>'/eigs; | |||||
| 0 | |||||||
| 1155 | 0 | 0 | $$html =~ s/\:(\d+)/&makaswap($parms,$1)/egs | ||||
| 0 | |||||||
| 1156 | if ($cfgOps{numbers}); #STILL ALLOW JUST ":number"! | ||||||
| 1157 | 0 | $$html =~ s/\:\{(\w+)\}/&makaswap($parms,$1)/egs; #ALLOW ":{word}"! | |||||
| 0 | |||||||
| 1158 | 0 | 0 | $$html =~ s#<\!\%(\w+)\s*\{([^\}]*?)\}([^>]*?)>#&makahash($1,$2,$3)#egs | ||||
| 0 | |||||||
| 1159 | if ($cfgOps{hashes}); | ||||||
| 1160 | # $$html =~ s/\:\{(\w+)\}/&makaswap($parms,$1)/egs; #ALLOW ":{word}"! #MOVED ABOVE PREV. LINE 20070428 SO "" WOULD WORK (USED IN "dsm")! | ||||||
| 1161 | |||||||
| 1162 | #NEXT LINE ADDED 20031028 TO ALLOW IN-PARM EXPRESSIONS! | ||||||
| 1163 | 0 | $$html =~ s/\:\{([^\}]+)\}/&makamath($1)/egs; #ALLOW STUFF LIKE ":{:{parm1}+:{parm2}+3}"! | |||||
| 0 | |||||||
| 1164 | 0 | 0 | if ($evalsok) | ||||
| 1165 | { | ||||||
| 1166 | 0 | $$html =~ s#<\!\:([\$\@\%][\w\:]+\{.*?\})([^>]*?)\:>.*?<\!\:\/\1>#&dovar($1,$2)#egs; #ADDED 20000123 TO HANDLE HASHES W/NON VARIABLE CHARACTERS IN KEYS. | |||||
| 0 | |||||||
| 1167 | 0 | $$html =~ s#<\!\:(\$[\w\:\[\{\]\}\$]+)([^>]*?)\:>.*?<\!\:\/\1>#&dovar($1,$2)#egs; | |||||
| 0 | |||||||
| 1168 | 0 | $$html =~ s#<\!\:([\$\@\%][\w\:]+\{.*?\})([^>]*?)>#&dovar($1,$2)#egs; #ADDED 20000123 TO HANDLE HASHES W/NON VARIABLE CHARACTERS IN KEYS. | |||||
| 0 | |||||||
| 1169 | 0 | $$html =~ s#<\!\:(\$[\w\:\[\{\]\}\$]+)([^>]*?)>#&dovar($1,$2)#egs; | |||||
| 0 | |||||||
| 1170 | 0 | $$html =~ s/\:(\$[\w\:\[\{\]\}\$]+)/&dovar($1)/egs; | |||||
| 0 | |||||||
| 1171 | 0 | $$html =~ s/<\!EVAL\s+(.*?)(?:\/EVAL)?>/&doeval($1)/eigs; | |||||
| 0 | |||||||
| 1172 | 0 | 0 | $$html =~ s#<\!PERL\s*([^>]*)>\s*(.*?)<\!\/PERL>#&doeval($2,$1)#eigs if ($cfgOps{perls}); | ||||
| 0 | |||||||
| 1173 | } | ||||||
| 1174 | else | ||||||
| 1175 | { | ||||||
| 1176 | 0 | $$html =~ s#]*)>(.*?)##igs; | |||||
| 1177 | }; | ||||||
| 1178 | |||||||
| 1179 | #THE FOLLOWING ALLOWS SETTING ' HREF="relative/link.htm" TO | ||||||
| 1180 | #A CGI-WRAPPER, IE. ' HREF="http://my/path/cgi-bin/myscript.pl?relative/link.htm". | ||||||
| 1181 | |||||||
| 1182 | 0 | 0 | if (defined($hrefhtmlhome)) | ||||
| 1183 | { | ||||||
| 1184 | # my $hrefhtmlback = $hrefhtmlhome; | ||||||
| 1185 | # $hrefhtmlback =~ s#\/[^\/]+$##o; | ||||||
| 1186 | 0 | 0 | if (defined($hrefcase)) #THIS ALLOWS CONTROL OF WHICH "href=" LINKS TO WRAP WITH CGI! | ||||
| 1187 | { | ||||||
| 1188 | 0 | 0 | if ($hrefcase eq 'l') #ONLY CONVERT LOWER-CASE "href=" LINKS THIS WAY. | ||||
| 1189 | { | ||||||
| 1190 | 0 | $$html =~ s# (href)\s*=\s*\"(?!(\#|/|\w+\:))# $1=\"$hrefhtmlhome/$2#g; #ADDED HREF ON 20010719! | |||||
| 1191 | } | ||||||
| 1192 | else #ONLY CONVERT UPPER-CASE "HREF=" LINKS THIS WAY. | ||||||
| 1193 | { | ||||||
| 1194 | 0 | $$html =~ s# (HREF)\s*=\s*\"(?!(\#|/|\w+\:))# $1=\"$hrefhtmlhome/$2#g; #ADDED HREF ON 20010719! | |||||
| 1195 | } | ||||||
| 1196 | } | ||||||
| 1197 | else #CONVERT ALL "HREF=" LINKS THIS WAY. | ||||||
| 1198 | { | ||||||
| 1199 | 0 | $$html =~ s#( href)\s*=\s*\"(?!(\#|/|\w+\:))# $1=\"$hrefhtmlhome/$2#gi; #ADDED HREF ON 20010719! | |||||
| 1200 | #$$html =~ s# (href)\s*=\s*\"(?!(\#|/|\w+\:))# $1=\"$hrefhtmlhome/\x02$2#gi; #ADDED HREF ON 20010719! | ||||||
| 1201 | } | ||||||
| 1202 | |||||||
| 1203 | #RECURSIVELY CONVERT "my/deep/deeper/../../path" to "my/path". | ||||||
| 1204 | |||||||
| 1205 | } | ||||||
| 1206 | 0 | 0 | 0 | if (defined($htmlhome) && $htmlhome =~ /\S/o) #JWT 6 NEXT LINES ADDED 1999/08/31. | |||
| 1207 | { | ||||||
| 1208 | 0 | $$html =~ s#([\'\"])((?:\.\.\/)+)#$1$htmlhome/$2#ig; #INSERT |
|||||
| 1209 | 0 | 1 while ($$html =~ s#[^\/]+\/\.\.\/##o); #RECURSIVELY CONVERT "my/deep/deeper/../../path" to "my/path". | |||||
| 1210 | 0 | 0 | if (defined($hrefcase)) #ADDED 20020117: THIS ALLOWS CONTROL OF WHICH LINKS TO WRAP WITH CGI! | ||||
| 1211 | { | ||||||
| 1212 | 0 | 0 | if ($hrefcase eq 'l') #ONLY CONVERT LOWER-CASE "href=" LINKS THIS WAY. | ||||
| 1213 | { | ||||||
| 1214 | 0 | $$html =~ s#(src|ground|href)\s*=\s*\"(?!(\#|/|\w+\:))#$1=\"$htmlhome/$2#g; #CONVERT RELATIVE LINKS TO ABSOLUTE ONES. | |||||
| 1215 | 0 | $$html =~ s# (cl|ht)\s*=\s*\"(?!(\#|/|\w+\:))# $1=\"$htmlhome/$2#g; #CONVERT RELATIVE SPECIAL JAVASCRIPT LINKS TO ABSOLUTE ONES. | |||||
| 1216 | 0 | $$html =~ s#(\s+window\.open\s*\(\s*\')(?!(\#|/|\w+\:))#$1$htmlhome/$2#g; #ADDED 20050504 TO MAKE CALENDAR.JS WORK! | |||||
| 1217 | } | ||||||
| 1218 | else | ||||||
| 1219 | { | ||||||
| 1220 | 0 | $$html =~ s#(SRC|GROUND|HREF)\s*=\s*\"(?!(\#|/|\w+\:))#$1=\"$htmlhome/$2#g; #CONVERT RELATIVE LINKS TO ABSOLUTE ONES. | |||||
| 1221 | 0 | $$html =~ s# (CL|HT)\s*=\s*\"(?!(\#|/|\w+\:))# $1=\"$htmlhome/$2#g; #CONVERT RELATIVE SPECIAL JAVASCRIPT LINKS TO ABSOLUTE ONES. | |||||
| 1222 | } | ||||||
| 1223 | } | ||||||
| 1224 | else | ||||||
| 1225 | { | ||||||
| 1226 | 0 | $$html =~ s#(src|ground|href)\s*=\s*\"(?!(\#|/|\w+\:))#$1=\"$htmlhome/$2#ig; #CONVERT RELATIVE LINKS TO ABSOLUTE ONES. | |||||
| 1227 | 0 | $$html =~ s# (cl|ht)\s*=\s*\"(?!(\#|/|\w+\:))# $1=\"$htmlhome/$2#ig; #CONVERT RELATIVE SPECIAL JAVASCRIPT LINKS TO ABSOLUTE ONES. | |||||
| 1228 | 0 | $$html =~ s#(\s+window\.open\s*\(\s*\')(?!(\#|/|\w+\:))#$1$htmlhome/$2#ig; #ADDED 20050504 TO MAKE CALENDAR.JS WORK! | |||||
| 1229 | } | ||||||
| 1230 | 0 | $$html =~ s#\.\.\/##g; #REMOVE ANY REMAING "../". | |||||
| 1231 | |||||||
| 1232 | #NOTE: SOME JAVASCRIPT RELATIVE LINK VALUES MAY STILL NEED HAND-CONVERTING | ||||||
| 1233 | #VIA BUILDHTML, FOLLOWED BY ADDITIONAL APP-SPECIFIC REGICES, ONE EXAMPLE | ||||||
| 1234 | #WAS THE "JSFPR" SITE, FILLED WITH ASSIGNMENTS OF "'image/file.gif'", | ||||||
| 1235 | #WHICH WERE CONVERTED USING: | ||||||
| 1236 | # $html =~ s#([\'\"])images/#$1$main_htmlsubdir/images/#ig; | ||||||
| 1237 | |||||||
| 1238 | } | ||||||
| 1239 | |||||||
| 1240 | #NEXT LINE ADDED 20010720 TO SUPPORT EMBEDS (NON-PARSED INCLUDES). | ||||||
| 1241 | |||||||
| 1242 | # $$html =~ s#<\!EMBED\s+(.*?)>\s*#&fetchinclude($parms, $1, 0)#eigs | ||||||
| 1243 | # if ($cfgOps{embeds}); | ||||||
| 1244 | |||||||
| 1245 | #ABOVE CHANGED TO NEXT REGEX 20060117 TO ALLOW PARTIAL FILE INCLUDES BASED ON TAGS. | ||||||
| 1246 | 0 | 0 | $$html =~ s!<\!EMBED\s+(.*?)>\s*! | ||||
| 1247 | 0 | my $one = $1; | |||||
| 1248 | 0 | $one =~ s/^\"//o; | |||||
| 1249 | 0 | $one =~ s/\"\s*$//o; | |||||
| 1250 | 0 | my $tag = 0; | |||||
| 1251 | 0 | 0 | $tag = $1 if ($one =~ s/\:(\w+)//); | ||||
| 1252 | 0 | &fetchinclude($parms, $one, 0, $tag); | |||||
| 1253 | !eigs if ($cfgOps{embeds}); | ||||||
| 1254 | |||||||
| 1255 | 0 | return ($$html); | |||||
| 1256 | } | ||||||
| 1257 | |||||||
| 1258 | sub html_error | ||||||
| 1259 | { | ||||||
| 1260 | 0 | 0 | 0 | my ($mymsg) = shift; | |||
| 1261 | |||||||
| 1262 | 0 | return (< | |||||
| 1263 | |||||||
| 1264 | |
||||||
| 1265 | |||||||
| 1266 | $mymsg |
||||||
| 1267 | |
||||||
| 1268 | Please contact $poc for more information. | ||||||
| 1269 | |||||||
| 1270 | END_HTML | ||||||
| 1271 | } | ||||||
| 1272 | |||||||
| 1273 | sub SetHtmlHome | ||||||
| 1274 | { | ||||||
| 1275 | 0 | 0 | 0 | ($htmlhome, $roothtmlhome, $hrefhtmlhome, $hrefcase) = @_; | |||
| 1276 | |||||||
| 1277 | # hrefcase = undef: convert all "href=" to $hrefhtmlhome. | ||||||
| 1278 | # hrefcase = 'l': convert only "href=" to $hrefhtmlhome. | ||||||
| 1279 | # hrefcase = '~l': convert only "HREF=" to $hrefhtmlhome. | ||||||
| 1280 | } | ||||||
| 1281 | |||||||
| 1282 | sub loadhtml_package #ADDED 20000920 TO ALLOW EVALS IN ASP! | ||||||
| 1283 | { | ||||||
| 1284 | 0 | 0 | 0 | 0 | $calling_package = shift || 'main'; | ||
| 1285 | } | ||||||
| 1286 | |||||||
| 1287 | sub filedate #ADDED 20020327 | ||||||
| 1288 | { | ||||||
| 1289 | 0 | 0 | 0 | my $parms = shift; | |||
| 1290 | 0 | my $fmt = shift; | |||||
| 1291 | 0 | my $usetoday = shift; #ADDED 20030501 TO SUPPORT DISPLAYING CURRENT DATE! | |||||
| 1292 | |||||||
| 1293 | 0 | $fmt =~ s/^\=\s*//o; | |||||
| 1294 | 0 | $fmt =~ s/[\"\']//go; | |||||
| 1295 | 0 | $fmt =~ s/\:$//go; | |||||
| 1296 | 0 | 0 | $fmt ||= 'mm/dd/yy'; #SUPPLY A REASONABLE DEFAULT. | ||||
| 1297 | 0 | my $mtime = time; | |||||
| 1298 | 0 | 0 | (undef,undef,undef,undef,undef,undef,undef,undef,undef,undef,$mtime) | ||||
| 1299 | = stat ($parms->{'0'}) unless ($usetoday); | ||||||
| 1300 | 0 | 0 | $mtime ||= time; | ||||
| 1301 | |||||||
| 1302 | #to_char() comes from DBD::Sprite, but is usable as a stand-alone program and is optional. | ||||||
| 1303 | |||||||
| 1304 | 0 | my @parmsave = @_; | |||||
| 1305 | 0 | @_ = ($mtime, $fmt); | |||||
| 1306 | |||||||
| 1307 | 0 | eval "package $calling_package; require 'to_char.pl'"; | |||||
| 1308 | 0 | 0 | if ($@) | ||||
| 1309 | { | ||||||
| 1310 | 0 | @_ = @parmsave; | |||||
| 1311 | 0 | return scalar(localtime($mtime)); | |||||
| 1312 | } | ||||||
| 1313 | 0 | 0 | 0 | if (!$rtnTime || $err =~ /^Invalid/o) | |||
| 1314 | { | ||||||
| 1315 | #@_ = (time, 'mm/dd/yy'); | ||||||
| 1316 | #do 'to_char.pl'; | ||||||
| 1317 | 0 | my $qualified_fn = $calling_package . '::to_char'; | |||||
| 1318 | 1 | 1 | 7 | no strict 'refs'; | |||
| 1 | 1 | ||||||
| 1 | 81 | ||||||
| 1319 | 0 | return &{$qualified_fn}($mtime, $fmt); | |||||
| 0 | |||||||
| 1320 | } | ||||||
| 1321 | 0 | @_ = @parmsave; | |||||
| 1322 | 0 | return $rtnTime; | |||||
| 1323 | } | ||||||
| 1324 | |||||||
| 1325 | 1 |