#!/usr/bin/perl #!/usr/local/bin/perl -T ## --> Maximum Jammer Distance, jammin.cgi ## --> Green Bay Professional Packet Radio, www.gbppr.org ## This file Copyright 2003 under the GPL ## NO WARRANTY. Please send bug reports / patches / reports. # Setup # use Math::Complex; select STDOUT; $| = 1; my $pic = "pics/jammin.png"; # Print MIME # print "Content-type:text/html\n\n"; # Read environment # read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $FORM{$name} = $value; } my $pt = $FORM{'pt'}; my $pt_val = $FORM{'pt_val'}; my $ht = $FORM{'ht'}; my $ht_val = $FORM{'ht_val'}; my $dt = $FORM{'dt'}; my $dt_val = $FORM{'dt_val'}; my $hj = $FORM{'hj'}; my $hj_val = $FORM{'hj_val'}; my $pj = $FORM{'pj'}; my $pj_val = $FORM{'pj_val'}; my $n = $FORM{'n'}; # Clean up user input data # # Power # $pt =~ tr/0-9.-//csd; if ($pt == 0) { $pt = 0.001; } if ($pt_val eq "dBm") { $pt = 10 ** (($pt - 30) / 10); # dBm to W } $pt_w = sprintf "%.3f", $pt; $pt_dbm = sprintf "%.3f", (10 * log10($pt_w)) + 30; $pj =~ tr/0-9.-//csd; if ($pj == 0) { $pj = 0.001; } if ($pj_val eq "dBm") { $pj = 10 ** (($pj - 30) / 10); # dBm to W } $pj_w = sprintf "%.3f", $pj; $pj_dbm = sprintf "%.3f", (10 * log10($pj_w)) + 30; # Elevation # $ht =~ tr/0-9.//csd; if (!$ht) { $ht = 385; # 385 meters } if ($ht_val eq "feet") { $ht = $ht * 0.3048; # ft to m } $ht_m = sprintf "%.3f", $ht; $ht_ft = sprintf "%.3f", $ht * 3.2808399; $hj =~ tr/0-9.//csd; if (!$hj) { $hj = 386; # 386 meters } if ($hj_val eq "feet") { $hj = $hj * 0.3048; # ft to m } $hj_m = sprintf "%.3f", $hj; $hj_ft = sprintf "%.3f", $hj * 3.2808399; # Distance # $dt =~ tr/0-9.//csd; if (!$dt) { $dt = 9; # 9 kilometers } if ($dt_val eq "miles") { $dt = $dt * 1.609344; # mi to km } $dt_km = sprintf "%.3f", $dt; $dt_mi = sprintf "%.3f", $dt * 0.62137119; if ($n eq "Level terrain (over water, sea, lakes, and ponds) - good conductivity") { $nv = 2; } elsif ($n eq "Rolling hills (farmland type terrain) - good conductivity") { $nv = 3; } elsif ($n eq "Moderately rough terrain (rolling to high hills, forested farmland) - fair/good conductivity") { $nv = 4; } elsif ($n eq "Very rough terrain (rocky mountains or desert) - poor conductivity") { $nv = 5; } # Start calculations # $a = $pj_w / ($pt_w * 2 * (($ht_m / $hj_m) ** 2)); $dj = $dt_km * ($a ** (1 / $nv)); $dj_km = sprintf "%.3f", $dj; $dj_mi = sprintf "%.3f", $dj * 0.62137119; $nv = sprintf "%.2f", $nv; $date = scalar gmtime; # Draw me a web page # $g = ""; $r = ""; $b = ""; $e = ""; print < Maximum Jammer Distance Results

Maximum Jammer Distance Results


[jamdis]

              $r Power Output of the Enemy Transmitter : $e$pt_w$r Watts ($e$pt_dbm$r dBm) $e
 $r Elevation of the Enemy Transmitter Location (AMSL) : $e$ht_m$r meters ($e$ht_ft$r feet) $e
      $r Enemy Transmitter-to-Target Receiver Distance : $e$dt_km$r kilometers ($e$dt_mi$r miles) $e

$g Power Output of the Jammer Transmitter : $e$pj_w$g Watts ($e$pj_dbm$g dBm) $e $g Elevation of the Jammer Transmitter Location (AMSL) : $e$hj_m$g meters ($e$hj_ft$g feet) $e
$b Terrain and Ground Conductivity Factor : $e$nv $b Maximum Jammer Location-to-Target Receiver Distance : $e$dj_km$b kilometers ($e$dj_mi$b miles) $e

Calculated on $date GMT

EOF