Imported Debian patch 1.2.0-1 debian/1.2.0-1
authorBdale Garbee <bdale@gag.com>
Wed, 17 Jan 2007 00:19:44 +0000 (11:19 +1100)
committerBdale Garbee <bdale@gag.com>
Thu, 5 Jun 2008 23:33:49 +0000 (17:33 -0600)
13 files changed:
CHANGES
README
clean
debian/changelog
debian/rules
docs/man/splat.1
docs/man/splat.man
docs/pdf/splat.pdf
docs/postscript/splat.ps
docs/text/splat.txt
splat-1.1.1.lsm [deleted file]
splat-1.2.0.lsm [new file with mode: 0644]
splat.cpp

diff --git a/CHANGES b/CHANGES
index 59e41c67163ed5a8e39e13aac94cbfd16b5131d7..ff1365601eb2cb7b1ab02520ba5481721a20d8c5 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,74 @@
+Release 1.2.0:
+By John A. Magliacane, <kd2bd@amsat.org> (22-Dec-2006):
+
+* All graph plotting has been enhanced to include distances, azimuths,
+  and in some cases, elevation angles, in numeric form.  Height
+  plots (-h option) now include a contour of the Earth's curvature.
+  A new -H option was added that behaves the same as -h, except its
+  display of heights is normalized to the heights of the endpoints
+  along the plotted path.  Graphs now default to PNG rather than GIF
+  format to reflect gnuplot's current trend away from .gif output.
+  (.gif is still available if your version of gnuplot supports it.)
+  Postscript output is now generated in enhanced color.
+
+* SPLAT! can now determine and plot Fresnel Zone clearances.  A new
+  -f command-line option permits the Fresnel Zone frequency (in MHz)
+  to be specified, otherwise it can be determined from .lrp files when
+  path-loss calculations are performed.  Antenna height requirements
+  for 60% clearance (0.6 F1) and 100% clearance (F1) of the First
+  Fresnel Zone now appear in Obstruction Reports.  These zones are
+  also displayed graphically in height plots (-h or -H options).
+
+* Support for antenna radiation patterns has been added.  SPLAT! now
+  reads normalized azimuth and elevation antenna field pattern data
+  from separate .az and .el files when Longley-Rice studies are performed.
+  One degree azimuth and one tenth degree elevation pattern resolution
+  is supported along with azimuthal pattern rotation and mechanical
+  vertical beam tilt. 
+
+* A bug in the interpretation of the -n and -N command-line options
+  was fixed.
+
+* Negative geographical coordinates in DMS format are now (hopefully)
+  interpreted and displayed better than before.
+
+* SPLAT! data handling can be changed from imperial units (feet/miles)
+  to metric (meters/kilometers) units using the new -metric switch.
+
+* SPLAT! can now generate topographic maps without plotting
+  line-of-sight or path loss coverage.  These maps are centered
+  approximately on the given tx_site, extend out to a radius
+  provided by the -R switch, and can be populated with county
+  boundaries and city names, just like SPLAT!'s traditional
+  line-of-sight and path loss maps. 
+
+* Support for user-defined terrain files (ground clutter) has been
+  added.
+
+* SPLAT! can now generate .geo Georeference Information Files
+  when .ppm topography and coverage maps are created, permitting
+  the integration of SPLAT! generated maps with X Amateur Station
+  Tracking and Information Reporting (www.xastir.org) software.
+
+* SPLAT! can now generate .kml Keyhole Markup Language files that
+  when imported into "Google Map", dramatically illustrate the RF
+  path between transmitter and receiver locations when performing
+  point-to-point analyses.
+
+* Support for exporting Longley-Rice path loss contour studies to
+  external data files has been included.  SPLAT! path loss files can
+  be used for performing coverage or interference studies outside of
+  SPLAT!.  They can also be modified externally (with antenna pattern
+  data, for example) through scripts or small utilities, and imported
+  back into SPLAT! to generate coverage maps based on the revised
+  data without having to re-run any time intensive Longley-Rice path
+  loss calculations.
+
+* The documentation was updated to reflect the new features and
+  functionality of the software.
+  
+----------------------------------------------------------------------------
+
 Release 1.1.1:
 By John A. Magliacane, <kd2bd@amsat.org> (01-Apr-2006):
 
diff --git a/README b/README
index 09f6e00db4a64175e0f62256a993587f3607338d..cb612ac149f75aaced890b263085b946bafac819 100644 (file)
--- a/README
+++ b/README
@@ -14,7 +14,7 @@ Any recent version included with your Linux distribution should work
 fine.  Note, however, that zlib version 1.1.3 contains a security
 vulnerability that has been fixed in version 1.1.4.  The latest
 version of zlib may be found at: http://www.gzip.org/zlib/
-If you should decide to build zlib, don't forget to invoke:
+If you should decide to build zlib, it is important to invoke:
 
        ./configure -s
 
@@ -39,13 +39,13 @@ Unpack the tar.gz file in a source code directory (such as /usr/src
 under Slackware) as 'root':
 
        cd /usr/src
-       tar xvfz splat-1.1.1.tar.gz
+       tar xvfz splat-1.2.0.tar.gz
 
-This action will generate a subdirectory named splat-1.1.1. 
+This action will generate a subdirectory named splat-1.2.0.
 
 Next, cd into the directory:
 
-       cd splat-1.1.1
+       cd splat-1.2.0
 
 Invoke the configure script to build SPLAT! and related utilities:
 
@@ -61,7 +61,7 @@ will be prompted to su to 'root' and invoke the install script manually:
        exit
 
 Before running SPLAT!, carefully read the documentation located under
-the splat-1.1.1/docs directory for information on the use of the program.
+the splat-1.2.0/docs directory for information on the use of the program.
 
 REMEMBER: Topography data must be downloaded and SPLAT Data Files must
 be generated using the included srtm2sdf, postdownload, or usgs2sdf
@@ -91,7 +91,7 @@ $HOME/.splat_path file so SPLAT! can easily find them.
 Please read the README file under the utils directory for information
 on the utilities included with SPLAT!.
 
-Please read the documentation under the splat-1.1.1/docs directory,
+Please read the documentation under the splat-1.2.0/docs directory,
 or consult the program's man page for more information and examples
 of SPLAT! use.
 
@@ -102,5 +102,4 @@ can be found on the SPLAT! Web Site:
 
 --
 John A. Magliacane, KD2BD
-March 15, 2006
-
+December 20, 2006
diff --git a/clean b/clean
index e600f20deed8aea90b3e9ee363ab3d73f7b4234c..3db40c725cac8d9c8f3fc849bf77c72281ec9c9f 100755 (executable)
--- a/clean
+++ b/clean
@@ -2,5 +2,7 @@
 # Simple script to create a clean distribution
 #
 rm -f splat utils/fontdata utils/citydecoder utils/usgs2sdf utils/srtm2sdf
-echo "Done!"
+cd docs/man
+./docmaker
+cd ../../
 
index 13a1b4e8974ef801bb1150db5490ac6a5a661f91..b86dfa290eced306730886dca78fb6082a535f16 100644 (file)
@@ -1,3 +1,9 @@
+splat (1.2.0-1) unstable; urgency=low
+
+  * new upstream version
+
+ -- Bdale Garbee <bdale@gag.com>  Wed, 17 Jan 2007 11:19:44 +1100
+
 splat (1.1.1-2) unstable; urgency=low
 
   * drop the -march option on the g++ command line in the build script,
index c9fd5fcc4b3ea64242fe35556c00999e9aa7d0b3..50a6268d5f9f8c197aa7581acc5bce2634328af7 100755 (executable)
@@ -26,6 +26,7 @@ install: build
        cp splat $(CURDIR)/debian/splat/usr/bin
        cp utils/citydecoder $(CURDIR)/debian/splat/usr/bin
        cp utils/usgs2sdf $(CURDIR)/debian/splat/usr/bin
+       cp utils/srtm2sdf $(CURDIR)/debian/splat/usr/bin
        cp utils/fontdata $(CURDIR)/debian/splat/usr/bin
        cp docs/man/splat.man $(CURDIR)/debian/splat/usr/share/man/man1/splat.1
 
index 0c1c962b6cc2461cf6d95795347fa098bf863832..546907fcdc851cc5f721ca9f3b40fb4b5316b2d7 100644 (file)
@@ -7,77 +7,125 @@ N\bNA\bAM\bME\bE
        sis tool
 
 S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
-       splat [-t  _\bt_\br_\ba_\bn_\bs_\bm_\bi_\bt_\bt_\be_\br_\b__\bs_\bi_\bt_\be_\b._\bq_\bt_\bh]  [-r   _\br_\be_\bc_\be_\bi_\bv_\be_\br_\b__\bs_\bi_\bt_\be_\b._\bq_\bt_\bh]
-       [-c    _\br_\bx_\b__\ba_\bn_\bt_\be_\bn_\bn_\ba_\b__\bh_\be_\bi_\bg_\bh_\bt_\b__\bf_\bo_\br_\b__\bl_\bo_\bs_\b__\bc_\bo_\bv_\be_\br_\ba_\bg_\be_\b__\ba_\bn_\ba_\bl_\by_\bs_\bi_\bs  _\b(_\bf_\be_\be_\bt_\b)
-       _\b(_\bf_\bl_\bo_\ba_\bt_\b)]  [-L    _\br_\bx_\b__\ba_\bn_\bt_\be_\bn_\bn_\ba_\b__\bh_\be_\bi_\bg_\bh_\bt_\b__\bf_\bo_\br_\b__\bL_\bo_\bn_\bg_\bl_\be_\by_\b-_\bR_\bi_\bc_\be_\b__\bc_\bo_\bv_\be_\br_\b-
-       _\ba_\bg_\be_\b__\ba_\bn_\ba_\bl_\by_\bs_\bi_\bs _\b(_\bf_\be_\be_\bt_\b) _\b(_\bf_\bl_\bo_\ba_\bt_\b)] [-p  _\bt_\be_\br_\br_\ba_\bi_\bn_\b__\bp_\br_\bo_\bf_\bi_\bl_\be_\b._\be_\bx_\bt] [-e
-       _\be_\bl_\be_\bv_\ba_\bt_\bi_\bo_\bn_\b__\bp_\br_\bo_\bf_\bi_\bl_\be_\b._\be_\bx_\bt] [-h  _\bh_\be_\bi_\bg_\bh_\bt_\b__\bp_\br_\bo_\bf_\bi_\bl_\be_\b._\be_\bx_\bt] [-l  _\bL_\bo_\bn_\bg_\b-
-       _\bl_\be_\by_\b-_\bR_\bi_\bc_\be_\b__\bp_\br_\bo_\bf_\bi_\bl_\be_\b._\be_\bx_\bt]  [-o   _\bt_\bo_\bp_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc_\b__\bm_\ba_\bp_\b__\bf_\bi_\bl_\be_\bn_\ba_\bm_\be_\b._\bp_\bp_\bm]
-       [-b         _\bc_\ba_\br_\bt_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc_\b__\bb_\bo_\bu_\bn_\bd_\ba_\br_\by_\b__\bf_\bi_\bl_\be_\bn_\ba_\bm_\be_\b._\bd_\ba_\bt]        [-s
-       _\bs_\bi_\bt_\be_\b/_\bc_\bi_\bt_\by_\b__\bd_\ba_\bt_\ba_\bb_\ba_\bs_\be_\b._\bd_\ba_\bt]   [-d    _\bs_\bd_\bf_\b__\bd_\bi_\br_\be_\bc_\bt_\bo_\br_\by_\b__\bp_\ba_\bt_\bh]   [-m
-       _\be_\ba_\br_\bt_\bh_\b__\br_\ba_\bd_\bi_\bu_\bs_\b__\bm_\bu_\bl_\bt_\bi_\bp_\bl_\bi_\be_\br   _\b(_\bf_\bl_\bo_\ba_\bt_\b)]   [-R    _\bm_\ba_\bx_\bi_\bm_\bu_\bm_\b__\bc_\bo_\bv_\be_\br_\b-
-       _\ba_\bg_\be_\b__\br_\ba_\bn_\bg_\be  _\b(_\bf_\bo_\br  _\b-_\bc  _\bo_\br  _\b-_\bL_\b) _\b(_\bm_\bi_\bl_\be_\bs_\b) _\b(_\bf_\bl_\bo_\ba_\bt_\b)] [-dB _\bm_\ba_\bx_\bi_\bm_\bu_\bm
-       _\ba_\bt_\bt_\be_\bn_\bu_\ba_\bt_\bi_\bo_\bn _\bc_\bo_\bn_\bt_\bo_\bu_\br _\bt_\bo _\bd_\bi_\bs_\bp_\bl_\ba_\by _\bo_\bn _\bp_\ba_\bt_\bh _\bl_\bo_\bs_\bs  _\bm_\ba_\bp_\bs  _\b(_\b8_\b0_\b-_\b2_\b3_\b0
-       _\bd_\bB_\b)] [-n] [-N]
+       splat [-t   _\bt_\br_\ba_\bn_\bs_\bm_\bi_\bt_\bt_\be_\br_\b__\bs_\bi_\bt_\be_\b._\bq_\bt_\bh]  [-r  _\br_\be_\bc_\be_\bi_\bv_\be_\br_\b__\bs_\bi_\bt_\be_\b._\bq_\bt_\bh]
+       [-c   _\br_\bx   _\ba_\bn_\bt_\be_\bn_\bn_\ba   _\bh_\be_\bi_\bg_\bh_\bt   _\bf_\bo_\br  _\bL_\bO_\bS  _\bc_\bo_\bv_\be_\br_\ba_\bg_\be  _\ba_\bn_\ba_\bl_\by_\bs_\bi_\bs
+       _\b(_\bf_\be_\be_\bt_\b/_\bm_\be_\bt_\be_\br_\bs_\b) _\b(_\bf_\bl_\bo_\ba_\bt_\b)] [-L _\br_\bx _\ba_\bn_\bt_\be_\bn_\bn_\ba _\bh_\be_\bi_\bg_\bh_\bt _\bf_\bo_\br  _\bL_\bo_\bn_\bg_\bl_\be_\by_\b-
+       _\bR_\bi_\bc_\be  _\bc_\bo_\bv_\be_\br_\ba_\bg_\be  _\ba_\bn_\ba_\bl_\by_\bs_\bi_\bs  _\b(_\bf_\be_\be_\bt_\b/_\bm_\be_\bt_\be_\br_\bs_\b)  _\b(_\bf_\bl_\bo_\ba_\bt_\b)] [-p _\bt_\be_\br_\b-
+       _\br_\ba_\bi_\bn_\b__\bp_\br_\bo_\bf_\bi_\bl_\be_\b._\be_\bx_\bt]    [-e    _\be_\bl_\be_\bv_\ba_\bt_\bi_\bo_\bn_\b__\bp_\br_\bo_\bf_\bi_\bl_\be_\b._\be_\bx_\bt]     [-h
+       _\bh_\be_\bi_\bg_\bh_\bt_\b__\bp_\br_\bo_\bf_\bi_\bl_\be_\b._\be_\bx_\bt] [-H _\bn_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be_\bd_\b__\bh_\be_\bi_\bg_\bh_\bt_\b__\bp_\br_\bo_\bf_\bi_\bl_\be_\b._\be_\bx_\bt] [-l
+       _\bL_\bo_\bn_\bg_\bl_\be_\by_\b-_\bR_\bi_\bc_\be_\b__\bp_\br_\bo_\bf_\bi_\bl_\be_\b._\be_\bx_\bt]    [-o     _\bt_\bo_\bp_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc_\b__\bm_\ba_\bp_\b__\bf_\bi_\bl_\be_\b-
+       _\bn_\ba_\bm_\be_\b._\bp_\bp_\bm]   [-b   _\bc_\ba_\br_\bt_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc_\b__\bb_\bo_\bu_\bn_\bd_\ba_\br_\by_\b__\bf_\bi_\bl_\be_\bn_\ba_\bm_\be_\b._\bd_\ba_\bt]  [-s
+       _\bs_\bi_\bt_\be_\b/_\bc_\bi_\bt_\by_\b__\bd_\ba_\bt_\ba_\bb_\ba_\bs_\be_\b._\bd_\ba_\bt] [-d _\bs_\bd_\bf_\b__\bd_\bi_\br_\be_\bc_\bt_\bo_\br_\by_\b__\bp_\ba_\bt_\bh] [-m  _\be_\ba_\br_\bt_\bh
+       _\br_\ba_\bd_\bi_\bu_\bs _\bm_\bu_\bl_\bt_\bi_\bp_\bl_\bi_\be_\br _\b(_\bf_\bl_\bo_\ba_\bt_\b)] [-f _\bf_\br_\be_\bq_\bu_\be_\bn_\bc_\by _\b(_\bM_\bH_\bz_\b) _\bf_\bo_\br _\bF_\br_\be_\bs_\bn_\be_\bl
+       _\bz_\bo_\bn_\be _\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bs _\b(_\bf_\bl_\bo_\ba_\bt_\b)]  [-R  _\bm_\ba_\bx_\bi_\bm_\bu_\bm  _\bc_\bo_\bv_\be_\br_\ba_\bg_\be  _\br_\ba_\bd_\bi_\bu_\bs
+       _\b(_\bm_\bi_\bl_\be_\bs_\b/_\bk_\bi_\bl_\bo_\bm_\be_\bt_\be_\br_\bs_\b)  _\b(_\bf_\bl_\bo_\ba_\bt_\b)] [-dB _\bm_\ba_\bx_\bi_\bm_\bu_\bm _\ba_\bt_\bt_\be_\bn_\bu_\ba_\bt_\bi_\bo_\bn _\bc_\bo_\bn_\b-
+       _\bt_\bo_\bu_\br _\bt_\bo _\bd_\bi_\bs_\bp_\bl_\ba_\by _\bo_\bn _\bp_\ba_\bt_\bh _\bl_\bo_\bs_\bs _\bm_\ba_\bp_\bs _\b(_\b8_\b0_\b-_\b2_\b3_\b0 _\bd_\bB_\b)] [-nf _\bd_\bo _\bn_\bo_\bt
+       _\bp_\bl_\bo_\bt  _\bF_\br_\be_\bs_\bn_\be_\bl  _\bz_\bo_\bn_\be_\bs _\bi_\bn _\bh_\be_\bi_\bg_\bh_\bt _\bp_\bl_\bo_\bt_\bs] [-plo _\bp_\ba_\bt_\bh_\b__\bl_\bo_\bs_\bs_\b__\bo_\bu_\bt_\b-
+       _\bp_\bu_\bt_\b__\bf_\bi_\bl_\be_\b._\bt_\bx_\bt]   [-pli   _\bp_\ba_\bt_\bh_\b__\bl_\bo_\bs_\bs_\b__\bi_\bn_\bp_\bu_\bt_\b__\bf_\bi_\bl_\be_\b._\bt_\bx_\bt]    [-udt
+       _\bu_\bs_\be_\br_\b__\bd_\be_\bf_\bi_\bn_\be_\bd_\b__\bt_\be_\br_\br_\ba_\bi_\bn_\b__\bf_\bi_\bl_\be_\b._\bd_\ba_\bt]  [-n]  [-N]  [-geo]  [-kml]
+       [-metric]
 
 D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
-       S\bSP\bPL\bLA\bAT\bT!\b is  a powerful terrestrial RF propagation and ter-
-       rain analysis tool covering the spectrum  between  20  MHz
-       and  20  GHz.   It  is  designed for operation on Unix and
-       Linux-based  workstations.   S\bSP\bPL\bLA\bAT\bT!\b!  is   free   software.
-       Redistribution  and/or modification is permitted under the
-       terms of the GNU General Public License  as  published  by
-       the  Free  Software  Foundation,  either  version 2 of the
-       License or any later version.  Adoption of  S\bSP\bPL\bLA\bAT\bT!\b!  source
-       code  in  proprietary  or  closed-source applications is a
-       violation of this license, and is s\bst\btr\bri\bic\bct\btl\bly\by forbidden.
-
-       S\bSP\bPL\bLA\bAT\bT!\bis distributed in the hope that it will be  useful,
-       but  WITHOUT  ANY  WARRANTY, without even the implied war-
-       ranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR  PUR-
+       S\bSP\bPL\bLA\bAT\bT!\bis a powerful terrestrial RF propagation  and  ter-
+       rain  analysis  tool  covering the spectrum between 20 MHz
+       and 20 GHz.  S\bSP\bPL\bLA\bAT\bT!\b! is free software, and is designed  for
+       operation on Unix and Linux-based workstations.  Redistri-
+       bution and/or modification is permitted under the terms of
+       the  GNU  General  Public License as published by the Free
+       Software Foundation, either version 2 of  the  License  or
+       any later version.  Adoption of S\bSP\bPL\bLA\bAT\bT!\b! source code in pro-
+       prietary or closed-source applications is a  violation  of
+       this license, and is s\bst\btr\bri\bic\bct\btl\bly\by forbidden.
+
+       S\bSP\bPL\bLA\bAT\bT!\b is distributed in the hope that it will be useful,
+       but WITHOUT ANY WARRANTY, without even  the  implied  war-
+       ranty  of MERCHANTABILITY or FITNESS FOR A PARTICULAR PUR-
        POSE. See the GNU General Public License for more details.
 
 I\bIN\bNT\bTR\bRO\bOD\bDU\bUC\bCT\bTI\bIO\bON\bN
-       Applications of S\bSP\bPL\bLA\bAT\bT!\b! include the visualization,  design,
-       and  link  budget  analysis of wireless Wide Area Networks
+       Applications  of S\bSP\bPL\bLA\bAT\bT!\b! include the visualization, design,
+       and link budget analysis of wireless  Wide  Area  Networks
        (WANs), commercial and amateur radio communication systems
-       above 20 MHz, microwave links, frequency coordination, and
-       the determination of analog and digital terrestrial  radio
-       and television contour regions.
+       above 20 MHz, microwave links, frequency coordination  and
+       interference  studies, and the determination of analog and
+       digital terrestrial radio and television contour  regions.
 
        S\bSP\bPL\bLA\bAT\bT!\b!  provides  RF  site  engineering data such as great
        circle distances and bearings between sites, antenna  ele-
        vation  angles  (uptilt),  depression  angles  (downtilt),
        antenna height above mean sea level, antenna height  above
        average  terrain, bearings and distances to known obstruc-
-       tions, Longley-Rice path attenuation, and minimum  antenna
-       height requirements needed to establish line-of-sight com-
-       munication paths absent of obstructions  due  to  terrain.
-       S\bSP\bPL\bLA\bAT\bT!\b!  produces  reports, graphs, and highly detailed and
-       carefully annotated topographic  maps  depicting  line-of-
-       sight  paths,  path  loss,  and expected coverage areas of
-       transmitters and repeater systems.  When performing  line-
-       of-sight analysis in situations where multiple transmitter
-       or repeater sites are employed, S\bSP\bPL\bLA\bAT\bT!\b! determines individ-
-       ual and mutual areas of coverage within the network speci-
-       fied.
+       tions, and Longley-Rice path  attenuation.   In  addition,
+       the  minimum  antenna  height requirements needed to clear
+       terrain, the first Fresnel zone,  and  60%  of  the  first
+       Fresnel zone are also provided.
+
+       S\bSP\bPL\bLA\bAT\bT!\b! produces reports, graphs, and high resolution topo-
+       graphic maps that depict line-of-sight paths, and regional
+       path  loss  contours through which expected coverage areas
+       of transmitters and  repeater  systems  can  be  obtained.
+       When performing line-of-sight analysis in situations where
+       multiple  transmitter  or  repeater  sites  are  employed,
+       S\bSP\bPL\bLA\bAT\bT!\b!  determines individual and mutual areas of coverage
+       within the network specified.
+
+       Simply typing splat on the command line will return a sum-
+       mary of S\bSP\bPL\bLA\bAT\bT!\b!'s command line options:
+
+                      --==[  SPLAT!  v1.2.0  Available Options...
+       ]==--
+
+             -t txsite(s).qth (max of 4)
+             -r rxsite.qth
+             -c plot coverage of TX(s) with an RX  antenna  at  X
+       feet/meters AGL
+             -L  plot  path  loss  map  of TX based on an RX at X
+       feet/meters AGL
+             -s filename(s) of city/site file(s) to  import  (max
+       of 5)
+             -b  filename(s)  of cartographic boundary file(s) to
+       import (5 max)
+             -p filename of terrain profile graph to plot
+             -e filename of terrain elevation graph to plot
+             -h filename of terrain height graph to plot
+             -H filename of normalized terrain  height  graph  to
+       plot
+             -l filename of Longley-Rice graph to plot
+             -o filename of topographic map to generate (.ppm)
+             -u filename of user-defined terrain file to import
+             -d  sdf  file  directory  path  (overrides  path  in
+       ~/.splat_path file)
+             -n no analysis, brief report
+             -N no analysis, no report
+             -m earth radius multiplier
+             -f frequency for Fresnel zone calculation (MHz)
+             -R modify default range for -c or -L  (miles/kilome-
+       ters)
+            -db maximum loss contour to display on path loss maps
+       (80-230 dB)
+            -nf do not plot Fresnel zones in height plots
+           -plo filename of path-loss output file
+           -pli filename of path-loss input file
+           -udt filename of user defined terrain input file
+           -geo generate a .geo georeference file (with .ppm out-
+       put)
+           -kml  generate a Google Earth .kml file (for point-to-
+       point links)
+        -metric employ metric rather than imperial units for  all
+       user I/O
 
-       S\bSP\bPL\bLA\bAT\bT!\b! operates  in  two  distinct  modes:  _\bp_\bo_\bi_\bn_\bt_\b-_\bt_\bo_\b-_\bp_\bo_\bi_\bn_\bt
-       _\bm_\bo_\bd_\be,  and  _\ba_\br_\be_\ba _\bp_\br_\be_\bd_\bi_\bc_\bt_\bi_\bo_\bn _\bm_\bo_\bd_\be, and may be invoked using
-       either line-of-sight  (LOS)  or  Irregular  Terrain  (ITM)
-       propagation models.  True Earth, four-thirds Earth, or any
-       other Earth radius may be specified by the user when  per-
-       forming line-of-sight analysis.
 
 I\bIN\bNP\bPU\bUT\bT F\bFI\bIL\bLE\bES\bS
        S\bSP\bPL\bLA\bAT\bT!\b!  is  a  command-line  driven application, and reads
        input data through a number of data files.  Some files are
        mandatory  for  successful execution of the program, while
-       others are optional.  Mandatory files include  SPLAT  Data
-       Files  (SDF  files),  site location files (QTH files), and
-       Longley-Rice model parameter files (LRP files).   Optional
-       files  include  city/site location files, and cartographic
-       boundary files.
+       others are optional.  Mandatory files include 3-arc second
+       topography  models  in  the  form of SPLAT Data Files (SDF
+       files), site location files (QTH files), and  Longley-Rice
+       model parameter files (LRP files).  Optional files include
+       city location files, cartographic  boundary  files,  user-
+       defined  terrain files, path-loss input files, and antenna
+       radiation pattern files.
 
 S\bSP\bPL\bLA\bAT\bT D\bDA\bAT\bTA\bA F\bFI\bIL\bLE\bES\bS
        S\bSP\bPL\bLA\bAT\bT!\b! imports topographic data in the form of SPLAT  Data
@@ -89,63 +137,64 @@ S\bSP\bPL\bLA\bAT\bT D\bDA\bAT\bTA\bA F\bFI\bIL\bLE\bES\bS
        patible  with  this  utility  may  be   downloaded   from:
        _\bh_\bt_\bt_\bp_\b:_\b/_\b/_\be_\bd_\bc_\bf_\bt_\bp_\b._\bc_\br_\b._\bu_\bs_\bg_\bs_\b._\bg_\bo_\bv_\b/_\bp_\bu_\bb_\b/_\bd_\ba_\bt_\ba_\b/_\bD_\bE_\bM_\b/_\b2_\b5_\b0_\b/.
 
-       Significantly  better  resolution  can be obtained through
-       the use of SRTM-3  Version  2  digital  elevation  models.
-       These  models  are  the result of the STS-99 Space Shuttle
-       Radar Topography Mission, and are available for most popu-
-       lated  regions of the Earth.  SPLAT Data Files may be gen-
-       erated from SRTM data using the included s\bsr\brt\btm\bm2\b2s\bsd\bdf\bf utility.
-       SRTM-3  Version  2  data may be obtained through anonymous
-       FTP from: _\bf_\bt_\bp_\b:_\b/_\b/_\be_\b0_\bs_\br_\bp_\b0_\b1_\bu_\b._\be_\bc_\bs_\b._\bn_\ba_\bs_\ba_\b._\bg_\bo_\bv_\b:_\b2_\b1_\b/_\bs_\br_\bt_\bm_\b/_\bv_\be_\br_\bs_\bi_\bo_\bn_\b2_\b/
-
-       Despite the higher accuracy that SRTM data has  to  offer,
-       some  voids  in  the  data  sets  exist.   When  voids are
-       detected, the s\bsr\brt\btm\bm2\b2s\bsd\bdf\bf utility replaces them  with  corre-
-       sponding  data found in existing SDF files (that were pre-
-       sumably  created  from  earlier  USGS  data  through   the
+       Significantly   better  resolution  and  accuracy  can  be
+       obtained through the use of SRTM-3 Version 2 digital  ele-
+       vation models.  These models are the product of the STS-99
+       Space Shuttle Radar Topography Mission, and are  available
+       for most populated regions of the Earth.  SPLAT Data Files
+       may  be  generated  from  SRTM  data  using  the  included
+       s\bsr\brt\btm\bm2\b2s\bsd\bdf\bf  utility.   SRTM-3 Version 2 data may be obtained
+       through           anonymous           FTP            from:
+       _\bf_\bt_\bp_\b:_\b/_\b/_\be_\b0_\bs_\br_\bp_\b0_\b1_\bu_\b._\be_\bc_\bs_\b._\bn_\ba_\bs_\ba_\b._\bg_\bo_\bv_\b:_\b2_\b1_\b/_\bs_\br_\bt_\bm_\b/_\bv_\be_\br_\bs_\bi_\bo_\bn_\b2_\b/
+
+       Despite  the  higher accuracy that SRTM data has to offer,
+       some voids  in  the  data  sets  exist.   When  voids  are
+       detected,  the  s\bsr\brt\btm\bm2\b2s\bsd\bdf\bf utility replaces them with corre-
+       sponding data found in existing SDF files (that were  pre-
+       sumably   created  from  earlier  USGS  data  through  the
        u\bus\bsg\bgs\bs2\b2s\bsd\bdf\bf utility).  If USGS-derived SDF data is not avail-
-       able, voids are handled through adjacent pixel  averaging,
+       able,  voids are handled through adjacent pixel averaging,
        or direct replacement.
 
-       SPLAT  Data Files contain integer value topographic eleva-
+       SPLAT Data Files contain integer value topographic  eleva-
        tions  (in  meters)  referenced  to  mean  sea  level  for
-       1-degree  by  1-degree regions of the earth with a resolu-
-       tion of 3-arc seconds.  SDF files can be  read  in  either
-       standard  format  (_\b._\bs_\bd_\bf)  as generated by the u\bus\bsg\bgs\bs2\b2s\bsd\bdf\bf and
-       s\bsr\brt\btm\bm2\b2s\bsd\bdf\bf  utilities,  or  in   bzip2   compressed   format
-       (_\b._\bs_\bd_\bf_\b._\bb_\bz_\b2).   Since  uncompressed  files  can be processed
-       slightly faster than  files  that  have  been  compressed,
-       S\bSP\bPL\bLA\bAT\bT!\b searches  for  the needed SDF data in uncompressed
-       format first.  If uncompressed data cannot located, S\bSP\bPL\bLA\bAT\bT!\b!
-       then  searches for data in bzip2 compressed format.  If no
-       compressed  SDF  files  can  be  found  for   the   region
-       requested,  S\bSP\bPL\bLA\bAT\bT!\b!  assumes  the region is over water, and
+       1-degree by 1-degree regions of the earth with  a  resolu-
+       tion  of  3-arc  seconds.  SDF files can be read in either
+       standard format (_\b._\bs_\bd_\bf) as generated by  the  u\bus\bsg\bgs\bs2\b2s\bsd\bdf\b and
+       s\bsr\brt\btm\bm2\b2s\bsd\bdf\bf   utilities,   or   in  bzip2  compressed  format
+       (_\b._\bs_\bd_\bf_\b._\bb_\bz_\b2).  Since uncompressed  files  can  be  processed
+       slightly  faster  than  files  that  have been compressed,
+       S\bSP\bPL\bLA\bAT\bT!\bsearches for needed SDF data in uncompressed format
+       first.   If  uncompressed  data  cannot be located, S\bSP\bPL\bLA\bAT\bT!\b!
+       then searches for data in bzip2 compressed format.  If  no
+       compressed   SDF   files  can  be  found  for  the  region
+       requested, S\bSP\bPL\bLA\bAT\bT!\b! assumes the region is  over  water,  and
        will assign an elevation of sea-level to these areas.
 
-       This feature of S\bSP\bPL\bLA\bAT\bT!\b! makes it possible to  perform  path
-       analysis  not  only  over  land,  but also between coastal
-       areas not represented by  Digital  Elevation  Model  data.
-       This behavior of S\bSP\bPL\bLA\bAT\bT!\b! underscores the importance of hav-
-       ing all the SDF files required for the region  being  ana-
-       lyzed if meaningful results are to be expected.
+       This  feature  of S\bSP\bPL\bLA\bAT\bT!\b! makes it possible to perform path
+       analysis not only over  land,  but  also  between  coastal
+       areas  not  represented  by  Digital Elevation Model data.
+       However, this behavior of S\bSP\bPL\bLA\bAT\bT!\b!  underscores  the  impor-
+       tance  of having all the SDF files required for the region
+       being analyzed if meaningful results are to be expected.
 
 S\bSI\bIT\bTE\bE L\bLO\bOC\bCA\bAT\bTI\bIO\bON\bN (\b(Q\bQT\bTH\bH)\b) F\bFI\bIL\bLE\bES\bS
-       S\bSP\bPL\bLA\bAT\bT!\b imports  site  location information of transmitter
-       and receiver sites analyzed  by  the  program  from  ASCII
-       files  having  a  _\b._\bq_\bt_\bh  extension.   QTH files contain the
+       S\bSP\bPL\bLA\bAT\bT!\bimports site location  information  of  transmitter
+       and  receiver  sites  analyzed  by  the program from ASCII
+       files having a _\b._\bq_\bt_\bh  extension.   QTH  files  contain  the
        site's name, the site's latitude (positive if North of the
-       equator,  negative  if  South),  the  site's longitude (in
-       degrees West, 0 to 360 degrees), and  the  site's  antenna
-       height above ground level (AGL).  A single line-feed char-
-       acter separates each field.  The antenna height is assumed
-       to be specified in feet unless followed by the letter _\bm or
-       the word _\bm_\be_\bt_\be_\br_\bs in either upper or lower  case.   Latitude
+       equator, negative if  South),  the  site's  longitude  (in
+       degrees  West,  0  to 360 degrees), and the site's antenna
+       height above ground level (AGL), each separated by a  sin-
+       gle line-feed character.  The antenna height is assumed to
+       be specified in feet unless followed by the  letter  _\b or
+       the  word  _\bm_\be_\bt_\be_\br_\bs in either upper or lower case.  Latitude
        and longitude information may be expressed in either deci-
-       mal format (74.6889) or degree, minute, second (DMS)  for-
+       mal  format (74.6889) or degree, minute, second (DMS) for-
        mat (74 41 20.0).
 
-       For  example,  a  site location file describing television
-       station WNJT, Trenton, NJ (_\bw_\bn_\bj_\bt_\b._\bq_\bt_\bh) might  read  as  fol-
+       For example, a site location  file  describing  television
+       station  WNJT,  Trenton,  NJ (_\bw_\bn_\bj_\bt_\b._\bq_\bt_\bh) might read as fol-
        lows:
 
                WNJT
@@ -157,12 +206,11 @@ S\bSI\bIT\bTE\bE L\bLO\bOC\bCA\bAT\bTI\bIO\bON\bN (\b(Q\bQT\bTH\bH)\b) F\bFI\bIL\bLE\bES\bS
        be represented by its own site location (QTH) file.
 
 L\bLO\bON\bNG\bGL\bLE\bEY\bY-\b-R\bRI\bIC\bCE\bE P\bPA\bAR\bRA\bAM\bME\bET\bTE\bER\bR (\b(L\bLR\bRP\bP)\b) F\bFI\bIL\bLE\bES\bS
-       S\bSP\bPL\bLA\bAT\bT!\b! imports  Longley-Rice  model  parameter  data  from
-       files  having  the  same base name as the transmitter site
-       QTH file, but with a _\b._\bl_\br_\bp extension, thus providing simple
-       and  accurate  correlation  between  these associated data
-       sets.  The format for  the  Longley-Rice  model  parameter
-       files is as follows (_\bw_\bn_\bj_\bt_\b._\bl_\br_\bp):
+       Longley-Rice  parameter data files are required for S\bSP\bPL\bLA\bAT\bT!\b!
+       to determine RF path loss in either point-to-point or area
+       prediction  mode.   Longley-Rice  model  parameter data is
+       read from files having the same base name as the transmit-
+       ter site QTH file, but with a format (_\bw_\bn_\bj_\bt_\b._\bl_\br_\bp):
 
                15.000  ; Earth Dielectric Constant (Relative per-
        mittivity)
@@ -221,10 +269,10 @@ L\bLO\bON\bNG\bGL\bLE\bEY\bY-\b-R\bRI\bIC\bCE\bE P\bPA\bAR\bRA\bAM\bME\bET\bTE\bER\bR (\b(L\bLR\bRP\bP)\b)
        the  statistical  analysis  provided  by  the Longley-Rice
        model.  In this example, S\bSP\bPL\bLA\bAT\bT!\b!  will return  the  maximum
        path  loss occurring 50% of the time (fraction of time) in
-       50% of situations (fraction of situations).  Use  a  frac-
-       tion  of  time  parameter  of 0.97 for digital television,
-       0.50 for analog in the United States.  Isotropic  antennas
-       are assumed.
+       50% of situations (fraction of situations).  In the United
+       States, use a fraction of time parameter of 0.97 for digi-
+       tal television (8VSB modulation), or 0.50 for analog (VSB-
+       AM+NTSC) transmissions.
 
        For   further   information   on  these  parameters,  see:
        _\bh_\bt_\bt_\bp_\b:_\b/_\b/_\bf_\bl_\ba_\bt_\bt_\bo_\bp_\b._\bi_\bt_\bs_\b._\bb_\bl_\bd_\br_\bd_\bo_\bc_\b._\bg_\bo_\bv_\b/_\bi_\bt_\bm_\b._\bh_\bt_\bm_\bl                and
@@ -236,12 +284,12 @@ C\bCI\bIT\bTY\bY L\bLO\bOC\bCA\bAT\bTI\bIO\bON\bN F\bFI\bIL\bLE\bES\bS
        points  of  interest  may be imported and plotted on topo-
        graphic maps generated  by  S\bSP\bPL\bLA\bAT\bT!\b!.   S\bSP\bPL\bLA\bAT\bT!\b!  imports  the
        names  of cities and locations from ASCII files containing
-       the location's name,  the  location's  latitude,  and  the
-       location's longitude.  Each field is separated by a comma.
-       Each record is separated by a single line feed  character.
-       As  was  the case with the _\b._\bq_\bt_\bh files, latitude and longi-
-       tude information may  be  entered  in  either  decimal  or
-       degree, minute, second (DMS) format.
+       the location of interest's name, latitude, and  longitude.
+       Each  field is separated by a comma.  Each record is sepa-
+       rated by a single line feed character.  As  was  the  case
+       with  the  _\b._\bq_\bt_\bh  files, latitude and longitude information
+       may be entered in either decimal or degree, minute, second
+       (DMS) format.
 
        For example (_\bc_\bi_\bt_\bi_\be_\bs_\b._\bd_\ba_\bt):
 
@@ -257,13 +305,13 @@ C\bCI\bIT\bTY\bY L\bLO\bOC\bCA\bAT\bTI\bIO\bON\bN F\bFI\bIL\bLE\bES\bS
        at a time, and there is no limit  to  the  size  of  these
        files.   S\bSP\bPL\bLA\bAT\bT!\b!  reads  city  data  on a "first come/first
        served" basis, and plots only those locations whose  anno-
-       tations  do  not  conflict  with  annotations of locations
-       plotted earlier during S\bSP\bPL\bLA\bAT\bT's execution.   This  behavior
-       minimizes  clutter  in  S\bSP\bPL\bLA\bAT\bT!\b! generated topographic maps,
-       but also  mandates  that  important  locations  be  placed
-       toward  the  beginning  of  the  first city data file, and
-       disposable locations be positioned further down  the  list
-       or in subsequent data files.
+       tations do not conflict with annotations of locations read
+       earlier in the current city  data  file,  or  in  previous
+       files.   This  behavior minimizes clutter in S\bSP\bPL\bLA\bAT\bT!\b! gener-
+       ated topographic maps, but also  mandates  that  important
+       locations be placed toward the beginning of the first city
+       data file, and locations less important be positioned fur-
+       ther down the list or in subsequent data files.
 
        City  data  files may be generated manually using any text
        editor, imported from other sources, or derived from  data
@@ -279,141 +327,175 @@ C\bCA\bAR\bRT\bTO\bOG\bGR\bRA\bAP\bPH\bHI\bIC\bC B\bBO\bOU\bUN\bND\bDA\bAR\bRY\bY D\bDA\bAT\bTA\bA F\bFI\b
        graphic  maps  generated  by S\bSP\bPL\bLA\bAT\bT!\b!.  Such data must be of
        the form of ARC/INFO Ungenerate  (ASCII  Format)  Metadata
        Cartographic  Boundary  Files,  and are available from the
-       U.S.  Census Bureau via the Internet  at:  _\bh_\bt_\bt_\bp_\b:_\b/_\b/_\bw_\bw_\bw_\b._\bc_\be_\bn_\b-
-       _\bs_\bu_\bs_\b._\bg_\bo_\bv_\b/_\bg_\be_\bo_\b/_\bw_\bw_\bw_\b/_\bc_\bo_\bb_\b/_\bc_\bo_\b2_\b0_\b0_\b0_\b._\bh_\bt_\bm_\bl_\b#_\ba_\bs_\bc_\bi_\bi  and _\bh_\bt_\bt_\bp_\b:_\b/_\b/_\bw_\bw_\bw_\b._\bc_\be_\bn_\b-
-       _\bs_\bu_\bs_\b._\bg_\bo_\bv_\b/_\bg_\be_\bo_\b/_\bw_\bw_\bw_\b/_\bc_\bo_\bb_\b/_\bp_\bl_\b2_\b0_\b0_\b0_\b._\bh_\bt_\bm_\bl_\b#_\ba_\bs_\bc_\bi_\bi.  A  total  of  five
-       separate  cartographic boundary files may be imported at a
-       time.  It is not necessary to import state  boundaries  if
-       county boundaries have already been imported.
+       U.S.     Census    Bureau    via    the    Internet    at:
+       _\bh_\bt_\bt_\bp_\b:_\b/_\b/_\bw_\bw_\bw_\b._\bc_\be_\bn_\bs_\bu_\bs_\b._\bg_\bo_\bv_\b/_\bg_\be_\bo_\b/_\bw_\bw_\bw_\b/_\bc_\bo_\bb_\b/_\bc_\bo_\b2_\b0_\b0_\b0_\b._\bh_\bt_\bm_\bl_\b#_\ba_\bs_\bc_\bi_\bi    and
+       _\bh_\bt_\bt_\bp_\b:_\b/_\b/_\bw_\bw_\bw_\b._\bc_\be_\bn_\bs_\bu_\bs_\b._\bg_\bo_\bv_\b/_\bg_\be_\bo_\b/_\bw_\bw_\bw_\b/_\bc_\bo_\bb_\b/_\bp_\bl_\b2_\b0_\b0_\b0_\b._\bh_\bt_\bm_\bl_\b#_\ba_\bs_\bc_\bi_\bi.     A
+       total  of five separate cartographic boundary files may be
+       imported at a time.  It is not necessary to  import  state
+       boundaries   if   county   boundaries  have  already  been
+       imported.
 
 P\bPR\bRO\bOG\bGR\bRA\bAM\bM O\bOP\bPE\bER\bRA\bAT\bTI\bIO\bON\bN
-       S\bSP\bPL\bLA\bAT\bT!\b is  invoked via the command-line using a series of
-       switches and arguments.  Since S\bSP\bPL\bLA\bAT\bT!\b! is a CPU and  memory
-       intensive  application,  this  type of interface minimizes
-       overhead and lends itself well to scripted (batch)  opera-
+       S\bSP\bPL\bLA\bAT\bT!\bis invoked via the command-line using a  series  of
+       switches  and arguments.  Since S\bSP\bPL\bLA\bAT\bT!\b! is a CPU and memory
+       intensive application, this type  of  interface  minimizes
+       overhead  and lends itself well to scripted (batch) opera-
        tions.  S\bSP\bPL\bLA\bAT\bT!\b!'s CPU and memory scheduling priority may be
        modified through the use of the Unix n\bni\bic\bce\be command.
 
        The number and type of switches passed to S\bSP\bPL\bLA\bAT\bT!\b! determine
-       its  mode  of  operation and method of output data genera-
-       tion.  Nearly all of S\bSP\bPL\bLA\bAT\bT!\b!'s switches may be cascaded  in
+       its mode of operation and method of  output  data  genera-
+       tion.   Nearly all of S\bSP\bPL\bLA\bAT\bT!\b!'s switches may be cascaded in
        any order on the command line when invoking the program.
 
+       S\bSP\bPL\bLA\bAT\bT!\b! operates  in  two  distinct  modes:  _\bp_\bo_\bi_\bn_\bt_\b-_\bt_\bo_\b-_\bp_\bo_\bi_\bn_\bt
+       _\bm_\bo_\bd_\be,  and  _\ba_\br_\be_\ba  _\bp_\br_\be_\bd_\bi_\bc_\bt_\bi_\bo_\bn _\bm_\bo_\bd_\be.  Either a line-of-sight
+       (LOS) or Longley-Rice Irregular Terrain (ITM)  propagation
+       model may be invoked by the user.  True Earth, four-thirds
+       Earth, or any other user-defined Earth radius may be spec-
+       ified when performing line-of-sight analysis.
+
 P\bPO\bOI\bIN\bNT\bT-\b-T\bTO\bO-\b-P\bPO\bOI\bIN\bNT\bT A\bAN\bNA\bAL\bLY\bYS\bSI\bIS\bS
        S\bSP\bPL\bLA\bAT\bT!\b! may be used to perform line-of-sight terrain analy-
        sis between two specified site locations.  For example:
 
        splat -t tx_site.qth -r rx_site.qth
 
-       invokes a terrain analysis between the transmitter  speci-
-       fied in _\bt_\bx_\b__\bs_\bi_\bt_\be_\b._\bq_\bt_\bh and receiver specified in _\br_\bx_\b__\bs_\bi_\bt_\be_\b._\bq_\bt_\bh,
-       and writes a S\bSP\bPL\bLA\bAT\bT!\b!  Obstruction  Report  to  the  current
-       working  directory.   The  report  contains details of the
-       transmitter and receiver sites, and identifies  the  loca-
-       tion of any obstructions detected during the analysis.  If
-       an obstruction can  be  cleared  by  raising  the  receive
-       antenna  to  a greater altitude, S\bSP\bPL\bLA\bAT\bT!\b!  will indicate the
-       minimum antenna height required for a  line-of-sight  path
-       to  exist  between  the transmitter and receiver locations
-       specified.  If the antenna must be  raised  a  significant
-       amount,  this determination may take some time.  Note that
-       the results provided are the _\bm_\bi_\bn_\bi_\bm_\bu_\bm necessary for a line-
-       of-sight  path  to  exist,  and  do  not take Fresnel zone
-       clearance requirements into consideration.
+       invokes  a  line-of-sight  terrain  analysis  between  the
+       transmitter  specified  in _\bt_\bx_\b__\bs_\bi_\bt_\be_\b._\bq_\bt_\bh and receiver speci-
+       fied in _\br_\bx_\b__\bs_\bi_\bt_\be_\b._\bq_\bt_\bh using a True Earth radius  model,  and
+       writes  a S\bSP\bPL\bLA\bAT\bT!\b! Obstruction Report to the current working
+       directory.  The report contains details of the transmitter
+       and  receiver  sites,  and  identifies the location of any
+       obstructions detected along the line-of-sight path.  If an
+       obstruction  can be cleared by raising the receive antenna
+       to a greater altitude, S\bSP\bPL\bLA\bAT\bT!\b! will  indicate  the  minimum
+       antenna  height required for a line-of-sight path to exist
+       between the transmitter and receiver locations  specified.
+       Note  that  imperial  units  (miles,  feet)  are specified
+       unless the _\b-_\bm_\be_\bt_\br_\bi_\bc switch is  added  to  S\bSP\bPL\bLA\bAT\bT!\b!'s  command
+       line options:
+
+       splat -t tx_site.qth -r rx_site.qth -metric
+
+       If  the  antenna must be raised a significant amount, this
+       determination may take  a  few  moments.   Note  that  the
+       results  provided are the _\bm_\bi_\bn_\bi_\bm_\bu_\bm necessary for a line-of-
+       sight path to exist, and in the case of this simple  exam-
+       ple,  do not take Fresnel zone clearance requirements into
+       consideration.
 
        _\bq_\bt_\bh extensions are assumed by S\bSP\bPL\bLA\bAT\bT!\b! for  QTH  files,  and
-       are  optional when invoking the program.  S\bSP\bPL\bLA\bAT\bT!\b! automati-
-       cally reads all SPLAT Data Files necessary to conduct  the
-       terrain  analysis  between  the  sites  specified.  S\bSP\bPL\bLA\bAT\bT!\b!
-       searches for the needed SDF files in the  current  working
-       directory  first.   If  the  needed  files  are not found,
-       S\bSP\bPL\bLA\bAT\bT!\b! then searches in  the  path  specified  by  the  _\b-_\bd
-       command-line switch:
+       are  optional  when  specifying -t and -r arguments on the
+       command-line.  S\bSP\bPL\bLA\bAT\bT!\b! automatically reads all  SPLAT  Data
+       Files  necessary  to  conduct the terrain analysis between
+       the sites specified.  S\bSP\bPL\bLA\bAT\bT!\b!  searches  for  the  required
+       SDF  files in the current working directory first.  If the
+       needed files are not found, S\bSP\bPL\bLA\bAT\bT!\b! then  searches  in  the
+       path specified by the _\b-_\bcommand-line switch:
 
        splat -t tx_site -r rx_site -d /cdrom/sdf/
 
        An  external  directory path may be specified by placing a
        ".splat_path" file under the user's home directory.   This
-       file  must  contain  the  full  directory path to the last
-       resort location of all the SDF files.   The  path  in  the
-       _\b$_\bH_\bO_\bM_\bE_\b/_\b._\bs_\bp_\bl_\ba_\bt_\b__\bp_\ba_\bt_\bh  file  must  be  of the form of a single
-       line of ASCII text:
+       file  must  contain the full directory path of last resort
+       to all the SDF files.  The path in  the  _\b$_\bH_\bO_\bM_\bE_\b/_\b._\bs_\bp_\bl_\ba_\bt_\b__\bp_\ba_\bt_\bh
+       file must be of the form of a single line of ASCII text:
 
        /opt/splat/sdf/
 
        and can be generated using any text editor.
 
-       A graph of the terrain profile between  the  receiver  and
-       transmitter  locations  as a function of distance from the
+       A  graph  of  the terrain profile between the receiver and
+       transmitter locations as a function of distance  from  the
        receiver can be generated by adding the _\b-_\bp switch:
 
-       splat -t tx_site -r rx_site -p terrain_profile.gif
+       splat -t tx_site -r rx_site -p terrain_profile.png
 
-       S\bSP\bPL\bLA\bAT\bT!\binvokes g\bgn\bnu\bup\bpl\blo\bot\bt when generating graphs.  The  file-
-       name  extension  specified to S\bSP\bPL\bLA\bAT\bT!\b! determines the format
-       of the graph produced.  _\b._\bg_\bi_\bf will produce a 640x480  color
-       GIF  graphic  file,  while _\b._\bp_\bs or _\b._\bp_\bo_\bs_\bt_\bs_\bc_\br_\bi_\bp_\bt will produce
-       postscript output.  Output in formats such as  PNG,  Adobe
-       Illustrator,  AutoCAD  dxf,  LaTeX,  and  many  others are
+       S\bSP\bPL\bLA\bAT\bT!\b invokes g\bgn\bnu\bup\bpl\blo\bot\bt when generating graphs.  The file-
+       name extension specified to S\bSP\bPL\bLA\bAT\bT!\b! determines  the  format
+       of  the graph produced.  _\b._\bp_\bn_\bg will produce a 640x480 color
+       PNG graphic file, while _\b._\bp_\bs or  _\b._\bp_\bo_\bs_\bt_\bs_\bc_\br_\bi_\bp_\bt  will  produce
+       postscript  output.   Output in formats such as GIF, Adobe
+       Illustrator, AutoCAD  dxf,  LaTeX,  and  many  others  are
        available.  Please consult g\bgn\bnu\bup\bpl\blo\bot\bt, and g\bgn\bnu\bup\bpl\blo\bot\bt's documen-
        tation for details on all the supported output formats.
 
        A graph of elevations subtended by the terrain between the
-       receiver and transmitter as a function  of  distance  from
+       receiver  and  transmitter  as a function of distance from
        the receiver can be generated by using the _\b-_\be switch:
 
-       splat -t tx_site -r rx_site -e elevation_profile.gif
+       splat -t tx_site -r rx_site -e elevation_profile.png
 
-       The  graph produced using this switch illustrates the ele-
-       vation and depression angles resulting  from  the  terrain
-       between  the  receiver's location and the transmitter site
+       The graph produced using this switch illustrates the  ele-
+       vation  and  depression  angles resulting from the terrain
+       between the receiver's location and the  transmitter  site
        from the perspective of the receiver's location.  A second
-       trace  is  plotted  between  the  left  side  of the graph
+       trace is plotted  between  the  left  side  of  the  graph
        (receiver's location) and the location of the transmitting
-       antenna  on  the right.  This trace illustrates the eleva-
-       tion angle required for  a  line-of-sight  path  to  exist
-       between  the  receiver  and transmitter locations.  If the
+       antenna on the right.  This trace illustrates  the  eleva-
+       tion  angle  required  for  a  line-of-sight path to exist
+       between the receiver and transmitter  locations.   If  the
        trace intersects the elevation profile at any point on the
-       graph,  then  this  is  an indication that a line-of-sight
-       path does not exist under the conditions  given,  and  the
+       graph, then this is an  indication  that  a  line-of-sight
+       path  does  not  exist under the conditions given, and the
        obstructions can be clearly identified on the graph at the
        point(s) of intersection.
 
-       A graph illustrating terrain height referenced to a  line-
-       of-sight  path between the transmitter and receiver may be
+       A  graph illustrating terrain height referenced to a line-
+       of-sight path between the transmitter and receiver may  be
        generated using the _\b-_\bh switch:
 
-       splat -t tx_site -r rx_site -h height_profile.gif
+       splat -t tx_site -r rx_site -h height_profile.png
+
+       A  terrain  height  plot normalized to the transmitter and
+       receiver antenna heights can  be  obtained  using  the  _\b-_\bH
+       switch:
+
+       splat  -t  tx_site  -r  rx_site  -H normalized_height_pro-
+       file.png
+
+       A contour of the Earth's curvature is also plotted in this
+       mode.
 
-       The Earth's curvature is  clearly  evident  when  plotting
-       height profiles.
+       The  first Fresnel Zone, and 60% of the first Fresnel Zone
+       can be added to height profile graphs  by  adding  the  _\b-_\bf
+       switch,  and  specifying a frequency (in MHz) at which the
+       Fresnel Zone should be modeled:
+
+       splat  -t  tx_site  -r  rx_site  -f  439.250  -H   normal-
+       ized_height_profile.png
 
        A  graph  showing  Longley-Rice  path  loss may be plotted
        using the _\b-_\bl switch:
 
-       splat -t tx_site -r rx_site -l path_loss_profile.gif
+       splat -t tx_site -r rx_site -l path_loss_profile.png
+
+       As before, adding the _\b-_\bm_\be_\bt_\br_\bi_\bc switch forces the graphs  to
+       be plotted using metric units of measure.
 
-       When performing path loss profiles, a  Longley-Rice  Model
-       Path  Loss  Report is generated by S\bSP\bPL\bLA\bAT\bT!\b! in the form of a
+       When  performing  path loss profiles, a Longley-Rice Model
+       Path Loss Report is generated by S\bSP\bPL\bLA\bAT\bT!\b! in the form  of  a
        text file with a _\b._\bl_\br_\bo filename extension.  The report con-
-       tains  bearings  and distances between the transmitter and
-       receiver, as well as the Longley-Rice path loss for  vari-
-       ous  distances  between the transmitter and receiver loca-
-       tions.  The mode of propagation for points along the  path
-       are  given  as _\bL_\bi_\bn_\be_\b-_\bo_\bf_\b-_\bS_\bi_\bg_\bh_\bt, _\bS_\bi_\bn_\bg_\bl_\be _\bH_\bo_\br_\bi_\bz_\bo_\bn, _\bD_\bo_\bu_\bb_\bl_\be _\bH_\bo_\br_\bi_\b-
+       tains bearings and distances between the  transmitter  and
+       receiver,  as well as the Longley-Rice path loss for vari-
+       ous distances between the transmitter and  receiver  loca-
+       tions.   The mode of propagation for points along the path
+       are given as _\bL_\bi_\bn_\be_\b-_\bo_\bf_\b-_\bS_\bi_\bg_\bh_\bt, _\bS_\bi_\bn_\bg_\bl_\be _\bH_\bo_\br_\bi_\bz_\bo_\bn,  _\bD_\bo_\bu_\bb_\bl_\b _\bH_\bo_\br_\bi_\b-
        _\bz_\bo_\bn, _\bD_\bi_\bf_\bf_\br_\ba_\bc_\bt_\bi_\bo_\bn _\bD_\bo_\bm_\bi_\bn_\ba_\bn_\bt, and _\bT_\br_\bo_\bp_\bo_\bs_\bc_\ba_\bt_\bt_\be_\br _\bD_\bo_\bm_\bi_\bn_\ba_\bn_\bt.
 
-       To determine the signal-to-noise  (SNR)  ratio  at  remote
-       location  where random Johnson (thermal) noise is the pri-
+       To  determine  the  signal-to-noise  (SNR) ratio at remote
+       location where random Johnson (thermal) noise is the  pri-
        mary limiting factor in reception:
 
        _\bS_\bN_\bR=_\bT-_\bN_\bJ-_\bL+_\bG-_\bN_\bF
 
-       where T\bT is the ERP of the transmitter in dBW, N\bNJ\bJ is  John-
-       son  Noise  in dBW (-136 dBW for a 6 MHz TV channel), L\bL is
-       the path loss provided by S\bSP\bPL\bLA\bAT\bT!\b! in dB (as a _\bp_\bo_\bs_\bi_\bt_\bi_\bv_\be num-
-       ber),  G\bG is the receive antenna gain in dB over isotropic,
-       and N\bNF\bF is the receiver noise figure in dB.
+       where T\bT is the ERP of the transmitter in dBW in the direc-
+       tion of the receiver, N\bNJ\bJ is Johnson Noise in dBW (-136 dBW
+       for  a  6 MHz television channel), L\bL is the path loss pro-
+       vided by S\bSP\bPL\bLA\bAT\bT!\b!  in dB (as a _\bp_\bo_\bs_\bi_\bt_\bi_\bv_\be number),  G\bG  is  the
+       receive  antenna  gain in dB over isotropic, and N\bNF\bF is the
+       receiver noise figure in dB.
 
        T\bT may be computed as follows:
 
@@ -431,8 +513,8 @@ P\bPO\bOI\bIN\bNT\bT-\b-T\bTO\bO-\b-P\bPO\bOI\bIN\bNT\bT A\bAN\bNA\bAL\bLY\bYS\bSI\bIS\bS
 
        _\bS_\bi_\bg_\bn_\ba_\bl__\bM_\ba_\br_\bg_\bi_\bn=_\bS_\bN_\bR-_\bS
 
-       where S\bS is the minimum desired SNR ratio (15.5 dB for ATSC
-       DTV, 42 dB for analog NTSC television).
+       where S\bS is the minimum required SNR  ratio  (15.5  dB  for
+       ATSC (8-VSB) DTV, 42 dB for analog NTSC television).
 
        A  topographic map may be generated by S\bSP\bPL\bLA\bAT\bT!\b! to visualize
        the path between the transmitter and receiver  sites  from
@@ -444,19 +526,7 @@ P\bPO\bOI\bIN\bNT\bT-\b-T\bTO\bO-\b-P\bPO\bOI\bIN\bNT\bT A\bAN\bNA\bAL\bLY\bYS\bSI\bIS\bS
        only exception to this is sea-level, which is  represented
        using the color blue.
 
-       S\bSP\bPL\bLA\bAT\bT!\b!  generated  topographic  maps  are 24-bit TrueColor
-       Portable PixMap (PPM) images.  They may be viewed, edited,
-       or  converted  to  other  graphic formats by popular image
-       viewing applications such as x\bxv\bv,  T\bTh\bhe\be  G\bGI\bIM\bMP\bP,  I\bIm\bma\bag\bge\beM\bMa\bag\bgi\bic\bck\bk,
-       and X\bXP\bPa\bai\bin\bnt\bt.  PNG format is highly recommended for lossless
-       compressed storage of S\bSP\bPL\bLA\bAT\bT!\b!  generated topographic output
-       files.   An excellent command-line utility capable of con-
-       verting S\bSP\bPL\bLA\bAT\bT!\b! PPM graphic files to PNG files is w\bwp\bpn\bng\bg, and
-       is                      available                      at:
-       _\bh_\bt_\bt_\bp_\b:_\b/_\b/_\bw_\bw_\bw_\b._\bl_\bi_\bb_\bp_\bn_\bg_\b._\bo_\br_\bg_\b/_\bp_\bu_\bb_\b/_\bp_\bn_\bg_\b/_\bb_\bo_\bo_\bk_\b/_\bs_\bo_\bu_\br_\bc_\be_\bs_\b._\bh_\bt_\bm_\bl.    As   a
-       last  resort,  PPM files may be compressed using the bzip2
-       utility, and read directly by T\bTh\bhe\be  G\bGI\bIM\bMP\bP  in  this  format.
-       Topographic output is specified using the _\b-_\bo switch:
+       Topographic output is invoked using the _\b-_\bo switch:
 
        splat -t tx_site -r rx_site -o topo_map.ppm
 
@@ -492,7 +562,7 @@ P\bPO\bOI\bIN\bNT\bT-\b-T\bTO\bO-\b-P\bPO\bOI\bIN\bNT\bT A\bAN\bNA\bAL\bLY\bYS\bSI\bIS\bS
        a time for analysis:
 
        splat -t tx_site1 tx_site2 tx_site3 tx_site4 -r rx_site -p
-       profile.gif
+       profile.png
 
        In  this  example,  four  separate  terrain  profiles  and
        obstruction reports will be generated by S\bSP\bPL\bLA\bAT\bT!\b!.  A single
@@ -506,92 +576,81 @@ P\bPO\bOI\bIN\bNT\bT-\b-T\bTO\bO-\b-P\bPO\bOI\bIN\bNT\bT A\bAN\bNA\bAL\bLY\bYS\bSI\bIS\bS
        receiver will be in  violet,  and  the  path  between  the
        fourth transmitter and the receiver will be in sienna.
 
-D\bDE\bET\bTE\bER\bRM\bMI\bIN\bNI\bIN\bNG\bG R\bRE\bEG\bGI\bIO\bON\bNA\bAL\bL C\bCO\bOV\bVE\bER\bRA\bAG\bGE\bE
+       S\bSP\bPL\bLA\bAT\bT!\b!  generated  topographic  maps  are 24-bit TrueColor
+       Portable PixMap (PPM) images.  They may be viewed, edited,
+       or  converted  to  other  graphic formats by popular image
+       viewing applications such as x\bxv\bv,  T\bTh\bhe\be  G\bGI\bIM\bMP\bP,  I\bIm\bma\bag\bge\beM\bMa\bag\bgi\bic\bck\bk,
+       and X\bXP\bPa\bai\bin\bnt\bt.  PNG format is highly recommended for lossless
+       compressed storage of S\bSP\bPL\bLA\bAT\bT!\b!  generated topographic output
+       files.  I\bIm\bma\bag\bge\beM\bMa\bag\bgi\bic\bck\bk's command-line utility easily converts
+       S\bSP\bPL\bLA\bAT\bT!\b!'s PPM files to PNG format:
+
+       convert splat_map.ppm splat_map.png
+
+       Another excellent  PPM  to  PNG  command-line  utility  is
+       available                                              at:
+       _\bh_\bt_\bt_\bp_\b:_\b/_\b/_\bw_\bw_\bw_\b._\bl_\bi_\bb_\bp_\bn_\bg_\b._\bo_\br_\bg_\b/_\bp_\bu_\bb_\b/_\bp_\bn_\bg_\b/_\bb_\bo_\bo_\bk_\b/_\bs_\bo_\bu_\br_\bc_\be_\bs_\b._\bh_\bt_\bm_\bl.    As   a
+       last  resort,  PPM files may be compressed using the bzip2
+       utility, and read directly by T\bTh\bhe\be G\bGI\bIM\bMP\bP in this format.
+
+R\bRE\bEG\bGI\bIO\bON\bNA\bAL\bL C\bCO\bOV\bVE\bER\bRA\bAG\bGE\bE A\bAN\bNA\bAL\bLY\bYS\bSI\bIS\bS
        S\bSP\bPL\bLA\bAT\bT!\b! can analyze a transmitter or repeater site, or net-
-       work of sites, and predict the regional coverage for  each
+       work  of sites, and predict the regional coverage for each
        site specified.  In this mode, S\bSP\bPL\bLA\bAT\bT!\b! can generate a topo-
-       graphic map displaying the geometric line-of-sight  cover-
-       age  area  of the sites based on the location of each site
-       and the height of receive antenna wishing  to  communicate
+       graphic  map displaying the geometric line-of-sight cover-
+       age area of the sites based on the location of  each  site
+       and  the  height of receive antenna wishing to communicate
        with the site in question.  S\bSP\bPL\bLA\bAT\bT!\b! switches from point-to-
-       point analysis mode to area prediction mode  when  the  _\b-_\bc
+       point  analysis  mode  to area prediction mode when the _\b-_\bc
        switch is invoked as follows:
 
-       splat  -t tx_site -c 30.0 -s cities.dat -b co34_d00.dat -o
+       splat -t tx_site -c 30.0 -s cities.dat -b co34_d00.dat  -o
        tx_coverage
 
        In this example, S\bSP\bPL\bLA\bAT\bT!\b! generates a topographic map called
-       _\bt_\bx_\b__\bc_\bo_\bv_\be_\br_\ba_\bg_\be_\b._\bp_\bp_\bm  that  illustrates  the predicted line-of-
-       sight regional coverage of _\bt_\bx_\b__\bs_\bi_\bt_\be to receiving  locations
-       having  antennas  30.0 feet above ground level (AGL).  The
-       contents of _\bc_\bi_\bt_\bi_\be_\bs_\b._\bd_\ba_\bt are plotted on the map, as are  the
-       cartographic    boundaries    contained    in   the   file
+       _\bt_\bx_\b__\bc_\bo_\bv_\be_\br_\ba_\bg_\be_\b._\bp_\bp_\bm that illustrates  the  predicted  line-of-
+       sight  regional coverage of _\bt_\bx_\b__\bs_\bi_\bt_\be to receiving locations
+       having antennas 30.0 feet above ground  level  (AGL).   If
+       the  _\b-_\bm_\be_\bt_\br_\bi_\bc switch is used, the argument following the _\b-_\bc
+       switch is interpreted as being in meters, rather  than  in
+       feet.   The contents of _\bc_\bi_\bt_\bi_\be_\bs_\b._\bd_\ba_\bt are plotted on the map,
+       as are the cartographic boundaries contained in  the  file
        _\bc_\bo_\b3_\b4_\b__\bd_\b0_\b0_\b._\bd_\ba_\bt.
 
-       When plotting line-of-sight paths and  areas  of  regional
-       coverage,  S\bSP\bPL\bLA\bAT\bT!\b!  by  default  does  not  account for the
-       effects of atmospheric bending.   However,  this  behavior
-       may  be modified by using the Earth radius multiplier (_\b-_\bm)
+       When  plotting  line-of-sight  paths and areas of regional
+       coverage, S\bSP\bPL\bLA\bAT\bT!\b! by  default  does  not  account  for  the
+       effects  of  atmospheric  bending.  However, this behavior
+       may be modified by using the Earth radius multiplier  (_\b-_\bm)
        switch:
 
-       splat -t wnjt -c 30.0 -m  1.333  -s  cities.dat  -b  coun-
+       splat  -t  wnjt  -c  30.0  -m 1.333 -s cities.dat -b coun-
        ties.dat -o map.ppm
 
-       An  earth  radius  multiplier of 1.333 instructs S\bSP\bPL\bLA\bAT\bT!\b! to
+       An earth radius multiplier of 1.333  instructs  S\bSP\bPL\bLA\bAT\bT!\b to
        use the "four-thirds earth" model for line-of-sight propa-
-       gation  analysis.  Any appropriate earth radius multiplier
+       gation analysis.  Any appropriate earth radius  multiplier
        may be selected by the user.
 
-       When invoked in area prediction mode, S\bSP\bPL\bLA\bAT\bT!\b!  generates  a
+       When  invoked  in area prediction mode, S\bSP\bPL\bLA\bAT\bT!\b! generates a
        site  report  for  each  station  analyzed.   S\bSP\bPL\bLA\bAT\bT!\b!  site
        reports contain details of the site's geographic location,
-       its  height  above  mean  sea  level, the antenna's height
-       above mean sea level, the antenna's height  above  average
-       terrain,  and the height of the average terrain calculated
-       in the directions of 0, 45, 90, 135, 180,  225,  270,  and
+       its height above mean  sea  level,  the  antenna's  height
+       above  mean  sea level, the antenna's height above average
+       terrain, and the height of the average terrain  calculated
+       in  the  directions  of 0, 45, 90, 135, 180, 225, 270, and
        315 degrees azimuth.
 
-       If  the  _\b-_\bc  switch is replaced by a _\b-_\bL switch, a Longley-
-       Rice path loss map for a transmitter site  may  be  gener-
-       ated:
-
-       splat  -t  wnjt  -L  30.0 -s cities.dat -b co34_d00.dat -o
-       path_loss_map
-
-       In this mode, S\bSP\bPL\bLA\bAT\bT!\b! generates a  multi-color  map  illus-
-       trating  expected  signal levels (path loss) in areas sur-
-       rounding the transmitter site.  A legend at the bottom  of
-       the  map  correlates  each color with a specific path loss
-       level in decibels.  Since Longley-Rice area prediction map
-       generation  is  very CPU intensive, provision for limiting
-       the analysis range is provided  by  the  _\b-_\bR  switch.   The
-       argument  must  be  given in miles.  If a range wider than
-       the generated topographic map is  specified,  S\bSP\bPL\bLA\bAT\bT!\b!  will
-       perform  Longley-Rice  path  loss calculations between all
-       four corners of the area prediction map.
-
-       The _\b-_\bd_\bb switch allows a constraint to  be  placed  on  the
-       maximum  path loss region plotted on the map.  A path loss
-       between 80 and 230 dB may be specified using this  switch.
-       For  example,  if a path loss beyond -140 dB is irrelevant
-       to the survey being conducted, S\bSP\bPL\bLA\bAT\bT!\b!'s path loss plot can
-       be constrained to the region bounded by the 140 dB attenu-
-       ation contour as follows:
-
-       splat -t wnjt -L 30.0 -s cities.dat  -b  co34_d00.dat  -db
-       140 -o plot.ppm
-
-
-D\bDE\bET\bTE\bER\bRM\bMI\bIN\bNI\bIN\bNG\bG M\bMU\bUL\bLT\bTI\bIP\bPL\bLE\bE R\bRE\bEG\bGI\bIO\bON\bNS\bS O\bOF\bF C\bCO\bOV\bVE\bER\bRA\bAG\bGE\bE
-       S\bSP\bPL\bLA\bAT\bT!\b!  can  also display line-of-sight coverage areas for
-       as many as four separate transmitter  sites  on  a  common
+D\bDE\bET\bTE\bER\bRM\bMI\bIN\bNI\bIN\bNG\bG M\bMU\bUL\bLT\bTI\bIP\bPL\bLE\bE R\bRE\bEG\bGI\bIO\bON\bNS\bS O\bOF\bF L\bLO\bOS\bS C\bCO\bOV\bVE\bER\bRA\bAG\bGE\bE
+       S\bSP\bPL\bLA\bAT\bT!\b! can also display line-of-sight coverage  areas  for
+       as  many  as  four  separate transmitter sites on a common
        topographic map.  For example:
 
-       splat -t site1 site2 site3 site4 -c 30.0 -o network.ppm
+       splat -t site1 site2 site3 site4 -c 10.0 -metric  -o  net-
+       work.ppm
 
        plots the regional line-of-sight coverage of site1, site2,
-       site3, and site4 based on a receive antenna  located  30.0
-       feet  above  ground  level.   A  topographic  map  is then
+       site3, and site4 based on a receive antenna  located  10.0
+       meters  above  ground  level.   A  topographic map is then
        written to the file _\bn_\be_\bt_\bw_\bo_\br_\bk_\b._\bp_\bp_\bm.  The line-of-sight cover-
        age area of the transmitters are plotted as follows in the
        colors indicated (along with their corresponding RGB  val-
@@ -622,14 +681,244 @@ D\bDE\bET\bTE\bER\bRM\bMI\bIN\bNI\bIN\bNG\bG M\bMU\bUL\bLT\bTI\bIP\bPL\bLE\bE R\bRE\bEG\bGI\bIO\bON\bNS\bS
        from  as many as four separate locations on a single tower
        may be generated by S\bSP\bPL\bLA\bAT\bT!\b!.
 
-T\bTO\bOP\bPO\bOG\bGR\bRA\bAP\bPH\bHI\bIC\bC M\bMA\bAP\bP G\bGE\bEN\bNE\bER\bRA\bAT\bTI\bIO\bON\bN
-       In certain situations, it may be desirable to  generate  a
-       topographic  map  of  a  region  without plotting coverage
+L\bLO\bON\bNG\bGL\bLE\bEY\bY-\b-R\bRI\bIC\bCE\bE P\bPA\bAT\bTH\bH L\bLO\bOS\bSS\bS A\bAN\bNA\bAL\bLY\bYS\bSI\bIS\bS
+       If the _\b-_\bc switch is replaced by a _\b-_\bL  switch,  a  Longley-
+       Rice  path  loss  map for a transmitter site may be gener-
+       ated:
+
+       splat -t wnjt -L 30.0 -s  cities.dat  -b  co34_d00.dat  -o
+       path_loss_map
+
+       In  this  mode,  S\bSP\bPL\bLA\bAT\bT!\b! generates a multi-color map illus-
+       trating expected signal levels (path loss) in  areas  sur-
+       rounding  the transmitter site.  A legend at the bottom of
+       the map correlates each color with a  specific  path  loss
+       range in decibels.
+
+       The Longley-Rice analysis range may be modified to a user-
+       specific value using the _\b-_\bR switch.  The argument must  be
+       given  in  miles  (or  kilometers if the _\b-_\bm_\be_\bt_\br_\bi_\bc switch is
+       used).  If a range wider than  the  generated  topographic
+       map  is  specified,  S\bSP\bPL\bLA\bAT\bT!\b! will perform Longley-Rice path
+       loss calculations between all four  corners  of  the  area
+       prediction map.
+
+       The  _\b-_\bd_\bb  switch  allows  a constraint to be placed on the
+       maximum path loss region plotted on the  map.   A  maximum
+       path  loss  between  80  and 230 dB may be specified using
+       this switch.  For example, if a path loss beyond  -140  dB
+       is irrelevant to the survey being conducted, S\bSP\bPL\bLA\bAT\bT!\b!'s path
+       loss plot can be constrained to the region bounded by  the
+       140 dB attenuation contour as follows:
+
+       splat  -t  wnjt  -L 30.0 -s cities.dat -b co34_d00.dat -db
+       140 -o plot.ppm
+
+
+A\bAN\bNT\bTE\bEN\bNN\bNA\bA R\bRA\bAD\bDI\bIA\bAT\bTI\bIO\bON\bN P\bPA\bAT\bTT\bTE\bER\bRN\bN P\bPA\bAR\bRA\bAM\bME\bET\bTE\bER\bRS\bS
+       Normalized  field  voltage  patterns  for  a  transmitting
+       antenna's  horizontal  and  vertical  planes  are imported
+       automatically into S\bSP\bPL\bLA\bAT\bT!\b!  when  a  Longley-Rice  coverage
+       analysis  is performed.  Antenna pattern data is read from
+       a pair of files having the same base name as the transmit-
+       ter  and  LRP  files,  but with _\b._\ba_\bz and _\b._\be_\bl extensions for
+       azimuth and elevation pattern files, respectively.  Speci-
+       fications   regarding   pattern   rotation  (if  any)  and
+       mechanical beam tilt and tilt direction (if any) are  also
+       contained within S\bSP\bPL\bLA\bAT\bT!\b! antenna pattern files.
+
+       For  example, the first few lines of a S\bSP\bPL\bLA\bAT\bT!\b! azimuth pat-
+       tern file might appear as follows (_\bk_\bv_\be_\ba_\b._\ba_\bz):
+
+               183.0
+               0       0.8950590
+               1       0.8966406
+               2       0.8981447
+               3       0.8995795
+               4       0.9009535
+               5       0.9022749
+               6       0.9035517
+               7       0.9047923
+               8       0.9060051
+
+       The first line of the _\b._\ba_\bz file  specifies  the  amount  of
+       azimuthal  pattern rotation (measured clockwise in degrees
+       from True North) to be applied by S\bSP\bPL\bLA\bAT\bT!\b! to the data  con-
+       tained in the _\b._\ba_\bz file.  This is followed by azimuth head-
+       ings (0 to 360 degrees) and  their  associated  normalized
+       field patterns (0.000 to 1.000) separated by whitespace.
+
+       The   structure  of  S\bSP\bPL\bLA\bAT\bT!\b!  elevation  pattern  files  is
+       slightly different.  The first line of the _\b._\be_\bl file speci-
+       fies  the  amount  of  mechanical beam tilt applied to the
+       antenna.  Note that a _\bd_\bo_\bw_\bn_\bw_\ba_\br_\bd _\bt_\bi_\bl_\bt (below the horizon) is
+       expressed as a _\bp_\bo_\bs_\bi_\bt_\bi_\bv_\be _\ba_\bn_\bg_\bl_\be, while an _\bu_\bp_\bw_\ba_\br_\bd _\bt_\bi_\bl_\bt (above
+       the horizon) is expressed as a _\bn_\be_\bg_\ba_\bt_\bi_\bv_\be _\ba_\bn_\bg_\bl_\be.  This  data
+       is  followed by the azimuthal direction of the tilt, sepa-
+       rated by whitespace.
+
+       The remainder of the file consists of elevation angles and
+       their  corresponding  normalized voltage radiation pattern
+       (0.000 to 1.000) values separated by  whitespace.   Eleva-
+       tion angles must be specified over a -10.0 to +90.0 degree
+       range.  As was the convention  with  mechanical  beamtilt,
+       _\bn_\be_\bg_\ba_\bt_\bi_\bv_\be _\be_\bl_\be_\bv_\ba_\bt_\bi_\bo_\bn _\ba_\bn_\bg_\bl_\be_\bs are used to represent elevations
+       _\ba_\bb_\bo_\bv_\be _\bt_\bh_\be _\bh_\bo_\br_\bi_\bz_\bo_\bn, while _\bp_\bo_\bs_\bi_\bt_\bi_\bv_\be _\ba_\bn_\bg_\bl_\be_\bs represents eleva-
+       tions _\bb_\be_\bl_\bo_\bw _\bt_\bh_\be _\bh_\bo_\br_\bi_\bz_\bo_\bn.
+
+       For  example,  the first few lines a S\bSP\bPL\bLA\bAT\bT!\b! elevation pat-
+       tern file might appear as follows (_\bk_\bv_\be_\ba_\b._\be_\bl):
+
+               1.1    130.0
+              -10.0   0.172
+              -9.5    0.109
+              -9.0    0.115
+              -8.5    0.155
+              -8.0    0.157
+              -7.5    0.104
+              -7.0    0.029
+              -6.5    0.109
+              -6.0    0.185
+
+       In this example, the antenna is mechanically tilted  down-
+       ward 1.1 degrees towards an azimuth of 130.0 degrees.
+
+       For  best  results, the resolution of azimuth pattern data
+       should be specified to the  nearest  degree  azimuth,  and
+       elevation  pattern  data resolution should be specified to
+       the nearest 0.01 degrees.  If the pattern  data  specified
+       does  not  reach  this  level  of  resolution, S\bSP\bPL\bLA\bAT\bT!\b! will
+       interpolate the values provided to determine the  data  at
+       the  required  resolution,  although  this may result in a
+       loss in accuracy.
+
+
+I\bIM\bMP\bPO\bOR\bRT\bTI\bIN\bNG\bG A\bAN\bND\bD E\bEX\bXP\bPO\bOR\bRT\bTI\bIN\bNG\bG R\bRE\bEG\bGI\bIO\bON\bNA\bAL\bL P\bPA\bAT\bTH\bH L\bLO\bOS\bSS\bS C\bCO\bON\bNT\bTO\bOU\bUR\bR D\bDA\bAT\bTA\bA
+       Performing a Longley-Rice coverage analysis can be a  very
+       time  consuming  process,  especially  if  the analysis is
+       repeated repeatedly to discover what  effects  changes  to
+       the  antenna radiation patterns make to the predicted cov-
+       erage area.
+
+       This process can be expedited by  exporting  the  Longley-
+       Rice  regional  path  loss contour data to an output file,
+       modifying the path loss  data  externally  to  incorporate
+       antenna  pattern  effects, and then importing the modified
+       path loss data back into  S\bSP\bPL\bLA\bAT\bT!\b!   to  rapidly  produce  a
+       revised path loss map.
+
+       For  example,  a path loss output file can be generated by
+       S\bSP\bPL\bLA\bAT\bT!\b!  for a receive site 30 feet above ground level over
+       a 50 mile radius surrounding a transmitter site to a maxi-
+       mum path loss of 140 dB using the following syntax:
+
+       splat -t kvea -L 30.0 -R 50.0 -db 140 -plo pathloss.dat
+
+       S\bSP\bPL\bLA\bAT\bT!\b! path loss output files often exceed  100  megabytes
+       in  size.  They contain information relating to the bound-
+       aries  of  region  they  describe  followed  by  latitudes
+       (degrees North), longitudes (degrees West), azimuths, ele-
+       vations (to the first obstruction), and path loss  figures
+       (dB)  for  a  series  of specific points that comprise the
+       region surrounding the transmitter site.   The  first  few
+       lines  of  a S\bSP\bPL\bLA\bAT\bT!\b! path loss output file take on the fol-
+       lowing appearance (_\bp_\ba_\bt_\bh_\bl_\bo_\bs_\bs_\b._\bd_\ba_\bt):
+
+               119, 117    ; max_west, min_west
+               35, 33      ; max_north, min_north
+               34.2265434, 118.0631104, 48.171, -37.461, 67.70
+               34.2270355, 118.0624390, 48.262, -26.212, 73.72
+               34.2280197, 118.0611038, 48.269, -14.951, 79.74
+               34.2285156, 118.0604401, 48.207, -11.351, 81.68
+               34.2290077, 118.0597687, 48.240, -10.518, 83.26
+               34.2294998, 118.0591049, 48.225, 23.201, 84.60
+               34.2304878, 118.0577698, 48.213, 15.769, 137.84
+               34.2309799, 118.0570984, 48.234, 15.965, 151.54
+               34.2314720, 118.0564346, 48.224, 16.520, 149.45
+               34.2319679, 118.0557632, 48.223, 15.588, 151.61
+               34.2329521, 118.0544281, 48.230, 13.889, 135.45
+               34.2334442, 118.0537643, 48.223, 11.693, 137.37
+               34.2339401, 118.0530930, 48.222, 14.050, 126.32
+               34.2344322, 118.0524292, 48.216, 16.274, 156.28
+               34.2354164, 118.0510941, 48.222, 15.058, 152.65
+               34.2359123, 118.0504227, 48.221, 16.215, 158.57
+               34.2364044, 118.0497589, 48.216, 15.024, 157.30
+               34.2368965, 118.0490875, 48.225, 17.184, 156.36
+
+       It is not uncommon for S\bSP\bPL\bLA\bAT\bT!\b! path loss files  to  contain
+       as  many as 3 million or more lines of data.  Comments can
+       be placed in the file if they are proceeded by a semicolon
+       character.   The  v\bvi\bim\bm  text  editor  has proven capable of
+       editing files of this size.
+
+       Note as was the case in the antenna pattern  files,  nega-
+       tive  elevation  angles  refer  to  upward tilt (above the
+       horizon), while positive angles  refer  to  downward  tilt
+       (below  the horizon).  These angles refer to the elevation
+       to the receiving antenna at the height above ground  level
+       specified  using  the _\b-_\bL switch _\bi_\bf the path between trans-
+       mitter and receiver is unobstructed.  If the path  between
+       the  transmitter and receiver is obstructed, then the ele-
+       vation angle to  the  first  obstruction  is  returned  by
+       S\bSP\bPL\bLA\bAT\bT!\b!.   This is because the Longley-Rice model considers
+       the energy reaching a distant  point  over  an  obstructed
+       path  as a derivative of the energy scattered from the top
+       of the first obstruction, only.  Since energy cannot reach
+       the  obstructed  location  directly,  the actual elevation
+       angle to that point is irrelevant.
+
+       When modifying S\bSP\bPL\bLA\bAT\bT!\b! path loss files to  reflect  antenna
+       pattern  data,  _\bo_\bn_\bl_\by _\bt_\bh_\be _\bl_\ba_\bs_\bt _\bc_\bo_\bl_\bu_\bm_\bn _\b(_\bp_\ba_\bt_\bh _\bl_\bo_\bs_\bs_\b) should be
+       amended to reflect the antenna's normalized  gain  at  the
+       azimuth  and  elevation angles specified in the file.  (At
+       this time, programs and scripts capable of performing this
+       operation are left as an exercise for the user.)
+
+       Modified  path  loss maps can be imported back into S\bSP\bPL\bLA\bAT\bT!\b!
+       for generating revised coverage maps:
+
+       splat -t kvea -pli pathloss.dat -s city.dat -b  county.dat
+       -o map.ppm
+
+       S\bSP\bPL\bLA\bAT\bT!\b!  path  loss  files  can also be used for conducting
+       coverage or interference studies outside of S\bSP\bPL\bLA\bAT\bT!\b!.
+
+U\bUS\bSE\bER\bR-\b-D\bDE\bEF\bFI\bIN\bNE\bED\bD T\bTE\bER\bRR\bRA\bAI\bIN\bN I\bIN\bNP\bPU\bUT\bT F\bFI\bIL\bLE\bES\bS
+       A user-defined terrain file is a user-generated text  file
+       containing latitudes, longitudes, and heights above ground
+       level of specific  terrain  features  believed  to  be  of
+       importance  to  the  S\bSP\bPL\bLA\bAT\bT!\b!  analysis being conducted, but
+       noticeably absent from the SDF files being used.  A  user-
+       defined  terrain  file  is imported into a S\bSP\bPL\bLA\bAT\bT!\b! analysis
+       using the _\b-_\bu_\bd_\bt switch:
+
+        splat -t tx_site -r rx_site -udt udt_file.txt -o map.ppm
+
+       A user-defined terrain file has the  following  appearance
+       and structure:
+
+              40.32180556, 74.1325, 100.0 meters
+              40.321805, 74.1315, 300.0
+              40.3218055, 74.1305, 100.0 meters
+
+       Terrain  height  is interpreted as being described in feet
+       above ground level unless followed by the word _\bm_\be_\bt_\be_\br_\bs, and
+       is  added  _\bo_\bn _\bt_\bo_\bp _\bo_\bf the terrain specified in the SDF data
+       for the locations specified.  Be  aware  that  each  user-
+       defined  terrain  feature specified will be interpreted as
+       being 3-arc seconds in both latitude and longitude.   Fea-
+       tures  described  in  the  user-defined  terrain file that
+       overlap  previously  defined  features  in  the  file  are
+       ignored by S\bSP\bPL\bLA\bAT\bT!\b!.
+
+S\bSI\bIM\bMP\bPL\bLE\bE T\bTO\bOP\bPO\bOG\bGR\bRA\bAP\bPH\bHI\bIC\bC M\bMA\bAP\bP G\bGE\bEN\bNE\bER\bRA\bAT\bTI\bIO\bON\bN
+       In  certain  situations  it may be desirable to generate a
+       topographic map of  a  region  without  plotting  coverage
        areas,  line-of-sight  paths,  or  generating  obstruction
-       reports.   There  are  several ways of doing this.  If one
-       wishes to generate  a  topographic  map  illustrating  the
-       location  of  a transmitter and receiver site along with a
-       brief text report describing the locations  and  distances
+       reports.  There are several ways of doing  this.   If  one
+       wishes  to  generate  a  topographic  map illustrating the
+       location of a transmitter and receiver site along  with  a
+       brief  text  report describing the locations and distances
        between the sites, the _\b-_\bn switch should be invoked as fol-
        lows:
 
@@ -639,10 +928,57 @@ T\bTO\bOP\bPO\bOG\bGR\bRA\bAP\bPH\bHI\bIC\bC M\bMA\bAP\bP G\bGE\bEN\bNE\bER\bRA\bAT\bTI\bIO\bON\bN
 
        splat -t tx_site -r rx_site -N -o topo_map.ppm
 
-       If the _\b-_\bo switch and  output  filename  are  omitted  when
-       using either the _\b-_\bn or _\b-_\bN switches, output is written to a
-       file named _\bm_\ba_\bp_\b._\bp_\bp_\bm in the  current  working  directory  by
-       default.
+       If a topographic map centered about a single site out to a
+       minimum specified radius is  desired  instead,  a  command
+       similar to the following can be used:
+
+       splat  -t  tx_site  -R 50.0 -s NJ_Cities -b NJ_Counties -o
+       topo_map.ppm
+
+       where -R specifies the minimum radius of the map in  miles
+       (or kilometers if the _\b-_\bm_\be_\bt_\br_\bi_\bc switch is used).
+
+       If  the _\b-_\bo switch and output filename are omitted in these
+       operations, topographic output is written to a file  named
+       _\bm_\ba_\bp_\b._\bp_\bp_\bm in the current working directory by default.
+
+G\bGE\bEO\bOR\bRE\bEF\bFE\bER\bRE\bEN\bNC\bCE\bE F\bFI\bIL\bLE\bE G\bGE\bEN\bNE\bER\bRA\bAT\bTI\bIO\bON\bN
+       Topographic,  coverage  (_\b-_\bc),  and  path loss contour (_\b-_\bL)
+       maps generated by S\bSP\bPL\bLA\bAT\bT!\b! may be imported  into  X\bXa\bas\bst\bti\bir\br  (X
+       Amateur  Station Tracking and Information Reporting) soft-
+       ware by generating a georeference file using S\bSP\bPL\bLA\bAT\bT!\b!'s _\b-_\bg_\be_\bo
+       switch:
+
+       splat -t kd2bd -R 50.0 -s NJ_Cities -b NJ_Counties -geo -o
+       map.ppm
+
+       The georeference file generated will have  the  same  base
+       name as the _\b-_\bo file specified, but have a  _\b._\bg_\be_\bo extension,
+       and permit proper interpretation and display  of  S\bSP\bPL\bLA\bAT\bT!\b!'s
+       .ppm graphics in X\bXa\bas\bst\bti\bir\br software.
+
+G\bGO\bOO\bOG\bGL\bLE\bE M\bMA\bAP\bP K\bKM\bML\bL F\bFI\bIL\bLE\bE G\bGE\bEN\bNE\bER\bRA\bAT\bTI\bIO\bON\bN
+       Keyhole Markup Language files compatible with G\bGo\boo\bog\bgl\ble\be E\bEa\bar\brt\bth\bh
+       may be generated by S\bSP\bPL\bLA\bAT\bT!\b! when performing  point-to-point
+       analyses by invoking the _\b-_\bk_\bm_\bl switch:
+
+       splat -t wnjt -r kd2bd -kml
+
+       The  KML file generated will have the same filename struc-
+       ture as an Obstruction  Report  for  the  transmitter  and
+       receiver  site  names  given, except it will carry a  _\b._\bk_\bm_\bl
+       extension.
+
+       Once loaded into G\bGo\boo\bog\bgl\ble\be E\bEa\bar\brt\bth\bh (File  -->  Open),  the  KML
+       file  will  annotate the map display with the names of the
+       transmitter and receiver site locations.  The viewpoint of
+       the  image  will  be  from the position of the transmitter
+       site looking towards the location of  the  receiver.   The
+       point-to-point path between the sites will be displayed as
+       a white line while the RF line-of-sight path will be  dis-
+       played  in  green.   G\bGo\boo\bog\bgl\ble\be E\bEa\bar\brt\bth\bh's navigation tools allow
+       the user to "fly" around  the  path,  identify  landmarks,
+       roads, and other featured content.
 
 D\bDE\bET\bTE\bER\bRM\bMI\bIN\bNA\bAT\bTI\bIO\bON\bN O\bOF\bF A\bAN\bNT\bTE\bEN\bNN\bNA\bA H\bHE\bEI\bIG\bGH\bHT\bT A\bAB\bBO\bOV\bVE\bE A\bAV\bVE\bER\bRA\bAG\bGE\bE T\bTE\bER\bRR\bRA\bAI\bIN\bN
        S\bSP\bPL\bLA\bAT\bT!\b!  determines  antenna  height  above average terrain
@@ -655,66 +991,59 @@ D\bDE\bET\bTE\bER\bRM\bMI\bIN\bNA\bAT\bTI\bIO\bON\bN O\bOF\bF A\bAN\bNT\bTE\bEN\bNN\bNA\bA H\bHE\bEI\bIG\b
        lie entirely over water or over land  outside  the  United
        States  (areas for which no USGS topography data is avail-
        able), then those radials are omitted from the calculation
-       of  average  terrain.   If part of a radial extends over a
-       body of water or over land outside the United States, then
-       only that part of the radial lying over United States land
-       is used in the determination of average terrain.
-
-       Note that SRTM elevation data, unlike older  3-arc  second
-       USGS  data,  extends  beyond  the  borders  of  the United
-       States.  Therefore, HAAT results may not be in  full  com-
+       of average terrain.
+
+       Note  that  SRTM elevation data, unlike older 3-arc second
+       USGS data,  extends  beyond  the  borders  of  the  United
+       States.   Therefore,  HAAT results may not be in full com-
        pliance with FCC Part 73.313(d) in areas along the borders
-       of the United States if the SDF files used by  S\bSP\bPL\bLA\bAT\bT!\b are
+       of  the  United States if the SDF files used by S\bSP\bPL\bLA\bAT\bT!\b! are
        SRTM-derived.
 
-       When  performing  point-to-point  terrain analysis, S\bSP\bPL\bLA\bAT\bT!\b!
-       determines the antenna height above average  terrain  only
-       if  enough topographic data has already been loaded by the
-       program to perform the point-to-point analysis.   In  most
+       When performing point-to-point  terrain  analysis,  S\bSP\bPL\bLA\bAT\bT!\b!
+       determines  the  antenna height above average terrain only
+       if enough topographic data has already been loaded by  the
+       program  to  perform the point-to-point analysis.  In most
        cases, this will be true, unless the site in question does
-       not lie within 10 miles of the boundary of the  topography
+       not  lie within 10 miles of the boundary of the topography
        data in memory.
 
-       When  performing area prediction analysis, enough topogra-
-       phy data is normally loaded by S\bSP\bPL\bLA\bAT\bT!\b! to  perform  average
-       terrain  calculations.  Under such conditions, S\bSP\bPL\bLA\bAT\bT!\b! will
-       provide the antenna height above average terrain  as  well
-       as  the  average terrain above mean sea level for azimuths
-       of 0, 45, 90, 135, 180, 225, 270,  and  315  degrees,  and
-       include such information in the site report generated.  If
+       When performing area prediction analysis, enough  topogra-
+       phy  data  is normally loaded by S\bSP\bPL\bLA\bAT\bT!\b! to perform average
+       terrain calculations.  Under such conditions, S\bSP\bPL\bLA\bAT\bT!\b will
+       provide  the  antenna height above average terrain as well
+       as the average terrain above mean sea level  for  azimuths
+       of  0,  45,  90,  135, 180, 225, 270, and 315 degrees, and
+       include such information in the generated site report.  If
        one or more of the eight radials surveyed fall over water,
        or over regions for which no SDF data is available, S\bSP\bPL\bLA\bAT\bT!\b!
        reports _\bN_\bo _\bT_\be_\br_\br_\ba_\bi_\bn for the radial paths affected.
 
 R\bRE\bES\bST\bTR\bRI\bIC\bCT\bTI\bIN\bNG\bG T\bTH\bHE\bE M\bMA\bAX\bXI\bIM\bMU\bUM\bM S\bSI\bIZ\bZE\bE O\bOF\bF A\bAN\bN A\bAN\bNA\bAL\bLY\bYS\bSI\bIS\bS R\bRE\bEG\bGI\bIO\bON\bN
-       S\bSP\bPL\bLA\bAT\bT!\breads SDF files as needed into a series  of  memory
-       "slots"  within the structure of the program.  Each "slot"
-       holds one SDF file representing a one degree by one degree
-       region  of  terrain.   A _\b#_\bd_\be_\bf_\bi_\bn_\be _\bM_\bA_\bX_\bS_\bL_\bO_\bT_\bS statement in the
-       first several lines of _\bs_\bp_\bl_\ba_\bt_\b._\bc_\bp_\bp sets the  maximum  number
-       of  "slots"  available  for topography data.  It also sets
-       the maximum size of  the  topographic  maps  generated  by
-       S\bSP\bPL\bLA\bAT\bT!\b!.   MAXSLOTS is set to 9 by default.  If S\bSP\bPL\bLA\bAT\bT!\b! pro-
-       duces a segmentation fault on start-up with this  default,
-       it  is  an  indication  that not enough RAM and/or virtual
-       memory (swap space) is available to run S\bSP\bPL\bLA\bAT\bT!\b!  with  this
-       number  of MAXSLOTS.  In situations where available memory
-       is low, MAXSLOTS may be reduced to 4 with the  understand-
-       ing that this will greatly limit the maximum region S\bSP\bPL\bLA\bAT\bT!\b!
-       will be able to analyze.  If  118  megabytes  or  more  of
-       total  memory  (swap  space  plus  RAM) is available, then
-       MAXSLOTS may be increased to 16.  This will permit  opera-
-       tion  over  a 4-degree by 4-degree region, which is suffi-
-       cient for single antenna heights in excess of 10,000  feet
-       above  mean sea level, or point-to-point distances of over
-       1000 miles.
+       S\bSP\bPL\bLA\bAT\bT!\b reads  SDF files as needed into a series of memory
+       pages or "slots" within  the  structure  of  the  program.
+       Each  "slot"  holds one SDF file representing a one degree
+       by one degree  region  of  terrain.   A  _\b#_\bd_\be_\bf_\bi_\bn_\be  _\bM_\bA_\bX_\bS_\bL_\bO_\bT_\bS
+       statement in the first several lines of _\bs_\bp_\bl_\ba_\bt_\b._\bc_\bp_\bp sets the
+       maximum number of "slots" available for holding topography
+       data.   It  also  sets the maximum size of the topographic
+       maps generated  by  S\bSP\bPL\bLA\bAT\bT!\b!.   MAXSLOTS  is  set  to  9  by
+       default.   If  S\bSP\bPL\bLA\bAT\bT!\b!   produces  a  segmentation fault on
+       start-up with this default, it is an indication  that  not
+       enough RAM and/or virtual memory (swap space) is available
+       to run S\bSP\bPL\bLA\bAT\bT!\b! with the number of MAXSLOTS  specified.   In
+       situations  where available memory is low, MAXSLOTS may be
+       reduced to 4 with the understanding that this will greatly
+       limit  the  maximum region S\bSP\bPL\bLA\bAT\bT!\b! will be able to analyze.
+       If 118 megabytes or more of total memory (swap space  plus
+       RAM)  is  available, then MAXSLOTS may be increased to 16.
+       This will permit operation over  a  4-degree  by  4-degree
+       region,  which is sufficient for single antenna heights in
+       excess of 10,000 feet above mean sea level,  or  point-to-
+       point distances of over 1000 miles.
 
 A\bAD\bDD\bDI\bIT\bTI\bIO\bON\bNA\bAL\bL I\bIN\bNF\bFO\bOR\bRM\bMA\bAT\bTI\bIO\bON\bN
-       Invoking S\bSP\bPL\bLA\bAT\bT!\b! without any arguments will display all the
-       command-line options available with the program along with
-       a brief summary of each.
-
-       The latest news and information regarding S\bSP\bPL\bLA\bAT\bT!\b!  software
+       The  latest news and information regarding S\bSP\bPL\bLA\bAT\bT!\b! software
        is available through the official S\bSP\bPL\bLA\bAT\bT!\b! software web page
        located at: _\bh_\bt_\bt_\bp_\b:_\b/_\b/_\bw_\bw_\bw_\b._\bq_\bs_\bl_\b._\bn_\be_\bt_\b/_\bk_\bd_\b2_\bb_\bd_\b/_\bs_\bp_\bl_\ba_\bt_\b._\bh_\bt_\bm_\bl.
 
@@ -725,5 +1054,10 @@ A\bAU\bUT\bTH\bHO\bOR\bRS\bS
        Doug McDonald <_\bm_\bc_\bd_\bo_\bn_\ba_\bl_\bd_\b@_\bs_\bc_\bs_\b._\bu_\bi_\bu_\bc_\b._\be_\bd_\bu>
               Longley-Rice Model integration
 
+       Ron Bentley <_\br_\bo_\bn_\bb_\be_\bn_\bt_\bl_\be_\by_\b@_\be_\ba_\br_\bt_\bh_\bl_\bi_\bn_\bk_\b._\bn_\be_\bt>
+              Fresnel Zone plotting and clearance determination
+
+
 
 
+KD2BD Software           20 December 2006               SPLAT!(1)
index 7cd520cdd90c18fbb730c1286279fbe12b4c0102..560195686e8f20871b1c4979a7f245672650100a 100644 (file)
@@ -1,29 +1,38 @@
-.TH SPLAT! 1 "02 March 2006" "KD2BD Software" "KD2BD Software"
+.TH SPLAT! 1 "20 December 2006" "KD2BD Software" "KD2BD Software"
 .SH NAME
 splat \- An RF \fBS\fPignal \fBP\fPropagation, \fBL\fPoss, \fBA\fPnd \fBT\fPerrain analysis tool
 .SH SYNOPSIS
 splat [-t  \fItransmitter_site.qth\fP]
-[-r  \fIreceiver_site.qth\fP]
-[-c  \fIrx_antenna_height_for_los_coverage_analysis (feet) (float)\fP]
-[-L  \fIrx_antenna_height_for_Longley-Rice_coverage_analysis (feet) (float)\fP]
-[-p  \fIterrain_profile.ext\fP]
-[-e  \fIelevation_profile.ext\fP]
-[-h  \fIheight_profile.ext\fP]
-[-l  \fILongley-Rice_profile.ext\fP]
-[-o  \fItopographic_map_filename.ppm\fP]
-[-b  \fIcartographic_boundary_filename.dat\fP]
-[-s  \fIsite/city_database.dat\fP]
-[-d  \fIsdf_directory_path\fP]
-[-m  \fIearth_radius_multiplier (float)\fP]
-[-R  \fImaximum_coverage_range (for -c or -L) (miles) (float)\fP]
+[-r \fIreceiver_site.qth\fP]
+[-c \fIrx antenna height for LOS coverage analysis (feet/meters) (float)\fP]
+[-L \fIrx antenna height for Longley-Rice coverage analysis (feet/meters) (float)\fP]
+[-p \fIterrain_profile.ext\fP]
+[-e \fIelevation_profile.ext\fP]
+[-h \fIheight_profile.ext\fP]
+[-H \fInormalized_height_profile.ext\fP]
+[-l \fILongley-Rice_profile.ext\fP]
+[-o \fItopographic_map_filename.ppm\fP]
+[-b \fIcartographic_boundary_filename.dat\fP]
+[-s \fIsite/city_database.dat\fP]
+[-d \fIsdf_directory_path\fP]
+[-m \fIearth radius multiplier (float)\fP]
+[-f \fIfrequency (MHz) for Fresnel zone calculations (float)\fP]
+[-R \fImaximum coverage radius (miles/kilometers) (float)\fP]
 [-dB \fImaximum attenuation contour to display on path loss maps (80-230 dB)\fP]
+[-nf \fIdo not plot Fresnel zones in height plots\fP]
+[-plo \fIpath_loss_output_file.txt\fP]
+[-pli \fIpath_loss_input_file.txt\fP]
+[-udt \fIuser_defined_terrain_file.dat\fP]
 [-n]
 [-N]
+[-geo]
+[-kml]
+[-metric]
 .SH DESCRIPTION
 \fBSPLAT!\fP is a powerful terrestrial RF propagation and terrain
-analysis tool covering the spectrum between 20 MHz and 20 GHz.  It
-is designed for operation on Unix and Linux-based workstations.
-\fBSPLAT!\fP is free software.  Redistribution and/or modification
+analysis tool covering the spectrum between 20 MHz and 20 GHz.
+\fBSPLAT!\fP is free software, and is designed for operation on Unix
+and Linux-based workstations.  Redistribution and/or modification
 is permitted under the terms of the GNU General Public License as
 published by the Free Software Foundation, either version 2 of the
 License or any later version.  Adoption of \fBSPLAT!\fP source code
@@ -38,36 +47,68 @@ for more details.
 Applications of \fBSPLAT!\fP include the visualization, design, and
 link budget analysis of wireless Wide Area Networks (WANs), commercial
 and amateur radio communication systems above 20 MHz, microwave links,
-frequency coordination, and the determination of analog and digital
-terrestrial radio and television contour regions.
+frequency coordination and interference studies, and the determination
+of analog and digital terrestrial radio and television contour regions.
 
 \fBSPLAT!\fP provides RF site engineering data such as great circle
 distances and bearings between sites, antenna elevation angles (uptilt),
 depression angles (downtilt), antenna height above mean sea level,
 antenna height above average terrain, bearings and distances to known
-obstructions, Longley-Rice path attenuation, and minimum antenna height
-requirements needed to establish line-of-sight communication paths absent
-of obstructions due to terrain.  \fBSPLAT!\fP produces reports, graphs,
-and highly detailed and carefully annotated topographic maps depicting
-line-of-sight paths, path loss, and expected coverage areas of
-transmitters and repeater systems.  When performing line-of-sight
-analysis in situations where multiple transmitter or repeater sites
-are employed, \fBSPLAT!\fP determines individual and mutual areas
-of coverage within the network specified.
-
-\fBSPLAT!\fP operates in two distinct modes: \fIpoint-to-point mode\fP,
-and \fIarea prediction mode\fP, and may be invoked using either
-line-of-sight (LOS) or Irregular Terrain (ITM) propagation models.
-True Earth, four-thirds Earth, or any other Earth radius may be
-specified by the user when performing line-of-sight analysis.
+obstructions, and Longley-Rice path attenuation.  In addition, the minimum
+antenna height requirements needed to clear terrain, the first Fresnel
+zone, and 60% of the first Fresnel zone are also provided.
+
+\fBSPLAT!\fP produces reports, graphs, and high resolution topographic
+maps that depict line-of-sight paths, and regional path loss contours
+through which expected coverage areas of transmitters and repeater
+systems can be obtained.  When performing line-of-sight analysis in
+situations where multiple transmitter or repeater sites are employed,
+\fBSPLAT!\fP determines individual and mutual areas of coverage within
+the network specified.
+
+Simply typing \fCsplat\fR on the command line will return a summary
+of \fBSPLAT!\fP's command line options:
+\fC
+               --==[ SPLAT! v1.2.0 Available Options... ]==--
+
+      -t txsite(s).qth (max of 4)
+      -r rxsite.qth
+      -c plot coverage of TX(s) with an RX antenna at X feet/meters AGL
+      -L plot path loss map of TX based on an RX at X feet/meters AGL
+      -s filename(s) of city/site file(s) to import (max of 5)
+      -b filename(s) of cartographic boundary file(s) to import (5 max)
+      -p filename of terrain profile graph to plot
+      -e filename of terrain elevation graph to plot
+      -h filename of terrain height graph to plot
+      -H filename of normalized terrain height graph to plot
+      -l filename of Longley-Rice graph to plot
+      -o filename of topographic map to generate (.ppm)
+      -u filename of user-defined terrain file to import
+      -d sdf file directory path (overrides path in ~/.splat_path file)
+      -n no analysis, brief report
+      -N no analysis, no report
+      -m earth radius multiplier
+      -f frequency for Fresnel zone calculation (MHz)
+      -R modify default range for -c or -L (miles/kilometers)
+     -db maximum loss contour to display on path loss maps (80-230 dB)
+     -nf do not plot Fresnel zones in height plots
+    -plo filename of path-loss output file
+    -pli filename of path-loss input file
+    -udt filename of user defined terrain input file
+    -geo generate a .geo georeference file (with .ppm output)
+    -kml generate a Google Earth .kml file (for point-to-point links)
+ -metric employ metric rather than imperial units for all user I/O
+\fR
 .SH INPUT FILES
 \fBSPLAT!\fP is a command-line driven application, and reads input
 data through a number of data files.  Some files are mandatory for
 successful execution of the program, while others are optional.
-Mandatory files include SPLAT Data Files (SDF files), site location
-files (QTH files), and Longley-Rice model parameter files (LRP files).
-Optional files include city/site location files, and cartographic
-boundary files.
+Mandatory files include 3-arc second topography models in the
+form of SPLAT Data Files (SDF files), site location files (QTH
+files), and Longley-Rice model parameter files (LRP files).
+Optional files include city location files, cartographic boundary
+files, user-defined terrain files, path-loss input files, and
+antenna radiation pattern files.
 .SH SPLAT DATA FILES
 \fBSPLAT!\fP imports topographic data in the form of SPLAT Data Files
 (SDFs).  These files may be generated from a number of information sources.
@@ -77,9 +118,9 @@ utility included with \fBSPLAT!\fP.  USGS Digital Elevation Models
 compatible with this utility may be downloaded from:
 \fIhttp://edcftp.cr.usgs.gov/pub/data/DEM/250/\fP.
 
-Significantly better resolution can be obtained through the use
-of SRTM-3 Version 2 digital elevation models.  These models are the
-result of the STS-99 Space Shuttle Radar Topography Mission, and are
+Significantly better resolution and accuracy can be obtained through
+the use of SRTM-3 Version 2 digital elevation models.  These models are
+the product of the STS-99 Space Shuttle Radar Topography Mission, and are
 available for most populated regions of the Earth.  SPLAT Data Files
 may be generated from SRTM data using the included \fBsrtm2sdf\fP utility.
 SRTM-3 Version 2 data may be obtained through anonymous FTP from:
@@ -99,24 +140,24 @@ either standard format (\fI.sdf\fP) as generated by the \fBusgs2sdf\fP
 and \fBsrtm2sdf\fP utilities, or in bzip2 compressed format
 (\fI.sdf.bz2\fP).  Since uncompressed files can be processed slightly
 faster than files that have been compressed, \fBSPLAT!\fP searches for
-the needed SDF data in uncompressed format first.  If uncompressed data
-cannot located, \fBSPLAT!\fP then searches for data in bzip2 compressed
+needed SDF data in uncompressed format first.  If uncompressed data
+cannot be located, \fBSPLAT!\fP then searches for data in bzip2 compressed
 format.  If no compressed SDF files can be found for the region requested,
 \fBSPLAT!\fP assumes the region is over water, and will assign an
 elevation of sea-level to these areas.
 
 This feature of \fBSPLAT!\fP makes it possible to perform path analysis
 not only over land, but also between coastal areas not represented by
-Digital Elevation Model data.  This behavior of \fBSPLAT!\fP underscores
-the importance of having all the SDF files required for the region being
-analyzed if meaningful results are to be expected.
+Digital Elevation Model data.  However, this behavior of \fBSPLAT!\fP
+underscores the importance of having all the SDF files required for
+the region being analyzed if meaningful results are to be expected.
 .SH SITE LOCATION (QTH) FILES
 \fBSPLAT!\fP imports site location information of transmitter and receiver
 sites analyzed by the program from ASCII files having a \fI.qth\fP extension.
 QTH files contain the site's name, the site's latitude (positive if North
 of the equator, negative if South), the site's longitude (in degrees West,
-0 to 360 degrees), and the site's antenna height above ground level (AGL).
-A single line-feed character separates each field.  The antenna height is
+0 to 360 degrees), and the site's antenna height above ground level (AGL),
+each separated by a single line-feed character.  The antenna height is
 assumed to be specified in feet unless followed by the letter \fIm\fP or
 the word \fImeters\fP in either upper or lower case.  Latitude and
 longitude information may be expressed in either decimal format (74.6889)
@@ -133,11 +174,12 @@ Trenton, NJ (\fIwnjt.qth\fP) might read as follows:
 Each transmitter and receiver site analyzed by \fBSPLAT!\fP must be
 represented by its own site location (QTH) file.
 .SH LONGLEY-RICE PARAMETER (LRP) FILES
-\fBSPLAT!\fP imports Longley-Rice model parameter data from files having
-the same base name as the transmitter site QTH file, but with a \fI.lrp\fP
-extension, thus providing simple and accurate correlation between these
-associated data sets.  The format for the Longley-Rice model parameter
-files is as follows (\fIwnjt.lrp\fP):
+Longley-Rice parameter data files are required for \fBSPLAT!\fP to
+determine RF path loss in either point-to-point or area prediction
+mode.  Longley-Rice model parameter data is read from files having
+the same base name as the transmitter site QTH file, but with a
+\fI.lrp\fP extension.  \fBSPLAT!\fP LRP files share the following
+format (\fIwnjt.lrp\fP):
 \fC
         15.000  ; Earth Dielectric Constant (Relative permittivity)
         0.005   ; Earth Conductivity (Siemens per meter)
@@ -188,9 +230,9 @@ Temperate climates.
 The final two parameters in the \fI.lrp\fP file correspond to the statistical
 analysis provided by the Longley-Rice model.  In this example, \fBSPLAT!\fP
 will return the maximum path loss occurring 50% of the time (fraction
-of time) in 50% of situations (fraction of situations).  Use a fraction
-of time parameter of 0.97 for digital television, 0.50 for analog in the
-United States.  Isotropic antennas are assumed.
+of time) in 50% of situations (fraction of situations).  In the United
+States, use a fraction of time parameter of 0.97 for digital television
+(8VSB modulation), or 0.50 for analog (VSB-AM+NTSC) transmissions.
 
 For further information on these parameters, see:
 \fIhttp://flattop.its.bldrdoc.gov/itm.html\fP and
@@ -199,9 +241,9 @@ For further information on these parameters, see:
 The names and locations of cities, tower sites, or other points of interest
 may be imported and plotted on topographic maps generated by \fBSPLAT!\fP.
 \fBSPLAT!\fP imports the names of cities and locations from ASCII files
-containing the location's name, the location's latitude, and the location's
-longitude.  Each field is separated by a comma.  Each record is separated
-by a single line feed character.  As was the case with the \fI.qth\fP
+containing the location of interest's name, latitude, and longitude.
+Each field is separated by a comma.  Each record is separated by a
+single line feed character.  As was the case with the \fI.qth\fP
 files, latitude and longitude information may be entered in either
 decimal or degree, minute, second (DMS) format.
 
@@ -219,11 +261,12 @@ A total of five separate city data files may be imported at a time,
 and there is no limit to the size of these files.  \fBSPLAT!\fP reads
 city data on a "first come/first served" basis, and plots only those
 locations whose annotations do not conflict with annotations of
-locations plotted earlier during \fBSPLAT\fP's execution.  This behavior
-minimizes clutter in \fBSPLAT!\fP generated topographic maps, but also
-mandates that important locations be placed toward the beginning of
-the first city data file, and disposable locations be positioned
-further down the list or in subsequent data files.
+locations read earlier in the current city data file, or in previous
+files.  This behavior minimizes clutter in \fBSPLAT!\fP generated
+topographic maps, but also mandates that important locations be placed
+toward the beginning of the first city data file, and locations less
+important be positioned further down the list or in subsequent data
+files.
 
 City data files may be generated manually using any text editor,
 imported from other sources, or derived from data available from the
@@ -253,41 +296,53 @@ The number and type of switches passed to \fBSPLAT!\fP determine its
 mode of operation and method of output data generation.  Nearly all
 of \fBSPLAT!\fP's switches may be cascaded in any order on the command
 line when invoking the program.
+
+\fBSPLAT!\fP operates in two distinct modes: \fIpoint-to-point mode\fP,
+and \fIarea prediction mode\fP.  Either a line-of-sight (LOS) or Longley-Rice
+Irregular Terrain (ITM) propagation model may be invoked by the user.  True
+Earth, four-thirds Earth, or any other user-defined Earth radius may be
+specified when performing line-of-sight analysis.
 .SH POINT-TO-POINT ANALYSIS
 \fBSPLAT!\fP may be used to perform line-of-sight terrain analysis
 between two specified site locations.  For example:
 
 \fCsplat -t tx_site.qth -r rx_site.qth\fR
 
-invokes a terrain analysis between the transmitter specified
-in \fItx_site.qth\fP and receiver specified in \fIrx_site.qth\fP,
-and writes a \fBSPLAT!\fP Obstruction Report to the current working
-directory.  The report contains details of the transmitter and
-receiver sites, and identifies the location of any obstructions
-detected during the analysis.  If an obstruction can be cleared
-by raising the receive antenna to a greater altitude, \fBSPLAT!\fP
-will indicate the minimum antenna height required for a line-of-sight
-path to exist between the transmitter and receiver locations specified.
+invokes a line-of-sight terrain analysis between the transmitter
+specified in \fItx_site.qth\fP and receiver specified in \fIrx_site.qth\fP
+using a True Earth radius model, and writes a \fBSPLAT!\fP Obstruction
+Report to the current working directory.  The report contains details of
+the transmitter and receiver sites, and identifies the location of any
+obstructions detected along the line-of-sight path.  If an obstruction
+can be cleared by raising the receive antenna to a greater altitude,
+\fBSPLAT!\fP will indicate the minimum antenna height required for a
+line-of-sight path to exist between the transmitter and receiver locations
+specified.  Note that imperial units (miles, feet) are specified unless
+the \fI-metric\fP switch is added to \fBSPLAT!\fP's command line options:
+
+\fCsplat -t tx_site.qth -r rx_site.qth -metric\fR
+
 If the antenna must be raised a significant amount, this determination
-may take some time.  Note that the results provided are the \fIminimum\fP
-necessary for a line-of-sight path to exist, and do not take Fresnel
-zone clearance requirements into consideration.
+may take a few moments.  Note that the results provided are the \fIminimum\fP
+necessary for a line-of-sight path to exist, and in the case of this
+simple example, do not take Fresnel zone clearance requirements into
+consideration.
 
 \fIqth\fP extensions are assumed by \fBSPLAT!\fP for QTH files, and
-are optional when invoking the program.  \fBSPLAT!\fP automatically
-reads all SPLAT Data Files necessary to conduct the terrain analysis
-between the sites specified.  \fBSPLAT!\fP searches for the needed
-SDF files in the current working directory first.  If the needed
-files are not found, \fBSPLAT!\fP then searches in the path specified
-by the \fI-d\fP command-line switch:
+are optional when specifying -t and -r arguments on the command-line.
+\fBSPLAT!\fP automatically reads all SPLAT Data Files necessary to
+conduct the terrain analysis between the sites specified.  \fBSPLAT!\fP
+searches for the required SDF files in the current working directory
+first.  If the needed files are not found, \fBSPLAT!\fP then searches
+in the path specified by the \fI-d\fP command-line switch:
 
 \fCsplat -t tx_site -r rx_site -d /cdrom/sdf/\fR
 
 An external directory path may be specified by placing a ".splat_path"
 file under the user's home directory.  This file must contain the full
-directory path to the last resort location of all the SDF files.  The
-path in the \fI$HOME/.splat_path\fP file must be of the form of a
-single line of ASCII text:
+directory path of last resort to all the SDF files.  The path in the
+\fI$HOME/.splat_path\fP file must be of the form of a single line of
+ASCII text:
 
 \fC/opt/splat/sdf/\fR
 
@@ -297,22 +352,22 @@ A graph of the terrain profile between the receiver and transmitter
 locations as a function of distance from the receiver can be generated
 by adding the \fI-p\fP switch:
 
-\fCsplat -t tx_site -r rx_site -p terrain_profile.gif\fR
+\fCsplat -t tx_site -r rx_site -p terrain_profile.png\fR
 
 \fBSPLAT!\fP invokes \fBgnuplot\fP when generating graphs.  The filename
 extension specified to \fBSPLAT!\fP determines the format of the graph
-produced.  \fI.gif\fP will produce a 640x480 color GIF graphic file,
+produced.  \fI.png\fP will produce a 640x480 color PNG graphic file,
 while \fI.ps\fP or \fI.postscript\fP will produce postscript output.
-Output in formats such as PNG, Adobe Illustrator, AutoCAD dxf, LaTeX,
-and many others are available.  Please consult \fBgnuplot\fP, and
-\fBgnuplot\fP's documentation for details on all the supported
+Output in formats such as GIF, Adobe Illustrator, AutoCAD dxf,
+LaTeX, and many others are available.  Please consult \fBgnuplot\fP,
+and \fBgnuplot\fP's documentation for details on all the supported
 output formats.
 
 A graph of elevations subtended by the terrain between the receiver and
 transmitter as a function of distance from the receiver can be generated
 by using the \fI-e\fP switch:
 
-\fCsplat -t tx_site -r rx_site -e elevation_profile.gif\fR
+\fCsplat -t tx_site -r rx_site -e elevation_profile.png\fR
 
 The graph produced using this switch illustrates the elevation and
 depression angles resulting from the terrain between the receiver's
@@ -330,14 +385,29 @@ A graph illustrating terrain height referenced to a line-of-sight
 path between the transmitter and receiver may be generated using
 the \fI-h\fP switch:
 
-\fCsplat -t tx_site -r rx_site -h height_profile.gif\fR
+\fCsplat -t tx_site -r rx_site -h height_profile.png\fR
+
+A terrain height plot normalized to the transmitter and receiver
+antenna heights can be obtained using the \fI-H\fP switch:
+
+\fCsplat -t tx_site -r rx_site -H normalized_height_profile.png\fR
 
-The Earth's curvature is clearly evident when plotting height profiles.
+A contour of the Earth's curvature is also plotted in this mode.
+
+The first Fresnel Zone, and 60% of the first Fresnel Zone can be
+added to height profile graphs by adding the \fI-f\fP switch, and
+specifying a frequency (in MHz) at which the Fresnel Zone should be
+modeled:
+
+\fCsplat -t tx_site -r rx_site -f 439.250 -H normalized_height_profile.png\fR
 
 A graph showing Longley-Rice path loss may be plotted using the
 \fI-l\fP switch:
 
-\fCsplat -t tx_site -r rx_site -l path_loss_profile.gif\fR
+\fCsplat -t tx_site -r rx_site -l path_loss_profile.png\fR
+
+As before, adding the \fI-metric\fP switch forces the graphs to
+be plotted using metric units of measure.
 
 When performing path loss profiles, a Longley-Rice Model Path Loss
 Report is generated by \fBSPLAT!\fP in the form of a text file with
@@ -356,11 +426,11 @@ factor in reception:
 SNR = T - NJ - L + G - NF
 .EN
 
-where \fBT\fP is the ERP of the transmitter in dBW, \fBNJ\fP is
-Johnson Noise in dBW (-136 dBW for a 6 MHz TV channel), \fBL\fP
-is the path loss provided by \fBSPLAT!\fP in dB (as a \fIpositive\fP
-number), \fBG\fP is the receive antenna gain in dB over isotropic,
-and \fBNF\fP is the receiver noise figure in dB.
+where \fBT\fP is the ERP of the transmitter in dBW in the direction
+of the receiver, \fBNJ\fP is Johnson Noise in dBW (-136 dBW for a 6 MHz
+television channel), \fBL\fP is the path loss provided by \fBSPLAT!\fP
+in dB (as a \fIpositive\fP number), \fBG\fP is the receive antenna gain
+in dB over isotropic, and \fBNF\fP is the receiver noise figure in dB.
 
 \fBT\fP may be computed as follows:
 
@@ -380,8 +450,8 @@ necessary to achieve a specific signal-to-noise ratio:
 Signal_Margin = SNR - S
 .EN
 
-where \fBS\fP is the minimum desired SNR ratio (15.5 dB for
-ATSC DTV, 42 dB for analog NTSC television).
+where \fBS\fP is the minimum required SNR ratio (15.5 dB for
+ATSC (8-VSB) DTV, 42 dB for analog NTSC television).
 
 A topographic map may be generated by \fBSPLAT!\fP to visualize the
 path between the transmitter and receiver sites from yet another
@@ -392,18 +462,7 @@ the image is scaled between the highest and lowest elevations present
 in the map.  The only exception to this is sea-level, which is
 represented using the color blue.
 
-\fBSPLAT!\fP generated topographic maps are 24-bit TrueColor Portable
-PixMap (PPM) images.  They may be viewed, edited, or converted to other
-graphic formats by popular image viewing applications such as \fBxv\fP,
-\fBThe GIMP\fP, \fBImageMagick\fP, and \fBXPaint\fP.  PNG format is
-highly recommended for lossless compressed storage of \fBSPLAT!\fP
-generated topographic output files.  An excellent command-line utility
-capable of converting \fBSPLAT!\fP PPM graphic files to PNG files is
-\fBwpng\fP, and is available
-at: \fIhttp://www.libpng.org/pub/png/book/sources.html\fP.  As a last
-resort, PPM files may be compressed using the bzip2 utility, and read
-directly by \fBThe GIMP\fP in this format.  Topographic output
-is specified using the \fI-o\fP switch:
+Topographic output is invoked using the \fI-o\fP switch:
 
 \fCsplat -t tx_site -r rx_site -o topo_map.ppm\fR
 
@@ -434,7 +493,7 @@ switch:
 In situations where multiple transmitter sites are in use, as many as
 four site locations may be passed to \fBSPLAT!\fP at a time for analysis:
 
-\fCsplat -t tx_site1 tx_site2 tx_site3 tx_site4 -r rx_site -p profile.gif\fR
+\fCsplat -t tx_site1 tx_site2 tx_site3 tx_site4 -r rx_site -p profile.png\fR
 
 In this example, four separate terrain profiles and obstruction reports
 will be generated by \fBSPLAT!\fP.  A single topographic map can be
@@ -444,8 +503,23 @@ the map, each in its own color.  The path between the first transmitter
 specified to the receiver will be in green, the path between the
 second transmitter and the receiver will be in cyan, the path between
 the third transmitter and the receiver will be in violet, and the
-path between the fourth transmitter and the receiver will be in sienna. 
-.SH DETERMINING REGIONAL COVERAGE
+path between the fourth transmitter and the receiver will be in sienna.
+
+\fBSPLAT!\fP generated topographic maps are 24-bit TrueColor Portable
+PixMap (PPM) images.  They may be viewed, edited, or converted to other
+graphic formats by popular image viewing applications such as \fBxv\fP,
+\fBThe GIMP\fP, \fBImageMagick\fP, and \fBXPaint\fP.  PNG format is
+highly recommended for lossless compressed storage of \fBSPLAT!\fP
+generated topographic output files.  \fBImageMagick\fP's command-line
+utility easily converts \fBSPLAT!\fP's PPM files to PNG format:
+
+\fCconvert splat_map.ppm splat_map.png\fR
+
+Another excellent PPM to PNG command-line utility is available
+at: \fIhttp://www.libpng.org/pub/png/book/sources.html\fP.  As a last
+resort, PPM files may be compressed using the bzip2 utility, and read
+directly by \fBThe GIMP\fP in this format.
+.SH REGIONAL COVERAGE ANALYSIS
 \fBSPLAT!\fP can analyze a transmitter or repeater site, or network
 of sites, and predict the regional coverage for each site specified.
 In this mode, \fBSPLAT!\fP can generate a topographic map displaying
@@ -460,8 +534,10 @@ switch is invoked as follows:
 In this example, \fBSPLAT!\fP generates a topographic map called
 \fItx_coverage.ppm\fP that illustrates the predicted line-of-sight
 regional coverage of \fItx_site\fP to receiving locations having
-antennas 30.0 feet above ground level (AGL).  The contents of
-\fIcities.dat\fP are plotted on the map, as are the cartographic
+antennas 30.0 feet above ground level (AGL).  If the \fI-metric\fP
+switch is used, the argument following the \fI-c\fP switch is
+interpreted as being in meters, rather than in feet.  The contents
+of \fIcities.dat\fP are plotted on the map, as are the cartographic
 boundaries contained in the file \fIco34_d00.dat\fP.
 
 When plotting line-of-sight paths and areas of regional coverage,
@@ -482,41 +558,15 @@ mean sea level, the antenna's height above mean sea level, the
 antenna's height above average terrain, and the height of the
 average terrain calculated in the directions of 0, 45, 90, 135,
 180, 225, 270, and 315 degrees azimuth.
-
-If the \fI-c\fP switch is replaced by a \fI-L\fP switch, a
-Longley-Rice path loss map for a transmitter site may be generated:
-
-\fCsplat -t wnjt -L 30.0 -s cities.dat -b co34_d00.dat -o path_loss_map\fR
-
-In this mode, \fBSPLAT!\fP generates a multi-color map illustrating
-expected signal levels (path loss) in areas surrounding the transmitter
-site.  A legend at the bottom of the map correlates each color with a
-specific path loss level in decibels.  Since Longley-Rice area
-prediction map generation is very CPU intensive, provision for
-limiting the analysis range is provided by the \fI-R\fP switch.
-The argument must be given in miles.  If a range wider than the
-generated topographic map is specified, \fBSPLAT!\fP will perform
-Longley-Rice path loss calculations between all four corners of
-the area prediction map.
-
-The \fI-db\fP switch allows a constraint to be placed on the maximum
-path loss region plotted on the map.  A path loss between 80 and
-230 dB may be specified using this switch.  For example, if a path
-loss beyond -140 dB is irrelevant to the survey being conducted,
-\fBSPLAT!\fP's path loss plot can be constrained to the region
-bounded by the 140 dB attenuation contour as follows:
-
-\fCsplat -t wnjt -L 30.0 -s cities.dat -b co34_d00.dat -db 140 -o plot.ppm\fR
-
-.SH DETERMINING MULTIPLE REGIONS OF COVERAGE
+.SH DETERMINING MULTIPLE REGIONS OF LOS COVERAGE
 \fBSPLAT!\fP can also display line-of-sight coverage areas for as
 many as four separate transmitter sites on a common topographic map.
 For example:
 
-\fCsplat -t site1 site2 site3 site4 -c 30.0 -o network.ppm\fR
+\fCsplat -t site1 site2 site3 site4 -c 10.0 -metric -o network.ppm\fR
 
 plots the regional line-of-sight coverage of site1, site2, site3,
-and site4 based on a receive antenna located 30.0 feet above ground
+and site4 based on a receive antenna located 10.0 meters above ground
 level.  A topographic map is then written to the file \fInetwork.ppm\fP.
 The line-of-sight coverage area of the transmitters are plotted as
 follows in the colors indicated (along with their corresponding RGB
@@ -544,9 +594,210 @@ values in decimal):
 If separate \fI.qth\fP files are generated, each representing a common
 site location but a different antenna height, a single topographic map
 illustrating the regional coverage from as many as four separate locations
-on a single tower may be generated by \fBSPLAT!\fP. 
-.SH TOPOGRAPHIC MAP GENERATION
-In certain situations, it may be desirable to generate a topographic map
+on a single tower may be generated by \fBSPLAT!\fP.
+.SH LONGLEY-RICE PATH LOSS ANALYSIS 
+If the \fI-c\fP switch is replaced by a \fI-L\fP switch, a
+Longley-Rice path loss map for a transmitter site may be generated:
+
+\fCsplat -t wnjt -L 30.0 -s cities.dat -b co34_d00.dat -o path_loss_map\fR
+
+In this mode, \fBSPLAT!\fP generates a multi-color map illustrating
+expected signal levels (path loss) in areas surrounding the transmitter
+site.  A legend at the bottom of the map correlates each color with a
+specific path loss range in decibels.
+
+The Longley-Rice analysis range may be modified to a user-specific
+value using the \fI-R\fP switch.  The argument must be given in miles
+(or kilometers if the \fI-metric\fP switch is used).  If a range wider
+than the generated topographic map is specified, \fBSPLAT!\fP will
+perform Longley-Rice path loss calculations between all four corners
+of the area prediction map.
+
+The \fI-db\fP switch allows a constraint to be placed on the maximum
+path loss region plotted on the map.  A maximum path loss between 80
+and 230 dB may be specified using this switch.  For example, if a path
+loss beyond -140 dB is irrelevant to the survey being conducted,
+\fBSPLAT!\fP's path loss plot can be constrained to the region
+bounded by the 140 dB attenuation contour as follows:
+
+\fCsplat -t wnjt -L 30.0 -s cities.dat -b co34_d00.dat -db 140 -o plot.ppm\fR
+
+.SH ANTENNA RADIATION PATTERN PARAMETERS
+Normalized field voltage patterns for a transmitting antenna's horizontal
+and vertical planes are imported automatically into \fBSPLAT!\fP when a
+Longley-Rice coverage analysis is performed.  Antenna pattern data is
+read from a pair of files having the same base name as the transmitter
+and LRP files, but with \fI.az\fP and \fI.el\fP extensions for azimuth
+and elevation pattern files, respectively.  Specifications regarding
+pattern rotation (if any) and mechanical beam tilt and tilt direction
+(if any) are also contained within \fBSPLAT!\fP antenna pattern files.
+
+For example, the first few lines of a \fBSPLAT!\fP azimuth pattern file
+might appear as follows (\fIkvea.az\fP):
+\fC
+        183.0
+        0       0.8950590
+        1       0.8966406
+        2       0.8981447
+        3       0.8995795
+        4       0.9009535
+        5       0.9022749
+        6       0.9035517
+        7       0.9047923
+        8       0.9060051
+\fR
+The first line of the \fI.az\fP file specifies the amount of azimuthal
+pattern rotation (measured clockwise in degrees from True North) to be
+applied by \fBSPLAT!\fP to the data contained in the \fI.az\fP file.
+This is followed by azimuth headings (0 to 360 degrees) and their associated
+normalized field patterns (0.000 to 1.000) separated by whitespace.
+
+The structure of \fBSPLAT!\fP elevation pattern files is slightly different.
+The first line of the \fI.el\fP file specifies the amount of mechanical
+beam tilt applied to the antenna.  Note that a \fIdownward tilt\fP
+(below the horizon) is expressed as a \fIpositive angle\fP, while an
+\fIupward tilt\fP (above the horizon) is expressed as a \fInegative angle\fP.
+This data is followed by the azimuthal direction of the tilt, separated by
+whitespace.
+
+The remainder of the file consists of elevation angles and their
+corresponding normalized voltage radiation pattern (0.000 to 1.000)
+values separated by whitespace.  Elevation angles must be specified
+over a -10.0 to +90.0 degree range.  As was the convention with mechanical
+beamtilt, \fInegative elevation angles\fP are used to represent elevations
+\fIabove the horizon\fP, while \fIpositive angles\fP represents elevations
+\fIbelow the horizon\fP.
+
+For example, the first few lines a \fBSPLAT!\fP elevation pattern file
+might appear as follows (\fIkvea.el\fP):
+\fC
+        1.1    130.0
+       -10.0   0.172
+       -9.5    0.109
+       -9.0    0.115
+       -8.5    0.155
+       -8.0    0.157
+       -7.5    0.104
+       -7.0    0.029
+       -6.5    0.109
+       -6.0    0.185
+\fR
+In this example, the antenna is mechanically tilted downward 1.1 degrees
+towards an azimuth of 130.0 degrees.
+
+For best results, the resolution of azimuth pattern data should be
+specified to the nearest degree azimuth, and elevation pattern data
+resolution should be specified to the nearest 0.01 degrees.  If the
+pattern data specified does not reach this level of resolution,
+\fBSPLAT!\fP will interpolate the values provided to determine the
+data at the required resolution, although this may result in a loss
+in accuracy.
+
+.SH IMPORTING AND EXPORTING REGIONAL PATH LOSS CONTOUR DATA
+Performing a Longley-Rice coverage analysis can be a very time
+consuming process, especially if the analysis is repeated repeatedly
+to discover what effects changes to the antenna radiation patterns
+make to the predicted coverage area.
+
+This process can be expedited by exporting the Longley-Rice
+regional path loss contour data to an output file, modifying the
+path loss data externally to incorporate antenna pattern effects,
+and then importing the modified path loss data back into \fBSPLAT!\fP
+to rapidly produce a revised path loss map.
+
+For example, a path loss output file can be generated by \fBSPLAT!\fP
+for a receive site 30 feet above ground level over a 50 mile radius
+surrounding a transmitter site to a maximum path loss of 140 dB using
+the following syntax:
+
+\fCsplat -t kvea -L 30.0 -R 50.0 -db 140 -plo pathloss.dat\fR
+
+\fBSPLAT!\fP path loss output files often exceed 100 megabytes in size.
+They contain information relating to the boundaries of region they describe
+followed by latitudes (degrees North), longitudes (degrees West), azimuths,
+elevations (to the first obstruction), and path loss figures (dB) for a
+series of specific points that comprise the region surrounding the
+transmitter site.  The first few lines of a \fBSPLAT!\fP path loss
+output file take on the following appearance (\fIpathloss.dat\fP):
+\fC
+        119, 117    ; max_west, min_west
+        35, 33      ; max_north, min_north
+        34.2265434, 118.0631104, 48.171, -37.461, 67.70
+        34.2270355, 118.0624390, 48.262, -26.212, 73.72
+        34.2280197, 118.0611038, 48.269, -14.951, 79.74
+        34.2285156, 118.0604401, 48.207, -11.351, 81.68
+        34.2290077, 118.0597687, 48.240, -10.518, 83.26
+        34.2294998, 118.0591049, 48.225, 23.201, 84.60
+        34.2304878, 118.0577698, 48.213, 15.769, 137.84
+        34.2309799, 118.0570984, 48.234, 15.965, 151.54
+        34.2314720, 118.0564346, 48.224, 16.520, 149.45
+        34.2319679, 118.0557632, 48.223, 15.588, 151.61
+        34.2329521, 118.0544281, 48.230, 13.889, 135.45
+        34.2334442, 118.0537643, 48.223, 11.693, 137.37
+        34.2339401, 118.0530930, 48.222, 14.050, 126.32
+        34.2344322, 118.0524292, 48.216, 16.274, 156.28
+        34.2354164, 118.0510941, 48.222, 15.058, 152.65
+        34.2359123, 118.0504227, 48.221, 16.215, 158.57
+        34.2364044, 118.0497589, 48.216, 15.024, 157.30
+        34.2368965, 118.0490875, 48.225, 17.184, 156.36
+\fR
+It is not uncommon for \fBSPLAT!\fP path loss files to contain as
+many as 3 million or more lines of data.  Comments can be placed in
+the file if they are proceeded by a semicolon character.  The \fBvim\fP
+text editor has proven capable of editing files of this size.
+
+Note as was the case in the antenna pattern files, negative elevation
+angles refer to upward tilt (above the horizon), while positive angles
+refer to downward tilt (below the horizon).  These angles refer to the
+elevation to the receiving antenna at the height above ground level
+specified using the \fI-L\fP switch \fIif\fP the path between transmitter
+and receiver is unobstructed.  If the path between the transmitter
+and receiver is obstructed, then the elevation angle to the first
+obstruction is returned by \fBSPLAT!\fP.  This is because
+the Longley-Rice model considers the energy reaching a distant point
+over an obstructed path as a derivative of the energy scattered from
+the top of the first obstruction, only.  Since energy cannot reach
+the obstructed location directly, the actual elevation angle to that
+point is irrelevant.
+
+When modifying \fBSPLAT!\fP path loss files to reflect antenna
+pattern data, \fIonly the last column (path loss)\fP should be amended
+to reflect the antenna's normalized gain at the azimuth and elevation
+angles specified in the file.  (At this time, programs and scripts
+capable of performing this operation are left as an exercise for
+the user.)
+
+Modified path loss maps can be imported back into \fBSPLAT!\fP for
+generating revised coverage maps:
+
+\fCsplat -t kvea -pli pathloss.dat -s city.dat -b county.dat -o map.ppm\fR
+
+\fBSPLAT!\fP path loss files can also be used for conducting coverage or
+interference studies outside of \fBSPLAT!\fP.
+.SH USER-DEFINED TERRAIN INPUT FILES
+A user-defined terrain file is a user-generated text file containing latitudes,
+longitudes, and heights above ground level of specific terrain features believed
+to be of importance to the \fBSPLAT!\fP analysis being conducted, but noticeably
+absent from the SDF files being used.  A user-defined terrain file is imported
+into a \fBSPLAT!\fP analysis using the \fI-udt\fP switch:
+
+\fC splat -t tx_site -r rx_site -udt udt_file.txt -o map.ppm\fR
+
+A user-defined terrain file has the following appearance and structure:
+\fC
+       40.32180556, 74.1325, 100.0 meters
+       40.321805, 74.1315, 300.0
+       40.3218055, 74.1305, 100.0 meters
+\fR
+Terrain height is interpreted as being described in feet above ground
+level unless followed by the word \fImeters\fP, and is added \fIon top of\fP
+the terrain specified in the SDF data for the locations specified.  Be
+aware that each user-defined terrain feature specified will be interpreted
+as being 3-arc seconds in both latitude and longitude.  Features described 
+in the user-defined terrain file that overlap previously defined features
+in the file are ignored by \fBSPLAT!\fP. 
+.SH SIMPLE TOPOGRAPHIC MAP GENERATION
+In certain situations it may be desirable to generate a topographic map
 of a region without plotting coverage areas, line-of-sight paths, or
 generating obstruction reports.  There are several ways of doing this.
 If one wishes to generate a topographic map illustrating the location
@@ -560,9 +811,50 @@ If no text report is desired, then the \fI-N\fP switch is used:
 
 \fCsplat -t tx_site -r rx_site -N -o topo_map.ppm\fR
 
-If the \fI-o\fP switch and output filename are omitted when using
-either the \fI-n\fP or \fI-N\fP switches, output is written to a
-file named \fImap.ppm\fP in the current working directory by default.
+If a topographic map centered about a single site out to a minimum
+specified radius is desired instead, a command similar to the following
+can be used:
+
+\fCsplat -t tx_site -R 50.0 -s NJ_Cities -b NJ_Counties -o topo_map.ppm\fR
+
+where -R specifies the minimum radius of the map in miles (or kilometers
+if the \fI-metric\fP switch is used).
+
+If the \fI-o\fP switch and output filename are omitted in these
+operations, topographic output is written to a file named \fImap.ppm\fP
+in the current working directory by default.
+.SH GEOREFERENCE FILE GENERATION
+Topographic, coverage (\fI-c\fP), and path loss contour (\fI-L\fP) maps
+generated by \fBSPLAT!\fP may be imported into \fBXastir\fP (X Amateur
+Station Tracking and Information Reporting) software by generating a
+georeference file using \fBSPLAT!\fP's \fI-geo\fP switch:
+
+\fCsplat -t kd2bd -R 50.0 -s NJ_Cities -b NJ_Counties -geo -o map.ppm\fR
+
+The georeference file generated will have the same base name as the
+\fI-o\fP file specified, but have a \fI .geo\fP extension, and permit
+proper interpretation and display of \fBSPLAT!\fP's .ppm graphics in
+\fBXastir\fP software.
+.SH GOOGLE MAP KML FILE GENERATION
+Keyhole Markup Language files compatible with \fBGoogle Earth\fP may
+be generated by \fBSPLAT!\fP when performing point-to-point analyses
+by invoking the \fI-kml\fP switch:
+
+\fCsplat -t wnjt -r kd2bd -kml\fR
+
+The KML file generated will have the same filename structure as an
+Obstruction Report for the transmitter and receiver site names given,
+except it will carry a \fI .kml\fP extension.
+
+Once loaded into \fBGoogle Earth\fP (File --> Open), the KML file
+will annotate the map display with the names of the transmitter and
+receiver site locations.  The viewpoint of the image will be from the
+position of the transmitter site looking towards the location of the
+receiver.  The point-to-point path between the sites will be displayed
+as a white line while the RF line-of-sight path will be displayed in
+green.  \fBGoogle Earth\fP's navigation tools allow the user to
+"fly" around the path, identify landmarks, roads, and other
+featured content.
 .SH DETERMINATION OF ANTENNA HEIGHT ABOVE AVERAGE TERRAIN
 \fBSPLAT!\fP determines antenna height above average terrain (HAAT)
 according to the procedure defined by Federal Communications Commission
@@ -572,10 +864,7 @@ being analyzed are sampled and averaged for each 45 degrees of azimuth
 starting with True North.  If one or more radials lie entirely over water
 or over land outside the United States (areas for which no USGS topography
 data is available), then those radials are omitted from the calculation
-of average terrain.  If part of a radial extends over a body of water or
-over land outside the United States, then only that part of the radial
-lying over United States land is used in the determination of average
-terrain.
+of average terrain.
 
 Note that SRTM elevation data, unlike older 3-arc second USGS data,
 extends beyond the borders of the United States.  Therefore, HAAT
@@ -595,21 +884,21 @@ normally loaded by \fBSPLAT!\fP to perform average terrain calculations.
 Under such conditions, \fBSPLAT!\fP will provide the antenna height
 above average terrain as well as the average terrain above mean sea
 level for azimuths of 0, 45, 90, 135, 180, 225, 270, and 315 degrees,
-and include such information in the site report generated.  If one or
+and include such information in the generated site report.  If one or
 more of the eight radials surveyed fall over water, or over regions
 for which no SDF data is available, \fBSPLAT!\fP reports \fINo Terrain\fP
 for the radial paths affected.
 .SH RESTRICTING THE MAXIMUM SIZE OF AN ANALYSIS REGION
-\fBSPLAT!\fP reads SDF files as needed into a series of memory "slots"
-within the structure of the program.  Each "slot" holds one SDF file
-representing a one degree by one degree region of terrain.
+\fBSPLAT!\fP reads SDF files as needed into a series of memory pages
+or "slots" within the structure of the program.  Each "slot" holds one
+SDF file representing a one degree by one degree region of terrain.
 A \fI#define MAXSLOTS\fP statement in the first several lines of
-\fIsplat.cpp\fP sets the maximum number of "slots" available for topography
-data.  It also sets the maximum size of the topographic maps generated by
-\fBSPLAT!\fP.  MAXSLOTS is set to 9 by default.  If \fBSPLAT!\fP produces
-a segmentation fault on start-up with this default, it is an indication
+\fIsplat.cpp\fP sets the maximum number of "slots" available for holding
+topography data.  It also sets the maximum size of the topographic maps
+generated by \fBSPLAT!\fP.  MAXSLOTS is set to 9 by default.  If \fBSPLAT!\fP
+produces a segmentation fault on start-up with this default, it is an indication
 that not enough RAM and/or virtual memory (swap space) is available to
-run \fBSPLAT!\fP with this number of MAXSLOTS.  In situations where
+run \fBSPLAT!\fP with the number of MAXSLOTS specified.  In situations where
 available memory is low, MAXSLOTS may be reduced to 4 with the understanding
 that this will greatly limit the maximum region \fBSPLAT!\fP will be able
 to analyze.  If 118 megabytes or more of total memory (swap space plus
@@ -618,10 +907,6 @@ permit operation over a 4-degree by 4-degree region, which is sufficient
 for single antenna heights in excess of 10,000 feet above mean sea
 level, or point-to-point distances of over 1000 miles.
 .SH ADDITIONAL INFORMATION
-Invoking \fBSPLAT!\fP without any arguments will display all the
-command-line options available with the program along with a brief
-summary of each.
-
 The latest news and information regarding \fBSPLAT!\fP software is
 available through the official \fBSPLAT!\fP software web page located
 at: \fIhttp://www.qsl.net/kd2bd/splat.html\fP.
@@ -632,3 +917,7 @@ Creator, Lead Developer
 .TP
 Doug McDonald <\fImcdonald@scs.uiuc.edu\fP>
 Longley-Rice Model integration
+.TP
+Ron Bentley <\fIronbentley@earthlink.net\fP>
+Fresnel Zone plotting and clearance determination
+
index 0ad143cd9ab20f6ba9d5b8494b5a565749b97e58..b12fbbf726612f4504b8ac4d21e59b4b36ceba24 100644 (file)
Binary files a/docs/pdf/splat.pdf and b/docs/pdf/splat.pdf differ
index 291e7ffd92e8ba218e4287a05dfdce31f0cba671..aa1924925fa2d72fdad77b917358cceaef62d163 100644 (file)
@@ -1,13 +1,13 @@
 %!PS-Adobe-3.0
 %%Creator: groff version 1.17.2
-%%CreationDate: Thu Mar 16 14:29:40 2006
+%%CreationDate: Fri Dec 22 13:04:16 2006
 %%DocumentNeededResources: font Times-Roman
 %%+ font Times-Bold
 %%+ font Times-Italic
 %%+ font Courier
 %%+ font Symbol
 %%DocumentSuppliedResources: procset grops 1.17 2
-%%Pages: 9
+%%Pages: 14
 %%PageOrder: Ascend
 %%Orientation: Portrait
 %%EndComments
@@ -213,508 +213,585 @@ BP
 /Times-Bold@0 SF -.219(NA)72 84 S(ME).219 E F0(splat \255 An RF)108 96 Q
 /F2 10/Times-Bold@0 SF(S)2.5 E F0(ignal)A F2(P)2.5 E F0(ropag)A(ation,)
 -.05 E F2(L)2.5 E F0(oss,)A F2(A)2.5 E F0(nd)A F2(T)2.5 E F0
-(errain analysis tool)A F1(SYNOPSIS)72 112.8 Q F0 3.47(splat [-t)108
-124.8 R/F3 10/Times-Italic@0 SF(tr)8.47 E(ansmitter_site)-.15 E(.qth)
--.15 E F0 5.97(][)C(-r)-5.97 E F3 -.37(re)8.47 G(ceiver_site).37 E(.qth)
--.15 E F0 5.97(][)C(-c)-5.97 E F3(rx_antenna_height_for_los_co)8.47 E
-(ver)-.1 E -.1(age)-.15 G(_analysis).1 E 1.244(\(feet\) \(\215oat\))108
-136.8 R F0 3.744(][)C(-L)-3.744 E F3(rx_antenna_height_for_Longle)6.244
-E(y-Rice_co)-.3 E(ver)-.1 E -.1(age)-.15 G 1.244
-(_analysis \(feet\) \(\215oat\)).1 F F0 3.745(][)C(-p)-3.745 E F3(terr)
-6.245 E(ain_pr)-.15 E(o-)-.45 E(\214le)108 148.8 Q(.e)-.15 E(xt)-.2 E F0
-8.718(][)C(-e)-8.718 E F3(ele)11.218 E(vation_pr)-.15 E(o\214le)-.45 E
-(.e)-.15 E(xt)-.2 E F0 8.718(][)C(-h)-8.718 E F3(height_pr)11.218 E
-(o\214le)-.45 E(.e)-.15 E(xt)-.2 E F0 8.717(][)C(-l)-8.717 E F3(Longle)
-11.217 E(y-Rice_pr)-.3 E(o\214le)-.45 E(.e)-.15 E(xt)-.2 E F0 8.717(][)C
-(-o)-8.717 E F3(topo-)11.217 E(gr)108 160.8 Q(aphic_map_\214lename)-.15
-E(.ppm)-.15 E F0 6.97(][)C(-b)-6.97 E F3(carto)9.47 E(gr)-.1 E
-(aphic_boundary_\214lename)-.15 E(.dat)-.15 E F0 6.97(][)C(-s)-6.97 E F3
-(site/city_database)9.47 E(.dat)-.15 E F0 6.97(][)C(-d)-6.97 E F3
-(sdf_dir)108 172.8 Q(ectory_path)-.37 E F0 4.932(][)C(-m)-4.932 E F3
-(earth_r)7.431 E 2.431(adius_multiplier \(\215oat\))-.15 F F0 4.931(][)C
-(-R)-4.931 E F3(maximum_co)7.431 E(ver)-.1 E -.1(age)-.15 G(_r).1 E(ang)
--.15 E 4.931(e\()-.1 G 2.431(for -c or -L\))-4.931 F
-(\(miles\) \(\215oat\))108 184.8 Q F0 2.5(][)C(-dB)-2.5 E F3
-(maximum attenuation contour to display on path loss maps \(80-230 dB\))
-2.5 E F0 2.5(][)C(-n] [-N])-2.5 E F1(DESCRIPTION)72 201.6 Q F2(SPLA)108
-213.6 Q(T!)-.95 E F0 .853(is a po)3.353 F .853
-(werful terrestrial RF propag)-.25 F .854
-(ation and terrain analysis tool co)-.05 F -.15(ve)-.15 G .854
-(ring the spectrum between).15 F .33(20 MHz and 20 GHz.)108 225.6 R .33
-(It is designed for operation on Unix and Linux-based w)5.33 F
-(orkstations.)-.1 E F2(SPLA)5.33 E(T!)-.95 E F0 .33(is free)2.83 F
-(softw)108 237.6 Q 4.453(are. Redistrib)-.1 F 1.954(ution and/or modi\
+(errain analysis tool)A F1(SYNOPSIS)72 112.8 Q F0 2.893(splat [-t)108
+124.8 R/F3 10/Times-Italic@0 SF(tr)7.893 E(ansmitter_site)-.15 E(.qth)
+-.15 E F0 5.393(][)C(-r)-5.393 E F3 -.37(re)5.393 G(ceiver_site).37 E
+(.qth)-.15 E F0 5.393(][)C(-c)-5.393 E F3 2.892
+(rx antenna height for LOS co)5.393 F(ver)-.1 E 3.092 -.1(age a)-.15 H
+(nalysis).1 E(\(feet/meter)108 136.8 Q .399(s\) \(\215oat\))-.1 F F0
+2.899(][)C(-L)-2.899 E F3 .399(rx antenna height for Longle)2.899 F .399
+(y-Rice co)-.3 F(ver)-.1 E .599 -.1(age a)-.15 H .399
+(nalysis \(feet/meter).1 F .4(s\) \(\215oat\))-.1 F F0 2.9(][)C(-p)-2.9
+E F3(ter)2.9 E(-)-.2 E -.15(ra)108 148.8 S(in_pr).15 E(o\214le)-.45 E
+(.e)-.15 E(xt)-.2 E F0 2.85(][)C(-e)-2.85 E F3(ele)2.85 E(vation_pr)-.15
+E(o\214le)-.45 E(.e)-.15 E(xt)-.2 E F0 2.85(][)C(-h)-2.85 E F3
+(height_pr)2.85 E(o\214le)-.45 E(.e)-.15 E(xt)-.2 E F0 2.85(][)C(-H)
+-2.85 E F3(normalized_height_pr)2.85 E(o\214le)-.45 E(.e)-.15 E(xt)-.2 E
+F0 2.85(][)C(-l)-2.85 E F3(Lon-)2.85 E(gle)108 160.8 Q(y-Rice_pr)-.3 E
+(o\214le)-.45 E(.e)-.15 E(xt)-.2 E F0 5.518(][)C(-o)-5.518 E F3(topo)
+5.518 E(gr)-.1 E(aphic_map_\214lename)-.15 E(.ppm)-.15 E F0 5.518(][)C
+(-b)-5.518 E F3(carto)5.518 E(gr)-.1 E(aphic_boundary_\214lename)-.15 E
+(.dat)-.15 E F0 5.518(][)C(-s)-5.518 E F3(site/city_database)108 172.8 Q
+(.dat)-.15 E F0 3.236(][)C(-d)-3.236 E F3(sdf_dir)3.236 E(ectory_path)
+-.37 E F0 3.236(][)C(-m)-3.236 E F3 .736(earth r)3.236 F .735
+(adius multiplier \(\215oat\))-.15 F F0 3.235(][)C(-f)-3.235 E F3(fr)
+3.235 E .735(equency \(MHz\) for)-.37 F -1.77 -.55(Fr e)108 184.8 T .815
+(snel zone calculations \(\215oat\)).55 F F0 3.315(][)C(-R)-3.315 E F3
+.815(maximum co)3.315 F(ver)-.1 E 1.016 -.1(age r)-.15 H .816
+(adius \(miles/kilometer)-.05 F .816(s\) \(\215oat\))-.1 F F0 3.316(][)C
+(-dB)-3.316 E F3(maximum)3.316 E 1.431
+(attenuation contour to display on path loss maps \(80-230 dB\))108
+196.8 R F0 3.931(][)C(-nf)-3.931 E F3 1.43(do not plot F)3.93 F -.37(re)
+-.55 G 1.43(snel zones in height).37 F(plots)108 208.8 Q F0 2.874(][)C
+(-plo)-2.874 E F3(path_loss_output_\214le)2.874 E(.txt)-.15 E F0 2.874
+(][)C(-pli)-2.874 E F3(path_loss_input_\214le)2.874 E(.txt)-.15 E F0
+2.874(][)C(-udt)-2.874 E F3(user_de\214ned_terr)2.875 E(ain_\214le)-.15
+E(.dat)-.15 E F0 2.875(][)C(-n])-2.875 E([-N] [-geo] [-kml] [-metric])
+108 220.8 Q F1(DESCRIPTION)72 237.6 Q F2(SPLA)108 249.6 Q(T!)-.95 E F0
+.854(is a po)3.354 F .854(werful terrestrial RF propag)-.25 F .853
+(ation and terrain analysis tool co)-.05 F -.15(ve)-.15 G .853
+(ring the spectrum between).15 F .968(20 MHz and 20 GHz.)108 261.6 R F2
+(SPLA)5.968 E(T!)-.95 E F0 .968(is free softw)3.468 F .968
+(are, and is designed for operation on Unix and Linux-based)-.1 F -.1
+(wo)108 273.6 S 3.171(rkstations. Redistrib).1 F .671(ution and/or modi\
 \214cation is permitted under the terms of the GNU General Public)-.2 F
-.376(License as published by the Free Softw)108 249.6 R .376(are F)-.1 F
+.376(License as published by the Free Softw)108 285.6 R .376(are F)-.1 F
 .376(oundation, either v)-.15 F .376(ersion 2 of the License or an)-.15
-F 2.875(yl)-.15 G .375(ater v)-2.875 F(ersion.)-.15 E .348(Adoption of)
-108 261.6 R F2(SPLA)2.848 E(T!)-.95 E F0 .349(source code in proprietar\
-y or closed-source applications is a violation of this license,)2.848 F
-(and is)108 273.6 Q F2(strictly)2.5 E F0(forbidden.)2.5 E F2(SPLA)108
-297.6 Q(T!)-.95 E F0 .531(is distrib)3.031 F .531
-(uted in the hope that it will be useful, b)-.2 F .53(ut WITHOUT ANY W)
--.2 F(ARRANTY)-1.2 E 3.03(,w)-1.29 G .53(ithout e)-3.03 F -.15(ve)-.25 G
-(n).15 E .959(the implied w)108 309.6 R .959(arranty of MERCHANT)-.1 F
-.959(ABILITY or FITNESS FOR A P)-.93 F(AR)-.92 E .96
+F 2.876(yl)-.15 G .376(ater v)-2.876 F(ersion.)-.15 E .349(Adoption of)
+108 297.6 R F2(SPLA)2.849 E(T!)-.95 E F0 .349(source code in proprietar\
+y or closed-source applications is a violation of this license,)2.849 F
+(and is)108 309.6 Q F2(strictly)2.5 E F0(forbidden.)2.5 E F2(SPLA)108
+333.6 Q(T!)-.95 E F0 .53(is distrib)3.03 F .531
+(uted in the hope that it will be useful, b)-.2 F .531(ut WITHOUT ANY W)
+-.2 F(ARRANTY)-1.2 E 3.031(,w)-1.29 G .531(ithout e)-3.031 F -.15(ve)
+-.25 G(n).15 E .96(the implied w)108 345.6 R .959(arranty of MERCHANT)
+-.1 F .959(ABILITY or FITNESS FOR A P)-.93 F(AR)-.92 E .959
 (TICULAR PURPOSE. See the)-.6 F
-(GNU General Public License for more details.)108 321.6 Q F1(INTR)72
-338.4 Q(ODUCTION)-.329 E F0 .575(Applications of)108 350.4 R F2(SPLA)
-3.075 E(T!)-.95 E F0 .574(include the visualization, design, and link b)
-3.075 F .574(udget analysis of wireless W)-.2 F .574(ide Area)-.4 F
-(Netw)108 362.4 Q 1.939(orks \(W)-.1 F 1.939
+(GNU General Public License for more details.)108 357.6 Q F1(INTR)72
+374.4 Q(ODUCTION)-.329 E F0 .574(Applications of)108 386.4 R F2(SPLA)
+3.074 E(T!)-.95 E F0 .574(include the visualization, design, and link b)
+3.074 F .575(udget analysis of wireless W)-.2 F .575(ide Area)-.4 F
+(Netw)108 398.4 Q 1.94(orks \(W)-.1 F 1.939
 (ANs\), commercial and amateur radio communication systems abo)-1.2 F
-2.239 -.15(ve 2)-.15 H 4.439(0M).15 G 1.94(Hz, micro)-4.439 F -.1(wa)
--.25 G -.15(ve)-.1 G 1.194(links, frequenc)108 374.4 R 3.694(yc)-.15 G
-1.194(oordination, and the determination of analog and digital terrestr\
-ial radio and tele)-3.694 F(vision)-.25 E(contour re)108 386.4 Q(gions.)
--.15 E F2(SPLA)108 410.4 Q(T!)-.95 E F0(pro)4.69 E 2.191(vides RF site \
-engineering data such as great circle distances and bearings between si\
-tes,)-.15 F 2.725(antenna ele)108 422.4 R -.25(va)-.25 G 2.724
-(tion angles \(uptilt\), depression angles \(do).25 F 2.724
-(wntilt\), antenna height abo)-.25 F 3.024 -.15(ve m)-.15 H 2.724
-(ean sea le).15 F -.15(ve)-.25 G(l,).15 E 1.65(antenna height abo)108
-434.4 R 1.95 -.15(ve a)-.15 H -.15(ve)-.05 G 1.65
-(rage terrain, bearings and distances to kno).15 F 1.65
-(wn obstructions, Longle)-.25 F 1.65(y-Rice path)-.15 F 1.565(attenuati\
-on, and minimum antenna height requirements needed to establish line-of\
--sight communication)108 446.4 R .072
-(paths absent of obstructions due to terrain.)108 458.4 R F2(SPLA)5.072
-E(T!)-.95 E F0 .072
-(produces reports, graphs, and highly detailed and care-)2.572 F .986(f\
-ully annotated topographic maps depicting line-of-sight paths, path los\
-s, and e)108 470.4 R .985(xpected co)-.15 F -.15(ve)-.15 G .985
-(rage areas of).15 F 1.777(transmitters and repeater systems.)108 482.4
-R 1.777
-(When performing line-of-sight analysis in situations where multiple)
-6.777 F 1.395(transmitter or repeater sites are emplo)108 494.4 R(yed,)
--.1 E F2(SPLA)3.895 E(T!)-.95 E F0 1.395(determines indi)3.895 F 1.394
-(vidual and mutual areas of co)-.25 F -.15(ve)-.15 G(rage).15 E
-(within the netw)108 506.4 Q(ork speci\214ed.)-.1 E F2(SPLA)108 530.4 Q
-(T!)-.95 E F0 2.137(operates in tw)4.637 F 4.638(od)-.1 G 2.138
-(istinct modes:)-4.638 F F3 2.138(point-to-point mode)4.638 F F0 4.638
-(,a)C(nd)-4.638 E F3(ar)4.638 E 2.138(ea pr)-.37 F 2.138(ediction mode)
--.37 F F0 4.638(,a)C 2.138(nd may be)-4.638 F(in)108 542.4 Q -.2(vo)-.4
-G -.1(ke).2 G 3.084(du).1 G .583
-(sing either line-of-sight \(LOS\) or Irre)-3.084 F .583(gular T)-.15 F
-.583(errain \(ITM\) propag)-.7 F .583(ation models.)-.05 F -.35(Tr)5.583
-G .583(ue Earth, four).35 F(-)-.2 E .243(thirds Earth, or an)108 554.4 R
-2.743(yo)-.15 G .243(ther Earth radius may be speci\214ed by the user w\
-hen performing line-of-sight analysis.)-2.743 F F1(INPUT FILES)72 571.2
-Q F2(SPLA)108 583.2 Q(T!)-.95 E F0 .508(is a command-line dri)3.008 F
--.15(ve)-.25 G 3.008(na).15 G .507
+2.239 -.15(ve 2)-.15 H 4.439(0M).15 G 1.939(Hz, micro)-4.439 F -.1(wa)
+-.25 G -.15(ve)-.1 G .92(links, frequenc)108 410.4 R 3.42(yc)-.15 G .92
+(oordination and interference studies, and the determination of analog \
+and digital terres-)-3.42 F(trial radio and tele)108 422.4 Q
+(vision contour re)-.25 E(gions.)-.15 E F2(SPLA)108 446.4 Q(T!)-.95 E F0
+(pro)4.691 E 2.191(vides RF site engineering data such as great circle \
+distances and bearings between sites,)-.15 F 2.724(antenna ele)108 458.4
+R -.25(va)-.25 G 2.724(tion angles \(uptilt\), depression angles \(do)
+.25 F 2.724(wntilt\), antenna height abo)-.25 F 3.024 -.15(ve m)-.15 H
+2.725(ean sea le).15 F -.15(ve)-.25 G(l,).15 E .22(antenna height abo)
+108 470.4 R .52 -.15(ve a)-.15 H -.15(ve)-.05 G .22
+(rage terrain, bearings and distances to kno).15 F .22
+(wn obstructions, and Longle)-.25 F .22(y-Rice path)-.15 F 2.726
+(attenuation. In)108 482.4 R .226(addition, the minimum antenna height \
+requirements needed to clear terrain, the \214rst Fresnel)2.726 F
+(zone, and 60% of the \214rst Fresnel zone are also pro)108 494.4 Q
+(vided.)-.15 E F2(SPLA)108 518.4 Q(T!)-.95 E F0 .102(produces reports, \
+graphs, and high resolution topographic maps that depict line-of-sight \
+paths, and)2.603 F(re)108 530.4 Q .153
+(gional path loss contours through which e)-.15 F .154(xpected co)-.15 F
+-.15(ve)-.15 G .154(rage areas of transmitters and repeater systems can)
+.15 F 1.237(be obtained.)108 542.4 R 1.237(When performing line-of-sigh\
+t analysis in situations where multiple transmitter or repeater)6.237 F
+.368(sites are emplo)108 554.4 R(yed,)-.1 E F2(SPLA)2.868 E(T!)-.95 E F0
+.368(determines indi)2.868 F .369(vidual and mutual areas of co)-.25 F
+-.15(ve)-.15 G .369(rage within the netw).15 F .369(ork speci-)-.1 F
+(\214ed.)108 566.4 Q(Simply typing)108 590.4 Q/F4 10/Courier@0 SF(splat)
+2.5 E F0(on the command line will return a summary of)2.5 E F2(SPLA)2.5
+E(T!)-.95 E F0 1.1 -.55('s c)D(ommand line options:).55 E F4
+(--==[ SPLAT! v1.2.0 Available Options... ]==--)198 614.4 Q
+(-t txsite\(s\).qth \(max of 4\))144 638.4 Q(-r rxsite.qth)144 650.4 Q
+(-c plot coverage of TX\(s\) with an RX antenna at X feet/meters AGL)144
+662.4 Q(-L plot path loss map of TX based on an RX at X feet/meters AGL)
+144 674.4 Q
+(-s filename\(s\) of city/site file\(s\) to import \(max of 5\))144
+686.4 Q(-b filename\(s\) of cartographic boundary file\(s\) to import \
+\(5 max\))144 698.4 Q(-p filename of terrain profile graph to plot)144
+710.4 Q(-e filename of terrain elevation graph to plot)144 722.4 Q F0
+(KD2BD Softw)72 768 Q 121.625(are 20)-.1 F(December 2006)2.5 E(1)190.955
+E EP
+%%Page: 2 2
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F
+(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E/F1 10/Courier@0 SF
+(-h filename of terrain height graph to plot)144 84 Q
+(-H filename of normalized terrain height graph to plot)144 96 Q
+(-l filename of Longley-Rice graph to plot)144 108 Q
+(-o filename of topographic map to generate \(.ppm\))144 120 Q
+(-u filename of user-defined terrain file to import)144 132 Q
+(-d sdf file directory path \(overrides path in ~/.splat_path file\))144
+144 Q(-n no analysis, brief report)144 156 Q(-N no analysis, no report)
+144 168 Q(-m earth radius multiplier)144 180 Q
+(-f frequency for Fresnel zone calculation \(MHz\))144 192 Q
+(-R modify default range for -c or -L \(miles/kilometers\))144 204 Q
+(-db maximum loss contour to display on path loss maps \(80-230 dB\))138
+216 Q(-nf do not plot Fresnel zones in height plots)138 228 Q
+(-plo filename of path-loss output file)132 240 Q
+(-pli filename of path-loss input file)132 252 Q
+(-udt filename of user defined terrain input file)132 264 Q
+(-geo generate a .geo georeference file \(with .ppm output\))132 276 Q
+(-kml generate a Google Earth .kml file \(for point-to-point links\))132
+288 Q(-metric employ metric rather than imperial units for all user I/O)
+114 300 Q/F2 10.95/Times-Bold@0 SF(INPUT FILES)72 328.8 Q/F3 10
+/Times-Bold@0 SF(SPLA)108 340.8 Q(T!)-.95 E F0 .508
+(is a command-line dri)3.008 F -.15(ve)-.25 G 3.008(na).15 G .507
 (pplication, and reads input data through a number of data \214les.)
 -3.008 F(Some)5.507 E 1.42(\214les are mandatory for successful e)108
-595.2 R -.15(xe)-.15 G 1.42
+352.8 R -.15(xe)-.15 G 1.42
 (cution of the program, while others are optional.).15 F 1.42
-(Mandatory \214les)6.42 F .871(include SPLA)108 607.2 R 3.371(TD)-1.11 G
-.871(ata Files \(SDF \214les\), site location \214les \(QTH \214les\), \
-and Longle)-3.371 F .87(y-Rice model parameter)-.15 F
-(\214les \(LRP \214les\).)108 619.2 Q(Optional \214les include city/sit\
-e location \214les, and cartographic boundary \214les.)5 E F1(SPLA)72
-636 Q 2.738(TD)-1.04 G -1.644 -1.04(AT A)-3.121 H(FILES)3.778 E F2(SPLA)
-108 648 Q(T!)-.95 E F0 .43(imports topographic data in the form of SPLA)
-2.93 F 2.93(TD)-1.11 G .43(ata Files \(SDFs\).)-2.93 F .43
-(These \214les may be generated)5.43 F .737
-(from a number of information sources.)108 660 R .737
+(Mandatory \214les)6.42 F 1.085(include 3-arc second topograph)108 364.8
+R 3.585(ym)-.05 G 1.085(odels in the form of SPLA)-3.585 F 3.585(TD)
+-1.11 G 1.085(ata Files \(SDF \214les\), site location \214les)-3.585 F
+.394(\(QTH \214les\), and Longle)108 376.8 R .394
+(y-Rice model parameter \214les \(LRP \214les\).)-.15 F .395
+(Optional \214les include city location \214les,)5.394 F 1.324
+(cartographic boundary \214les, user)108 388.8 R 1.323(-de\214ned terra\
+in \214les, path-loss input \214les, and antenna radiation pattern)-.2 F
+(\214les.)108 400.8 Q F2(SPLA)72 417.6 Q 2.738(TD)-1.04 G -1.644 -1.04
+(AT A)-3.121 H(FILES)3.778 E F3(SPLA)108 429.6 Q(T!)-.95 E F0 .43
+(imports topographic data in the form of SPLA)2.93 F 2.93(TD)-1.11 G .43
+(ata Files \(SDFs\).)-2.93 F .43(These \214les may be generated)5.43 F
+.737(from a number of information sources.)108 441.6 R .737
 (In the United States, SPLA)5.737 F 3.237(TD)-1.11 G .737
 (ata Files can be generated through)-3.237 F 5.441(U.S. Geological)108
-672 R(Surv)5.441 E 3.241 -.15(ey D)-.15 H 2.941(igital Ele).15 F -.25
-(va)-.25 G 2.942(tion Models \(DEMs\) using the).25 F F2(usgs2sdf)5.442
-E F0 2.942(utility included with)5.442 F F2(SPLA)108 684 Q(T!)-.95 E F0
-8.595(.U)C 3.595(SGS Digital Ele)-8.595 F -.25(va)-.25 G 3.595
+453.6 R(Surv)5.441 E 3.241 -.15(ey D)-.15 H 2.941(igital Ele).15 F -.25
+(va)-.25 G 2.942(tion Models \(DEMs\) using the).25 F F3(usgs2sdf)5.442
+E F0 2.942(utility included with)5.442 F F3(SPLA)108 465.6 Q(T!)-.95 E
+F0 8.595(.U)C 3.595(SGS Digital Ele)-8.595 F -.25(va)-.25 G 3.595
 (tion Models compatible with this utility may be do).25 F 3.595
-(wnloaded from:)-.25 F F3(http://edcftp.cr)108 696 Q(.usgs.go)-1.11 E
-(v/pub/data/DEM/250/)-.1 E F0(.)A 2.009(Signi\214cantly better resoluti\
-on can be obtained through the use of SR)108 720 R 2.01(TM-3 V)-.6 F
-2.01(ersion 2 digital ele)-1.11 F -.25(va)-.25 G(tion).25 E(KD2BD Softw)
-72 768 Q 129.12(are 02)-.1 F(March 2006)2.5 E(1)198.45 E EP
-%%Page: 2 2
-%%BeginPageSetup
-BP
-%%EndPageSetup
-/F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F
-(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E 4.138(models. These)
-108 84 R 1.638
-(models are the result of the STS-99 Space Shuttle Radar T)4.138 F
-(opograph)-.8 E 4.138(yM)-.05 G 1.638(ission, and are)-4.138 F -.2(av)
-108 96 S .828(ailable for most populated re)-.05 F .829
-(gions of the Earth.)-.15 F(SPLA)5.829 E 3.329(TD)-1.11 G .829
-(ata Files may be generated from SR)-3.329 F .829(TM data)-.6 F 1.435
-(using the included)108 108 R/F1 10/Times-Bold@0 SF(srtm2sdf)3.935 E F0
-(utility)3.935 E 6.434(.S)-.65 G -.6(RT)-6.434 G 1.434(M-3 V).6 F 1.434
-(ersion 2 data may be obtained through anon)-1.11 F 1.434(ymous FTP)-.15
-F(from:)108 120 Q/F2 10/Times-Italic@0 SF(ftp://e0srp01u.ecs.nasa.go)2.5
-E(v:21/srtm/ver)-.1 E(sion2/)-.1 E F0 .241(Despite the higher accurac)
-108 144 R 2.741(yt)-.15 G .241(hat SR)-2.741 F .241(TM data has to of)
--.6 F(fer)-.25 E 2.741(,s)-.4 G .241(ome v)-2.741 F .241
-(oids in the data sets e)-.2 F 2.741(xist. When)-.15 F -.2(vo)2.741 G
-.242(ids are).2 F .332(detected, the)108 156 R F1(srtm2sdf)2.832 E F0
-.332(utility replaces them with corresponding data found in e)2.832 F
-.332(xisting SDF \214les \(that were)-.15 F .033
-(presumably created from earlier USGS data through the)108 168 R F1
+(wnloaded from:)-.25 F/F4 10/Times-Italic@0 SF(http://edcftp.cr)108
+477.6 Q(.usgs.go)-1.11 E(v/pub/data/DEM/250/)-.1 E F0(.)A .798
+(Signi\214cantly better resolution and accurac)108 501.6 R 3.298(yc)-.15
+G .798(an be obtained through the use of SR)-3.298 F .798(TM-3 V)-.6 F
+.798(ersion 2 digital)-1.11 F(ele)108 513.6 Q -.25(va)-.25 G .66
+(tion models.).25 F .659
+(These models are the product of the STS-99 Space Shuttle Radar T)5.66 F
+(opograph)-.8 E 3.159(yM)-.05 G(ission,)-3.159 E .045(and are a)108
+525.6 R -.25(va)-.2 G .045(ilable for most populated re).25 F .045
+(gions of the Earth.)-.15 F(SPLA)5.045 E 2.545(TD)-1.11 G .046
+(ata Files may be generated from SR)-2.545 F(TM)-.6 E .062
+(data using the included)108 537.6 R F3(srtm2sdf)2.562 E F0(utility)
+2.562 E 5.061(.S)-.65 G -.6(RT)-5.061 G .061(M-3 V).6 F .061
+(ersion 2 data may be obtained through anon)-1.11 F .061(ymous FTP)-.15
+F(from:)108 549.6 Q F4(ftp://e0srp01u.ecs.nasa.go)2.5 E(v:21/srtm/ver)
+-.1 E(sion2/)-.1 E F0 .241(Despite the higher accurac)108 573.6 R 2.741
+(yt)-.15 G .241(hat SR)-2.741 F .241(TM data has to of)-.6 F(fer)-.25 E
+2.741(,s)-.4 G .241(ome v)-2.741 F .241(oids in the data sets e)-.2 F
+2.741(xist. When)-.15 F -.2(vo)2.741 G .242(ids are).2 F .332
+(detected, the)108 585.6 R F3(srtm2sdf)2.832 E F0 .332
+(utility replaces them with corresponding data found in e)2.832 F .332
+(xisting SDF \214les \(that were)-.15 F .033
+(presumably created from earlier USGS data through the)108 597.6 R F3
 (usgs2sdf)2.533 E F0 2.533(utility\). If)2.533 F(USGS-deri)2.534 E -.15
-(ve)-.25 G 2.534(dS).15 G .034(DF data is not)-2.534 F -.2(av)108 180 S
-(ailable, v)-.05 E(oids are handled through adjacent pix)-.2 E(el a)-.15
-E -.15(ve)-.2 G(raging, or direct replacement.).15 E(SPLA)108 204 Q
-2.782(TD)-1.11 G .282(ata Files contain inte)-2.782 F .282(ger v)-.15 F
-.282(alue topographic ele)-.25 F -.25(va)-.25 G .282
+(ve)-.25 G 2.534(dS).15 G .034(DF data is not)-2.534 F -.2(av)108 609.6
+S(ailable, v)-.05 E(oids are handled through adjacent pix)-.2 E(el a)
+-.15 E -.15(ve)-.2 G(raging, or direct replacement.).15 E(SPLA)108 633.6
+Q 2.782(TD)-1.11 G .282(ata Files contain inte)-2.782 F .282(ger v)-.15
+.282(alue topographic ele)-.25 F -.25(va)-.25 G .282
 (tions \(in meters\) referenced to mean sea le).25 F -.15(ve)-.25 G
-2.782(lf).15 G(or)-2.782 E(1-de)108 216 Q .061(gree by 1-de)-.15 F .061
-(gree re)-.15 F .061
+2.782(lf).15 G(or)-2.782 E(1-de)108 645.6 Q .061(gree by 1-de)-.15 F
+.061(gree re)-.15 F .061
 (gions of the earth with a resolution of 3-arc seconds.)-.15 F .062
 (SDF \214les can be read in either)5.062 F .712(standard format \()108
-228 R F2(.sdf)A F0 3.212(\)a)C 3.212(sg)-3.212 G .712(enerated by the)
--3.212 F F1(usgs2sdf)3.211 E F0(and)3.211 E F1(srtm2sdf)3.211 E F0 .711
-(utilities, or in bzip2 compressed format)3.211 F(\()108 240 Q F2(.sdf)A
-(.bz2)-.15 E F0 3.067(\). Since)B .568
+657.6 R F4(.sdf)A F0 3.212(\)a)C 3.212(sg)-3.212 G .712(enerated by the)
+-3.212 F F3(usgs2sdf)3.211 E F0(and)3.211 E F3(srtm2sdf)3.211 E F0 .711
+(utilities, or in bzip2 compressed format)3.211 F(\()108 669.6 Q F4
+(.sdf)A(.bz2)-.15 E F0 3.067(\). Since)B .568
 (uncompressed \214les can be processed slightly f)3.067 F .568
 (aster than \214les that ha)-.1 F .868 -.15(ve b)-.2 H .568
-(een compressed,).15 F F1(SPLA)108 252 Q(T!)-.95 E F0 1.566
-(searches for the needed SDF data in uncompressed format \214rst.)4.066
-F 1.565(If uncompressed data cannot)6.565 F(located,)108 264 Q F1(SPLA)
-3.47 E(T!)-.95 E F0 .97
+(een compressed,).15 F F3(SPLA)108 681.6 Q(T!)-.95 E F0 1.764
+(searches for needed SDF data in uncompressed format \214rst.)4.265 F
+1.764(If uncompressed data cannot be)6.764 F(located,)108 693.6 Q F3
+(SPLA)3.47 E(T!)-.95 E F0 .97
 (then searches for data in bzip2 compressed format.)3.47 F .971
 (If no compressed SDF \214les can be)5.971 F .779(found for the re)108
-276 R .779(gion requested,)-.15 F F1(SPLA)3.278 E(T!)-.95 E F0 .778
+705.6 R .779(gion requested,)-.15 F F3(SPLA)3.278 E(T!)-.95 E F0 .778
 (assumes the re)3.278 F .778(gion is o)-.15 F -.15(ve)-.15 G 3.278(rw)
 .15 G(ater)-3.378 E 3.278(,a)-.4 G .778(nd will assign an ele)-3.278 F
--.25(va)-.25 G .778(tion of).25 F(sea-le)108 288 Q -.15(ve)-.25 G 2.5
-(lt).15 G 2.5(ot)-2.5 G(hese areas.)-2.5 E 1.061(This feature of)108 312
-R F1(SPLA)3.561 E(T!)-.95 E F0(mak)3.561 E 1.061
-(es it possible to perform path analysis not only o)-.1 F -.15(ve)-.15 G
-3.561(rl).15 G 1.062(and, b)-3.561 F 1.062(ut also between)-.2 F .782
-(coastal areas not represented by Digital Ele)108 324 R -.25(va)-.25 G
-.782(tion Model data.).25 F .782(This beha)5.782 F .782(vior of)-.2 F F1
-(SPLA)3.282 E(T!)-.95 E F0 .782(underscores the)3.282 F .103
-(importance of ha)108 336 R .104
-(ving all the SDF \214les required for the re)-.2 F .104
-(gion being analyzed if meaningful results are to be)-.15 F -.15(ex)108
-348 S(pected.).15 E/F3 10.95/Times-Bold@0 SF(SITE LOCA)72 364.8 Q
-(TION \(QTH\) FILES)-1.04 E F1(SPLA)108 376.8 Q(T!)-.95 E F0 .839
+-.25(va)-.25 G .778(tion of).25 F(sea-le)108 717.6 Q -.15(ve)-.25 G 2.5
+(lt).15 G 2.5(ot)-2.5 G(hese areas.)-2.5 E(KD2BD Softw)72 768 Q 121.625
+(are 20)-.1 F(December 2006)2.5 E(2)190.955 E EP
+%%Page: 3 3
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F
+(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E 1.061
+(This feature of)108 84 R/F1 10/Times-Bold@0 SF(SPLA)3.561 E(T!)-.95 E
+F0(mak)3.561 E 1.061(es it possible to perform path analysis not only o)
+-.1 F -.15(ve)-.15 G 3.561(rl).15 G 1.062(and, b)-3.561 F 1.062
+(ut also between)-.2 F .555
+(coastal areas not represented by Digital Ele)108 96 R -.25(va)-.25 G
+.554(tion Model data.).25 F(Ho)5.554 E(we)-.25 E -.15(ve)-.25 G 1.354
+-.4(r, t).15 H .554(his beha).4 F .554(vior of)-.2 F F1(SPLA)3.054 E(T!)
+-.95 E F0(under)5.554 E(-)-.2 E 1.575(scores the importance of ha)108
+108 R 1.575(ving all the SDF \214les required for the re)-.2 F 1.575
+(gion being analyzed if meaningful)-.15 F(results are to be e)108 120 Q
+(xpected.)-.15 E/F2 10.95/Times-Bold@0 SF(SITE LOCA)72 136.8 Q
+(TION \(QTH\) FILES)-1.04 E F1(SPLA)108 148.8 Q(T!)-.95 E F0 .839
 (imports site location information of transmitter and recei)3.339 F -.15
 (ve)-.25 G 3.338(rs).15 G .838(ites analyzed by the program from)-3.338
-F .375(ASCII \214les ha)108 388.8 R .375(ving a)-.2 F F2(.qth)2.875 E F0
--.15(ex)2.875 G 2.875(tension. QTH).15 F .375(\214les contain the site')
-2.875 F 2.875(sn)-.55 G .375(ame, the site')-2.875 F 2.876(sl)-.55 G
-.376(atitude \(positi)-2.876 F .676 -.15(ve i)-.25 H 2.876(fN).15 G
-(orth)-2.876 E 1.127(of the equator)108 400.8 R 3.626(,n)-.4 G -2.25
--.15(eg a)-3.626 H(ti).15 E 1.426 -.15(ve i)-.25 H 3.626(fS).15 G 1.126
-(outh\), the site')-3.626 F 3.626(sl)-.55 G 1.126(ongitude \(in de)
--3.626 F 1.126(grees W)-.15 F 1.126(est, 0 to 360 de)-.8 F 1.126
-(grees\), and the site')-.15 F(s)-.55 E .746(antenna height abo)108
-412.8 R 1.046 -.15(ve g)-.15 H .746(round le).15 F -.15(ve)-.25 G 3.246
-(l\().15 G -.4(AG)-3.246 G 3.246(L\). A).4 F .747
-(single line-feed character separates each \214eld.)3.246 F .747
-(The antenna)5.747 F .459
-(height is assumed to be speci\214ed in feet unless follo)108 424.8 R
-.459(wed by the letter)-.25 F F2(m)2.959 E F0 .459(or the w)2.959 F(ord)
--.1 E F2(meter)2.959 E(s)-.1 E F0 .459(in either upper)2.959 F .424
-(or lo)108 436.8 R .424(wer case.)-.25 F .425
+F .375(ASCII \214les ha)108 160.8 R .375(ving a)-.2 F/F3 10
+/Times-Italic@0 SF(.qth)2.875 E F0 -.15(ex)2.875 G 2.875(tension. QTH)
+.15 F .375(\214les contain the site')2.875 F 2.875(sn)-.55 G .375
+(ame, the site')-2.875 F 2.876(sl)-.55 G .376(atitude \(positi)-2.876 F
+.676 -.15(ve i)-.25 H 2.876(fN).15 G(orth)-2.876 E 1.127(of the equator)
+108 172.8 R 3.626(,n)-.4 G -2.25 -.15(eg a)-3.626 H(ti).15 E 1.426 -.15
+(ve i)-.25 H 3.626(fS).15 G 1.126(outh\), the site')-3.626 F 3.626(sl)
+-.55 G 1.126(ongitude \(in de)-3.626 F 1.126(grees W)-.15 F 1.126
+(est, 0 to 360 de)-.8 F 1.126(grees\), and the site')-.15 F(s)-.55 E
+1.639(antenna height abo)108 184.8 R 1.939 -.15(ve g)-.15 H 1.639
+(round le).15 F -.15(ve)-.25 G 4.139(l\().15 G -.4(AG)-4.139 G 1.639
+(L\), each separated by a single line-feed character).4 F 6.64(.T)-.55 G
+1.64(he antenna)-6.64 F .459
+(height is assumed to be speci\214ed in feet unless follo)108 196.8 R
+.459(wed by the letter)-.25 F F3(m)2.959 E F0 .459(or the w)2.959 F(ord)
+-.1 E F3(meter)2.959 E(s)-.1 E F0 .459(in either upper)2.959 F .424
+(or lo)108 208.8 R .424(wer case.)-.25 F .425
 (Latitude and longitude information may be e)5.424 F .425
-(xpressed in either decimal format \(74.6889\) or)-.15 F(de)108 448.8 Q
+(xpressed in either decimal format \(74.6889\) or)-.15 F(de)108 220.8 Q
 (gree, minute, second \(DMS\) format \(74 41 20.0\).)-.15 E -.15(Fo)108
-472.8 S 3.356(re).15 G .856
+244.8 S 3.356(re).15 G .856
 (xample, a site location \214le describing tele)-3.506 F .856
 (vision station WNJT)-.25 F 3.356(,T)-.74 G .856(renton, NJ \()-3.706 F
-F2(wnjt.qth)A F0 3.356(\)m)C .856(ight read as)-3.356 F(follo)108 484.8
-Q(ws:)-.25 E/F4 10/Courier@0 SF(WNJT)156 508.8 Q(40.2833)156 520.8 Q
-(74.6889)156 532.8 Q(990.00)156 544.8 Q F0 .23
-(Each transmitter and recei)108 568.8 R -.15(ve)-.25 G 2.73(rs).15 G .23
+F3(wnjt.qth)A F0 3.356(\)m)C .856(ight read as)-3.356 F(follo)108 256.8
+Q(ws:)-.25 E/F4 10/Courier@0 SF(WNJT)156 280.8 Q(40.2833)156 292.8 Q
+(74.6889)156 304.8 Q(990.00)156 316.8 Q F0 .23
+(Each transmitter and recei)108 340.8 R -.15(ve)-.25 G 2.73(rs).15 G .23
 (ite analyzed by)-2.73 F F1(SPLA)2.73 E(T!)-.95 E F0 .23
 (must be represented by its o)2.73 F .23(wn site location \(QTH\))-.25 F
-(\214le.)108 580.8 Q F3(LONGLEY)72 597.6 Q(-RICE P)-1.007 E
-(ARAMETER \(LRP\) FILES)-.81 E F1(SPLA)108 609.6 Q(T!)-.95 E F0 .058
-(imports Longle)2.558 F .058
-(y-Rice model parameter data from \214les ha)-.15 F .057
-(ving the same base name as the transmit-)-.2 F .941
-(ter site QTH \214le, b)108 621.6 R .941(ut with a)-.2 F F2(.lrp)3.441 E
-F0 -.15(ex)3.441 G .941(tension, thus pro).15 F .942
-(viding simple and accurate correlation between these)-.15 F
-(associated data sets.)108 633.6 Q(The format for the Longle)5 E
-(y-Rice model parameter \214les is as follo)-.15 E(ws \()-.25 E F2
-(wnjt.lrp)A F0(\):)A F4 6(15.000 ;)156 657.6 R
-(Earth Dielectric Constant \(Relative permittivity\))6 E 12(0.005 ;)156
-669.6 R(Earth Conductivity \(Siemens per meter\))6 E
-(301.000 ; Atmospheric Bending Constant \(N-units\))156 681.6 Q
-(700.000 ; Frequency in MHz \(20 MHz to 20 GHz\))156 693.6 Q 42(5;)156
-705.6 S(Radio Climate \(5 = Continental Temperate\))-36 E 42(0;)156
-717.6 S(Polarization \(0 = Horizontal, 1 = Vertical\))-36 E 24(0.5 ;)156
-729.6 R(Fraction of situations \(50% of locations\))6 E F0(KD2BD Softw)
-72 768 Q 129.12(are 02)-.1 F(March 2006)2.5 E(2)198.45 E EP
-%%Page: 3 3
+(\214le.)108 352.8 Q F2(LONGLEY)72 369.6 Q(-RICE P)-1.007 E
+(ARAMETER \(LRP\) FILES)-.81 E F0(Longle)108 381.6 Q 1.082
+(y-Rice parameter data \214les are required for)-.15 F F1(SPLA)3.581 E
+(T!)-.95 E F0 1.081(to determine RF path loss in either point-to-)3.581
+F .291(point or area prediction mode.)108 393.6 R(Longle)5.291 E .291
+(y-Rice model parameter data is read from \214les ha)-.15 F .292
+(ving the same base)-.2 F(name as the transmitter site QTH \214le, b)108
+405.6 Q(ut with a format \()-.2 E F3(wnjt.lrp)A F0(\):)A F4 6(15.000 ;)
+156 429.6 R(Earth Dielectric Constant \(Relative permittivity\))6 E 12
+(0.005 ;)156 441.6 R(Earth Conductivity \(Siemens per meter\))6 E
+(301.000 ; Atmospheric Bending Constant \(N-units\))156 453.6 Q
+(700.000 ; Frequency in MHz \(20 MHz to 20 GHz\))156 465.6 Q 42(5;)156
+477.6 S(Radio Climate \(5 = Continental Temperate\))-36 E 42(0;)156
+489.6 S(Polarization \(0 = Horizontal, 1 = Vertical\))-36 E 24(0.5 ;)156
+501.6 R(Fraction of situations \(50% of locations\))6 E 24(0.5 ;)156
+513.6 R(Fraction of time \(50% of the time\))6 E F0 .771(If an LRP \214\
+le corresponding to the tx_site QTH \214le cannot be found,)108 537.6 R
+F1(SPLA)3.27 E(T!)-.95 E F0 .77(scans the current w)3.27 F(orking)-.1 E
+.085(directory for the \214le "splat.lrp".)108 549.6 R .085
+(If this \214le cannot be found, then the def)5.085 F .085
+(ault parameters listed abo)-.1 F .385 -.15(ve w)-.15 H .085(ill be).15
+F .528(assigned by)108 561.6 R F1(SPLA)3.028 E(T!)-.95 E F0 .527(and a \
+corresponding "splat.lrp" \214le containing this data will be written t\
+o the current)3.028 F -.1(wo)108 573.6 S(rking directory).1 E 5(.")-.65
+G(splat.lrp" can then be edited by the user as needed.)-5 E -.8(Ty)108
+597.6 S(pical Earth dielectric constants and conducti).8 E(vity v)-.25 E
+(alues are as follo)-.25 E(ws:)-.25 E F4(Dielectric Constant)270 621.6 Q
+(Conductivity)12 E(Salt water)156 633.6 Q 48(:8)42 G 96(05)-48 G(.000)
+-96 E(Good ground)156 645.6 Q 48(:2)36 G 96(50)-48 G(.020)-96 E
+(Fresh water)156 657.6 Q 48(:8)36 G 96(00)-48 G(.010)-96 E(Marshy land)
+156 669.6 Q 48(:1)36 G 96(20)-48 G(.007)-96 E(Farmland, forest :)156
+681.6 Q 90(15 0.005)48 F(Average ground)156 693.6 Q 48(:1)18 G 96(50)-48
+G(.005)-96 E(Mountain, sand)156 705.6 Q 48(:1)18 G 96(30)-48 G(.002)-96
+E 72(City :)156 717.6 R 96(50)54 G(.001)-96 E(Poor ground)156 729.6 Q
+-18 54(:4 0)36 H(.001)-54 E F0(KD2BD Softw)72 768 Q 121.625(are 20)-.1 F
+(December 2006)2.5 E(3)190.955 E EP
+%%Page: 4 4
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F
-(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E/F1 10/Courier@0 SF
-24(0.5 ;)156 84 R(Fraction of time \(50% of the time\))6 E F0 .771(If a\
-n LRP \214le corresponding to the tx_site QTH \214le cannot be found,)
-108 108 R/F2 10/Times-Bold@0 SF(SPLA)3.27 E(T!)-.95 E F0 .77
-(scans the current w)3.27 F(orking)-.1 E .085
-(directory for the \214le "splat.lrp".)108 120 R .085
-(If this \214le cannot be found, then the def)5.085 F .085
-(ault parameters listed abo)-.1 F .385 -.15(ve w)-.15 H .085(ill be).15
-F .528(assigned by)108 132 R F2(SPLA)3.028 E(T!)-.95 E F0 .527(and a co\
-rresponding "splat.lrp" \214le containing this data will be written to \
-the current)3.028 F -.1(wo)108 144 S(rking directory).1 E 5(.")-.65 G
-(splat.lrp" can then be edited by the user as needed.)-5 E -.8(Ty)108
-168 S(pical Earth dielectric constants and conducti).8 E(vity v)-.25 E
-(alues are as follo)-.25 E(ws:)-.25 E F1(Dielectric Constant)270 192 Q
-(Conductivity)12 E(Salt water)156 204 Q 48(:8)42 G 96(05)-48 G(.000)-96
-E(Good ground)156 216 Q 48(:2)36 G 96(50)-48 G(.020)-96 E(Fresh water)
-156 228 Q 48(:8)36 G 96(00)-48 G(.010)-96 E(Marshy land)156 240 Q 48(:1)
-36 G 96(20)-48 G(.007)-96 E(Farmland, forest :)156 252 Q 90(15 0.005)48
-F(Average ground)156 264 Q 48(:1)18 G 96(50)-48 G(.005)-96 E
-(Mountain, sand)156 276 Q 48(:1)18 G 96(30)-48 G(.002)-96 E 72(City :)
-156 288 R 96(50)54 G(.001)-96 E(Poor ground)156 300 Q -18 54(:4 0)36 H
-(.001)-54 E F0(Radio climate codes used by)108 324 Q F2(SPLA)2.5 E(T!)
--.95 E F0(are as follo)2.5 E(ws:)-.25 E F1(1: Equatorial \(Congo\))156
-348 Q(2: Continental Subtropical \(Sudan\))156 360 Q
-(3: Maritime Subtropical \(West coast of Africa\))156 372 Q
-(4: Desert \(Sahara\))156 384 Q(5: Continental Temperate)156 396 Q
+(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E
+(Radio climate codes used by)108 84 Q/F1 10/Times-Bold@0 SF(SPLA)2.5 E
+(T!)-.95 E F0(are as follo)2.5 E(ws:)-.25 E/F2 10/Courier@0 SF
+(1: Equatorial \(Congo\))156 108 Q(2: Continental Subtropical \(Sudan\))
+156 120 Q(3: Maritime Subtropical \(West coast of Africa\))156 132 Q
+(4: Desert \(Sahara\))156 144 Q(5: Continental Temperate)156 156 Q
 (6: Maritime Temperate, over land \(UK and west coasts of US & EU\))156
-408 Q(7: Maritime Temperate, over sea)156 420 Q F0 1.487
-(The Continental T)108 444 R 1.486(emperate climate is common to lar)-.7
+168 Q(7: Maritime Temperate, over sea)156 180 Q F0 1.487
+(The Continental T)108 204 R 1.486(emperate climate is common to lar)-.7
 F 1.486(ge land masses in the temperate zone, such as the)-.18 F .756
-(United States.)108 456 R -.15(Fo)5.756 G 3.256(rp).15 G .756
+(United States.)108 216 R -.15(Fo)5.756 G 3.256(rp).15 G .756
 (aths shorter than 100 km, there is little dif)-3.256 F .756
-(ference between Continental and Maritime)-.25 F -.7(Te)108 468 S
-(mperate climates.).7 E .379(The \214nal tw)108 492 R 2.879(op)-.1 G
+(ference between Continental and Maritime)-.25 F -.7(Te)108 228 S
+(mperate climates.).7 E .379(The \214nal tw)108 252 R 2.879(op)-.1 G
 .379(arameters in the)-2.879 F/F3 10/Times-Italic@0 SF(.lrp)2.879 E F0
 .379(\214le correspond to the statistical analysis pro)2.879 F .378
-(vided by the Longle)-.15 F(y-Rice)-.15 E 2.537(model. In)108 504 R .037
-(this e)2.537 F(xample,)-.15 E F2(SPLA)2.537 E(T!)-.95 E F0 .038(will r\
+(vided by the Longle)-.15 F(y-Rice)-.15 E 2.537(model. In)108 264 R .037
+(this e)2.537 F(xample,)-.15 E F1(SPLA)2.537 E(T!)-.95 E F0 .038(will r\
 eturn the maximum path loss occurring 50% of the time \(fraction of)
-5.037 F .316(time\) in 50% of situations \(fraction of situations\).)108
-516 R .315(Use a fraction of time parameter of 0.97 for digital tele-)
-5.316 F(vision, 0.50 for analog in the United States.)108 528 Q
-(Isotropic antennas are assumed.)5 E -.15(Fo)108 552 S 2.782(rf).15 G
-.282(urther information on these parameters, see:)-2.782 F F3
-(http://\215attop.its.bldr)2.782 E(doc.go)-.37 E(v/itm.html)-.1 E F0
+5.037 F .346(time\) in 50% of situations \(fraction of situations\).)108
+276 R .346(In the United States, use a fraction of time parameter of)
+5.346 F(0.97 for digital tele)108 288 Q(vision \(8VSB modulation\), or \
+0.50 for analog \(VSB-AM+NTSC\) transmissions.)-.25 E -.15(Fo)108 312 S
+2.782(rf).15 G .282(urther information on these parameters, see:)-2.782
+F F3(http://\215attop.its.bldr)2.782 E(doc.go)-.37 E(v/itm.html)-.1 E F0
 (and)2.783 E F3(http://www)2.783 E(.soft-)-.74 E
-(wright.com/faq/engineering/pr)108 564 Q(op_longle)-.45 E(y_rice)-.3 E
-(.html)-.15 E/F4 10.95/Times-Bold@0 SF(CITY LOCA)72 580.8 Q(TION FILES)
--1.04 E F0 .807(The names and locations of cities, to)108 592.8 R .807
+(wright.com/faq/engineering/pr)108 324 Q(op_longle)-.45 E(y_rice)-.3 E
+(.html)-.15 E/F4 10.95/Times-Bold@0 SF(CITY LOCA)72 340.8 Q(TION FILES)
+-1.04 E F0 .807(The names and locations of cities, to)108 352.8 R .807
 (wer sites, or other points of interest may be imported and plotted on)
--.25 F .797(topographic maps generated by)108 604.8 R F2(SPLA)3.297 E
-(T!)-.95 E F0(.)A F2(SPLA)5.797 E(T!)-.95 E F0 .797
-(imports the names of cities and locations from ASCII)3.297 F .191
-(\214les containing the location')108 616.8 R 2.691(sn)-.55 G .191
-(ame, the location')-2.691 F 2.691(sl)-.55 G .191
-(atitude, and the location')-2.691 F 2.69(sl)-.55 G 2.69(ongitude. Each)
--2.69 F .19(\214eld is sepa-)2.69 F .513(rated by a comma.)108 628.8 R
-.513(Each record is separated by a single line feed character)5.513 F
-5.514(.A)-.55 G 3.014(sw)-5.514 G .514(as the case with the)-3.114 F F3
-(.qth)3.014 E F0 .259(\214les, latitude and longitude information may b\
-e entered in either decimal or de)108 640.8 R .258
-(gree, minute, second \(DMS\))-.15 F(format.)108 652.8 Q -.15(Fo)108
-676.8 S 2.5(re).15 G(xample \()-2.65 E F3(cities.dat)A F0(\):)A F1
-(Teaneck, 40.891973, 74.014506)156 700.8 Q
-(Tenafly, 40.919212, 73.955892)156 712.8 Q
-(Teterboro, 40.859511, 74.058908)156 724.8 Q F0(KD2BD Softw)72 768 Q
-129.12(are 02)-.1 F(March 2006)2.5 E(3)198.45 E EP
-%%Page: 4 4
+-.25 F .797(topographic maps generated by)108 364.8 R F1(SPLA)3.297 E
+(T!)-.95 E F0(.)A F1(SPLA)5.797 E(T!)-.95 E F0 .797
+(imports the names of cities and locations from ASCII)3.297 F .111
+(\214les containing the location of interest')108 376.8 R 2.611(sn)-.55
+G .111(ame, latitude, and longitude.)-2.611 F .11
+(Each \214eld is separated by a comma.)5.111 F .949
+(Each record is separated by a single line feed character)108 388.8 R
+5.949(.A)-.55 G 3.449(sw)-5.949 G .949(as the case with the)-3.549 F F3
+(.qth)3.449 E F0 .949(\214les, latitude and)3.449 F
+(longitude information may be entered in either decimal or de)108 400.8
+Q(gree, minute, second \(DMS\) format.)-.15 E -.15(Fo)108 424.8 S 2.5
+(re).15 G(xample \()-2.65 E F3(cities.dat)A F0(\):)A F2
+(Teaneck, 40.891973, 74.014506)156 448.8 Q
+(Tenafly, 40.919212, 73.955892)156 460.8 Q
+(Teterboro, 40.859511, 74.058908)156 472.8 Q
+(Tinton Falls, 40.279966, 74.093924)156 484.8 Q
+(Toms River, 39.977777, 74.183580)156 496.8 Q
+(Totowa, 40.906160, 74.223310)156 508.8 Q(Trenton, 40.219922, 74.754665)
+156 520.8 Q F0 3.2(At)108 544.8 S .7(otal of \214v)-3.2 F 3.2(es)-.15 G
+.699(eparate city data \214les may be imported at a time, and there is \
+no limit to the size of these)-3.2 F(\214les.)108 556.8 Q F1(SPLA)6.369
+E(T!)-.95 E F0 1.369(reads city data on a "\214rst come/\214rst serv)
+3.869 F 1.37(ed" basis, and plots only those locations whose)-.15 F .113
+(annotations do not con\215ict with annotations of locations read earli\
+er in the current city data \214le, or in pre)108 568.8 R(vi-)-.25 E
+.539(ous \214les.)108 580.8 R .539(This beha)5.539 F .539
+(vior minimizes clutter in)-.2 F F1(SPLA)3.039 E(T!)-.95 E F0 .539
+(generated topographic maps, b)3.039 F .54(ut also mandates that)-.2 F
+.15(important locations be placed to)108 592.8 R -.1(wa)-.25 G .15
+(rd the be).1 F .149(ginning of the \214rst city data \214le, and locat\
+ions less important be)-.15 F(positioned further do)108 604.8 Q
+(wn the list or in subsequent data \214les.)-.25 E .996
+(City data \214les may be generated manually using an)108 628.8 R 3.496
+(yt)-.15 G -.15(ex)-3.496 G 3.496(te).15 G(ditor)-3.496 E 3.496(,i)-.4 G
+.997(mported from other sources, or deri)-3.496 F -.15(ve)-.25 G(d).15 E
+1.535(from data a)108 640.8 R -.25(va)-.2 G 1.535
+(ilable from the U.S. Census Bureau using the).25 F F1(citydecoder)4.035
+E F0 1.535(utility included with)4.035 F F1(SPLA)4.035 E(T!)-.95 E F0(.)
+A .152(Such data is a)108 652.8 R -.25(va)-.2 G .153
+(ilable free of char).25 F .153(ge via the Internet at:)-.18 F F3
+(http://www)2.653 E(.census.go)-.74 E(v/g)-.1 E
+(eo/www/cob/bdy_\214les.html)-.1 E F0(,)A(and must be in ASCII format.)
+108 664.8 Q F4(CAR)72 681.6 Q -.197(TO)-.438 G(GRAPHIC BOUND).197 E(AR)
+-.383 E 2.738(YD)-.383 G -1.644 -1.04(AT A)-3.121 H(FILES)3.778 E F0
+1.17(Cartographic boundary data may also be imported to plot the bounda\
+ries of cities, counties, or states on)108 693.6 R .071
+(topographic maps generated by)108 705.6 R F1(SPLA)2.571 E(T!)-.95 E F0
+5.071(.S)C .071
+(uch data must be of the form of ARC/INFO Ungenerate \(ASCII)-5.071 F
+-.15(Fo)108 717.6 S 1.262
+(rmat\) Metadata Cartographic Boundary Files, and are a).15 F -.25(va)
+-.2 G 1.262(ilable from the U.S.).25 F 1.262(Census Bureau via the)6.262
+F 48.573(Internet at:)108 729.6 R F3(http://www)51.073 E(.census.go)-.74
+E(v/g)-.1 E(eo/www/cob/co2000.html#ascii)-.1 E F0(and)51.074 E
+(KD2BD Softw)72 768 Q 121.625(are 20)-.1 F(December 2006)2.5 E(4)190.955
+E EP
+%%Page: 5 5
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F
-(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E/F1 10/Courier@0 SF
-(Tinton Falls, 40.279966, 74.093924)156 84 Q
-(Toms River, 39.977777, 74.183580)156 96 Q(Totowa, 40.906160, 74.223310)
-156 108 Q(Trenton, 40.219922, 74.754665)156 120 Q F0 3.199(At)108 144 S
-.699(otal of \214v)-3.199 F 3.199(es)-.15 G .7(eparate city data \214le\
-s may be imported at a time, and there is no limit to the size of these)
--3.199 F(\214les.)108 156 Q/F2 10/Times-Bold@0 SF(SPLA)6.37 E(T!)-.95 E
-F0 1.37(reads city data on a "\214rst come/\214rst serv)3.87 F 1.369
-(ed" basis, and plots only those locations whose)-.15 F 1.041(annotatio\
-ns do not con\215ict with annotations of locations plotted earlier duri\
-ng)108 168 R F2(SPLA)3.542 E(T)-.95 E F0 2.142 -.55('s e)D -.15(xe).4 G
-3.542(cution. This).15 F(beha)108 180 Q .347(vior minimizes clutter in)
--.2 F F2(SPLA)2.847 E(T!)-.95 E F0 .347(generated topographic maps, b)
-2.847 F .347(ut also mandates that important loca-)-.2 F .051
-(tions be placed to)108 192 R -.1(wa)-.25 G .051(rd the be).1 F .052(gi\
-nning of the \214rst city data \214le, and disposable locations be posi\
-tioned further)-.15 F(do)108 204 Q
-(wn the list or in subsequent data \214les.)-.25 E .997
-(City data \214les may be generated manually using an)108 228 R 3.496
-(yt)-.15 G -.15(ex)-3.496 G 3.496(te).15 G(ditor)-3.496 E 3.496(,i)-.4 G
-.996(mported from other sources, or deri)-3.496 F -.15(ve)-.25 G(d).15 E
-1.535(from data a)108 240 R -.25(va)-.2 G 1.535
-(ilable from the U.S. Census Bureau using the).25 F F2(citydecoder)4.035
-E F0 1.535(utility included with)4.035 F F2(SPLA)4.035 E(T!)-.95 E F0(.)
-A .153(Such data is a)108 252 R -.25(va)-.2 G .153(ilable free of char)
-.25 F .153(ge via the Internet at:)-.18 F/F3 10/Times-Italic@0 SF
-(http://www)2.652 E(.census.go)-.74 E(v/g)-.1 E
-(eo/www/cob/bdy_\214les.html)-.1 E F0(,)A(and must be in ASCII format.)
-108 264 Q/F4 10.95/Times-Bold@0 SF(CAR)72 280.8 Q -.197(TO)-.438 G
-(GRAPHIC BOUND).197 E(AR)-.383 E 2.738(YD)-.383 G -1.644 -1.04(AT A)
--3.121 H(FILES)3.778 E F0 1.17(Cartographic boundary data may also be i\
-mported to plot the boundaries of cities, counties, or states on)108
-292.8 R .072(topographic maps generated by)108 304.8 R F2(SPLA)2.572 E
-(T!)-.95 E F0 5.072(.S)C .071
-(uch data must be of the form of ARC/INFO Ungenerate \(ASCII)-5.072 F
--.15(Fo)108 316.8 S 1.262
-(rmat\) Metadata Cartographic Boundary Files, and are a).15 F -.25(va)
--.2 G 1.262(ilable from the U.S.).25 F 1.263(Census Bureau via the)6.262
-F 19.948(Internet at:)108 328.8 R F3(http://www)22.448 E(.census.go)-.74
-E(v/g)-.1 E(eo/www/cob/co2000.html#ascii)-.1 E F0(and)22.447 E F3
-(http://www)22.447 E(.cen-)-.74 E(sus.go)108 340.8 Q(v/g)-.1 E
-(eo/www/cob/pl2000.html#ascii)-.1 E F0 7.85(.A)C 2.85(total of \214v)
--2.5 F 5.35(es)-.15 G 2.85(eparate cartographic boundary \214les may be)
--5.35 F .813(imported at a time.)108 352.8 R .812
+(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E/F1 10/Times-Italic@0
+SF(http://www)108 84 Q(.census.go)-.74 E(v/g)-.1 E
+(eo/www/cob/pl2000.html#ascii)-.1 E F0 5.008(.A)C .008(total of \214v)
+-2.5 F 2.507(es)-.15 G .007(eparate cartographic boundary \214les)-2.507
+F .196(may be imported at a time.)108 96 R .196
 (It is not necessary to import state boundaries if county boundaries ha)
-5.813 F 1.112 -.15(ve a)-.2 H .812(lready been).15 F(imported.)108 364.8
-Q F4(PR)72 381.6 Q(OGRAM OPERA)-.329 E(TION)-1.04 E F2(SPLA)108 393.6 Q
-(T!)-.95 E F0 1.03(is in)3.53 F -.2(vo)-.4 G -.1(ke).2 G 3.53(dv).1 G
-1.03(ia the command-line using a series of switches and ar)-3.53 F 3.53
-(guments. Since)-.18 F F2(SPLA)3.53 E(T!)-.95 E F0 1.03(is a)3.53 F .746
-(CPU and memory intensi)108 405.6 R 1.046 -.15(ve a)-.25 H .745
+5.196 F .497 -.15(ve a)-.2 H(lready).15 E(been imported.)108 108 Q/F2
+10.95/Times-Bold@0 SF(PR)72 124.8 Q(OGRAM OPERA)-.329 E(TION)-1.04 E/F3
+10/Times-Bold@0 SF(SPLA)108 136.8 Q(T!)-.95 E F0 1.03(is in)3.53 F -.2
+(vo)-.4 G -.1(ke).2 G 3.53(dv).1 G 1.03
+(ia the command-line using a series of switches and ar)-3.53 F 3.53
+(guments. Since)-.18 F F3(SPLA)3.53 E(T!)-.95 E F0 1.03(is a)3.53 F .745
+(CPU and memory intensi)108 148.8 R 1.045 -.15(ve a)-.25 H .745
 (pplication, this type of interf).15 F .745(ace minimizes o)-.1 F -.15
-(ve)-.15 G .745(rhead and lends itself well to).15 F .421
-(scripted \(batch\) operations.)108 417.6 R F2(SPLA)5.421 E(T!)-.95 E F0
-1.521 -.55('s C)D .422
+(ve)-.15 G .746(rhead and lends itself well to).15 F .422
+(scripted \(batch\) operations.)108 160.8 R F3(SPLA)5.422 E(T!)-.95 E F0
+1.522 -.55('s C)D .421
 (PU and memory scheduling priority may be modi\214ed through the).55 F
-(use of the Unix)108 429.6 Q F2(nice)2.5 E F0(command.)2.5 E .226
-(The number and type of switches passed to)108 453.6 R F2(SPLA)2.725 E
-(T!)-.95 E F0 .225(determine its mode of operation and method of output)
-2.725 F .007(data generation.)108 465.6 R .007(Nearly all of)5.007 F F2
-(SPLA)2.507 E(T!)-.95 E F0 1.107 -.55('s s)D .008
-(witches may be cascaded in an).55 F 2.508(yo)-.15 G .008
-(rder on the command line when)-2.508 F(in)108 477.6 Q -.2(vo)-.4 G
-(king the program.).2 E F4(POINT)72 494.4 Q(-T)-1.007 E(O-POINT AN)-.197
-E(AL)-.219 E(YSIS)-1.007 E F2(SPLA)108 506.4 Q(T!)-.95 E F0 1.224
+(use of the Unix)108 172.8 Q F3(nice)2.5 E F0(command.)2.5 E .225
+(The number and type of switches passed to)108 196.8 R F3(SPLA)2.725 E
+(T!)-.95 E F0 .226(determine its mode of operation and method of output)
+2.725 F .008(data generation.)108 208.8 R .008(Nearly all of)5.008 F F3
+(SPLA)2.508 E(T!)-.95 E F0 1.108 -.55('s s)D .008
+(witches may be cascaded in an).55 F 2.507(yo)-.15 G .007
+(rder on the command line when)-2.507 F(in)108 220.8 Q -.2(vo)-.4 G
+(king the program.).2 E F3(SPLA)108 244.8 Q(T!)-.95 E F0 .69
+(operates in tw)3.19 F 3.19(od)-.1 G .69(istinct modes:)-3.19 F F1 .69
+(point-to-point mode)3.19 F F0 3.19(,a)C(nd)-3.19 E F1(ar)3.19 E .69
+(ea pr)-.37 F .69(ediction mode)-.37 F F0 5.69(.E)C .69
+(ither a line-of-)-5.69 F .335(sight \(LOS\) or Longle)108 256.8 R .335
+(y-Rice Irre)-.15 F .335(gular T)-.15 F .335(errain \(ITM\) propag)-.7 F
+.335(ation model may be in)-.05 F -.2(vo)-.4 G -.1(ke).2 G 2.834(db).1 G
+2.834(yt)-2.834 G .334(he user)-2.834 F 5.334(.T)-.55 G(rue)-5.684 E
+.625(Earth, four)108 268.8 R .625(-thirds Earth, or an)-.2 F 3.126(yo)
+-.15 G .626(ther user)-3.126 F .626
+(-de\214ned Earth radius may be speci\214ed when performing line-of-)-.2
+F(sight analysis.)108 280.8 Q F2(POINT)72 297.6 Q(-T)-1.007 E
+(O-POINT AN)-.197 E(AL)-.219 E(YSIS)-1.007 E F3(SPLA)108 309.6 Q(T!)-.95
+E F0 1.224
 (may be used to perform line-of-sight terrain analysis between tw)3.725
 F 3.724(os)-.1 G 1.224(peci\214ed site locations.)-3.724 F -.15(Fo)6.224
-G(r).15 E -.15(ex)108 518.4 S(ample:).15 E F1
-(splat -t tx_site.qth -r rx_site.qth)108 542.4 Q F0(in)108 566.4 Q -.2
-(vo)-.4 G -.1(ke).2 G 5.832(sat).1 G 3.332
-(errain analysis between the transmitter speci\214ed in)-5.832 F F3
-(tx_site)5.832 E(.qth)-.15 E F0 3.333(and recei)5.833 F -.15(ve)-.25 G
-5.833(rs).15 G 3.333(peci\214ed in)-5.833 F F3(rx_site)108 578.4 Q(.qth)
--.15 E F0 2.859(,a)C .359(nd writes a)-2.859 F F2(SPLA)2.859 E(T!)-.95 E
-F0 .359(Obstruction Report to the current w)2.859 F .358
-(orking directory)-.1 F 5.358(.T)-.65 G .358(he report contains)-5.358 F
-.766(details of the transmitter and recei)108 590.4 R -.15(ve)-.25 G
-3.267(rs).15 G .767(ites, and identi\214es the location of an)-3.267 F
-3.267(yo)-.15 G .767(bstructions detected during)-3.267 F .628
-(the analysis.)108 602.4 R .628
-(If an obstruction can be cleared by raising the recei)5.628 F .927 -.15
-(ve a)-.25 H .627(ntenna to a greater altitude,).15 F F2(SPLA)3.127 E
-(T!)-.95 E F0 .573(will indicate the minimum antenna height required fo\
-r a line-of-sight path to e)108 614.4 R .573
-(xist between the transmitter)-.15 F .202(and recei)108 626.4 R -.15(ve)
--.25 G 2.702(rl).15 G .202(ocations speci\214ed.)-2.702 F .201(If the a\
-ntenna must be raised a signi\214cant amount, this determination may)
-5.202 F(tak)108 638.4 Q 3.004(es)-.1 G .504(ome time.)-3.004 F .504
-(Note that the results pro)5.504 F .505(vided are the)-.15 F F3(minimum)
-3.005 E F0 .505(necessary for a line-of-sight path to e)3.005 F(xist,)
--.15 E(and do not tak)108 650.4 Q 2.5(eF)-.1 G
-(resnel zone clearance requirements into consideration.)-2.5 E F3(qth)
-108 674.4 Q F0 -.15(ex)4.658 G 2.158(tensions are assumed by).15 F F2
-(SPLA)4.658 E(T!)-.95 E F0 2.157
-(for QTH \214les, and are optional when in)4.657 F -.2(vo)-.4 G 2.157
-(king the program.).2 F F2(SPLA)108 686.4 Q(T!)-.95 E F0 1.048
-(automatically reads all SPLA)3.548 F 3.548(TD)-1.11 G 1.049
-(ata Files necessary to conduct the terrain analysis between the)-3.548
-F 1.306(sites speci\214ed.)108 698.4 R F2(SPLA)6.306 E(T!)-.95 E F0
-1.306(searches for the needed SDF \214les in the current w)3.806 F 1.305
-(orking directory \214rst.)-.1 F 1.305(If the)6.305 F
-(needed \214les are not found,)108 710.4 Q F2(SPLA)2.5 E(T!)-.95 E F0
-(then searches in the path speci\214ed by the)2.5 E F3(-d)2.5 E F0
-(command-line switch:)2.5 E(KD2BD Softw)72 768 Q 129.12(are 02)-.1 F
-(March 2006)2.5 E(4)198.45 E EP
-%%Page: 5 5
+G(r).15 E -.15(ex)108 321.6 S(ample:).15 E/F4 10/Courier@0 SF
+(splat -t tx_site.qth -r rx_site.qth)108 345.6 Q F0(in)108 369.6 Q -.2
+(vo)-.4 G -.1(ke).2 G 2.627(sal).1 G .128
+(ine-of-sight terrain analysis between the transmitter speci\214ed in)
+-2.627 F F1(tx_site)2.628 E(.qth)-.15 E F0 .128(and recei)2.628 F -.15
+(ve)-.25 G 2.628(rs).15 G(peci\214ed)-2.628 E(in)108 381.6 Q F1(rx_site)
+3.934 E(.qth)-.15 E F0 1.434(using a T)3.934 F 1.434
+(rue Earth radius model, and writes a)-.35 F F3(SPLA)3.934 E(T!)-.95 E
+F0 1.433(Obstruction Report to the current)3.934 F -.1(wo)108 393.6 S
+.548(rking directory).1 F 5.548(.T)-.65 G .549
+(he report contains details of the transmitter and recei)-5.548 F -.15
+(ve)-.25 G 3.049(rs).15 G .549(ites, and identi\214es the loca-)-3.049 F
+.017(tion of an)108 405.6 R 2.517(yo)-.15 G .017
+(bstructions detected along the line-of-sight path.)-2.517 F .016
+(If an obstruction can be cleared by raising the)5.016 F(recei)108 417.6
+Q .496 -.15(ve a)-.25 H .197(ntenna to a greater altitude,).15 F F3
+(SPLA)2.697 E(T!)-.95 E F0 .197
+(will indicate the minimum antenna height required for a line-)2.697 F
+1.655(of-sight path to e)108 429.6 R 1.654
+(xist between the transmitter and recei)-.15 F -.15(ve)-.25 G 4.154(rl)
+.15 G 1.654(ocations speci\214ed.)-4.154 F 1.654
+(Note that imperial units)6.654 F
+(\(miles, feet\) are speci\214ed unless the)108 441.6 Q F1(-metric)2.5 E
+F0(switch is added to)2.5 E F3(SPLA)2.5 E(T!)-.95 E F0 1.1 -.55('s c)D
+(ommand line options:).55 E F4
+(splat -t tx_site.qth -r rx_site.qth -metric)108 465.6 Q F0 .533(If the\
+ antenna must be raised a signi\214cant amount, this determination may \
+tak)108 489.6 R 3.034(eaf)-.1 G 1.034 -.25(ew m)-3.034 H 3.034
+(oments. Note).25 F(that)3.034 E .33(the results pro)108 501.6 R .33
+(vided are the)-.15 F F1(minimum)2.83 E F0 .33
+(necessary for a line-of-sight path to e)2.83 F .329
+(xist, and in the case of this sim-)-.15 F(ple e)108 513.6 Q
+(xample, do not tak)-.15 E 2.5(eF)-.1 G
+(resnel zone clearance requirements into consideration.)-2.5 E F1(qth)
+108 537.6 Q F0 -.15(ex)2.533 G .033(tensions are assumed by).15 F F3
+(SPLA)2.533 E(T!)-.95 E F0 .034
+(for QTH \214les, and are optional when specifying -t and -r ar)2.533 F
+(guments)-.18 E .533(on the command-line.)108 549.6 R F3(SPLA)5.532 E
+(T!)-.95 E F0 .532(automatically reads all SPLA)3.032 F 3.032(TD)-1.11 G
+.532(ata Files necessary to conduct the terrain)-3.032 F .911
+(analysis between the sites speci\214ed.)108 561.6 R F3(SPLA)5.911 E(T!)
+-.95 E F0 .912(searches for the required SDF \214les in the current w)
+5.911 F(orking)-.1 E .189(directory \214rst.)108 573.6 R .189
+(If the needed \214les are not found,)5.189 F F3(SPLA)2.688 E(T!)-.95 E
+F0 .188(then searches in the path speci\214ed by the)2.688 F F1(-d)2.688
+E F0(com-)2.688 E(mand-line switch:)108 585.6 Q F4
+(splat -t tx_site -r rx_site -d /cdrom/sdf/)108 609.6 Q F0 .329(An e)108
+633.6 R .329(xternal directory path may be speci\214ed by placing a ".s\
+plat_path" \214le under the user')-.15 F 2.83(sh)-.55 G .33
+(ome directory)-2.83 F(.)-.65 E 3.045(This \214le must contain the full\
+ directory path of last resort to all the SDF \214les.)108 645.6 R 3.044
+(The path in the)8.044 F F1($HOME/.splat_path)108 657.6 Q F0
+(\214le must be of the form of a single line of ASCII te)2.5 E(xt:)-.15
+E F4(/opt/splat/sdf/)108 681.6 Q F0(and can be generated using an)108
+705.6 Q 2.5(yt)-.15 G -.15(ex)-2.5 G 2.5(te).15 G(ditor)-2.5 E(.)-.55 E
+3.022(Ag)108 729.6 S .523
+(raph of the terrain pro\214le between the recei)-3.022 F -.15(ve)-.25 G
+3.023(ra).15 G .523
+(nd transmitter locations as a function of distance from)-3.023 F
+(KD2BD Softw)72 768 Q 121.625(are 20)-.1 F(December 2006)2.5 E(5)190.955
+E EP
+%%Page: 6 6
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F
-(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E/F1 10/Courier@0 SF
-(splat -t tx_site -r rx_site -d /cdrom/sdf/)108 84 Q F0 .329(An e)108
-108 R .329(xternal directory path may be speci\214ed by placing a ".spl\
-at_path" \214le under the user')-.15 F 2.83(sh)-.55 G .33(ome directory)
--2.83 F(.)-.65 E .401(This \214le must contain the full directory path \
-to the last resort location of all the SDF \214les.)108 120 R .4
-(The path in the)5.4 F/F2 10/Times-Italic@0 SF($HOME/.splat_path)108 132
-Q F0(\214le must be of the form of a single line of ASCII te)2.5 E(xt:)
--.15 E F1(/opt/splat/sdf/)108 156 Q F0(and can be generated using an)108
-180 Q 2.5(yt)-.15 G -.15(ex)-2.5 G 2.5(te).15 G(ditor)-2.5 E(.)-.55 E
-3.022(Ag)108 204 S .523(raph of the terrain pro\214le between the recei)
--3.022 F -.15(ve)-.25 G 3.023(ra).15 G .523
-(nd transmitter locations as a function of distance from)-3.023 F
-(the recei)108 216 Q -.15(ve)-.25 G 2.5(rc).15 G
-(an be generated by adding the)-2.5 E F2(-p)2.5 E F0(switch:)2.5 E F1
-(splat -t tx_site -r rx_site -p terrain_profile.gif)108 240 Q/F3 10
-/Times-Bold@0 SF(SPLA)108 264 Q(T!)-.95 E F0(in)4.12 E -.2(vo)-.4 G -.1
+(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E(the recei)108 84 Q
+-.15(ve)-.25 G 2.5(rc).15 G(an be generated by adding the)-2.5 E/F1 10
+/Times-Italic@0 SF(-p)2.5 E F0(switch:)2.5 E/F2 10/Courier@0 SF
+(splat -t tx_site -r rx_site -p terrain_profile.png)108 108 Q/F3 10
+/Times-Bold@0 SF(SPLA)108 132 Q(T!)-.95 E F0(in)4.12 E -.2(vo)-.4 G -.1
 (ke).2 G(s).1 E F3(gnuplot)4.12 E F0 1.619(when generating graphs.)4.119
 F 1.619(The \214lename e)6.619 F 1.619(xtension speci\214ed to)-.15 F F3
-(SPLA)4.119 E(T!)-.95 E F0(deter)4.119 E(-)-.2 E .809
-(mines the format of the graph produced.)108 276 R F2(.gif)5.809 E F0
-.809(will produce a 640x480 color GIF graphic \214le, while)3.309 F F2
-(.ps)3.309 E F0(or)3.309 E F2(.postscript)108 288 Q F0 1.212
-(will produce postscript output.)3.712 F 1.211
-(Output in formats such as PNG, Adobe Illustrator)6.212 F 3.711(,A)-.4 G
-(utoCAD)-3.711 E 1.923(dxf, LaT)108 300 R 1.923(eX, and man)-.7 F 4.424
-(yo)-.15 G 1.924(thers are a)-4.424 F -.25(va)-.2 G 4.424
-(ilable. Please).25 F(consult)4.424 E F3(gnuplot)4.424 E F0 4.424(,a)C
-(nd)-4.424 E F3(gnuplot)4.424 E F0 3.024 -.55('s d)D 1.924
-(ocumentation for).55 F(details on all the supported output formats.)108
-312 Q 3.543(Ag)108 336 S 1.043(raph of ele)-3.543 F -.25(va)-.25 G 1.042
-(tions subtended by the terrain between the recei).25 F -.15(ve)-.25 G
-3.542(ra).15 G 1.042(nd transmitter as a function of dis-)-3.542 F
-(tance from the recei)108 348 Q -.15(ve)-.25 G 2.5(rc).15 G
-(an be generated by using the)-2.5 E F2(-e)2.5 E F0(switch:)2.5 E F1
-(splat -t tx_site -r rx_site -e elevation_profile.gif)108 372 Q F0 .424
-(The graph produced using this switch illustrates the ele)108 396 R -.25
+(SPLA)4.119 E(T!)-.95 E F0(deter)4.119 E(-)-.2 E .346
+(mines the format of the graph produced.)108 144 R F1(.png)5.346 E F0
+.346(will produce a 640x480 color PNG graphic \214le, while)2.846 F F1
+(.ps)2.847 E F0(or)2.847 E F1(.postscript)108 156 Q F0 .151
+(will produce postscript output.)2.651 F .151
+(Output in formats such as GIF)5.151 F 2.65(,A)-.8 G .15
+(dobe Illustrator)-2.65 F 2.65(,A)-.4 G .15(utoCAD dxf,)-2.65 F(LaT)108
+168 Q .159(eX, and man)-.7 F 2.659(yo)-.15 G .159(thers are a)-2.659 F
+-.25(va)-.2 G 2.659(ilable. Please).25 F(consult)2.659 E F3(gnuplot)
+2.659 E F0 2.659(,a)C(nd)-2.659 E F3(gnuplot)2.659 E F0 1.26 -.55('s d)D
+.16(ocumentation for details on).55 F(all the supported output formats.)
+108 180 Q 3.543(Ag)108 204 S 1.043(raph of ele)-3.543 F -.25(va)-.25 G
+1.042(tions subtended by the terrain between the recei).25 F -.15(ve)
+-.25 G 3.542(ra).15 G 1.042(nd transmitter as a function of dis-)-3.542
+F(tance from the recei)108 216 Q -.15(ve)-.25 G 2.5(rc).15 G
+(an be generated by using the)-2.5 E F1(-e)2.5 E F0(switch:)2.5 E F2
+(splat -t tx_site -r rx_site -e elevation_profile.png)108 240 Q F0 .424
+(The graph produced using this switch illustrates the ele)108 264 R -.25
 (va)-.25 G .425(tion and depression angles resulting from the ter).25 F
-(-)-.2 E .554(rain between the recei)108 408 R -.15(ve)-.25 G(r').15 E
+(-)-.2 E .554(rain between the recei)108 276 R -.15(ve)-.25 G(r').15 E
 3.054(sl)-.55 G .553
 (ocation and the transmitter site from the perspecti)-3.054 F .853 -.15
 (ve o)-.25 H 3.053(ft).15 G .553(he recei)-3.053 F -.15(ve)-.25 G(r').15
-E 3.053(sl)-.55 G(ocation.)-3.053 E 3.78(As)108 420 S 1.28
+E 3.053(sl)-.55 G(ocation.)-3.053 E 3.78(As)108 288 S 1.28
 (econd trace is plotted between the left side of the graph \(recei)-3.78
 F -.15(ve)-.25 G(r').15 E 3.781(sl)-.55 G 1.281
 (ocation\) and the location of the)-3.781 F .449
-(transmitting antenna on the right.)108 432 R .449
+(transmitting antenna on the right.)108 300 R .449
 (This trace illustrates the ele)5.449 F -.25(va)-.25 G .448
-(tion angle required for a line-of-sight path).25 F 1.073(to e)108 444 R
+(tion angle required for a line-of-sight path).25 F 1.073(to e)108 312 R
 1.073(xist between the recei)-.15 F -.15(ve)-.25 G 3.574(ra).15 G 1.074
 (nd transmitter locations.)-3.574 F 1.074
 (If the trace intersects the ele)6.074 F -.25(va)-.25 G 1.074
 (tion pro\214le at an).25 F(y)-.15 E 1.031(point on the graph, then thi\
-s is an indication that a line-of-sight path does not e)108 456 R 1.031
-(xist under the conditions)-.15 F(gi)108 468 Q -.15(ve)-.25 G(n, and th\
+s is an indication that a line-of-sight path does not e)108 324 R 1.031
+(xist under the conditions)-.15 F(gi)108 336 Q -.15(ve)-.25 G(n, and th\
 e obstructions can be clearly identi\214ed on the graph at the point\(s\
-\) of intersection.).15 E 3.67(Ag)108 492 S 1.171(raph illustrating ter\
+\) of intersection.).15 E 3.67(Ag)108 360 S 1.171(raph illustrating ter\
 rain height referenced to a line-of-sight path between the transmitter \
 and recei)-3.67 F -.15(ve)-.25 G(r).15 E(may be generated using the)108
-504 Q F2(-h)2.5 E F0(switch:)2.5 E F1
-(splat -t tx_site -r rx_site -h height_profile.gif)108 528 Q F0
-(The Earth')108 552 Q 2.5(sc)-.55 G(urv)-2.5 E(ature is clearly e)-.25 E
-(vident when plotting height pro\214les.)-.25 E 2.5(Ag)108 576 S
-(raph sho)-2.5 E(wing Longle)-.25 E
-(y-Rice path loss may be plotted using the)-.15 E F2(-l)2.5 E F0
-(switch:)2.5 E F1(splat -t tx_site -r rx_site -l path_loss_profile.gif)
-108 600 Q F0 .886(When performing path loss pro\214les, a Longle)108 624
-R .886(y-Rice Model P)-.15 F .886(ath Loss Report is generated by)-.15 F
-F3(SPLA)3.386 E(T!)-.95 E F0(in)3.386 E .754(the form of a te)108 636 R
-.754(xt \214le with a)-.15 F F2(.lr)3.254 E(o)-.45 E F0 .754
+372 Q F1(-h)2.5 E F0(switch:)2.5 E F2
+(splat -t tx_site -r rx_site -h height_profile.png)108 396 Q F0 3.245
+(At)108 420 S .745
+(errain height plot normalized to the transmitter and recei)-3.245 F
+-.15(ve)-.25 G 3.245(ra).15 G .745
+(ntenna heights can be obtained using the)-3.245 F F1(-H)108 432 Q F0
+(switch:)2.5 E F2
+(splat -t tx_site -r rx_site -H normalized_height_profile.png)108 456 Q
+F0 2.5(Ac)108 480 S(ontour of the Earth')-2.5 E 2.5(sc)-.55 G(urv)-2.5 E
+(ature is also plotted in this mode.)-.25 E .635(The \214rst Fresnel Zo\
+ne, and 60% of the \214rst Fresnel Zone can be added to height pro\214l\
+e graphs by adding)108 504 R(the)108 516 Q F1(-f)2.5 E F0
+(switch, and specifying a frequenc)2.5 E 2.5(y\()-.15 G
+(in MHz\) at which the Fresnel Zone should be modeled:)-2.5 E F2(splat \
+-t tx_site -r rx_site -f 439.250 -H normalized_height_profile.png)108
+540 Q F0 2.5(Ag)108 564 S(raph sho)-2.5 E(wing Longle)-.25 E
+(y-Rice path loss may be plotted using the)-.15 E F1(-l)2.5 E F0
+(switch:)2.5 E F2(splat -t tx_site -r rx_site -l path_loss_profile.png)
+108 588 Q F0(As before, adding the)108 612 Q F1(-metric)2.5 E F0
+(switch forces the graphs to be plotted using metric units of measure.)
+2.5 E .886(When performing path loss pro\214les, a Longle)108 636 R .886
+(y-Rice Model P)-.15 F .886(ath Loss Report is generated by)-.15 F F3
+(SPLA)3.386 E(T!)-.95 E F0(in)3.386 E .754(the form of a te)108 648 R
+.754(xt \214le with a)-.15 F F1(.lr)3.254 E(o)-.45 E F0 .754
 (\214lename e)3.254 F 3.254(xtension. The)-.15 F .754
 (report contains bearings and distances between)3.254 F .536
-(the transmitter and recei)108 648 R -.15(ve)-.25 G 1.336 -.4(r, a).15 H
+(the transmitter and recei)108 660 R -.15(ve)-.25 G 1.336 -.4(r, a).15 H
 3.036(sw).4 G .536(ell as the Longle)-3.036 F .536
 (y-Rice path loss for v)-.15 F .535(arious distances between the trans-)
--.25 F .095(mitter and recei)108 660 R -.15(ve)-.25 G 2.595(rl).15 G
+-.25 F .095(mitter and recei)108 672 R -.15(ve)-.25 G 2.595(rl).15 G
 2.595(ocations. The)-2.595 F .095(mode of propag)2.595 F .096
 (ation for points along the path are gi)-.05 F -.15(ve)-.25 G 2.596(na)
-.15 G(s)-2.596 E F2(Line-of-Sight)2.596 E F0(,)A F2(Single Horizon)108
-672 Q F0(,)A F2(Double Horizon)2.5 E F0(,)A F2(Dif)2.5 E(fr)-.18 E
-(action Dominant)-.15 E F0 2.5(,a)C(nd)-2.5 E F2 -1.85 -.55(Tr o)2.5 H
-(poscatter Dominant).55 E F0(.)A 2.36 -.8(To d)108 696 T .76(etermine t\
+.15 G(s)-2.596 E F1(Line-of-Sight)2.596 E F0(,)A F1(Single Horizon)108
+684 Q F0(,)A F1(Double Horizon)2.5 E F0(,)A F1(Dif)2.5 E(fr)-.18 E
+(action Dominant)-.15 E F0 2.5(,a)C(nd)-2.5 E F1 -1.85 -.55(Tr o)2.5 H
+(poscatter Dominant).55 E F0(.)A 2.36 -.8(To d)108 708 T .76(etermine t\
 he signal-to-noise \(SNR\) ratio at remote location where random Johnso\
-n \(thermal\) noise is).8 F(the primary limiting f)108 708 Q
-(actor in reception:)-.1 E(KD2BD Softw)72 768 Q 129.12(are 02)-.1 F
-(March 2006)2.5 E(5)198.45 E EP
-%%Page: 6 6
+n \(thermal\) noise is).8 F(the primary limiting f)108 720 Q
+(actor in reception:)-.1 E(KD2BD Softw)72 768 Q 121.625(are 20)-.1 F
+(December 2006)2.5 E(6)190.955 E EP
+%%Page: 7 7
 %%BeginPageSetup
 BP
 %%EndPageSetup
@@ -722,14 +799,15 @@ BP
 (Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E/F1 10/Times-Italic@0
 SF(SNR)108.33 84 Q/F2 10/Symbol SF(=)3.07 E F1(T)2.71 E F2(-)3.47 E F1
 (NJ)2.9 E F2(-)3.17 E F1(L)2.78 E F2(+)2.73 E F1(G)2.18 E F2(-)2.7 E F1
-(NF)2.9 E F0(where)108 108 Q/F3 10/Times-Bold@0 SF(T)3.076 E F0 .576
-(is the ERP of the transmitter in dBW)3.076 F(,)-.92 E F3(NJ)3.076 E F0
-.577(is Johnson Noise in dBW \(-136 dBW for a 6 MHz TV)3.076 F
-(channel\),)108 120 Q F3(L)2.514 E F0 .014(is the path loss pro)2.514 F
-.014(vided by)-.15 F F3(SPLA)2.514 E(T!)-.95 E F0 .013(in dB \(as a)
-2.514 F F1(positive)2.513 E F0(number\),)2.513 E F3(G)2.513 E F0 .013
-(is the recei)2.513 F .313 -.15(ve a)-.25 H .013(ntenna g).15 F(ain)-.05
-E(in dB o)108 132 Q -.15(ve)-.15 G 2.5(ri).15 G(sotropic, and)-2.5 E F3
+(NF)2.9 E F0(where)108 108 Q/F3 10/Times-Bold@0 SF(T)2.714 E F0 .215
+(is the ERP of the transmitter in dBW in the direction of the recei)
+2.714 F -.15(ve)-.25 G -.4(r,).15 G F3(NJ)3.115 E F0 .215
+(is Johnson Noise in dBW)2.715 F .725(\(-136 dBW for a 6 MHz tele)108
+120 R .725(vision channel\),)-.25 F F3(L)3.225 E F0 .725
+(is the path loss pro)3.225 F .725(vided by)-.15 F F3(SPLA)3.225 E(T!)
+-.95 E F0 .725(in dB \(as a)5.725 F F1(positive)3.225 E F0(number\),)108
+132 Q F3(G)2.5 E F0(is the recei)2.5 E .3 -.15(ve a)-.25 H(ntenna g).15
+E(ain in dB o)-.05 E -.15(ve)-.15 G 2.5(ri).15 G(sotropic, and)-2.5 E F3
 (NF)2.5 E F0(is the recei)2.5 E -.15(ve)-.25 G 2.5(rn).15 G
 (oise \214gure in dB.)-2.5 E F3(T)108 156 Q F0(may be computed as follo)
 2.5 E(ws:)-.25 E F1(T)107.91 180 Q F2(=)4.07 E F1(TI)2.71 E F2(+)3.21 E
@@ -747,376 +825,674 @@ F 2.701(wm)-.25 G .202(uch more signal is a)-2.701 F -.25(va)-.2 G .202
 (he minimum to necessary to achie)-2.702 F .502 -.15(ve a s)-.25 H .202
 (peci\214c signal-).15 F(to-noise ratio:)108 264 Q F1(Signal)108.33 288
 Q F0(_).51 E F1(Margin).68 E F2(=)3.04 E F1(SNR)3.13 E F2(-)2.47 E F1(S)
-2.53 E F0(where)108 312 Q F3(S)2.5 E F0
-(is the minimum desired SNR ratio \(15.5 dB for A)2.5 E(TSC DTV)-1.11 E
-2.5(,4)-1.29 G 2.5(2d)-2.5 G 2.5(Bf)-2.5 G(or analog NTSC tele)-2.5 E
-(vision\).)-.25 E 2.611(At)108 336 S .111
-(opographic map may be generated by)-2.611 F F3(SPLA)2.611 E(T!)-.95 E
-F0 .11(to visualize the path between the transmitter and recei)2.611 F
--.15(ve)-.25 G(r).15 E .098(sites from yet another perspecti)108 348 R
--.15(ve)-.25 G 5.098(.T).15 G .099(opographic maps generated by)-5.898 F
-F3(SPLA)2.599 E(T!)-.95 E F0 .099(display ele)2.599 F -.25(va)-.25 G
-.099(tions using a log-).25 F .336(arithmic grayscale, with higher ele)
-108 360 R -.25(va)-.25 G .335
-(tions represented through brighter shades of gray).25 F 5.335(.T)-.65 G
-.335(he dynamic range)-5.335 F .257
-(of the image is scaled between the highest and lo)108 372 R .257
+2.53 E F0(where)108 312 Q F3(S)3.487 E F0 .987
+(is the minimum required SNR ratio \(15.5 dB for A)3.487 F .987
+(TSC \(8-VSB\) DTV)-1.11 F 3.486(,4)-1.29 G 3.486(2d)-3.486 G 3.486(Bf)
+-3.486 G .986(or analog NTSC)-3.486 F(tele)108 324 Q(vision\).)-.25 E
+2.61(At)108 348 S .11(opographic map may be generated by)-2.61 F F3
+(SPLA)2.611 E(T!)-.95 E F0 .111
+(to visualize the path between the transmitter and recei)2.611 F -.15
+(ve)-.25 G(r).15 E .099(sites from yet another perspecti)108 360 R -.15
+(ve)-.25 G 5.099(.T).15 G .099(opographic maps generated by)-5.899 F F3
+(SPLA)2.598 E(T!)-.95 E F0 .098(display ele)2.598 F -.25(va)-.25 G .098
+(tions using a log-).25 F .335(arithmic grayscale, with higher ele)108
+372 R -.25(va)-.25 G .335
+(tions represented through brighter shades of gray).25 F 5.336(.T)-.65 G
+.336(he dynamic range)-5.336 F .257
+(of the image is scaled between the highest and lo)108 384 R .257
 (west ele)-.25 F -.25(va)-.25 G .257(tions present in the map.).25 F
-.258(The only e)5.258 F .258(xception to)-.15 F(this is sea-le)108 384 Q
--.15(ve)-.25 G(l, which is represented using the color blue.).15 E F3
-(SPLA)108 408 Q(T!)-.95 E F0 .59
-(generated topographic maps are 24-bit T)3.09 F .59
-(rueColor Portable PixMap \(PPM\) images.)-.35 F(The)5.59 E 3.09(ym)-.15
-G .59(ay be)-3.09 F(vie)108 420 Q 1.06(wed, edited, or con)-.25 F -.15
-(ve)-.4 G 1.06(rted to other graphic formats by popular image vie).15 F
-1.06(wing applications such as)-.25 F F3(xv)3.56 E F0(,)A F3 1.66
-(The GIMP)108 432 R F0(,)A F3(ImageMagick)4.16 E F0 4.16(,a)C(nd)-4.16 E
-F3(XP)4.16 E(aint)-.1 E F0 6.66(.P)C 1.66
-(NG format is highly recommended for lossless compressed)-6.66 F .371
-(storage of)108 444 R F3(SPLA)2.871 E(T!)-.95 E F0 .371
-(generated topographic output \214les.)5.371 F .372(An e)5.372 F .372
-(xcellent command-line utility capable of con-)-.15 F -.15(ve)108 456 S
-(rting).15 E F3(SPLA)12.217 E(T!)-.95 E F0 9.717
-(PPM graphic \214les to PNG \214les is)12.217 F F3(wpng)12.217 E F0
-12.217(,a)C 9.717(nd is a)-12.217 F -.25(va)-.2 G 9.716(ilable at:).25 F
-F1(http://www)108 468 Q(.libpng)-.74 E(.or)-.15 E(g/pub/png/book/sour)
--.37 E(ces.html)-.37 E F0 5.152(.A)C 2.652(sal)-5.152 G .153
-(ast resort, PPM \214les may be compressed using the)-2.652 F .662
-(bzip2 utility)108 480 R 3.162(,a)-.65 G .662(nd read directly by)-3.162
-F F3 .662(The GIMP)3.162 F F0 .662(in this format.)3.162 F -.8(To)5.662
-G .661(pographic output is speci\214ed using the).8 F F1(-o)3.161 E F0
-(switch:)108 492 Q/F4 10/Courier@0 SF
-(splat -t tx_site -r rx_site -o topo_map.ppm)108 516 Q F0(The)108 540 Q
+.257(The only e)5.257 F .257(xception to)-.15 F(this is sea-le)108 396 Q
+-.15(ve)-.25 G(l, which is represented using the color blue.).15 E -.8
+(To)108 420 S(pographic output is in).8 E -.2(vo)-.4 G -.1(ke).2 G 2.5
+(du).1 G(sing the)-2.5 E F1(-o)2.5 E F0(switch:)2.5 E/F4 10/Courier@0 SF
+(splat -t tx_site -r rx_site -o topo_map.ppm)108 444 Q F0(The)108 468 Q
 F1(.ppm)2.5 E F0 -.15(ex)2.5 G
 (tension on the output \214lename is assumed by).15 E F3(SPLA)2.5 E(T!)
--.95 E F0 2.5(,a)C(nd is optional.)-2.5 E .006(In this e)108 564 R
+-.95 E F0 2.5(,a)C(nd is optional.)-2.5 E .006(In this e)108 492 R
 (xample,)-.15 E F1(topo_map.ppm)2.506 E F0 .007
 (will illustrate the locations of the transmitter and recei)2.506 F -.15
 (ve)-.25 G 2.507(rs).15 G .007(ites speci\214ed.)-2.507 F(In)5.007 E .22
-(addition, the great circle path between the tw)108 576 R 2.72(os)-.1 G
+(addition, the great circle path between the tw)108 504 R 2.72(os)-.1 G
 .22(ites will be dra)-2.72 F .22(wn o)-.15 F -.15(ve)-.15 G 2.72(rl).15
-G .22(ocations for which an unobstructed)-2.72 F 1.208(path e)108 588 R
+G .22(ocations for which an unobstructed)-2.72 F 1.208(path e)108 516 R
 1.209(xists to the transmitter at a recei)-.15 F 1.209
 (ving antenna height equal to that of the recei)-.25 F -.15(ve)-.25 G
-3.709(rs).15 G 1.209(ite \(speci\214ed in)-3.709 F F1(rx_site)108 600 Q
+3.709(rs).15 G 1.209(ite \(speci\214ed in)-3.709 F F1(rx_site)108 528 Q
 (.qth)-.15 E F0(\).)A .773(It may desirable to populate the topographic\
- map with names and locations of cities, to)108 624 R .773
-(wer sites, or other)-.25 F(important locations.)108 636 Q 2.5(Ac)5 G
+ map with names and locations of cities, to)108 552 R .773
+(wer sites, or other)-.25 F(important locations.)108 564 Q 2.5(Ac)5 G
 (ity \214le may be passed to)-2.5 E F3(SPLA)2.5 E(T!)-.95 E F0
 (using the)2.5 E F1(-s)2.5 E F0(switch:)2.5 E F4
-(splat -t tx_site -r rx_site -s cities.dat -o topo_map)108 660 Q F0
-(Up to \214v)108 684 Q 2.5(es)-.15 G
+(splat -t tx_site -r rx_site -s cities.dat -o topo_map)108 588 Q F0
+(Up to \214v)108 612 Q 2.5(es)-.15 G
 (eparate city \214les may be passed to)-2.5 E F3(SPLA)2.5 E(T!)-.95 E F0
 (at a time follo)2.5 E(wing the)-.25 E F1(-s)2.5 E F0(switch.)2.5 E .554
 (County and state boundaries may be added to the map by specifying up t\
-o \214v)108 708 R 3.055(eU)-.15 G .555(.S. Census Bureau carto-)-3.055 F
-(graphic boundary \214les using the)108 720 Q F1(-b)2.5 E F0(switch:)2.5
-E(KD2BD Softw)72 768 Q 129.12(are 02)-.1 F(March 2006)2.5 E(6)198.45 E
-EP
-%%Page: 7 7
+o \214v)108 636 R 3.055(eU)-.15 G .555(.S. Census Bureau carto-)-3.055 F
+(graphic boundary \214les using the)108 648 Q F1(-b)2.5 E F0(switch:)2.5
+E F4(splat -t tx_site -r rx_site -b co34_d00.dat -o topo_map)108 672 Q
+F0 1.064
+(In situations where multiple transmitter sites are in use, as man)108
+696 R 3.563(ya)-.15 G 3.563(sf)-3.563 G 1.063
+(our site locations may be passed to)-3.563 F F3(SPLA)108 708 Q(T!)-.95
+E F0(at a time for analysis:)2.5 E(KD2BD Softw)72 768 Q 121.625(are 20)
+-.1 F(December 2006)2.5 E(7)190.955 E EP
+%%Page: 8 8
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F
 (Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E/F1 10/Courier@0 SF
-(splat -t tx_site -r rx_site -b co34_d00.dat -o topo_map)108 84 Q F0
-1.064(In situations where multiple transmitter sites are in use, as man)
-108 108 R 3.563(ya)-.15 G 3.563(sf)-3.563 G 1.063
-(our site locations may be passed to)-3.563 F/F2 10/Times-Bold@0 SF
-(SPLA)108 120 Q(T!)-.95 E F0(at a time for analysis:)2.5 E F1
-(splat -t tx_site1 tx_site2 tx_site3 tx_site4 -r rx_site -p profile.gif)
-108 144 Q F0 .285(In this e)108 168 R .285(xample, four separate terrai\
-n pro\214les and obstruction reports will be generated by)-.15 F F2
-(SPLA)2.785 E(T!)-.95 E F0 5.285(.A)C(sin-)-2.5 E .509
-(gle topographic map can be speci\214ed using the)108 180 R/F3 10
+(splat -t tx_site1 tx_site2 tx_site3 tx_site4 -r rx_site -p profile.png)
+108 84 Q F0 .285(In this e)108 108 R .285(xample, four separate terrain\
+ pro\214les and obstruction reports will be generated by)-.15 F/F2 10
+/Times-Bold@0 SF(SPLA)2.785 E(T!)-.95 E F0 5.285(.A)C(sin-)-2.5 E .509
+(gle topographic map can be speci\214ed using the)108 120 R/F3 10
 /Times-Italic@0 SF(-o)3.009 E F0 .508
 (switch, and line-of-sight paths between each transmitter)3.009 F .816
-(and the recei)108 192 R -.15(ve)-.25 G 3.316(rs).15 G .816
+(and the recei)108 132 R -.15(ve)-.25 G 3.316(rs).15 G .816
 (ite indicated will be produced on the map, each in its o)-3.316 F .817
 (wn color)-.25 F 5.817(.T)-.55 G .817(he path between the)-5.817 F .767
-(\214rst transmitter speci\214ed to the recei)108 204 R -.15(ve)-.25 G
+(\214rst transmitter speci\214ed to the recei)108 144 R -.15(ve)-.25 G
 3.267(rw).15 G .766
 (ill be in green, the path between the second transmitter and the)-3.267
-F(recei)108 216 Q -.15(ve)-.25 G 3.463(rw).15 G .963(ill be in c)-3.463
+F(recei)108 156 Q -.15(ve)-.25 G 3.463(rw).15 G .963(ill be in c)-3.463
 F .964(yan, the path between the third transmitter and the recei)-.15 F
 -.15(ve)-.25 G 3.464(rw).15 G .964(ill be in violet, and the)-3.464 F
-(path between the fourth transmitter and the recei)108 228 Q -.15(ve)
--.25 G 2.5(rw).15 G(ill be in sienna.)-2.5 E/F4 10.95/Times-Bold@0 SF
-(DETERMINING REGION)72 244.8 Q(AL CO)-.219 E(VERA)-.548 E(GE)-.602 E F2
-(SPLA)108 256.8 Q(T!)-.95 E F0 .098
+(path between the fourth transmitter and the recei)108 168 Q -.15(ve)
+-.25 G 2.5(rw).15 G(ill be in sienna.)-2.5 E F2(SPLA)108 192 Q(T!)-.95 E
+F0 .59(generated topographic maps are 24-bit T)3.09 F .59
+(rueColor Portable PixMap \(PPM\) images.)-.35 F(The)5.59 E 3.09(ym)-.15
+G .59(ay be)-3.09 F(vie)108 204 Q 1.06(wed, edited, or con)-.25 F -.15
+(ve)-.4 G 1.06(rted to other graphic formats by popular image vie).15 F
+1.06(wing applications such as)-.25 F F2(xv)3.56 E F0(,)A F2 1.66
+(The GIMP)108 216 R F0(,)A F2(ImageMagick)4.16 E F0 4.16(,a)C(nd)-4.16 E
+F2(XP)4.16 E(aint)-.1 E F0 6.66(.P)C 1.66
+(NG format is highly recommended for lossless compressed)-6.66 F .726
+(storage of)108 228 R F2(SPLA)3.226 E(T!)-.95 E F0 .726
+(generated topographic output \214les.)5.726 F F2(ImageMagick)5.726 E F0
+1.827 -.55('s c)D .727(ommand-line utility easily con-).55 F -.15(ve)108
+240 S(rts).15 E F2(SPLA)2.5 E(T!)-.95 E F0 1.1 -.55('s P)D
+(PM \214les to PNG format:).55 E F1(convert splat_map.ppm splat_map.png)
+108 264 Q F0 17.667(Another e)108 288 R 17.667
+(xcellent PPM to PNG command-line utility is a)-.15 F -.25(va)-.2 G
+17.666(ilable at:).25 F F3(http://www)108 300 Q(.libpng)-.74 E(.or)-.15
+E(g/pub/png/book/sour)-.37 E(ces.html)-.37 E F0 5.152(.A)C 2.652(sal)
+-5.152 G .153(ast resort, PPM \214les may be compressed using the)-2.652
+F(bzip2 utility)108 312 Q 2.5(,a)-.65 G(nd read directly by)-2.5 E F2
+(The GIMP)2.5 E F0(in this format.)2.5 E/F4 10.95/Times-Bold@0 SF
+(REGION)72 328.8 Q(AL CO)-.219 E(VERA)-.548 E(GE AN)-.602 E(AL)-.219 E
+(YSIS)-1.007 E F2(SPLA)108 340.8 Q(T!)-.95 E F0 .098
 (can analyze a transmitter or repeater site, or netw)2.599 F .098
 (ork of sites, and predict the re)-.1 F .098(gional co)-.15 F -.15(ve)
--.15 G .098(rage for).15 F .682(each site speci\214ed.)108 268.8 R .682
+-.15 G .098(rage for).15 F .682(each site speci\214ed.)108 352.8 R .682
 (In this mode,)5.682 F F2(SPLA)3.183 E(T!)-.95 E F0 .683
 (can generate a topographic map displaying the geometric line-)3.183 F
-.163(of-sight co)108 280.8 R -.15(ve)-.15 G .163(rage area of the sites\
+.163(of-sight co)108 364.8 R -.15(ve)-.15 G .163(rage area of the sites\
  based on the location of each site and the height of recei).15 F .462
 -.15(ve a)-.25 H .162(ntenna wish-).15 F .438
-(ing to communicate with the site in question.)108 292.8 R F2(SPLA)5.439
+(ing to communicate with the site in question.)108 376.8 R F2(SPLA)5.439
 E(T!)-.95 E F0 .439(switches from point-to-point analysis mode to area)
-2.939 F(prediction mode when the)108 304.8 Q F3(-c)2.5 E F0
+2.939 F(prediction mode when the)108 388.8 Q F3(-c)2.5 E F0
 (switch is in)2.5 E -.2(vo)-.4 G -.1(ke).2 G 2.5(da).1 G 2.5(sf)-2.5 G
 (ollo)-2.5 E(ws:)-.25 E F1
 (splat -t tx_site -c 30.0 -s cities.dat -b co34_d00.dat -o tx_coverage)
-108 328.8 Q F0 .27(In this e)108 352.8 R(xample,)-.15 E F2(SPLA)2.77 E
+108 412.8 Q F0 .27(In this e)108 436.8 R(xample,)-.15 E F2(SPLA)2.77 E
 (T!)-.95 E F0 .269(generates a topographic map called)2.769 F F3(tx_co)
 2.769 E(ver)-.1 E -.1(age)-.15 G(.ppm)-.05 E F0 .269
-(that illustrates the predicted)2.769 F 1.534(line-of-sight re)108 364.8
+(that illustrates the predicted)2.769 F 1.534(line-of-sight re)108 448.8
 R 1.534(gional co)-.15 F -.15(ve)-.15 G 1.534(rage of).15 F F3(tx_site)
 4.034 E F0 1.535(to recei)4.034 F 1.535(ving locations ha)-.25 F 1.535
 (ving antennas 30.0 feet abo)-.2 F 1.835 -.15(ve g)-.15 H(round).15 E
-(le)108 376.8 Q -.15(ve)-.25 G 2.508(l\().15 G -.4(AG)-2.508 G 2.508
-(L\). The).4 F .008(contents of)2.508 F F3(cities.dat)2.508 E F0 .007
-(are plotted on the map, as are the cartographic boundaries contained)
-2.508 F(in the \214le)108 388.8 Q F3(co34_d00.dat)2.5 E F0(.)A .572
-(When plotting line-of-sight paths and areas of re)108 412.8 R .572
+(le)108 460.8 Q -.15(ve)-.25 G 3.162(l\().15 G -.4(AG)-3.162 G 3.162
+(L\). If).4 F(the)3.162 E F3(-metric)3.162 E F0 .662
+(switch is used, the ar)3.162 F .662(gument follo)-.18 F .662(wing the)
+-.25 F F3(-c)3.162 E F0 .661(switch is interpreted as being in)3.161 F
+.162(meters, rather than in feet.)108 472.8 R .163(The contents of)5.163
+F F3(cities.dat)2.663 E F0 .163
+(are plotted on the map, as are the cartographic bound-)2.663 F
+(aries contained in the \214le)108 484.8 Q F3(co34_d00.dat)2.5 E F0(.)A
+.572(When plotting line-of-sight paths and areas of re)108 508.8 R .572
 (gional co)-.15 F -.15(ve)-.15 G(rage,).15 E F2(SPLA)3.072 E(T!)-.95 E
-F0 .572(by def)3.072 F .572(ault does not account for)-.1 F .032(the ef)
-108 424.8 R .032(fects of atmospheric bending.)-.25 F(Ho)5.032 E(we)-.25
+F0 .572(by def)3.072 F .572(ault does not account for)-.1 F .031(the ef)
+108 520.8 R .032(fects of atmospheric bending.)-.25 F(Ho)5.032 E(we)-.25
 E -.15(ve)-.25 G .832 -.4(r, t).15 H .032(his beha).4 F .032
 (vior may be modi\214ed by using the Earth radius mul-)-.2 F(tiplier \()
-108 436.8 Q F3(-m)A F0 2.5(\)s)C(witch:)-2.5 E F1(splat -t wnjt -c 30.0\
- -m 1.333 -s cities.dat -b counties.dat -o map.ppm)108 460.8 Q F0 .594
-(An earth radius multiplier of 1.333 instructs)108 484.8 R F2(SPLA)3.095
-E(T!)-.95 E F0 .595(to use the "four)3.095 F .595
-(-thirds earth" model for line-of-sight)-.2 F(propag)108 496.8 Q
+108 532.8 Q F3(-m)A F0 2.5(\)s)C(witch:)-2.5 E F1(splat -t wnjt -c 30.0\
+ -m 1.333 -s cities.dat -b counties.dat -o map.ppm)108 556.8 Q F0 .595
+(An earth radius multiplier of 1.333 instructs)108 580.8 R F2(SPLA)3.095
+E(T!)-.95 E F0 .595(to use the "four)3.095 F .594
+(-thirds earth" model for line-of-sight)-.2 F(propag)108 592.8 Q
 (ation analysis.)-.05 E(An)5 E 2.5(ya)-.15 G
 (ppropriate earth radius multiplier may be selected by the user)-2.5 E
-(.)-.55 E .202(When in)108 520.8 R -.2(vo)-.4 G -.1(ke).2 G 2.702(di).1
-G 2.702(na)-2.702 G .202(rea prediction mode,)-2.702 F F2(SPLA)2.701 E
-(T!)-.95 E F0 .201(generates a site report for each station analyzed.)
-2.701 F F2(SPLA)5.201 E(T!)-.95 E F0 .658
-(site reports contain details of the site')108 532.8 R 3.159(sg)-.55 G
+(.)-.55 E .201(When in)108 616.8 R -.2(vo)-.4 G -.1(ke).2 G 2.701(di).1
+G 2.701(na)-2.701 G .201(rea prediction mode,)-2.701 F F2(SPLA)2.701 E
+(T!)-.95 E F0 .202(generates a site report for each station analyzed.)
+2.701 F F2(SPLA)5.202 E(T!)-.95 E F0 .659
+(site reports contain details of the site')108 628.8 R 3.159(sg)-.55 G
 .659(eographic location, its height abo)-3.159 F .959 -.15(ve m)-.15 H
-.659(ean sea le).15 F -.15(ve)-.25 G .659(l, the antenna').15 F(s)-.55 E
-.613(height abo)108 544.8 R .913 -.15(ve m)-.15 H .613(ean sea le).15 F
--.15(ve)-.25 G .613(l, the antenna').15 F 3.112(sh)-.55 G .612
-(eight abo)-3.112 F .912 -.15(ve a)-.15 H -.15(ve)-.05 G .612
-(rage terrain, and the height of the a).15 F -.15(ve)-.2 G .612
+.658(ean sea le).15 F -.15(ve)-.25 G .658(l, the antenna').15 F(s)-.55 E
+.612(height abo)108 640.8 R .912 -.15(ve m)-.15 H .612(ean sea le).15 F
+-.15(ve)-.25 G .612(l, the antenna').15 F 3.112(sh)-.55 G .612
+(eight abo)-3.112 F .912 -.15(ve a)-.15 H -.15(ve)-.05 G .613
+(rage terrain, and the height of the a).15 F -.15(ve)-.2 G .613
 (rage ter).15 F(-)-.2 E(rain calculated in the directions of 0, 45, 90,\
- 135, 180, 225, 270, and 315 de)108 556.8 Q(grees azimuth.)-.15 E .344
-(If the)108 580.8 R F3(-c)2.844 E F0 .344(switch is replaced by a)2.844
-F F3(-L)2.844 E F0 .344(switch, a Longle)2.844 F .345
-(y-Rice path loss map for a transmitter site may be gen-)-.15 F(erated:)
-108 592.8 Q F1
-(splat -t wnjt -L 30.0 -s cities.dat -b co34_d00.dat -o path_loss_map)
-108 616.8 Q F0 .978(In this mode,)108 640.8 R F2(SPLA)3.478 E(T!)-.95 E
-F0 .977(generates a multi-color map illustrating e)3.478 F .977
-(xpected signal le)-.15 F -.15(ve)-.25 G .977(ls \(path loss\) in areas)
-.15 F .996(surrounding the transmitter site.)108 652.8 R 3.496(Al)5.996
-G -.15(eg)-3.496 G .997
-(end at the bottom of the map correlates each color with a speci\214c)
-.15 F .322(path loss le)108 664.8 R -.15(ve)-.25 G 2.822(li).15 G 2.822
-(nd)-2.822 G 2.822(ecibels. Since)-2.822 F(Longle)2.822 E .322
-(y-Rice area prediction map generation is v)-.15 F .322(ery CPU intensi)
--.15 F -.15(ve)-.25 G 2.822(,p).15 G(ro-)-2.822 E .013
-(vision for limiting the analysis range is pro)108 676.8 R .014
-(vided by the)-.15 F F3(-R)2.514 E F0 2.514(switch. The)2.514 F(ar)2.514
-E .014(gument must be gi)-.18 F -.15(ve)-.25 G 2.514(ni).15 G 2.514(nm)
--2.514 G 2.514(iles. If)-2.514 F 3.58(ar)108 688.8 S 1.08
-(ange wider than the generated topographic map is speci\214ed,)-3.58 F
-F2(SPLA)3.58 E(T!)-.95 E F0 1.08(will perform Longle)3.58 F 1.08
-(y-Rice path)-.15 F
-(loss calculations between all four corners of the area prediction map.)
-108 700.8 Q(The)108 724.8 Q F3(-db)3.344 E F0 .844(switch allo)3.344 F
-.845(ws a constraint to be placed on the maximum path loss re)-.25 F
-.845(gion plotted on the map.)-.15 F(A)5.845 E(KD2BD Softw)72 768 Q
-129.12(are 02)-.1 F(March 2006)2.5 E(7)198.45 E EP
-%%Page: 8 8
+ 135, 180, 225, 270, and 315 de)108 652.8 Q(grees azimuth.)-.15 E F4
+(DETERMINING MUL)72 669.6 Q(TIPLE REGIONS OF LOS CO)-1.007 E(VERA)-.548
+E(GE)-.602 E F2(SPLA)108 681.6 Q(T!)-.95 E F0 1.087
+(can also display line-of-sight co)3.587 F -.15(ve)-.15 G 1.086
+(rage areas for as man).15 F 3.586(ya)-.15 G 3.586(sf)-3.586 G 1.086
+(our separate transmitter sites on a)-3.586 F(common topographic map.)
+108 693.6 Q -.15(Fo)5 G 2.5(re).15 G(xample:)-2.65 E F1
+(splat -t site1 site2 site3 site4 -c 10.0 -metric -o network.ppm)108
+717.6 Q F0(KD2BD Softw)72 768 Q 121.625(are 20)-.1 F(December 2006)2.5 E
+(8)190.955 E EP
+%%Page: 9 9
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F
-(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E .803
-(path loss between 80 and 230 dB may be speci\214ed using this switch.)
-108 84 R -.15(Fo)5.803 G 3.303(re).15 G .803(xample, if a path loss be)
--3.453 F(yond)-.15 E 1.399(-140 dB is irrele)108 96 R -.25(va)-.25 G
-1.399(nt to the surv).25 F 1.699 -.15(ey b)-.15 H 1.399(eing conducted,)
-.15 F/F1 10/Times-Bold@0 SF(SPLA)3.899 E(T!)-.95 E F0 2.499 -.55('s p)D
-1.4(ath loss plot can be constrained to the).55 F(re)108 108 Q
-(gion bounded by the 140 dB attenuation contour as follo)-.15 E(ws:)-.25
-E/F2 10/Courier@0 SF(splat -t wnjt -L 30.0 -s cities.dat -b co34_d00.da\
-t -db 140 -o plot.ppm)108 132 Q/F3 10.95/Times-Bold@0 SF
-(DETERMINING MUL)72 160.8 Q(TIPLE REGIONS OF CO)-1.007 E(VERA)-.548 E
-(GE)-.602 E F1(SPLA)108 172.8 Q(T!)-.95 E F0 1.087
-(can also display line-of-sight co)3.587 F -.15(ve)-.15 G 1.086
-(rage areas for as man).15 F 3.586(ya)-.15 G 3.586(sf)-3.586 G 1.086
-(our separate transmitter sites on a)-3.586 F(common topographic map.)
-108 184.8 Q -.15(Fo)5 G 2.5(re).15 G(xample:)-2.65 E F2
-(splat -t site1 site2 site3 site4 -c 30.0 -o network.ppm)108 208.8 Q F0
-.686(plots the re)108 232.8 R .687(gional line-of-sight co)-.15 F -.15
-(ve)-.15 G .687(rage of site1, site2, site3, and site4 based on a recei)
-.15 F .987 -.15(ve a)-.25 H .687(ntenna located).15 F .277
-(30.0 feet abo)108 244.8 R .577 -.15(ve g)-.15 H .277(round le).15 F
--.15(ve)-.25 G 2.776(l. A).15 F .276
-(topographic map is then written to the \214le)2.776 F/F4 10
-/Times-Italic@0 SF(network.ppm)2.776 E F0 5.276(.T)C .276
-(he line-of-sight)-5.276 F(co)108 256.8 Q -.15(ve)-.15 G .2
-(rage area of the transmitters are plotted as follo).15 F .2
-(ws in the colors indicated \(along with their correspond-)-.25 F
-(ing RGB v)108 268.8 Q(alues in decimal\):)-.25 E F2
-(site1: Green \(0,255,0\))132 292.8 Q(site2: Cyan \(0,255,255\))132
-304.8 Q(site3: Medium Violet \(147,112,219\))132 316.8 Q
-(site4: Sienna 1 \(255,130,71\))132 328.8 Q
-(site1 + site2: Yellow \(255,255,0\))132 352.8 Q
-(site1 + site3: Pink \(255,192,203\))132 364.8 Q
-(site1 + site4: Green Yellow \(173,255,47\))132 376.8 Q
-(site2 + site3: Orange \(255,165,0\))132 388.8 Q
-(site2 + site4: Dark Sea Green 1 \(193,255,193\))132 400.8 Q
-(site3 + site4: Dark Turquoise \(0,206,209\))132 412.8 Q
-(site1 + site2 + site3: Dark Green \(0,100,0\))132 436.8 Q
-(site1 + site2 + site4: Blanched Almond \(255,235,205\))132 448.8 Q
-(site1 + site3 + site4: Medium Spring Green \(0,250,154\))132 460.8 Q
-(site2 + site3 + site4: Tan \(210,180,140\))132 472.8 Q
-(site1 + site2 + site3 + site4: Gold2 \(238,201,0\))132 496.8 Q F0 .247
-(If separate)108 520.8 R F4(.qth)2.747 E F0 .247
+(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E .686(plots the re)
+108 84 R .687(gional line-of-sight co)-.15 F -.15(ve)-.15 G .687
+(rage of site1, site2, site3, and site4 based on a recei).15 F .987 -.15
+(ve a)-.25 H .687(ntenna located).15 F .763(10.0 meters abo)108 96 R
+1.063 -.15(ve g)-.15 H .763(round le).15 F -.15(ve)-.25 G 3.263(l. A).15
+F .762(topographic map is then written to the \214le)3.263 F/F1 10
+/Times-Italic@0 SF(network.ppm)3.262 E F0 5.762(.T)C .762(he line-of-)
+-5.762 F .302(sight co)108 108 R -.15(ve)-.15 G .302
+(rage area of the transmitters are plotted as follo).15 F .303
+(ws in the colors indicated \(along with their corre-)-.25 F
+(sponding RGB v)108 120 Q(alues in decimal\):)-.25 E/F2 10/Courier@0 SF
+(site1: Green \(0,255,0\))132 144 Q(site2: Cyan \(0,255,255\))132 156 Q
+(site3: Medium Violet \(147,112,219\))132 168 Q
+(site4: Sienna 1 \(255,130,71\))132 180 Q
+(site1 + site2: Yellow \(255,255,0\))132 204 Q
+(site1 + site3: Pink \(255,192,203\))132 216 Q
+(site1 + site4: Green Yellow \(173,255,47\))132 228 Q
+(site2 + site3: Orange \(255,165,0\))132 240 Q
+(site2 + site4: Dark Sea Green 1 \(193,255,193\))132 252 Q
+(site3 + site4: Dark Turquoise \(0,206,209\))132 264 Q
+(site1 + site2 + site3: Dark Green \(0,100,0\))132 288 Q
+(site1 + site2 + site4: Blanched Almond \(255,235,205\))132 300 Q
+(site1 + site3 + site4: Medium Spring Green \(0,250,154\))132 312 Q
+(site2 + site3 + site4: Tan \(210,180,140\))132 324 Q
+(site1 + site2 + site3 + site4: Gold2 \(238,201,0\))132 348 Q F0 .247
+(If separate)108 372 R F1(.qth)2.747 E F0 .247
 (\214les are generated, each representing a common site location b)2.747
 F .247(ut a dif)-.2 F .246(ferent antenna height,)-.25 F 3.535(as)108
-532.8 S 1.035(ingle topographic map illustrating the re)-3.535 F 1.036
+384 S 1.035(ingle topographic map illustrating the re)-3.535 F 1.036
 (gional co)-.15 F -.15(ve)-.15 G 1.036(rage from as man).15 F 3.536(ya)
 -.15 G 3.536(sf)-3.536 G 1.036(our separate locations on a)-3.536 F
-(single to)108 544.8 Q(wer may be generated by)-.25 E F1(SPLA)2.5 E(T!)
--.95 E F0(.)A F3 -.197(TO)72 561.6 S(POGRAPHIC MAP GENERA).197 E(TION)
--1.04 E F0 .52(In certain situations, it may be desirable to generate a\
- topographic map of a re)108 573.6 R .519(gion without plotting co)-.15
-F -.15(ve)-.15 G -.2(r-).15 G 1.006
-(age areas, line-of-sight paths, or generating obstruction reports.)108
-585.6 R 1.007(There are se)6.007 F -.15(ve)-.25 G 1.007(ral w).15 F
-1.007(ays of doing this.)-.1 F(If)6.007 E .814(one wishes to generate a\
+(single to)108 396 Q(wer may be generated by)-.25 E/F3 10/Times-Bold@0
+SF(SPLA)2.5 E(T!)-.95 E F0(.)A/F4 10.95/Times-Bold@0 SF(LONGLEY)72 412.8
+Q(-RICE P)-1.007 E -1.04(AT)-.81 G 2.738(HL)1.04 G(OSS AN)-2.738 E(AL)
+-.219 E(YSIS)-1.007 E F0 .345(If the)108 424.8 R F1(-c)2.845 E F0 .345
+(switch is replaced by a)2.845 F F1(-L)2.844 E F0 .344(switch, a Longle)
+2.844 F .344(y-Rice path loss map for a transmitter site may be gen-)
+-.15 F(erated:)108 436.8 Q F2
+(splat -t wnjt -L 30.0 -s cities.dat -b co34_d00.dat -o path_loss_map)
+108 460.8 Q F0 .977(In this mode,)108 484.8 R F3(SPLA)3.477 E(T!)-.95 E
+F0 .977(generates a multi-color map illustrating e)3.477 F .977
+(xpected signal le)-.15 F -.15(ve)-.25 G .978(ls \(path loss\) in areas)
+.15 F .997(surrounding the transmitter site.)108 496.8 R 3.497(Al)5.997
+G -.15(eg)-3.497 G .996
+(end at the bottom of the map correlates each color with a speci\214c)
+.15 F(path loss range in decibels.)108 508.8 Q .63(The Longle)108 532.8
+R .63(y-Rice analysis range may be modi\214ed to a user)-.15 F .63
+(-speci\214c v)-.2 F .63(alue using the)-.25 F F1(-R)3.13 E F0 3.13
+(switch. The)3.13 F(ar)3.13 E(gu-)-.18 E .523(ment must be gi)108 544.8
+R -.15(ve)-.25 G 3.023(ni).15 G 3.023(nm)-3.023 G .523
+(iles \(or kilometers if the)-3.023 F F1(-metric)3.023 E F0 .522
+(switch is used\).)3.022 F .522(If a range wider than the gener)5.522 F
+(-)-.2 E .926(ated topographic map is speci\214ed,)108 556.8 R F3(SPLA)
+3.426 E(T!)-.95 E F0 .926(will perform Longle)3.426 F .926
+(y-Rice path loss calculations between all)-.15 F
+(four corners of the area prediction map.)108 568.8 Q(The)108 592.8 Q F1
+(-db)3.345 E F0 .845(switch allo)3.345 F .845
+(ws a constraint to be placed on the maximum path loss re)-.25 F .844
+(gion plotted on the map.)-.15 F(A)5.844 E .21(maximum path loss betwee\
+n 80 and 230 dB may be speci\214ed using this switch.)108 604.8 R -.15
+(Fo)5.21 G 2.71(re).15 G .21(xample, if a path loss)-2.86 F(be)108 616.8
+Q .396(yond -140 dB is irrele)-.15 F -.25(va)-.25 G .395(nt to the surv)
+.25 F .695 -.15(ey b)-.15 H .395(eing conducted,).15 F F3(SPLA)2.895 E
+(T!)-.95 E F0 1.495 -.55('s p)D .395
+(ath loss plot can be constrained to).55 F(the re)108 628.8 Q
+(gion bounded by the 140 dB attenuation contour as follo)-.15 E(ws:)-.25
+E F2(splat -t wnjt -L 30.0 -s cities.dat -b co34_d00.dat -db 140 -o plo\
+t.ppm)108 652.8 Q F4(ANTENN)72 681.6 Q 2.738(AR)-.219 G(ADIA)-2.738 E
+(TION P)-1.04 E -1.04(AT)-.81 G(TERN P)1.04 E(ARAMETERS)-.81 E F0 .976
+(Normalized \214eld v)108 693.6 R .977
+(oltage patterns for a transmitting antenna')-.2 F 3.477(sh)-.55 G .977
+(orizontal and v)-3.477 F .977(ertical planes are imported)-.15 F .588
+(automatically into)108 705.6 R F3(SPLA)3.088 E(T!)-.95 E F0 .588
+(when a Longle)3.088 F .588(y-Rice co)-.15 F -.15(ve)-.15 G .588
+(rage analysis is performed.).15 F .587(Antenna pattern data is)5.587 F
+.804(read from a pair of \214les ha)108 717.6 R .805
+(ving the same base name as the transmitter and LRP \214les, b)-.2 F
+.805(ut with)-.2 F F1(.az)3.305 E F0(and)3.305 E F1(.el)3.305 E F0 -.15
+(ex)108 729.6 S .308(tensions for azimuth and ele).15 F -.25(va)-.25 G
+.308(tion pattern \214les, respecti).25 F -.15(ve)-.25 G(ly).15 E 5.307
+(.S)-.65 G .307(peci\214cations re)-5.307 F -.05(ga)-.15 G .307
+(rding pattern rotation \(if).05 F(KD2BD Softw)72 768 Q 121.625(are 20)
+-.1 F(December 2006)2.5 E(9)190.955 E EP
+%%Page: 10 10
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F
+(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E(an)108 84 Q .45
+(y\) and mechanical beam tilt and tilt direction \(if an)-.15 F .451
+(y\) are also contained within)-.15 F/F1 10/Times-Bold@0 SF(SPLA)2.951 E
+(T!)-.95 E F0 .451(antenna pattern)2.951 F(\214les.)108 96 Q -.15(Fo)108
+120 S 2.5(re).15 G(xample, the \214rst fe)-2.65 E 2.5(wl)-.25 G
+(ines of a)-2.5 E F1(SPLA)2.5 E(T!)-.95 E F0
+(azimuth pattern \214le might appear as follo)2.5 E(ws \()-.25 E/F2 10
+/Times-Italic@0 SF(kvea.az)A F0(\):)A/F3 10/Courier@0 SF(183.0)156 144 Q
+42(00)156 156 S(.8950590)-42 E 42(10)156 168 S(.8966406)-42 E 42(20)156
+180 S(.8981447)-42 E 42(30)156 192 S(.8995795)-42 E 42(40)156 204 S
+(.9009535)-42 E 42(50)156 216 S(.9022749)-42 E 42(60)156 228 S(.9035517)
+-42 E 42(70)156 240 S(.9047923)-42 E 42(80)156 252 S(.9060051)-42 E F0
+1.778(The \214rst line of the)108 276 R F2(.az)4.278 E F0 1.777(\214le \
+speci\214es the amount of azimuthal pattern rotation \(measured clockwi\
+se in)4.278 F(de)108 288 Q .062(grees from T)-.15 F .062
+(rue North\) to be applied by)-.35 F F1(SPLA)2.562 E(T!)-.95 E F0 .063
+(to the data contained in the)2.562 F F2(.az)2.563 E F0 2.563
+(\214le. This)2.563 F .063(is follo)2.563 F .063(wed by)-.25 F .871
+(azimuth headings \(0 to 360 de)108 300 R .871(grees\) and their associ\
+ated normalized \214eld patterns \(0.000 to 1.000\) sepa-)-.15 F
+(rated by whitespace.)108 312 Q .068(The structure of)108 336 R F1(SPLA)
+2.569 E(T!)-.95 E F0(ele)2.569 E -.25(va)-.25 G .069
+(tion pattern \214les is slightly dif).25 F 2.569(ferent. The)-.25 F
+.069(\214rst line of the)2.569 F F2(.el)2.569 E F0 .069
+(\214le speci\214es the)2.569 F .892
+(amount of mechanical beam tilt applied to the antenna.)108 348 R .892
+(Note that a)5.892 F F2(downwar)3.392 E 3.392(dt)-.37 G(ilt)-3.392 E F0
+(\(belo)3.391 E 3.391(wt)-.25 G .891(he horizon\) is)-3.391 F -.15(ex)
+108 360 S 1.101(pressed as a).15 F F2 1.101(positive angle)3.601 F F0
+3.601(,w)C 1.101(hile an)-3.601 F F2(upwar)3.601 E 3.601(dt)-.37 G(ilt)
+-3.601 E F0(\(abo)3.601 E 1.401 -.15(ve t)-.15 H 1.101
+(he horizon\) is e).15 F 1.101(xpressed as a)-.15 F F2(ne)3.602 E 1.102
+(gative angle)-.4 F F0(.)A(This data is follo)108 372 Q
+(wed by the azimuthal direction of the tilt, separated by whitespace.)
+-.25 E .437(The remainder of the \214le consists of ele)108 396 R -.25
+(va)-.25 G .436(tion angles and their corresponding normalized v).25 F
+.436(oltage radiation)-.2 F .247(pattern \(0.000 to 1.000\) v)108 408 R
+.247(alues separated by whitespace.)-.25 F(Ele)5.247 E -.25(va)-.25 G
+.248(tion angles must be speci\214ed o).25 F -.15(ve)-.15 G 2.748(ra-)
+.15 G .248(10.0 to)-2.748 F .131(+90.0 de)108 420 R .131(gree range.)
+-.15 F .131(As w)5.131 F .131(as the con)-.1 F -.15(ve)-.4 G .131
+(ntion with mechanical beamtilt,).15 F F2(ne)2.631 E .13(gative ele)-.4
+F .13(vation angles)-.15 F F0 .13(are used to)2.63 F(represent ele)108
+432 Q -.25(va)-.25 G(tions).25 E F2(abo)2.5 E(ve the horizon)-.1 E F0
+2.5(,w)C(hile)-2.5 E F2(positive angles)2.5 E F0(represents ele)2.5 E
+-.25(va)-.25 G(tions).25 E F2(below the horizon)2.5 E F0(.)A -.15(Fo)108
+456 S 2.5(re).15 G(xample, the \214rst fe)-2.65 E 2.5(wl)-.25 G(ines a)
+-2.5 E F1(SPLA)2.5 E(T!)-.95 E F0(ele)2.5 E -.25(va)-.25 G
+(tion pattern \214le might appear as follo).25 E(ws \()-.25 E F2
+(kvea.el)A F0(\):)A F3 18(1.1 130.0)156 480 R 12(-10.0 0.172)150 492 R
+18(-9.5 0.109)150 504 R 18(-9.0 0.115)150 516 R 18(-8.5 0.155)150 528 R
+18(-8.0 0.157)150 540 R 18(-7.5 0.104)150 552 R 18(-7.0 0.029)150 564 R
+18(-6.5 0.109)150 576 R 18(-6.0 0.185)150 588 R F0 1.538(In this e)108
+612 R 1.538(xample, the antenna is mechanically tilted do)-.15 F(wnw)
+-.25 E 1.538(ard 1.1 de)-.1 F 1.538(grees to)-.15 F -.1(wa)-.25 G 1.538
+(rds an azimuth of 130.0).1 F(de)108 624 Q(grees.)-.15 E -.15(Fo)108 648
+S 3.447(rb).15 G .946(est results, the resolution of azimuth pattern da\
+ta should be speci\214ed to the nearest de)-3.447 F .946(gree azimuth,)
+-.15 F 1.299(and ele)108 660 R -.25(va)-.25 G 1.299(tion pattern data r\
+esolution should be speci\214ed to the nearest 0.01 de).25 F 3.8
+(grees. If)-.15 F 1.3(the pattern data)3.8 F .55
+(speci\214ed does not reach this le)108 672 R -.15(ve)-.25 G 3.049(lo)
+.15 G 3.049(fr)-3.049 G(esolution,)-3.049 E F1(SPLA)3.049 E(T!)-.95 E F0
+.549(will interpolate the v)3.049 F .549(alues pro)-.25 F .549
+(vided to determine)-.15 F(the data at the required resolution, althoug\
+h this may result in a loss in accurac)108 684 Q -.65(y.)-.15 G
+(KD2BD Softw)72 768 Q 121.625(are 20)-.1 F(December 2006)2.5 E(10)
+185.955 E EP
+%%Page: 11 11
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F
+(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E/F1 10.95
+/Times-Bold@0 SF(IMPOR)72 84 Q(TING AND EXPOR)-.438 E(TING REGION)-.438
+E(AL P)-.219 E -1.04(AT)-.81 G 2.738(HL)1.04 G(OSS CONT)-2.738 E(OUR D)
+-.197 E -1.644 -1.04(AT A)-.383 H F0 .254(Performing a Longle)108 96 R
+.254(y-Rice co)-.15 F -.15(ve)-.15 G .254(rage analysis can be a v).15 F
+.254(ery time consuming process, especially if the anal-)-.15 F .936
+(ysis is repeated repeatedly to disco)108 108 R -.15(ve)-.15 G 3.436(rw)
+.15 G .936(hat ef)-3.436 F .935
+(fects changes to the antenna radiation patterns mak)-.25 F 3.435(et)-.1
+G 3.435(ot)-3.435 G(he)-3.435 E(predicted co)108 120 Q -.15(ve)-.15 G
+(rage area.).15 E .721(This process can be e)108 144 R .722
+(xpedited by e)-.15 F .722(xporting the Longle)-.15 F .722(y-Rice re)
+-.15 F .722(gional path loss contour data to an output)-.15 F .776
+(\214le, modifying the path loss data e)108 156 R .775
+(xternally to incorporate antenna pattern ef)-.15 F .775
+(fects, and then importing the)-.25 F
+(modi\214ed path loss data back into)108 168 Q/F2 10/Times-Bold@0 SF
+(SPLA)2.5 E(T!)-.95 E F0(to rapidly produce a re)5 E
+(vised path loss map.)-.25 E -.15(Fo)108 192 S 3.253(re).15 G .753
+(xample, a path loss output \214le can be generated by)-3.403 F F2(SPLA)
+3.253 E(T!)-.95 E F0 .753(for a recei)5.753 F 1.053 -.15(ve s)-.25 H
+.754(ite 30 feet abo).15 F 1.054 -.15(ve g)-.15 H(round).15 E(le)108 204
+Q -.15(ve)-.25 G 2.998(lo).15 G -.15(ve)-3.148 G 2.998(ra5).15 G 2.998
+(0m)-2.998 G .497(ile radius surrounding a transmitter site to a maximu\
+m path loss of 140 dB using the fol-)-2.998 F(lo)108 216 Q(wing syntax:)
+-.25 E/F3 10/Courier@0 SF
+(splat -t kvea -L 30.0 -R 50.0 -db 140 -plo pathloss.dat)108 240 Q F2
+(SPLA)108 264 Q(T!)-.95 E F0 .044(path loss output \214les often e)2.544
+F .044(xceed 100 me)-.15 F -.05(ga)-.15 G .044(bytes in size.).05 F(The)
+5.045 E 2.545(yc)-.15 G .045(ontain information relating to the)-2.545 F
+2.58(boundaries of re)108 276 R 2.58(gion the)-.15 F 5.08(yd)-.15 G 2.58
+(escribe follo)-5.08 F 2.58(wed by latitudes \(de)-.25 F 2.58
+(grees North\), longitudes \(de)-.15 F 2.58(grees W)-.15 F(est\),)-.8 E
+.655(azimuths, ele)108 288 R -.25(va)-.25 G .656(tions \(to the \214rst\
+ obstruction\), and path loss \214gures \(dB\) for a series of speci\
+\214c points that).25 F .542(comprise the re)108 300 R .542
+(gion surrounding the transmitter site.)-.15 F .542(The \214rst fe)5.542
+F 3.042(wl)-.25 G .542(ines of a)-3.042 F F2(SPLA)3.042 E(T!)-.95 E F0
+.541(path loss output \214le)3.041 F(tak)108 312 Q 2.5(eo)-.1 G 2.5(nt)
+-2.5 G(he follo)-2.5 E(wing appearance \()-.25 E/F4 10/Times-Italic@0 SF
+(pathloss.dat)A F0(\):)A F3(119, 117)156 336 Q 6(;m)24 G
+(ax_west, min_west)-6 E(35, 33)156 348 Q 6(;m)36 G(ax_north, min_north)
+-6 E(34.2265434, 118.0631104, 48.171, -37.461, 67.70)156 360 Q
+(34.2270355, 118.0624390, 48.262, -26.212, 73.72)156 372 Q
+(34.2280197, 118.0611038, 48.269, -14.951, 79.74)156 384 Q
+(34.2285156, 118.0604401, 48.207, -11.351, 81.68)156 396 Q
+(34.2290077, 118.0597687, 48.240, -10.518, 83.26)156 408 Q
+(34.2294998, 118.0591049, 48.225, 23.201, 84.60)156 420 Q
+(34.2304878, 118.0577698, 48.213, 15.769, 137.84)156 432 Q
+(34.2309799, 118.0570984, 48.234, 15.965, 151.54)156 444 Q
+(34.2314720, 118.0564346, 48.224, 16.520, 149.45)156 456 Q
+(34.2319679, 118.0557632, 48.223, 15.588, 151.61)156 468 Q
+(34.2329521, 118.0544281, 48.230, 13.889, 135.45)156 480 Q
+(34.2334442, 118.0537643, 48.223, 11.693, 137.37)156 492 Q
+(34.2339401, 118.0530930, 48.222, 14.050, 126.32)156 504 Q
+(34.2344322, 118.0524292, 48.216, 16.274, 156.28)156 516 Q
+(34.2354164, 118.0510941, 48.222, 15.058, 152.65)156 528 Q
+(34.2359123, 118.0504227, 48.221, 16.215, 158.57)156 540 Q
+(34.2364044, 118.0497589, 48.216, 15.024, 157.30)156 552 Q
+(34.2368965, 118.0490875, 48.225, 17.184, 156.36)156 564 Q F0 .134
+(It is not uncommon for)108 588 R F2(SPLA)2.634 E(T!)-.95 E F0 .135
+(path loss \214les to contain as man)2.635 F 2.635(ya)-.15 G 2.635(s3m)
+-2.635 G .135(illion or more lines of data.)-2.635 F(Com-)5.135 E 1.165
+(ments can be placed in the \214le if the)108 600 R 3.664(ya)-.15 G
+1.164(re proceeded by a semicolon character)-3.664 F 6.164(.T)-.55 G(he)
+-6.164 E F2(vim)3.664 E F0(te)3.664 E 1.164(xt editor has)-.15 F(pro)108
+612 Q -.15(ve)-.15 G 2.5(nc).15 G
+(apable of editing \214les of this size.)-2.5 E .807(Note as w)108 636 R
+.807(as the case in the antenna pattern \214les, ne)-.1 F -.05(ga)-.15 G
+(ti).05 E 1.107 -.15(ve e)-.25 H(le).15 E -.25(va)-.25 G .807
+(tion angles refer to upw).25 F .808(ard tilt \(abo)-.1 F 1.108 -.15
+(ve t)-.15 H(he).15 E .94(horizon\), while positi)108 648 R 1.24 -.15
+(ve a)-.25 H .94(ngles refer to do).15 F(wnw)-.25 E .94(ard tilt \(belo)
+-.1 F 3.44(wt)-.25 G .94(he horizon\).)-3.44 F .94
+(These angles refer to the ele-)5.94 F -.25(va)108 660 S 1.075
+(tion to the recei).25 F 1.075(ving antenna at the height abo)-.25 F
+1.376 -.15(ve g)-.15 H 1.076(round le).15 F -.15(ve)-.25 G 3.576(ls).15
+G 1.076(peci\214ed using the)-3.576 F F4(-L)3.576 E F0(switch)3.576 E F4
+(if)3.576 E F0 1.076(the path)3.576 F 2.35
+(between transmitter and recei)108 672 R -.15(ve)-.25 G 4.85(ri).15 G
+4.85(su)-4.85 G 4.85(nobstructed. If)-4.85 F 2.35
+(the path between the transmitter and recei)4.85 F -.15(ve)-.25 G 4.85
+(ri).15 G(s)-4.85 E .009(obstructed, then the ele)108 684 R -.25(va)-.25
+G .009(tion angle to the \214rst obstruction is returned by).25 F F2
+(SPLA)2.51 E(T!)-.95 E F0 5.01(.T)C .01(his is because the Lon-)-5.01 F
+(gle)108 696 Q .262(y-Rice model considers the ener)-.15 F .262
+(gy reaching a distant point o)-.18 F -.15(ve)-.15 G 2.762(ra).15 G
+2.762(no)-2.762 G .262(bstructed path as a deri)-2.762 F -.25(va)-.25 G
+(ti).25 E .561 -.15(ve o)-.25 H 2.761(ft).15 G(he)-2.761 E(ener)108 708
+Q .489(gy scattered from the top of the \214rst obstruction, only)-.18 F
+5.489(.S)-.65 G .489(ince ener)-5.489 F .489
+(gy cannot reach the obstructed loca-)-.18 F(tion directly)108 720 Q 2.5
+(,t)-.65 G(he actual ele)-2.5 E -.25(va)-.25 G
+(tion angle to that point is irrele).25 E -.25(va)-.25 G(nt.).25 E
+(KD2BD Softw)72 768 Q 121.625(are 20)-.1 F(December 2006)2.5 E(11)
+185.955 E EP
+%%Page: 12 12
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F
+(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E 1.142
+(When modifying)108 84 R/F1 10/Times-Bold@0 SF(SPLA)3.642 E(T!)-.95 E F0
+1.141(path loss \214les to re\215ect antenna pattern data,)3.642 F/F2 10
+/Times-Italic@0 SF 1.141(only the last column \(path loss\))3.641 F F0
+.233(should be amended to re\215ect the antenna')108 96 R 2.733(sn)-.55
+G .233(ormalized g)-2.733 F .233(ain at the azimuth and ele)-.05 F -.25
+(va)-.25 G .234(tion angles speci\214ed in).25 F .395(the \214le.)108
+108 R .395(\(At this time, programs and scripts capable of performing t\
+his operation are left as an e)5.395 F -.15(xe)-.15 G .395(rcise for).15
+F(the user)108 120 Q(.\))-.55 E
+(Modi\214ed path loss maps can be imported back into)108 144 Q F1(SPLA)
+2.5 E(T!)-.95 E F0(for generating re)2.5 E(vised co)-.25 E -.15(ve)-.15
+G(rage maps:).15 E/F3 10/Courier@0 SF
+(splat -t kvea -pli pathloss.dat -s city.dat -b county.dat -o map.ppm)
+108 168 Q F1(SPLA)108 192 Q(T!)-.95 E F0 .006
+(path loss \214les can also be used for conducting co)2.506 F -.15(ve)
+-.15 G .007(rage or interference studies outside of).15 F F1(SPLA)2.507
+E(T!)-.95 E F0(.)A/F4 10.95/Times-Bold@0 SF
+(USER-DEFINED TERRAIN INPUT FILES)72 208.8 Q F0 3.542(Au)108 220.8 S
+(ser)-3.542 E 1.042(-de\214ned terrain \214le is a user)-.2 F 1.041
+(-generated te)-.2 F 1.041
+(xt \214le containing latitudes, longitudes, and heights abo)-.15 F -.15
+(ve)-.15 G 1.072(ground le)108 232.8 R -.15(ve)-.25 G 3.572(lo).15 G
+3.572(fs)-3.572 G 1.072(peci\214c terrain features belie)-3.572 F -.15
+(ve)-.25 G 3.572(dt).15 G 3.572(ob)-3.572 G 3.573(eo)-3.572 G 3.573(fi)
+-3.573 G 1.073(mportance to the)-3.573 F F1(SPLA)3.573 E(T!)-.95 E F0
+1.073(analysis being con-)3.573 F .602(ducted, b)108 244.8 R .601
+(ut noticeably absent from the SDF \214les being used.)-.2 F 3.101(Au)
+5.601 G(ser)-3.101 E .601(-de\214ned terrain \214le is imported into a)
+-.2 F F1(SPLA)108 256.8 Q(T!)-.95 E F0(analysis using the)2.5 E F2(-udt)
+2.5 E F0(switch:)2.5 E F3
+(splat -t tx_site -r rx_site -udt udt_file.txt -o map.ppm)114 280.8 Q F0
+2.5(Au)108 304.8 S(ser)-2.5 E(-de\214ned terrain \214le has the follo)
+-.2 E(wing appearance and structure:)-.25 E F3
+(40.32180556, 74.1325, 100.0 meters)150 328.8 Q
+(40.321805, 74.1315, 300.0)150 340.8 Q
+(40.3218055, 74.1305, 100.0 meters)150 352.8 Q F0 -.7(Te)108 376.8 S
+1.42(rrain height is interpreted as being described in feet abo).7 F
+1.72 -.15(ve g)-.15 H 1.42(round le).15 F -.15(ve)-.25 G 3.92(lu).15 G
+1.42(nless follo)-3.92 F 1.42(wed by the w)-.25 F(ord)-.1 E F2(meter)108
+388.8 Q(s)-.1 E F0 3.329(,a)C .829(nd is added)-3.329 F F2 .829
+(on top of)3.329 F F0 .829
+(the terrain speci\214ed in the SDF data for the locations speci\214ed.)
+3.329 F .828(Be a)5.829 F -.1(wa)-.15 G(re).1 E 1.06(that each user)108
+400.8 R 1.061(-de\214ned terrain feature speci\214ed will be interprete\
+d as being 3-arc seconds in both latitude)-.2 F .282(and longitude.)108
+412.8 R .282(Features described in the user)5.282 F .281
+(-de\214ned terrain \214le that o)-.2 F -.15(ve)-.15 G .281(rlap pre).15
+F .281(viously de\214ned features in)-.25 F(the \214le are ignored by)
+108 424.8 Q F1(SPLA)2.5 E(T!)-.95 E F0(.)A F4(SIMPLE T)72 441.6 Q
+(OPOGRAPHIC MAP GENERA)-.197 E(TION)-1.04 E F0 .034(In certain situatio\
+ns it may be desirable to generate a topographic map of a re)108 453.6 R
+.035(gion without plotting co)-.15 F -.15(ve)-.15 G(rage).15 E .97
+(areas, line-of-sight paths, or generating obstruction reports.)108
+465.6 R .969(There are se)5.969 F -.15(ve)-.25 G .969(ral w).15 F .969
+(ays of doing this.)-.1 F .969(If one)5.969 F .162(wishes to generate a\
  topographic map illustrating the location of a transmitter and recei)
-108 597.6 R -.15(ve)-.25 G 3.314(rs).15 G .814(ite along)-3.314 F 1.175
-(with a brief te)108 609.6 R 1.176(xt report describing the locations a\
-nd distances between the sites, the)-.15 F F4(-n)3.676 E F0 1.176
-(switch should be)3.676 F(in)108 621.6 Q -.2(vo)-.4 G -.1(ke).2 G 2.5
-(da).1 G 2.5(sf)-2.5 G(ollo)-2.5 E(ws:)-.25 E F2
-(splat -t tx_site -r rx_site -n -o topo_map.ppm)108 645.6 Q F0(If no te)
-108 669.6 Q(xt report is desired, then the)-.15 E F4(-N)2.5 E F0
-(switch is used:)2.5 E F2
-(splat -t tx_site -r rx_site -N -o topo_map.ppm)108 693.6 Q F0 .061
-(If the)108 717.6 R F4(-o)2.561 E F0 .061
-(switch and output \214lename are omitted when using either the)2.561 F
-F4(-n)2.56 E F0(or)2.56 E F4(-N)2.56 E F0 .06
-(switches, output is written to)2.56 F 2.5<618c>108 729.6 S(le named)
--2.5 E F4(map.ppm)2.5 E F0(in the current w)2.5 E
-(orking directory by def)-.1 E(ault.)-.1 E(KD2BD Softw)72 768 Q 129.12
-(are 02)-.1 F(March 2006)2.5 E(8)198.45 E EP
-%%Page: 9 9
+108 477.6 R -.15(ve)-.25 G 2.662(rs).15 G .162(ite along with a)-2.662 F
+.139(brief te)108 489.6 R .139(xt report describing the locations and d\
+istances between the sites, the)-.15 F F2(-n)2.639 E F0 .138
+(switch should be in)2.639 F -.2(vo)-.4 G -.1(ke).2 G 2.638(da).1 G(s)
+-2.638 E(follo)108 501.6 Q(ws:)-.25 E F3
+(splat -t tx_site -r rx_site -n -o topo_map.ppm)108 525.6 Q F0(If no te)
+108 549.6 Q(xt report is desired, then the)-.15 E F2(-N)2.5 E F0
+(switch is used:)2.5 E F3
+(splat -t tx_site -r rx_site -N -o topo_map.ppm)108 573.6 Q F0 .994(If \
+a topographic map centered about a single site out to a minimum speci\
+\214ed radius is desired instead, a)108 597.6 R
+(command similar to the follo)108 609.6 Q(wing can be used:)-.25 E F3
+(splat -t tx_site -R 50.0 -s NJ_Cities -b NJ_Counties -o topo_map.ppm)
+108 633.6 Q F0(where -R speci\214es the minimum radius of the map in mi\
+les \(or kilometers if the)108 657.6 Q F2(-metric)2.5 E F0
+(switch is used\).)2.5 E .592(If the)108 681.6 R F2(-o)3.092 E F0 .592(\
+switch and output \214lename are omitted in these operations, topograph\
+ic output is written to a \214le)3.092 F(named)108 693.6 Q F2(map.ppm)
+2.5 E F0(in the current w)2.5 E(orking directory by def)-.1 E(ault.)-.1
+E(KD2BD Softw)72 768 Q 121.625(are 20)-.1 F(December 2006)2.5 E(12)
+185.955 E EP
+%%Page: 13 13
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F
 (Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E/F1 10.95
-/Times-Bold@0 SF(DETERMIN)72 84 Q -1.04(AT)-.219 G(ION OF ANTENN)1.04 E
-2.738(AH)-.219 G(EIGHT ABO)-2.738 E(VE A)-.548 E(VERA)-1.588 E
-(GE TERRAIN)-.602 E/F2 10/Times-Bold@0 SF(SPLA)108 96 Q(T!)-.95 E F0
-.947(determines antenna height abo)3.447 F 1.248 -.15(ve a)-.15 H -.15
-(ve)-.05 G .948(rage terrain \(HAA).15 F .948
+/Times-Bold@0 SF(GEOREFERENCE FILE GENERA)72 84 Q(TION)-1.04 E F0 -.8
+(To)108 96 S .849(pographic, co).8 F -.15(ve)-.15 G .849(rage \().15 F
+/F2 10/Times-Italic@0 SF(-c)A F0 .849(\), and path loss contour \()B F2
+(-L)A F0 3.349(\)m)C .849(aps generated by)-3.349 F/F3 10/Times-Bold@0
+SF(SPLA)3.35 E(T!)-.95 E F0 .85(may be imported into)3.35 F F3(Xastir)
+108 108 Q F0 .176(\(X Amateur Station T)2.676 F .175
+(racking and Information Reporting\) softw)-.35 F .175
+(are by generating a georeference \214le)-.1 F(using)108 120 Q F3(SPLA)
+2.5 E(T!)-.95 E F0 -.55('s)C F2(-g)3.05 E(eo)-.1 E F0(switch:)2.5 E/F4
+10/Courier@0 SF
+(splat -t kd2bd -R 50.0 -s NJ_Cities -b NJ_Counties -geo -o map.ppm)108
+144 Q F0 1.515(The georeference \214le generated will ha)108 168 R 1.815
+-.15(ve t)-.2 H 1.516(he same base name as the).15 F F2(-o)4.016 E F0
+1.516(\214le speci\214ed, b)4.016 F 1.516(ut ha)-.2 F 1.816 -.15(ve a)
+-.2 H F2(.g)6.666 E(eo)-.1 E F0 -.15(ex)108 180 S
+(tension, and permit proper interpretation and display of).15 E F3(SPLA)
+2.5 E(T!)-.95 E F0 1.1 -.55('s .)D(ppm graphics in).55 E F3(Xastir)2.5 E
+F0(softw)2.5 E(are.)-.1 E F1(GOOGLE MAP KML FILE GENERA)72 196.8 Q(TION)
+-1.04 E F0 -2.15 -.25(Ke y)108 208.8 T .775
+(hole Markup Language \214les compatible with).25 F F3 .774
+(Google Earth)3.274 F F0 .774(may be generated by)3.274 F F3(SPLA)3.274
+E(T!)-.95 E F0 .774(when per)3.274 F(-)-.2 E
+(forming point-to-point analyses by in)108 220.8 Q -.2(vo)-.4 G
+(king the).2 E F2(-kml)2.5 E F0(switch:)2.5 E F4
+(splat -t wnjt -r kd2bd -kml)108 244.8 Q F0 .429
+(The KML \214le generated will ha)108 268.8 R .729 -.15(ve t)-.2 H .43(\
+he same \214lename structure as an Obstruction Report for the transmitt\
+er).15 F(and recei)108 280.8 Q -.15(ve)-.25 G 2.5(rs).15 G(ite names gi)
+-2.5 E -.15(ve)-.25 G(n, e).15 E(xcept it will carry a)-.15 E F2(.kml)5
+E F0 -.15(ex)2.5 G(tension.).15 E 1.619(Once loaded into)108 304.8 R F3
+1.619(Google Earth)4.119 F F0 1.618(\(File --> Open\), the KML \214le w\
+ill annotate the map display with the)4.118 F .567
+(names of the transmitter and recei)108 316.8 R -.15(ve)-.25 G 3.067(rs)
+.15 G .568(ite locations.)-3.067 F .568(The vie)5.568 F .568
+(wpoint of the image will be from the position)-.25 F 1.317
+(of the transmitter site looking to)108 328.8 R -.1(wa)-.25 G 1.317
+(rds the location of the recei).1 F -.15(ve)-.25 G 4.916 -.55(r. T).15 H
+1.316(he point-to-point path between the).55 F .792(sites will be displ\
+ayed as a white line while the RF line-of-sight path will be displayed \
+in green.)108 340.8 R F3(Google)5.792 E(Earth)108 352.8 Q F0 1.844 -.55
+('s n)D -.2(av).55 G(ig).2 E .744(ation tools allo)-.05 F 3.243(wt)-.25
+G .743(he user to "\215y" around the path, identify landmarks, roads, a\
+nd other fea-)-3.243 F(tured content.)108 364.8 Q F1(DETERMIN)72 381.6 Q
+-1.04(AT)-.219 G(ION OF ANTENN)1.04 E 2.738(AH)-.219 G(EIGHT ABO)-2.738
+E(VE A)-.548 E(VERA)-1.588 E(GE TERRAIN)-.602 E F3(SPLA)108 393.6 Q(T!)
+-.95 E F0 .947(determines antenna height abo)3.447 F 1.248 -.15(ve a)
+-.15 H -.15(ve)-.05 G .948(rage terrain \(HAA).15 F .948
 (T\) according to the procedure de\214ned by)-1.11 F .167
-(Federal Communications Commission P)108 108 R .167(art 73.313\(d\).)
+(Federal Communications Commission P)108 405.6 R .167(art 73.313\(d\).)
 -.15 F .166(According to this de\214nition, terrain ele)5.166 F -.25(va)
 -.25 G .166(tions along).25 F .794(eight radials between 2 and 10 miles\
  \(3 and 16 kilometers\) from the site being analyzed are sampled and)
-108 120 R -2.25 -.2(av e)108 132 T .614(raged for each 45 de).2 F .613
-(grees of azimuth starting with T)-.15 F .613(rue North.)-.35 F .613
+108 417.6 R -2.25 -.2(av e)108 429.6 T .614(raged for each 45 de).2 F
+.613(grees of azimuth starting with T)-.15 F .613(rue North.)-.35 F .613
 (If one or more radials lie entirely o)5.613 F -.15(ve)-.15 G(r).15 E
--.1(wa)108 144 S .534(ter or o).1 F -.15(ve)-.15 G 3.034(rl).15 G .535
+-.1(wa)108 441.6 S .534(ter or o).1 F -.15(ve)-.15 G 3.034(rl).15 G .535
 (and outside the United States \(areas for which no USGS topograph)
 -3.034 F 3.035(yd)-.05 G .535(ata is a)-3.035 F -.25(va)-.2 G .535
-(ilable\), then).25 F .519
-(those radials are omitted from the calculation of a)108 156 R -.15(ve)
--.2 G .519(rage terrain.).15 F .519(If part of a radial e)5.519 F .519
-(xtends o)-.15 F -.15(ve)-.15 G 3.019(rab).15 G .518(ody of)-3.019 F -.1
-(wa)108 168 S .012(ter or o).1 F -.15(ve)-.15 G 2.512(rl).15 G .012(and\
- outside the United States, then only that part of the radial lying o)
--2.512 F -.15(ve)-.15 G 2.513(rU).15 G .013(nited States land is)-2.513
-F(used in the determination of a)108 180 Q -.15(ve)-.2 G(rage terrain.)
-.15 E .918(Note that SR)108 204 R .918(TM ele)-.6 F -.25(va)-.25 G .918
-(tion data, unlik).25 F 3.418(eo)-.1 G .917
+(ilable\), then).25 F
+(those radials are omitted from the calculation of a)108 453.6 Q -.15
+(ve)-.2 G(rage terrain.).15 E .918(Note that SR)108 477.6 R .918(TM ele)
+-.6 F -.25(va)-.25 G .918(tion data, unlik).25 F 3.418(eo)-.1 G .917
 (lder 3-arc second USGS data, e)-3.418 F .917(xtends be)-.15 F .917
-(yond the borders of the)-.15 F .866(United States.)108 216 R .867
+(yond the borders of the)-.15 F .866(United States.)108 489.6 R .867
 (Therefore, HAA)5.866 F 3.367(Tr)-1.11 G .867
 (esults may not be in full compliance with FCC P)-3.367 F .867
 (art 73.313\(d\) in areas)-.15 F
 (along the borders of the United States if the SDF \214les used by)108
-228 Q F2(SPLA)2.5 E(T!)-.95 E F0(are SR)2.5 E(TM-deri)-.6 E -.15(ve)-.25
-G(d.).15 E .162(When performing point-to-point terrain analysis,)108 252
-R F2(SPLA)2.662 E(T!)-.95 E F0 .162(determines the antenna height abo)
-2.662 F .461 -.15(ve a)-.15 H -.15(ve)-.05 G .161(rage ter).15 F(-)-.2 E
-.407(rain only if enough topographic data has already been loaded by th\
-e program to perform the point-to-point)108 264 R 3.712(analysis. In)108
-276 R 1.211(most cases, this will be true, unless the site in question \
-does not lie within 10 miles of the)3.712 F(boundary of the topograph)
-108 288 Q 2.5(yd)-.05 G(ata in memory)-2.5 E(.)-.65 E .491
-(When performing area prediction analysis, enough topograph)108 312 R
-2.991(yd)-.05 G .492(ata is normally loaded by)-2.991 F F2(SPLA)2.992 E
-(T!)-.95 E F0 .492(to per)2.992 F(-)-.2 E .807(form a)108 324 R -.15(ve)
--.2 G .807(rage terrain calculations.).15 F .807(Under such conditions,)
-5.807 F F2(SPLA)3.307 E(T!)-.95 E F0 .807(will pro)3.307 F .807
-(vide the antenna height abo)-.15 F -.15(ve)-.15 G -2.25 -.2(av e)108
-336 T .203(rage terrain as well as the a).2 F -.15(ve)-.2 G .203
-(rage terrain abo).15 F .503 -.15(ve m)-.15 H .203(ean sea le).15 F -.15
-(ve)-.25 G 2.704(lf).15 G .204(or azimuths of 0, 45, 90, 135, 180, 225,)
--2.704 F .162(270, and 315 de)108 348 R .162
-(grees, and include such information in the site report generated.)-.15
-F .161(If one or more of the eight)5.161 F 1.004(radials surv)108 360 R
--.15(ey)-.15 G 1.004(ed f).15 F 1.004(all o)-.1 F -.15(ve)-.15 G 3.504
+501.6 Q F3(SPLA)2.5 E(T!)-.95 E F0(are SR)2.5 E(TM-deri)-.6 E -.15(ve)
+-.25 G(d.).15 E .162(When performing point-to-point terrain analysis,)
+108 525.6 R F3(SPLA)2.662 E(T!)-.95 E F0 .162
+(determines the antenna height abo)2.662 F .461 -.15(ve a)-.15 H -.15
+(ve)-.05 G .161(rage ter).15 F(-)-.2 E .407(rain only if enough topogra\
+phic data has already been loaded by the program to perform the point-t\
+o-point)108 537.6 R 3.712(analysis. In)108 549.6 R 1.211(most cases, th\
+is will be true, unless the site in question does not lie within 10 mil\
+es of the)3.712 F(boundary of the topograph)108 561.6 Q 2.5(yd)-.05 G
+(ata in memory)-2.5 E(.)-.65 E .491
+(When performing area prediction analysis, enough topograph)108 585.6 R
+2.991(yd)-.05 G .492(ata is normally loaded by)-2.991 F F3(SPLA)2.992 E
+(T!)-.95 E F0 .492(to per)2.992 F(-)-.2 E .807(form a)108 597.6 R -.15
+(ve)-.2 G .807(rage terrain calculations.).15 F .807
+(Under such conditions,)5.807 F F3(SPLA)3.307 E(T!)-.95 E F0 .807
+(will pro)3.307 F .807(vide the antenna height abo)-.15 F -.15(ve)-.15 G
+-2.25 -.2(av e)108 609.6 T .203(rage terrain as well as the a).2 F -.15
+(ve)-.2 G .203(rage terrain abo).15 F .503 -.15(ve m)-.15 H .203
+(ean sea le).15 F -.15(ve)-.25 G 2.704(lf).15 G .204
+(or azimuths of 0, 45, 90, 135, 180, 225,)-2.704 F .162(270, and 315 de)
+108 621.6 R .162
+(grees, and include such information in the generated site report.)-.15
+F .161(If one or more of the eight)5.161 F 1.004(radials surv)108 633.6
+R -.15(ey)-.15 G 1.004(ed f).15 F 1.004(all o)-.1 F -.15(ve)-.15 G 3.504
 (rw).15 G(ater)-3.604 E 3.504(,o)-.4 G 3.504(ro)-3.504 G -.15(ve)-3.654
 G 3.504(rr).15 G -.15(eg)-3.504 G 1.004(ions for which no SDF data is a)
-.15 F -.25(va)-.2 G(ilable,).25 E F2(SPLA)3.504 E(T!)-.95 E F0(reports)
-3.505 E/F3 10/Times-Italic@0 SF(No)3.505 E -.92(Te)108 372 S(rr).92 E
-(ain)-.15 E F0(for the radial paths af)2.5 E(fected.)-.25 E F1
-(RESTRICTING THE MAXIMUM SIZE OF AN AN)72 388.8 Q(AL)-.219 E
-(YSIS REGION)-1.007 E F2(SPLA)108 400.8 Q(T!)-.95 E F0 1.265(reads SDF \
-\214les as needed into a series of memory "slots" within the structure \
-of the program.)3.765 F .089
-(Each "slot" holds one SDF \214le representing a one de)108 412.8 R .09
-(gree by one de)-.15 F .09(gree re)-.15 F .09(gion of terrain.)-.15 F(A)
-5.09 E F3 .09(#de\214ne MAXS-)2.59 F(LO)108 424.8 Q(TS)-.4 E F0 1.448
-(statement in the \214rst se)3.949 F -.15(ve)-.25 G 1.448(ral lines of)
-.15 F F3(splat.cpp)3.948 E F0 1.448
-(sets the maximum number of "slots" a)3.948 F -.25(va)-.2 G 1.448
-(ilable for).25 F(topograph)108 436.8 Q 3.277(yd)-.05 G 3.277(ata. It)
--3.277 F .777
-(also sets the maximum size of the topographic maps generated by)3.277 F
-F2(SPLA)3.278 E(T!)-.95 E F0 5.778(.M)C(AXS-)-5.778 E(LO)108 448.8 Q
-.317(TS is set to 9 by def)-.4 F 2.817(ault. If)-.1 F F2(SPLA)2.817 E
-(T!)-.95 E F0 .317(produces a se)2.817 F .316(gmentation f)-.15 F .316
-(ault on start-up with this def)-.1 F .316(ault, it is an)-.1 F .463
-(indication that not enough RAM and/or virtual memory \(sw)108 460.8 R
-.464(ap space\) is a)-.1 F -.25(va)-.2 G .464(ilable to run).25 F F2
-(SPLA)2.964 E(T!)-.95 E F0 .464(with this)2.964 F .614(number of MAXSLO)
-108 472.8 R 3.114(TS. In)-.4 F .614(situations where a)3.114 F -.25(va)
--.2 G .613(ilable memory is lo).25 F 1.913 -.65(w, M)-.25 H(AXSLO).65 E
-.613(TS may be reduced to 4)-.4 F .396
-(with the understanding that this will greatly limit the maximum re)108
-484.8 R(gion)-.15 E F2(SPLA)2.896 E(T!)-.95 E F0 .396
-(will be able to analyze.)2.896 F(If)5.396 E .947(118 me)108 496.8 R
--.05(ga)-.15 G .947(bytes or more of total memory \(sw).05 F .947
-(ap space plus RAM\) is a)-.1 F -.25(va)-.2 G .947(ilable, then MAXSLO)
-.25 F .946(TS may be)-.4 F .442(increased to 16.)108 508.8 R .443
-(This will permit operation o)5.443 F -.15(ve)-.15 G 2.943(ra4).15 G
-(-de)-2.943 E .443(gree by 4-de)-.15 F .443(gree re)-.15 F .443
-(gion, which is suf)-.15 F .443(\214cient for sin-)-.25 F .403
-(gle antenna heights in e)108 520.8 R .403(xcess of 10,000 feet abo)-.15
-F .702 -.15(ve m)-.15 H .402(ean sea le).15 F -.15(ve)-.25 G .402
-(l, or point-to-point distances of o).15 F -.15(ve)-.15 G 2.902(r1).15 G
-(000)-2.902 E(miles.)108 532.8 Q F1(ADDITION)72 549.6 Q(AL INFORMA)-.219
-E(TION)-1.04 E F0(In)108 561.6 Q -.2(vo)-.4 G(king).2 E F2(SPLA)2.81 E
-(T!)-.95 E F0 .31(without an)2.81 F 2.81(ya)-.15 G -.18(rg)-2.81 G .311
-(uments will display all the command-line options a).18 F -.25(va)-.2 G
-.311(ilable with the pro-).25 F
-(gram along with a brief summary of each.)108 573.6 Q .333
-(The latest ne)108 597.6 R .332(ws and information re)-.25 F -.05(ga)
--.15 G(rding).05 E F2(SPLA)2.832 E(T!)-.95 E F0(softw)2.832 E .332
+.15 F -.25(va)-.2 G(ilable,).25 E F3(SPLA)3.504 E(T!)-.95 E F0(reports)
+3.505 E F2(No)3.505 E -.92(Te)108 645.6 S(rr).92 E(ain)-.15 E F0
+(for the radial paths af)2.5 E(fected.)-.25 E F1
+(RESTRICTING THE MAXIMUM SIZE OF AN AN)72 662.4 Q(AL)-.219 E
+(YSIS REGION)-1.007 E F3(SPLA)108 674.4 Q(T!)-.95 E F0 .269(reads SDF \
+\214les as needed into a series of memory pages or "slots" within the s\
+tructure of the pro-)2.77 F 2.774(gram. Each)108 686.4 R .274
+("slot" holds one SDF \214le representing a one de)2.774 F .275
+(gree by one de)-.15 F .275(gree re)-.15 F .275(gion of terrain.)-.15 F
+(A)5.275 E F2(#de\214ne)2.775 E(MAXSLO)108 698.4 Q(TS)-.4 E F0 .786
+(statement in the \214rst se)3.286 F -.15(ve)-.25 G .785(ral lines of)
+.15 F F2(splat.cpp)3.285 E F0 .785(sets the maximum number of "slots" a)
+3.285 F -.25(va)-.2 G(ilable).25 E .103(for holding topograph)108 710.4
+R 2.603(yd)-.05 G 2.603(ata. It)-2.603 F .104
+(also sets the maximum size of the topographic maps generated by)2.604 F
+F3(SPLA)2.604 E(T!)-.95 E F0(.)A(MAXSLO)108 722.4 Q .242
+(TS is set to 9 by def)-.4 F 2.742(ault. If)-.1 F F3(SPLA)2.742 E(T!)
+-.95 E F0 .242(produces a se)5.242 F .242(gmentation f)-.15 F .241
+(ault on start-up with this def)-.1 F(ault,)-.1 E(KD2BD Softw)72 768 Q
+121.625(are 20)-.1 F(December 2006)2.5 E(13)185.955 E EP
+%%Page: 14 14
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F
+(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E .91
+(it is an indication that not enough RAM and/or virtual memory \(sw)108
+84 R .911(ap space\) is a)-.1 F -.25(va)-.2 G .911(ilable to run).25 F
+/F1 10/Times-Bold@0 SF(SPLA)3.411 E(T!)-.95 E F0 .002
+(with the number of MAXSLO)108 96 R .002(TS speci\214ed.)-.4 F .001
+(In situations where a)5.002 F -.25(va)-.2 G .001(ilable memory is lo)
+.25 F 1.301 -.65(w, M)-.25 H(AXSLO).65 E .001(TS may)-.4 F .019(be redu\
+ced to 4 with the understanding that this will greatly limit the maximu\
+m re)108 108 R(gion)-.15 E F1(SPLA)2.519 E(T!)-.95 E F0 .019
+(will be able)2.519 F .624(to analyze.)108 120 R .624(If 118 me)5.624 F
+-.05(ga)-.15 G .624(bytes or more of total memory \(sw).05 F .623
+(ap space plus RAM\) is a)-.1 F -.25(va)-.2 G .623(ilable, then MAXS-)
+.25 F(LO)108 132 Q .102(TS may be increased to 16.)-.4 F .103
+(This will permit operation o)5.103 F -.15(ve)-.15 G 2.603(ra4).15 G
+(-de)-2.603 E .103(gree by 4-de)-.15 F .103(gree re)-.15 F .103
+(gion, which is suf-)-.15 F .426
+(\214cient for single antenna heights in e)108 144 R .426
+(xcess of 10,000 feet abo)-.15 F .725 -.15(ve m)-.15 H .425(ean sea le)
+.15 F -.15(ve)-.25 G .425(l, or point-to-point distances).15 F(of o)108
+156 Q -.15(ve)-.15 G 2.5(r1).15 G(000 miles.)-2.5 E/F2 10.95
+/Times-Bold@0 SF(ADDITION)72 172.8 Q(AL INFORMA)-.219 E(TION)-1.04 E F0
+.332(The latest ne)108 184.8 R .332(ws and information re)-.25 F -.05
+(ga)-.15 G(rding).05 E F1(SPLA)2.832 E(T!)-.95 E F0(softw)2.832 E .332
 (are is a)-.1 F -.25(va)-.2 G .332(ilable through the of).25 F(\214cial)
--.25 E F2(SPLA)2.832 E(T!)-.95 E F0(soft-)2.832 E -.1(wa)108 609.6 S
-(re web page located at:).1 E F3(http://www)2.5 E
-(.qsl.net/kd2bd/splat.html)-.74 E F0(.)A F1 -.548(AU)72 626.4 S(THORS)
-.548 E F0(John A. Magliacane, KD2BD <)108 638.4 Q F3(kd2bd@amsat.or)A(g)
--.37 E F0(>)A(Creator)144 650.4 Q 2.5(,L)-.4 G(ead De)-2.5 E -.15(ve)
--.25 G(loper).15 E(Doug McDonald <)108 667.2 Q F3(mcdonald@scs.uiuc.edu)
-A F0(>)A(Longle)144 679.2 Q(y-Rice Model inte)-.15 E(gration)-.15 E
-(KD2BD Softw)72 768 Q 129.12(are 02)-.1 F(March 2006)2.5 E(9)198.45 E EP
+-.25 E F1(SPLA)2.833 E(T!)-.95 E F0(soft-)2.833 E -.1(wa)108 196.8 S
+(re web page located at:).1 E/F3 10/Times-Italic@0 SF(http://www)2.5 E
+(.qsl.net/kd2bd/splat.html)-.74 E F0(.)A F2 -.548(AU)72 213.6 S(THORS)
+.548 E F0(John A. Magliacane, KD2BD <)108 225.6 Q F3(kd2bd@amsat.or)A(g)
+-.37 E F0(>)A(Creator)144 237.6 Q 2.5(,L)-.4 G(ead De)-2.5 E -.15(ve)
+-.25 G(loper).15 E(Doug McDonald <)108 254.4 Q F3(mcdonald@scs.uiuc.edu)
+A F0(>)A(Longle)144 266.4 Q(y-Rice Model inte)-.15 E(gration)-.15 E
+(Ron Bentle)108 283.2 Q 2.5(y<)-.15 G F3 -.45(ro)-2.5 G(nbentle).45 E
+(y@earthlink.net)-.3 E F0(>)A
+(Fresnel Zone plotting and clearance determination)144 295.2 Q
+(KD2BD Softw)72 768 Q 121.625(are 20)-.1 F(December 2006)2.5 E(14)
+185.955 E EP
 %%Trailer
 end
 %%EOF
index 4a0a3b7a6f000f2fdbf75836d45c86778abe465f..f256e818cf60c8022f45d6e1ca1f2ea204d74405 100644 (file)
@@ -7,77 +7,125 @@ NAME
        sis tool
 
 SYNOPSIS
-       splat [-t  transmitter_site.qth]  [-r   receiver_site.qth]
-       [-c    rx_antenna_height_for_los_coverage_analysis  (feet)
-       (float)]  [-L    rx_antenna_height_for_Longley-Rice_cover-
-       age_analysis (feet) (float)] [-p  terrain_profile.ext] [-e
-       elevation_profile.ext] [-h  height_profile.ext] [-l  Long-
-       ley-Rice_profile.ext]  [-o   topographic_map_filename.ppm]
-       [-b         cartographic_boundary_filename.dat]        [-s
-       site/city_database.dat]   [-d    sdf_directory_path]   [-m
-       earth_radius_multiplier   (float)]   [-R    maximum_cover-
-       age_range  (for  -c  or  -L) (miles) (float)] [-dB maximum
-       attenuation contour to display on path loss  maps  (80-230
-       dB)] [-n] [-N]
+       splat [-t   transmitter_site.qth]  [-r  receiver_site.qth]
+       [-c   rx   antenna   height   for  LOS  coverage  analysis
+       (feet/meters) (float)] [-L rx antenna height for  Longley-
+       Rice  coverage  analysis  (feet/meters)  (float)] [-p ter-
+       rain_profile.ext]    [-e    elevation_profile.ext]     [-h
+       height_profile.ext] [-H normalized_height_profile.ext] [-l
+       Longley-Rice_profile.ext]    [-o     topographic_map_file-
+       name.ppm]   [-b   cartographic_boundary_filename.dat]  [-s
+       site/city_database.dat] [-d sdf_directory_path] [-m  earth
+       radius multiplier (float)] [-f frequency (MHz) for Fresnel
+       zone calculations (float)]  [-R  maximum  coverage  radius
+       (miles/kilometers)  (float)] [-dB maximum attenuation con-
+       tour to display on path loss maps (80-230 dB)] [-nf do not
+       plot  Fresnel  zones in height plots] [-plo path_loss_out-
+       put_file.txt]   [-pli   path_loss_input_file.txt]    [-udt
+       user_defined_terrain_file.dat]  [-n]  [-N]  [-geo]  [-kml]
+       [-metric]
 
 DESCRIPTION
-       SPLAT!  is  a powerful terrestrial RF propagation and ter-
-       rain analysis tool covering the spectrum  between  20  MHz
-       and  20  GHz.   It  is  designed for operation on Unix and
-       Linux-based  workstations.   SPLAT!  is   free   software.
-       Redistribution  and/or modification is permitted under the
-       terms of the GNU General Public License  as  published  by
-       the  Free  Software  Foundation,  either  version 2 of the
-       License or any later version.  Adoption of  SPLAT!  source
-       code  in  proprietary  or  closed-source applications is a
-       violation of this license, and is strictly forbidden.
-
-       SPLAT! is distributed in the hope that it will be  useful,
-       but  WITHOUT  ANY  WARRANTY, without even the implied war-
-       ranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR  PUR-
+       SPLAT! is a powerful terrestrial RF propagation  and  ter-
+       rain  analysis  tool  covering the spectrum between 20 MHz
+       and 20 GHz.  SPLAT! is free software, and is designed  for
+       operation on Unix and Linux-based workstations.  Redistri-
+       bution and/or modification is permitted under the terms of
+       the  GNU  General  Public License as published by the Free
+       Software Foundation, either version 2 of  the  License  or
+       any later version.  Adoption of SPLAT! source code in pro-
+       prietary or closed-source applications is a  violation  of
+       this license, and is strictly forbidden.
+
+       SPLAT!  is distributed in the hope that it will be useful,
+       but WITHOUT ANY WARRANTY, without even  the  implied  war-
+       ranty  of MERCHANTABILITY or FITNESS FOR A PARTICULAR PUR-
        POSE. See the GNU General Public License for more details.
 
 INTRODUCTION
-       Applications of SPLAT! include the visualization,  design,
-       and  link  budget  analysis of wireless Wide Area Networks
+       Applications  of SPLAT! include the visualization, design,
+       and link budget analysis of wireless  Wide  Area  Networks
        (WANs), commercial and amateur radio communication systems
-       above 20 MHz, microwave links, frequency coordination, and
-       the determination of analog and digital terrestrial  radio
-       and television contour regions.
+       above 20 MHz, microwave links, frequency coordination  and
+       interference  studies, and the determination of analog and
+       digital terrestrial radio and television contour  regions.
 
        SPLAT!  provides  RF  site  engineering data such as great
        circle distances and bearings between sites, antenna  ele-
        vation  angles  (uptilt),  depression  angles  (downtilt),
        antenna height above mean sea level, antenna height  above
        average  terrain, bearings and distances to known obstruc-
-       tions, Longley-Rice path attenuation, and minimum  antenna
-       height requirements needed to establish line-of-sight com-
-       munication paths absent of obstructions  due  to  terrain.
-       SPLAT!  produces  reports, graphs, and highly detailed and
-       carefully annotated topographic  maps  depicting  line-of-
-       sight  paths,  path  loss,  and expected coverage areas of
-       transmitters and repeater systems.  When performing  line-
-       of-sight analysis in situations where multiple transmitter
-       or repeater sites are employed, SPLAT! determines individ-
-       ual and mutual areas of coverage within the network speci-
-       fied.
+       tions, and Longley-Rice path  attenuation.   In  addition,
+       the  minimum  antenna  height requirements needed to clear
+       terrain, the first Fresnel zone,  and  60%  of  the  first
+       Fresnel zone are also provided.
+
+       SPLAT! produces reports, graphs, and high resolution topo-
+       graphic maps that depict line-of-sight paths, and regional
+       path  loss  contours through which expected coverage areas
+       of transmitters and  repeater  systems  can  be  obtained.
+       When performing line-of-sight analysis in situations where
+       multiple  transmitter  or  repeater  sites  are  employed,
+       SPLAT!  determines individual and mutual areas of coverage
+       within the network specified.
+
+       Simply typing splat on the command line will return a sum-
+       mary of SPLAT!'s command line options:
+
+                      --==[  SPLAT!  v1.2.0  Available Options...
+       ]==--
+
+             -t txsite(s).qth (max of 4)
+             -r rxsite.qth
+             -c plot coverage of TX(s) with an RX  antenna  at  X
+       feet/meters AGL
+             -L  plot  path  loss  map  of TX based on an RX at X
+       feet/meters AGL
+             -s filename(s) of city/site file(s) to  import  (max
+       of 5)
+             -b  filename(s)  of cartographic boundary file(s) to
+       import (5 max)
+             -p filename of terrain profile graph to plot
+             -e filename of terrain elevation graph to plot
+             -h filename of terrain height graph to plot
+             -H filename of normalized terrain  height  graph  to
+       plot
+             -l filename of Longley-Rice graph to plot
+             -o filename of topographic map to generate (.ppm)
+             -u filename of user-defined terrain file to import
+             -d  sdf  file  directory  path  (overrides  path  in
+       ~/.splat_path file)
+             -n no analysis, brief report
+             -N no analysis, no report
+             -m earth radius multiplier
+             -f frequency for Fresnel zone calculation (MHz)
+             -R modify default range for -c or -L  (miles/kilome-
+       ters)
+            -db maximum loss contour to display on path loss maps
+       (80-230 dB)
+            -nf do not plot Fresnel zones in height plots
+           -plo filename of path-loss output file
+           -pli filename of path-loss input file
+           -udt filename of user defined terrain input file
+           -geo generate a .geo georeference file (with .ppm out-
+       put)
+           -kml  generate a Google Earth .kml file (for point-to-
+       point links)
+        -metric employ metric rather than imperial units for  all
+       user I/O
 
-       SPLAT! operates  in  two  distinct  modes:  point-to-point
-       mode,  and  area prediction mode, and may be invoked using
-       either line-of-sight  (LOS)  or  Irregular  Terrain  (ITM)
-       propagation models.  True Earth, four-thirds Earth, or any
-       other Earth radius may be specified by the user when  per-
-       forming line-of-sight analysis.
 
 INPUT FILES
        SPLAT!  is  a  command-line  driven application, and reads
        input data through a number of data files.  Some files are
        mandatory  for  successful execution of the program, while
-       others are optional.  Mandatory files include  SPLAT  Data
-       Files  (SDF  files),  site location files (QTH files), and
-       Longley-Rice model parameter files (LRP files).   Optional
-       files  include  city/site location files, and cartographic
-       boundary files.
+       others are optional.  Mandatory files include 3-arc second
+       topography  models  in  the  form of SPLAT Data Files (SDF
+       files), site location files (QTH files), and  Longley-Rice
+       model parameter files (LRP files).  Optional files include
+       city location files, cartographic  boundary  files,  user-
+       defined  terrain files, path-loss input files, and antenna
+       radiation pattern files.
 
 SPLAT DATA FILES
        SPLAT! imports topographic data in the form of SPLAT  Data
@@ -89,63 +137,64 @@ SPLAT DATA FILES
        patible  with  this  utility  may  be   downloaded   from:
        http://edcftp.cr.usgs.gov/pub/data/DEM/250/.
 
-       Significantly  better  resolution  can be obtained through
-       the use of SRTM-3  Version  2  digital  elevation  models.
-       These  models  are  the result of the STS-99 Space Shuttle
-       Radar Topography Mission, and are available for most popu-
-       lated  regions of the Earth.  SPLAT Data Files may be gen-
-       erated from SRTM data using the included srtm2sdf utility.
-       SRTM-3  Version  2  data may be obtained through anonymous
-       FTP from: ftp://e0srp01u.ecs.nasa.gov:21/srtm/version2/
-
-       Despite the higher accuracy that SRTM data has  to  offer,
-       some  voids  in  the  data  sets  exist.   When  voids are
-       detected, the srtm2sdf utility replaces them  with  corre-
-       sponding  data found in existing SDF files (that were pre-
-       sumably  created  from  earlier  USGS  data  through   the
+       Significantly   better  resolution  and  accuracy  can  be
+       obtained through the use of SRTM-3 Version 2 digital  ele-
+       vation models.  These models are the product of the STS-99
+       Space Shuttle Radar Topography Mission, and are  available
+       for most populated regions of the Earth.  SPLAT Data Files
+       may  be  generated  from  SRTM  data  using  the  included
+       srtm2sdf  utility.   SRTM-3 Version 2 data may be obtained
+       through           anonymous           FTP            from:
+       ftp://e0srp01u.ecs.nasa.gov:21/srtm/version2/
+
+       Despite  the  higher accuracy that SRTM data has to offer,
+       some voids  in  the  data  sets  exist.   When  voids  are
+       detected,  the  srtm2sdf utility replaces them with corre-
+       sponding data found in existing SDF files (that were  pre-
+       sumably   created  from  earlier  USGS  data  through  the
        usgs2sdf utility).  If USGS-derived SDF data is not avail-
-       able, voids are handled through adjacent pixel  averaging,
+       able,  voids are handled through adjacent pixel averaging,
        or direct replacement.
 
-       SPLAT  Data Files contain integer value topographic eleva-
+       SPLAT Data Files contain integer value topographic  eleva-
        tions  (in  meters)  referenced  to  mean  sea  level  for
-       1-degree  by  1-degree regions of the earth with a resolu-
-       tion of 3-arc seconds.  SDF files can be  read  in  either
-       standard  format  (.sdf)  as generated by the usgs2sdf and
-       srtm2sdf  utilities,  or  in   bzip2   compressed   format
-       (.sdf.bz2).   Since  uncompressed  files  can be processed
-       slightly faster than  files  that  have  been  compressed,
-       SPLAT!  searches  for  the needed SDF data in uncompressed
-       format first.  If uncompressed data cannot located, SPLAT!
-       then  searches for data in bzip2 compressed format.  If no
-       compressed  SDF  files  can  be  found  for   the   region
-       requested,  SPLAT!  assumes  the region is over water, and
+       1-degree by 1-degree regions of the earth with  a  resolu-
+       tion  of  3-arc  seconds.  SDF files can be read in either
+       standard format (.sdf) as generated by  the  usgs2sdf  and
+       srtm2sdf   utilities,   or   in  bzip2  compressed  format
+       (.sdf.bz2).  Since uncompressed  files  can  be  processed
+       slightly  faster  than  files  that  have been compressed,
+       SPLAT! searches for needed SDF data in uncompressed format
+       first.   If  uncompressed  data  cannot be located, SPLAT!
+       then searches for data in bzip2 compressed format.  If  no
+       compressed   SDF   files  can  be  found  for  the  region
+       requested, SPLAT! assumes the region is  over  water,  and
        will assign an elevation of sea-level to these areas.
 
-       This feature of SPLAT! makes it possible to  perform  path
-       analysis  not  only  over  land,  but also between coastal
-       areas not represented by  Digital  Elevation  Model  data.
-       This behavior of SPLAT! underscores the importance of hav-
-       ing all the SDF files required for the region  being  ana-
-       lyzed if meaningful results are to be expected.
+       This  feature  of SPLAT! makes it possible to perform path
+       analysis not only over  land,  but  also  between  coastal
+       areas  not  represented  by  Digital Elevation Model data.
+       However, this behavior of SPLAT!  underscores  the  impor-
+       tance  of having all the SDF files required for the region
+       being analyzed if meaningful results are to be expected.
 
 SITE LOCATION (QTH) FILES
-       SPLAT!  imports  site  location information of transmitter
-       and receiver sites analyzed  by  the  program  from  ASCII
-       files  having  a  .qth  extension.   QTH files contain the
+       SPLAT! imports site location  information  of  transmitter
+       and  receiver  sites  analyzed  by  the program from ASCII
+       files having a .qth  extension.   QTH  files  contain  the
        site's name, the site's latitude (positive if North of the
-       equator,  negative  if  South),  the  site's longitude (in
-       degrees West, 0 to 360 degrees), and  the  site's  antenna
-       height above ground level (AGL).  A single line-feed char-
-       acter separates each field.  The antenna height is assumed
-       to be specified in feet unless followed by the letter m or
-       the word meters in either upper or lower  case.   Latitude
+       equator, negative if  South),  the  site's  longitude  (in
+       degrees  West,  0  to 360 degrees), and the site's antenna
+       height above ground level (AGL), each separated by a  sin-
+       gle line-feed character.  The antenna height is assumed to
+       be specified in feet unless followed by the  letter  m  or
+       the  word  meters in either upper or lower case.  Latitude
        and longitude information may be expressed in either deci-
-       mal format (74.6889) or degree, minute, second (DMS)  for-
+       mal  format (74.6889) or degree, minute, second (DMS) for-
        mat (74 41 20.0).
 
-       For  example,  a  site location file describing television
-       station WNJT, Trenton, NJ (wnjt.qth) might  read  as  fol-
+       For example, a site location  file  describing  television
+       station  WNJT,  Trenton,  NJ (wnjt.qth) might read as fol-
        lows:
 
                WNJT
@@ -157,12 +206,11 @@ SITE LOCATION (QTH) FILES
        be represented by its own site location (QTH) file.
 
 LONGLEY-RICE PARAMETER (LRP) FILES
-       SPLAT! imports  Longley-Rice  model  parameter  data  from
-       files  having  the  same base name as the transmitter site
-       QTH file, but with a .lrp extension, thus providing simple
-       and  accurate  correlation  between  these associated data
-       sets.  The format for  the  Longley-Rice  model  parameter
-       files is as follows (wnjt.lrp):
+       Longley-Rice  parameter data files are required for SPLAT!
+       to determine RF path loss in either point-to-point or area
+       prediction  mode.   Longley-Rice  model  parameter data is
+       read from files having the same base name as the transmit-
+       ter site QTH file, but with a format (wnjt.lrp):
 
                15.000  ; Earth Dielectric Constant (Relative per-
        mittivity)
@@ -221,10 +269,10 @@ LONGLEY-RICE PARAMETER (LRP) FILES
        the  statistical  analysis  provided  by  the Longley-Rice
        model.  In this example, SPLAT!  will return  the  maximum
        path  loss occurring 50% of the time (fraction of time) in
-       50% of situations (fraction of situations).  Use  a  frac-
-       tion  of  time  parameter  of 0.97 for digital television,
-       0.50 for analog in the United States.  Isotropic  antennas
-       are assumed.
+       50% of situations (fraction of situations).  In the United
+       States, use a fraction of time parameter of 0.97 for digi-
+       tal television (8VSB modulation), or 0.50 for analog (VSB-
+       AM+NTSC) transmissions.
 
        For   further   information   on  these  parameters,  see:
        http://flattop.its.bldrdoc.gov/itm.html                and
@@ -236,12 +284,12 @@ CITY LOCATION FILES
        points  of  interest  may be imported and plotted on topo-
        graphic maps generated  by  SPLAT!.   SPLAT!  imports  the
        names  of cities and locations from ASCII files containing
-       the location's name,  the  location's  latitude,  and  the
-       location's longitude.  Each field is separated by a comma.
-       Each record is separated by a single line feed  character.
-       As  was  the case with the .qth files, latitude and longi-
-       tude information may  be  entered  in  either  decimal  or
-       degree, minute, second (DMS) format.
+       the location of interest's name, latitude, and  longitude.
+       Each  field is separated by a comma.  Each record is sepa-
+       rated by a single line feed character.  As  was  the  case
+       with  the  .qth  files, latitude and longitude information
+       may be entered in either decimal or degree, minute, second
+       (DMS) format.
 
        For example (cities.dat):
 
@@ -257,13 +305,13 @@ CITY LOCATION FILES
        at a time, and there is no limit  to  the  size  of  these
        files.   SPLAT!  reads  city  data  on a "first come/first
        served" basis, and plots only those locations whose  anno-
-       tations  do  not  conflict  with  annotations of locations
-       plotted earlier during SPLAT's execution.   This  behavior
-       minimizes  clutter  in  SPLAT! generated topographic maps,
-       but also  mandates  that  important  locations  be  placed
-       toward  the  beginning  of  the  first city data file, and
-       disposable locations be positioned further down  the  list
-       or in subsequent data files.
+       tations do not conflict with annotations of locations read
+       earlier in the current city  data  file,  or  in  previous
+       files.   This  behavior minimizes clutter in SPLAT! gener-
+       ated topographic maps, but also  mandates  that  important
+       locations be placed toward the beginning of the first city
+       data file, and locations less important be positioned fur-
+       ther down the list or in subsequent data files.
 
        City  data  files may be generated manually using any text
        editor, imported from other sources, or derived from  data
@@ -279,141 +327,175 @@ CARTOGRAPHIC BOUNDARY DATA FILES
        graphic  maps  generated  by SPLAT!.  Such data must be of
        the form of ARC/INFO Ungenerate  (ASCII  Format)  Metadata
        Cartographic  Boundary  Files,  and are available from the
-       U.S.  Census Bureau via the Internet  at:  http://www.cen-
-       sus.gov/geo/www/cob/co2000.html#ascii  and http://www.cen-
-       sus.gov/geo/www/cob/pl2000.html#ascii.  A  total  of  five
-       separate  cartographic boundary files may be imported at a
-       time.  It is not necessary to import state  boundaries  if
-       county boundaries have already been imported.
+       U.S.     Census    Bureau    via    the    Internet    at:
+       http://www.census.gov/geo/www/cob/co2000.html#ascii    and
+       http://www.census.gov/geo/www/cob/pl2000.html#ascii.     A
+       total  of five separate cartographic boundary files may be
+       imported at a time.  It is not necessary to  import  state
+       boundaries   if   county   boundaries  have  already  been
+       imported.
 
 PROGRAM OPERATION
-       SPLAT!  is  invoked via the command-line using a series of
-       switches and arguments.  Since SPLAT! is a CPU and  memory
-       intensive  application,  this  type of interface minimizes
-       overhead and lends itself well to scripted (batch)  opera-
+       SPLAT! is invoked via the command-line using a  series  of
+       switches  and arguments.  Since SPLAT! is a CPU and memory
+       intensive application, this type  of  interface  minimizes
+       overhead  and lends itself well to scripted (batch) opera-
        tions.  SPLAT!'s CPU and memory scheduling priority may be
        modified through the use of the Unix nice command.
 
        The number and type of switches passed to SPLAT! determine
-       its  mode  of  operation and method of output data genera-
-       tion.  Nearly all of SPLAT!'s switches may be cascaded  in
+       its mode of operation and method of  output  data  genera-
+       tion.   Nearly all of SPLAT!'s switches may be cascaded in
        any order on the command line when invoking the program.
 
+       SPLAT! operates  in  two  distinct  modes:  point-to-point
+       mode,  and  area  prediction mode.  Either a line-of-sight
+       (LOS) or Longley-Rice Irregular Terrain (ITM)  propagation
+       model may be invoked by the user.  True Earth, four-thirds
+       Earth, or any other user-defined Earth radius may be spec-
+       ified when performing line-of-sight analysis.
+
 POINT-TO-POINT ANALYSIS
        SPLAT! may be used to perform line-of-sight terrain analy-
        sis between two specified site locations.  For example:
 
        splat -t tx_site.qth -r rx_site.qth
 
-       invokes a terrain analysis between the transmitter  speci-
-       fied in tx_site.qth and receiver specified in rx_site.qth,
-       and writes a SPLAT!  Obstruction  Report  to  the  current
-       working  directory.   The  report  contains details of the
-       transmitter and receiver sites, and identifies  the  loca-
-       tion of any obstructions detected during the analysis.  If
-       an obstruction can  be  cleared  by  raising  the  receive
-       antenna  to  a greater altitude, SPLAT!  will indicate the
-       minimum antenna height required for a  line-of-sight  path
-       to  exist  between  the transmitter and receiver locations
-       specified.  If the antenna must be  raised  a  significant
-       amount,  this determination may take some time.  Note that
-       the results provided are the minimum necessary for a line-
-       of-sight  path  to  exist,  and  do  not take Fresnel zone
-       clearance requirements into consideration.
+       invokes  a  line-of-sight  terrain  analysis  between  the
+       transmitter  specified  in tx_site.qth and receiver speci-
+       fied in rx_site.qth using a True Earth radius  model,  and
+       writes  a SPLAT! Obstruction Report to the current working
+       directory.  The report contains details of the transmitter
+       and  receiver  sites,  and  identifies the location of any
+       obstructions detected along the line-of-sight path.  If an
+       obstruction  can be cleared by raising the receive antenna
+       to a greater altitude, SPLAT! will  indicate  the  minimum
+       antenna  height required for a line-of-sight path to exist
+       between the transmitter and receiver locations  specified.
+       Note  that  imperial  units  (miles,  feet)  are specified
+       unless the -metric switch is  added  to  SPLAT!'s  command
+       line options:
+
+       splat -t tx_site.qth -r rx_site.qth -metric
+
+       If  the  antenna must be raised a significant amount, this
+       determination may take  a  few  moments.   Note  that  the
+       results  provided are the minimum necessary for a line-of-
+       sight path to exist, and in the case of this simple  exam-
+       ple,  do not take Fresnel zone clearance requirements into
+       consideration.
 
        qth extensions are assumed by SPLAT! for  QTH  files,  and
-       are  optional when invoking the program.  SPLAT! automati-
-       cally reads all SPLAT Data Files necessary to conduct  the
-       terrain  analysis  between  the  sites  specified.  SPLAT!
-       searches for the needed SDF files in the  current  working
-       directory  first.   If  the  needed  files  are not found,
-       SPLAT! then searches in  the  path  specified  by  the  -d
-       command-line switch:
+       are  optional  when  specifying -t and -r arguments on the
+       command-line.  SPLAT! automatically reads all  SPLAT  Data
+       Files  necessary  to  conduct the terrain analysis between
+       the sites specified.  SPLAT!  searches  for  the  required
+       SDF  files in the current working directory first.  If the
+       needed files are not found, SPLAT! then  searches  in  the
+       path specified by the -d command-line switch:
 
        splat -t tx_site -r rx_site -d /cdrom/sdf/
 
        An  external  directory path may be specified by placing a
        ".splat_path" file under the user's home directory.   This
-       file  must  contain  the  full  directory path to the last
-       resort location of all the SDF files.   The  path  in  the
-       $HOME/.splat_path  file  must  be  of the form of a single
-       line of ASCII text:
+       file  must  contain the full directory path of last resort
+       to all the SDF files.  The path in  the  $HOME/.splat_path
+       file must be of the form of a single line of ASCII text:
 
        /opt/splat/sdf/
 
        and can be generated using any text editor.
 
-       A graph of the terrain profile between  the  receiver  and
-       transmitter  locations  as a function of distance from the
+       A  graph  of  the terrain profile between the receiver and
+       transmitter locations as a function of distance  from  the
        receiver can be generated by adding the -p switch:
 
-       splat -t tx_site -r rx_site -p terrain_profile.gif
+       splat -t tx_site -r rx_site -p terrain_profile.png
 
-       SPLAT! invokes gnuplot when generating graphs.  The  file-
-       name  extension  specified to SPLAT! determines the format
-       of the graph produced.  .gif will produce a 640x480  color
-       GIF  graphic  file,  while .ps or .postscript will produce
-       postscript output.  Output in formats such as  PNG,  Adobe
-       Illustrator,  AutoCAD  dxf,  LaTeX,  and  many  others are
+       SPLAT!  invokes gnuplot when generating graphs.  The file-
+       name extension specified to SPLAT! determines  the  format
+       of  the graph produced.  .png will produce a 640x480 color
+       PNG graphic file, while .ps or  .postscript  will  produce
+       postscript  output.   Output in formats such as GIF, Adobe
+       Illustrator, AutoCAD  dxf,  LaTeX,  and  many  others  are
        available.  Please consult gnuplot, and gnuplot's documen-
        tation for details on all the supported output formats.
 
        A graph of elevations subtended by the terrain between the
-       receiver and transmitter as a function  of  distance  from
+       receiver  and  transmitter  as a function of distance from
        the receiver can be generated by using the -e switch:
 
-       splat -t tx_site -r rx_site -e elevation_profile.gif
+       splat -t tx_site -r rx_site -e elevation_profile.png
 
-       The  graph produced using this switch illustrates the ele-
-       vation and depression angles resulting  from  the  terrain
-       between  the  receiver's location and the transmitter site
+       The graph produced using this switch illustrates the  ele-
+       vation  and  depression  angles resulting from the terrain
+       between the receiver's location and the  transmitter  site
        from the perspective of the receiver's location.  A second
-       trace  is  plotted  between  the  left  side  of the graph
+       trace is plotted  between  the  left  side  of  the  graph
        (receiver's location) and the location of the transmitting
-       antenna  on  the right.  This trace illustrates the eleva-
-       tion angle required for  a  line-of-sight  path  to  exist
-       between  the  receiver  and transmitter locations.  If the
+       antenna on the right.  This trace illustrates  the  eleva-
+       tion  angle  required  for  a  line-of-sight path to exist
+       between the receiver and transmitter  locations.   If  the
        trace intersects the elevation profile at any point on the
-       graph,  then  this  is  an indication that a line-of-sight
-       path does not exist under the conditions  given,  and  the
+       graph, then this is an  indication  that  a  line-of-sight
+       path  does  not  exist under the conditions given, and the
        obstructions can be clearly identified on the graph at the
        point(s) of intersection.
 
-       A graph illustrating terrain height referenced to a  line-
-       of-sight  path between the transmitter and receiver may be
+       A  graph illustrating terrain height referenced to a line-
+       of-sight path between the transmitter and receiver may  be
        generated using the -h switch:
 
-       splat -t tx_site -r rx_site -h height_profile.gif
+       splat -t tx_site -r rx_site -h height_profile.png
+
+       A  terrain  height  plot normalized to the transmitter and
+       receiver antenna heights can  be  obtained  using  the  -H
+       switch:
+
+       splat  -t  tx_site  -r  rx_site  -H normalized_height_pro-
+       file.png
+
+       A contour of the Earth's curvature is also plotted in this
+       mode.
 
-       The Earth's curvature is  clearly  evident  when  plotting
-       height profiles.
+       The  first Fresnel Zone, and 60% of the first Fresnel Zone
+       can be added to height profile graphs  by  adding  the  -f
+       switch,  and  specifying a frequency (in MHz) at which the
+       Fresnel Zone should be modeled:
+
+       splat  -t  tx_site  -r  rx_site  -f  439.250  -H   normal-
+       ized_height_profile.png
 
        A  graph  showing  Longley-Rice  path  loss may be plotted
        using the -l switch:
 
-       splat -t tx_site -r rx_site -l path_loss_profile.gif
+       splat -t tx_site -r rx_site -l path_loss_profile.png
+
+       As before, adding the -metric switch forces the graphs  to
+       be plotted using metric units of measure.
 
-       When performing path loss profiles, a  Longley-Rice  Model
-       Path  Loss  Report is generated by SPLAT! in the form of a
+       When  performing  path loss profiles, a Longley-Rice Model
+       Path Loss Report is generated by SPLAT! in the form  of  a
        text file with a .lro filename extension.  The report con-
-       tains  bearings  and distances between the transmitter and
-       receiver, as well as the Longley-Rice path loss for  vari-
-       ous  distances  between the transmitter and receiver loca-
-       tions.  The mode of propagation for points along the  path
-       are  given  as Line-of-Sight, Single Horizon, Double Hori-
+       tains bearings and distances between the  transmitter  and
+       receiver,  as well as the Longley-Rice path loss for vari-
+       ous distances between the transmitter and  receiver  loca-
+       tions.   The mode of propagation for points along the path
+       are given as Line-of-Sight, Single Horizon,  Double  Hori-
        zon, Diffraction Dominant, and Troposcatter Dominant.
 
-       To determine the signal-to-noise  (SNR)  ratio  at  remote
-       location  where random Johnson (thermal) noise is the pri-
+       To  determine  the  signal-to-noise  (SNR) ratio at remote
+       location where random Johnson (thermal) noise is the  pri-
        mary limiting factor in reception:
 
        SNR=T-NJ-L+G-NF
 
-       where T is the ERP of the transmitter in dBW, NJ is  John-
-       son  Noise  in dBW (-136 dBW for a 6 MHz TV channel), L is
-       the path loss provided by SPLAT! in dB (as a positive num-
-       ber),  G is the receive antenna gain in dB over isotropic,
-       and NF is the receiver noise figure in dB.
+       where T is the ERP of the transmitter in dBW in the direc-
+       tion of the receiver, NJ is Johnson Noise in dBW (-136 dBW
+       for  a  6 MHz television channel), L is the path loss pro-
+       vided by SPLAT!  in dB (as a positive number),  G  is  the
+       receive  antenna  gain in dB over isotropic, and NF is the
+       receiver noise figure in dB.
 
        T may be computed as follows:
 
@@ -431,8 +513,8 @@ POINT-TO-POINT ANALYSIS
 
        Signal_Margin=SNR-S
 
-       where S is the minimum desired SNR ratio (15.5 dB for ATSC
-       DTV, 42 dB for analog NTSC television).
+       where S is the minimum required SNR  ratio  (15.5  dB  for
+       ATSC (8-VSB) DTV, 42 dB for analog NTSC television).
 
        A  topographic map may be generated by SPLAT! to visualize
        the path between the transmitter and receiver  sites  from
@@ -444,19 +526,7 @@ POINT-TO-POINT ANALYSIS
        only exception to this is sea-level, which is  represented
        using the color blue.
 
-       SPLAT!  generated  topographic  maps  are 24-bit TrueColor
-       Portable PixMap (PPM) images.  They may be viewed, edited,
-       or  converted  to  other  graphic formats by popular image
-       viewing applications such as xv,  The  GIMP,  ImageMagick,
-       and XPaint.  PNG format is highly recommended for lossless
-       compressed storage of SPLAT!  generated topographic output
-       files.   An excellent command-line utility capable of con-
-       verting SPLAT! PPM graphic files to PNG files is wpng, and
-       is                      available                      at:
-       http://www.libpng.org/pub/png/book/sources.html.    As   a
-       last  resort,  PPM files may be compressed using the bzip2
-       utility, and read directly by The  GIMP  in  this  format.
-       Topographic output is specified using the -o switch:
+       Topographic output is invoked using the -o switch:
 
        splat -t tx_site -r rx_site -o topo_map.ppm
 
@@ -492,7 +562,7 @@ POINT-TO-POINT ANALYSIS
        a time for analysis:
 
        splat -t tx_site1 tx_site2 tx_site3 tx_site4 -r rx_site -p
-       profile.gif
+       profile.png
 
        In  this  example,  four  separate  terrain  profiles  and
        obstruction reports will be generated by SPLAT!.  A single
@@ -506,92 +576,81 @@ POINT-TO-POINT ANALYSIS
        receiver will be in  violet,  and  the  path  between  the
        fourth transmitter and the receiver will be in sienna.
 
-DETERMINING REGIONAL COVERAGE
+       SPLAT!  generated  topographic  maps  are 24-bit TrueColor
+       Portable PixMap (PPM) images.  They may be viewed, edited,
+       or  converted  to  other  graphic formats by popular image
+       viewing applications such as xv,  The  GIMP,  ImageMagick,
+       and XPaint.  PNG format is highly recommended for lossless
+       compressed storage of SPLAT!  generated topographic output
+       files.  ImageMagick's command-line utility easily converts
+       SPLAT!'s PPM files to PNG format:
+
+       convert splat_map.ppm splat_map.png
+
+       Another excellent  PPM  to  PNG  command-line  utility  is
+       available                                              at:
+       http://www.libpng.org/pub/png/book/sources.html.    As   a
+       last  resort,  PPM files may be compressed using the bzip2
+       utility, and read directly by The GIMP in this format.
+
+REGIONAL COVERAGE ANALYSIS
        SPLAT! can analyze a transmitter or repeater site, or net-
-       work of sites, and predict the regional coverage for  each
+       work  of sites, and predict the regional coverage for each
        site specified.  In this mode, SPLAT! can generate a topo-
-       graphic map displaying the geometric line-of-sight  cover-
-       age  area  of the sites based on the location of each site
-       and the height of receive antenna wishing  to  communicate
+       graphic  map displaying the geometric line-of-sight cover-
+       age area of the sites based on the location of  each  site
+       and  the  height of receive antenna wishing to communicate
        with the site in question.  SPLAT! switches from point-to-
-       point analysis mode to area prediction mode  when  the  -c
+       point  analysis  mode  to area prediction mode when the -c
        switch is invoked as follows:
 
-       splat  -t tx_site -c 30.0 -s cities.dat -b co34_d00.dat -o
+       splat -t tx_site -c 30.0 -s cities.dat -b co34_d00.dat  -o
        tx_coverage
 
        In this example, SPLAT! generates a topographic map called
-       tx_coverage.ppm  that  illustrates  the predicted line-of-
-       sight regional coverage of tx_site to receiving  locations
-       having  antennas  30.0 feet above ground level (AGL).  The
-       contents of cities.dat are plotted on the map, as are  the
-       cartographic    boundaries    contained    in   the   file
+       tx_coverage.ppm that illustrates  the  predicted  line-of-
+       sight  regional coverage of tx_site to receiving locations
+       having antennas 30.0 feet above ground  level  (AGL).   If
+       the  -metric switch is used, the argument following the -c
+       switch is interpreted as being in meters, rather  than  in
+       feet.   The contents of cities.dat are plotted on the map,
+       as are the cartographic boundaries contained in  the  file
        co34_d00.dat.
 
-       When plotting line-of-sight paths and  areas  of  regional
-       coverage,  SPLAT!  by  default  does  not  account for the
-       effects of atmospheric bending.   However,  this  behavior
-       may  be modified by using the Earth radius multiplier (-m)
+       When  plotting  line-of-sight  paths and areas of regional
+       coverage, SPLAT! by  default  does  not  account  for  the
+       effects  of  atmospheric  bending.  However, this behavior
+       may be modified by using the Earth radius multiplier  (-m)
        switch:
 
-       splat -t wnjt -c 30.0 -m  1.333  -s  cities.dat  -b  coun-
+       splat  -t  wnjt  -c  30.0  -m 1.333 -s cities.dat -b coun-
        ties.dat -o map.ppm
 
-       An  earth  radius  multiplier of 1.333 instructs SPLAT! to
+       An earth radius multiplier of 1.333  instructs  SPLAT!  to
        use the "four-thirds earth" model for line-of-sight propa-
-       gation  analysis.  Any appropriate earth radius multiplier
+       gation analysis.  Any appropriate earth radius  multiplier
        may be selected by the user.
 
-       When invoked in area prediction mode, SPLAT!  generates  a
+       When  invoked  in area prediction mode, SPLAT! generates a
        site  report  for  each  station  analyzed.   SPLAT!  site
        reports contain details of the site's geographic location,
-       its  height  above  mean  sea  level, the antenna's height
-       above mean sea level, the antenna's height  above  average
-       terrain,  and the height of the average terrain calculated
-       in the directions of 0, 45, 90, 135, 180,  225,  270,  and
+       its height above mean  sea  level,  the  antenna's  height
+       above  mean  sea level, the antenna's height above average
+       terrain, and the height of the average terrain  calculated
+       in  the  directions  of 0, 45, 90, 135, 180, 225, 270, and
        315 degrees azimuth.
 
-       If  the  -c  switch is replaced by a -L switch, a Longley-
-       Rice path loss map for a transmitter site  may  be  gener-
-       ated:
-
-       splat  -t  wnjt  -L  30.0 -s cities.dat -b co34_d00.dat -o
-       path_loss_map
-
-       In this mode, SPLAT! generates a  multi-color  map  illus-
-       trating  expected  signal levels (path loss) in areas sur-
-       rounding the transmitter site.  A legend at the bottom  of
-       the  map  correlates  each color with a specific path loss
-       level in decibels.  Since Longley-Rice area prediction map
-       generation  is  very CPU intensive, provision for limiting
-       the analysis range is provided  by  the  -R  switch.   The
-       argument  must  be  given in miles.  If a range wider than
-       the generated topographic map is  specified,  SPLAT!  will
-       perform  Longley-Rice  path  loss calculations between all
-       four corners of the area prediction map.
-
-       The -db switch allows a constraint to  be  placed  on  the
-       maximum  path loss region plotted on the map.  A path loss
-       between 80 and 230 dB may be specified using this  switch.
-       For  example,  if a path loss beyond -140 dB is irrelevant
-       to the survey being conducted, SPLAT!'s path loss plot can
-       be constrained to the region bounded by the 140 dB attenu-
-       ation contour as follows:
-
-       splat -t wnjt -L 30.0 -s cities.dat  -b  co34_d00.dat  -db
-       140 -o plot.ppm
-
-
-DETERMINING MULTIPLE REGIONS OF COVERAGE
-       SPLAT!  can  also display line-of-sight coverage areas for
-       as many as four separate transmitter  sites  on  a  common
+DETERMINING MULTIPLE REGIONS OF LOS COVERAGE
+       SPLAT! can also display line-of-sight coverage  areas  for
+       as  many  as  four  separate transmitter sites on a common
        topographic map.  For example:
 
-       splat -t site1 site2 site3 site4 -c 30.0 -o network.ppm
+       splat -t site1 site2 site3 site4 -c 10.0 -metric  -o  net-
+       work.ppm
 
        plots the regional line-of-sight coverage of site1, site2,
-       site3, and site4 based on a receive antenna  located  30.0
-       feet  above  ground  level.   A  topographic  map  is then
+       site3, and site4 based on a receive antenna  located  10.0
+       meters  above  ground  level.   A  topographic map is then
        written to the file network.ppm.  The line-of-sight cover-
        age area of the transmitters are plotted as follows in the
        colors indicated (along with their corresponding RGB  val-
@@ -622,14 +681,244 @@ DETERMINING MULTIPLE REGIONS OF COVERAGE
        from  as many as four separate locations on a single tower
        may be generated by SPLAT!.
 
-TOPOGRAPHIC MAP GENERATION
-       In certain situations, it may be desirable to  generate  a
-       topographic  map  of  a  region  without plotting coverage
+LONGLEY-RICE PATH LOSS ANALYSIS
+       If the -c switch is replaced by a -L  switch,  a  Longley-
+       Rice  path  loss  map for a transmitter site may be gener-
+       ated:
+
+       splat -t wnjt -L 30.0 -s  cities.dat  -b  co34_d00.dat  -o
+       path_loss_map
+
+       In  this  mode,  SPLAT! generates a multi-color map illus-
+       trating expected signal levels (path loss) in  areas  sur-
+       rounding  the transmitter site.  A legend at the bottom of
+       the map correlates each color with a  specific  path  loss
+       range in decibels.
+
+       The Longley-Rice analysis range may be modified to a user-
+       specific value using the -R switch.  The argument must  be
+       given  in  miles  (or  kilometers if the -metric switch is
+       used).  If a range wider than  the  generated  topographic
+       map  is  specified,  SPLAT! will perform Longley-Rice path
+       loss calculations between all four  corners  of  the  area
+       prediction map.
+
+       The  -db  switch  allows  a constraint to be placed on the
+       maximum path loss region plotted on the  map.   A  maximum
+       path  loss  between  80  and 230 dB may be specified using
+       this switch.  For example, if a path loss beyond  -140  dB
+       is irrelevant to the survey being conducted, SPLAT!'s path
+       loss plot can be constrained to the region bounded by  the
+       140 dB attenuation contour as follows:
+
+       splat  -t  wnjt  -L 30.0 -s cities.dat -b co34_d00.dat -db
+       140 -o plot.ppm
+
+
+ANTENNA RADIATION PATTERN PARAMETERS
+       Normalized  field  voltage  patterns  for  a  transmitting
+       antenna's  horizontal  and  vertical  planes  are imported
+       automatically into SPLAT!  when  a  Longley-Rice  coverage
+       analysis  is performed.  Antenna pattern data is read from
+       a pair of files having the same base name as the transmit-
+       ter  and  LRP  files,  but with .az and .el extensions for
+       azimuth and elevation pattern files, respectively.  Speci-
+       fications   regarding   pattern   rotation  (if  any)  and
+       mechanical beam tilt and tilt direction (if any) are  also
+       contained within SPLAT! antenna pattern files.
+
+       For  example, the first few lines of a SPLAT! azimuth pat-
+       tern file might appear as follows (kvea.az):
+
+               183.0
+               0       0.8950590
+               1       0.8966406
+               2       0.8981447
+               3       0.8995795
+               4       0.9009535
+               5       0.9022749
+               6       0.9035517
+               7       0.9047923
+               8       0.9060051
+
+       The first line of the .az file  specifies  the  amount  of
+       azimuthal  pattern rotation (measured clockwise in degrees
+       from True North) to be applied by SPLAT! to the data  con-
+       tained in the .az file.  This is followed by azimuth head-
+       ings (0 to 360 degrees) and  their  associated  normalized
+       field patterns (0.000 to 1.000) separated by whitespace.
+
+       The   structure  of  SPLAT!  elevation  pattern  files  is
+       slightly different.  The first line of the .el file speci-
+       fies  the  amount  of  mechanical beam tilt applied to the
+       antenna.  Note that a downward tilt (below the horizon) is
+       expressed as a positive angle, while an upward tilt (above
+       the horizon) is expressed as a negative angle.  This  data
+       is  followed by the azimuthal direction of the tilt, sepa-
+       rated by whitespace.
+
+       The remainder of the file consists of elevation angles and
+       their  corresponding  normalized voltage radiation pattern
+       (0.000 to 1.000) values separated by  whitespace.   Eleva-
+       tion angles must be specified over a -10.0 to +90.0 degree
+       range.  As was the convention  with  mechanical  beamtilt,
+       negative elevation angles are used to represent elevations
+       above the horizon, while positive angles represents eleva-
+       tions below the horizon.
+
+       For  example,  the first few lines a SPLAT! elevation pat-
+       tern file might appear as follows (kvea.el):
+
+               1.1    130.0
+              -10.0   0.172
+              -9.5    0.109
+              -9.0    0.115
+              -8.5    0.155
+              -8.0    0.157
+              -7.5    0.104
+              -7.0    0.029
+              -6.5    0.109
+              -6.0    0.185
+
+       In this example, the antenna is mechanically tilted  down-
+       ward 1.1 degrees towards an azimuth of 130.0 degrees.
+
+       For  best  results, the resolution of azimuth pattern data
+       should be specified to the  nearest  degree  azimuth,  and
+       elevation  pattern  data resolution should be specified to
+       the nearest 0.01 degrees.  If the pattern  data  specified
+       does  not  reach  this  level  of  resolution, SPLAT! will
+       interpolate the values provided to determine the  data  at
+       the  required  resolution,  although  this may result in a
+       loss in accuracy.
+
+
+IMPORTING AND EXPORTING REGIONAL PATH LOSS CONTOUR DATA
+       Performing a Longley-Rice coverage analysis can be a  very
+       time  consuming  process,  especially  if  the analysis is
+       repeated repeatedly to discover what  effects  changes  to
+       the  antenna radiation patterns make to the predicted cov-
+       erage area.
+
+       This process can be expedited by  exporting  the  Longley-
+       Rice  regional  path  loss contour data to an output file,
+       modifying the path loss  data  externally  to  incorporate
+       antenna  pattern  effects, and then importing the modified
+       path loss data back into  SPLAT!   to  rapidly  produce  a
+       revised path loss map.
+
+       For  example,  a path loss output file can be generated by
+       SPLAT!  for a receive site 30 feet above ground level over
+       a 50 mile radius surrounding a transmitter site to a maxi-
+       mum path loss of 140 dB using the following syntax:
+
+       splat -t kvea -L 30.0 -R 50.0 -db 140 -plo pathloss.dat
+
+       SPLAT! path loss output files often exceed  100  megabytes
+       in  size.  They contain information relating to the bound-
+       aries  of  region  they  describe  followed  by  latitudes
+       (degrees North), longitudes (degrees West), azimuths, ele-
+       vations (to the first obstruction), and path loss  figures
+       (dB)  for  a  series  of specific points that comprise the
+       region surrounding the transmitter site.   The  first  few
+       lines  of  a SPLAT! path loss output file take on the fol-
+       lowing appearance (pathloss.dat):
+
+               119, 117    ; max_west, min_west
+               35, 33      ; max_north, min_north
+               34.2265434, 118.0631104, 48.171, -37.461, 67.70
+               34.2270355, 118.0624390, 48.262, -26.212, 73.72
+               34.2280197, 118.0611038, 48.269, -14.951, 79.74
+               34.2285156, 118.0604401, 48.207, -11.351, 81.68
+               34.2290077, 118.0597687, 48.240, -10.518, 83.26
+               34.2294998, 118.0591049, 48.225, 23.201, 84.60
+               34.2304878, 118.0577698, 48.213, 15.769, 137.84
+               34.2309799, 118.0570984, 48.234, 15.965, 151.54
+               34.2314720, 118.0564346, 48.224, 16.520, 149.45
+               34.2319679, 118.0557632, 48.223, 15.588, 151.61
+               34.2329521, 118.0544281, 48.230, 13.889, 135.45
+               34.2334442, 118.0537643, 48.223, 11.693, 137.37
+               34.2339401, 118.0530930, 48.222, 14.050, 126.32
+               34.2344322, 118.0524292, 48.216, 16.274, 156.28
+               34.2354164, 118.0510941, 48.222, 15.058, 152.65
+               34.2359123, 118.0504227, 48.221, 16.215, 158.57
+               34.2364044, 118.0497589, 48.216, 15.024, 157.30
+               34.2368965, 118.0490875, 48.225, 17.184, 156.36
+
+       It is not uncommon for SPLAT! path loss files  to  contain
+       as  many as 3 million or more lines of data.  Comments can
+       be placed in the file if they are proceeded by a semicolon
+       character.   The  vim  text  editor  has proven capable of
+       editing files of this size.
+
+       Note as was the case in the antenna pattern  files,  nega-
+       tive  elevation  angles  refer  to  upward tilt (above the
+       horizon), while positive angles  refer  to  downward  tilt
+       (below  the horizon).  These angles refer to the elevation
+       to the receiving antenna at the height above ground  level
+       specified  using  the -L switch if the path between trans-
+       mitter and receiver is unobstructed.  If the path  between
+       the  transmitter and receiver is obstructed, then the ele-
+       vation angle to  the  first  obstruction  is  returned  by
+       SPLAT!.   This is because the Longley-Rice model considers
+       the energy reaching a distant  point  over  an  obstructed
+       path  as a derivative of the energy scattered from the top
+       of the first obstruction, only.  Since energy cannot reach
+       the  obstructed  location  directly,  the actual elevation
+       angle to that point is irrelevant.
+
+       When modifying SPLAT! path loss files to  reflect  antenna
+       pattern  data,  only the last column (path loss) should be
+       amended to reflect the antenna's normalized  gain  at  the
+       azimuth  and  elevation angles specified in the file.  (At
+       this time, programs and scripts capable of performing this
+       operation are left as an exercise for the user.)
+
+       Modified  path  loss maps can be imported back into SPLAT!
+       for generating revised coverage maps:
+
+       splat -t kvea -pli pathloss.dat -s city.dat -b  county.dat
+       -o map.ppm
+
+       SPLAT!  path  loss  files  can also be used for conducting
+       coverage or interference studies outside of SPLAT!.
+
+USER-DEFINED TERRAIN INPUT FILES
+       A user-defined terrain file is a user-generated text  file
+       containing latitudes, longitudes, and heights above ground
+       level of specific  terrain  features  believed  to  be  of
+       importance  to  the  SPLAT!  analysis being conducted, but
+       noticeably absent from the SDF files being used.  A  user-
+       defined  terrain  file  is imported into a SPLAT! analysis
+       using the -udt switch:
+
+        splat -t tx_site -r rx_site -udt udt_file.txt -o map.ppm
+
+       A user-defined terrain file has the  following  appearance
+       and structure:
+
+              40.32180556, 74.1325, 100.0 meters
+              40.321805, 74.1315, 300.0
+              40.3218055, 74.1305, 100.0 meters
+
+       Terrain  height  is interpreted as being described in feet
+       above ground level unless followed by the word meters, and
+       is  added  on top of the terrain specified in the SDF data
+       for the locations specified.  Be  aware  that  each  user-
+       defined  terrain  feature specified will be interpreted as
+       being 3-arc seconds in both latitude and longitude.   Fea-
+       tures  described  in  the  user-defined  terrain file that
+       overlap  previously  defined  features  in  the  file  are
+       ignored by SPLAT!.
+
+SIMPLE TOPOGRAPHIC MAP GENERATION
+       In  certain  situations  it may be desirable to generate a
+       topographic map of  a  region  without  plotting  coverage
        areas,  line-of-sight  paths,  or  generating  obstruction
-       reports.   There  are  several ways of doing this.  If one
-       wishes to generate  a  topographic  map  illustrating  the
-       location  of  a transmitter and receiver site along with a
-       brief text report describing the locations  and  distances
+       reports.  There are several ways of doing  this.   If  one
+       wishes  to  generate  a  topographic  map illustrating the
+       location of a transmitter and receiver site along  with  a
+       brief  text  report describing the locations and distances
        between the sites, the -n switch should be invoked as fol-
        lows:
 
@@ -639,10 +928,57 @@ TOPOGRAPHIC MAP GENERATION
 
        splat -t tx_site -r rx_site -N -o topo_map.ppm
 
-       If the -o switch and  output  filename  are  omitted  when
-       using either the -n or -N switches, output is written to a
-       file named map.ppm in the  current  working  directory  by
-       default.
+       If a topographic map centered about a single site out to a
+       minimum specified radius is  desired  instead,  a  command
+       similar to the following can be used:
+
+       splat  -t  tx_site  -R 50.0 -s NJ_Cities -b NJ_Counties -o
+       topo_map.ppm
+
+       where -R specifies the minimum radius of the map in  miles
+       (or kilometers if the -metric switch is used).
+
+       If  the -o switch and output filename are omitted in these
+       operations, topographic output is written to a file  named
+       map.ppm in the current working directory by default.
+
+GEOREFERENCE FILE GENERATION
+       Topographic,  coverage  (-c),  and  path loss contour (-L)
+       maps generated by SPLAT! may be imported  into  Xastir  (X
+       Amateur  Station Tracking and Information Reporting) soft-
+       ware by generating a georeference file using SPLAT!'s -geo
+       switch:
+
+       splat -t kd2bd -R 50.0 -s NJ_Cities -b NJ_Counties -geo -o
+       map.ppm
+
+       The georeference file generated will have  the  same  base
+       name as the -o file specified, but have a  .geo extension,
+       and permit proper interpretation and display  of  SPLAT!'s
+       .ppm graphics in Xastir software.
+
+GOOGLE MAP KML FILE GENERATION
+       Keyhole Markup Language files compatible with Google Earth
+       may be generated by SPLAT! when performing  point-to-point
+       analyses by invoking the -kml switch:
+
+       splat -t wnjt -r kd2bd -kml
+
+       The  KML file generated will have the same filename struc-
+       ture as an Obstruction  Report  for  the  transmitter  and
+       receiver  site  names  given, except it will carry a  .kml
+       extension.
+
+       Once loaded into Google Earth (File  -->  Open),  the  KML
+       file  will  annotate the map display with the names of the
+       transmitter and receiver site locations.  The viewpoint of
+       the  image  will  be  from the position of the transmitter
+       site looking towards the location of  the  receiver.   The
+       point-to-point path between the sites will be displayed as
+       a white line while the RF line-of-sight path will be  dis-
+       played  in  green.   Google Earth's navigation tools allow
+       the user to "fly" around  the  path,  identify  landmarks,
+       roads, and other featured content.
 
 DETERMINATION OF ANTENNA HEIGHT ABOVE AVERAGE TERRAIN
        SPLAT!  determines  antenna  height  above average terrain
@@ -655,66 +991,59 @@ DETERMINATION OF ANTENNA HEIGHT ABOVE AVERAGE TERRAIN
        lie entirely over water or over land  outside  the  United
        States  (areas for which no USGS topography data is avail-
        able), then those radials are omitted from the calculation
-       of  average  terrain.   If part of a radial extends over a
-       body of water or over land outside the United States, then
-       only that part of the radial lying over United States land
-       is used in the determination of average terrain.
-
-       Note that SRTM elevation data, unlike older  3-arc  second
-       USGS  data,  extends  beyond  the  borders  of  the United
-       States.  Therefore, HAAT results may not be in  full  com-
+       of average terrain.
+
+       Note  that  SRTM elevation data, unlike older 3-arc second
+       USGS data,  extends  beyond  the  borders  of  the  United
+       States.   Therefore,  HAAT results may not be in full com-
        pliance with FCC Part 73.313(d) in areas along the borders
-       of the United States if the SDF files used by  SPLAT!  are
+       of  the  United States if the SDF files used by SPLAT! are
        SRTM-derived.
 
-       When  performing  point-to-point  terrain analysis, SPLAT!
-       determines the antenna height above average  terrain  only
-       if  enough topographic data has already been loaded by the
-       program to perform the point-to-point analysis.   In  most
+       When performing point-to-point  terrain  analysis,  SPLAT!
+       determines  the  antenna height above average terrain only
+       if enough topographic data has already been loaded by  the
+       program  to  perform the point-to-point analysis.  In most
        cases, this will be true, unless the site in question does
-       not lie within 10 miles of the boundary of the  topography
+       not  lie within 10 miles of the boundary of the topography
        data in memory.
 
-       When  performing area prediction analysis, enough topogra-
-       phy data is normally loaded by SPLAT! to  perform  average
-       terrain  calculations.  Under such conditions, SPLAT! will
-       provide the antenna height above average terrain  as  well
-       as  the  average terrain above mean sea level for azimuths
-       of 0, 45, 90, 135, 180, 225, 270,  and  315  degrees,  and
-       include such information in the site report generated.  If
+       When performing area prediction analysis, enough  topogra-
+       phy  data  is normally loaded by SPLAT! to perform average
+       terrain calculations.  Under such conditions, SPLAT!  will
+       provide  the  antenna height above average terrain as well
+       as the average terrain above mean sea level  for  azimuths
+       of  0,  45,  90,  135, 180, 225, 270, and 315 degrees, and
+       include such information in the generated site report.  If
        one or more of the eight radials surveyed fall over water,
        or over regions for which no SDF data is available, SPLAT!
        reports No Terrain for the radial paths affected.
 
 RESTRICTING THE MAXIMUM SIZE OF AN ANALYSIS REGION
-       SPLAT! reads SDF files as needed into a series  of  memory
-       "slots"  within the structure of the program.  Each "slot"
-       holds one SDF file representing a one degree by one degree
-       region  of  terrain.   A #define MAXSLOTS statement in the
-       first several lines of splat.cpp sets the  maximum  number
-       of  "slots"  available  for topography data.  It also sets
-       the maximum size of  the  topographic  maps  generated  by
-       SPLAT!.   MAXSLOTS is set to 9 by default.  If SPLAT! pro-
-       duces a segmentation fault on start-up with this  default,
-       it  is  an  indication  that not enough RAM and/or virtual
-       memory (swap space) is available to run SPLAT!  with  this
-       number  of MAXSLOTS.  In situations where available memory
-       is low, MAXSLOTS may be reduced to 4 with the  understand-
-       ing that this will greatly limit the maximum region SPLAT!
-       will be able to analyze.  If  118  megabytes  or  more  of
-       total  memory  (swap  space  plus  RAM) is available, then
-       MAXSLOTS may be increased to 16.  This will permit  opera-
-       tion  over  a 4-degree by 4-degree region, which is suffi-
-       cient for single antenna heights in excess of 10,000  feet
-       above  mean sea level, or point-to-point distances of over
-       1000 miles.
+       SPLAT!  reads  SDF files as needed into a series of memory
+       pages or "slots" within  the  structure  of  the  program.
+       Each  "slot"  holds one SDF file representing a one degree
+       by one degree  region  of  terrain.   A  #define  MAXSLOTS
+       statement in the first several lines of splat.cpp sets the
+       maximum number of "slots" available for holding topography
+       data.   It  also  sets the maximum size of the topographic
+       maps generated  by  SPLAT!.   MAXSLOTS  is  set  to  9  by
+       default.   If  SPLAT!   produces  a  segmentation fault on
+       start-up with this default, it is an indication  that  not
+       enough RAM and/or virtual memory (swap space) is available
+       to run SPLAT! with the number of MAXSLOTS  specified.   In
+       situations  where available memory is low, MAXSLOTS may be
+       reduced to 4 with the understanding that this will greatly
+       limit  the  maximum region SPLAT! will be able to analyze.
+       If 118 megabytes or more of total memory (swap space  plus
+       RAM)  is  available, then MAXSLOTS may be increased to 16.
+       This will permit operation over  a  4-degree  by  4-degree
+       region,  which is sufficient for single antenna heights in
+       excess of 10,000 feet above mean sea level,  or  point-to-
+       point distances of over 1000 miles.
 
 ADDITIONAL INFORMATION
-       Invoking SPLAT! without any arguments will display all the
-       command-line options available with the program along with
-       a brief summary of each.
-
-       The latest news and information regarding SPLAT!  software
+       The  latest news and information regarding SPLAT! software
        is available through the official SPLAT! software web page
        located at: http://www.qsl.net/kd2bd/splat.html.
 
@@ -725,5 +1054,10 @@ AUTHORS
        Doug McDonald <mcdonald@scs.uiuc.edu>
               Longley-Rice Model integration
 
+       Ron Bentley <ronbentley@earthlink.net>
+              Fresnel Zone plotting and clearance determination
+
+
 
 
+KD2BD Software           20 December 2006               SPLAT!(1)
diff --git a/splat-1.1.1.lsm b/splat-1.1.1.lsm
deleted file mode 100644 (file)
index 1f83772..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-Begin4
-Title:         SPLAT!
-Version:       1.1.1
-Entered-date:  2006-04-01
-Description:   SPLAT! is a terrestrial RF propagation analysis tool for
-               the spectrum between 20 MHz and 20 GHz.  SPLAT! provides
-               site engineering data such as the great circle distances
-               and bearings between sites, antenna elevation angles
-               (uptilt), depression angles (downtilt), antenna height
-               above mean sea level, antenna height above average
-               terrain, bearings and distances to known obstructions,
-               path loss based on the Longley-Rice Irregular Terrain
-               Model, and minimum antenna height requirements needed
-               to establish line-of-sight communication paths absent
-               of obstructions due to terrain.  SPLAT! produces
-               reports, graphs, and highly detailed and carefully
-               annotated topographic maps depicting line-of-sight paths,
-               path loss, and expected coverage areas of transmitters
-               and repeater systems.  Applications of SPLAT! include
-               site engineering, wireless network design, amateur
-               radio communications, frequency coordination,
-               communication system design, and terrestrial
-               television and radio broadcasting.  SPLAT! requires
-               gnuplot version 3.7, libbzip-1.0.1 or later, and
-               zlib, as well as an application capable of displaying
-               PPM graphic files (xv, ImageMagick, xpaint, The GIMP, etc.).
-Keywords:      Terrain analysis, site engineering, Longley-Rice path
-               loss, TV/FM radio broadcasting, TV/FM radio reception,
-               amateur radio, wireless WAN analysis and design
-Author:                kd2bd@amsat.org (John A. Magliacane) (Creator, Lead Developer)
-               mcdonald@scs.uiuc.edu (Doug McDonald) (L-R Model Integration)
-Maintained-by: kd2bd@amsat.org (John A. Magliacane)
-Primary-site:  ftp.ibiblio.org /pub/Linux/apps/ham/splat-1.1.1.tar.gz
-Original-site: http://www.qsl.net/kd2bd/splat.html
-Platforms:     Linux/Unix
-Copying-policy:        GPL
-End
diff --git a/splat-1.2.0.lsm b/splat-1.2.0.lsm
new file mode 100644 (file)
index 0000000..bd7e003
--- /dev/null
@@ -0,0 +1,38 @@
+Begin3
+Title:         SPLAT!
+Version:       1.2.0
+Entered-date:  22DEC06
+Description:   SPLAT! is a terrestrial RF propagation analysis tool for
+               the spectrum between 20 MHz and 20 GHz.  SPLAT! provides
+               site engineering data such as the great circle distances
+               and bearings between sites, antenna elevation angles
+               (uptilt), depression angles (downtilt), antenna height
+               above mean sea level, antenna height above average
+               terrain, bearings and distances to known obstructions,
+               path loss based on the Longley-Rice Irregular Terrain
+               Model, and minimum antenna height requirements needed to
+               establish first Fresnel zone clearance and line-of-sight
+               RF paths absent of obstructions due to terrain.  SPLAT!
+               produces reports, graphs, and highly detailed and carefully
+               annotated topographic maps depicting line-of-sight paths,
+               path loss, and expected coverage areas of transmitters
+               and repeater systems.  Applications of SPLAT! include
+               site engineering, wireless network design, amateur
+               radio communications, frequency coordination,
+               communication system design, and terrestrial
+               television and radio broadcasting.  SPLAT! requires
+               gnuplot version 3.7, libbzip-1.0.1 or later, and
+               zlib, as well as an application capable of displaying
+               PPM graphic files (xv, ImageMagick, xpaint, The GIMP, etc.).
+Keywords:      Terrain analysis, site engineering, Longley-Rice path
+               loss, TV/FM radio broadcasting, TV/FM radio reception,
+               amateur radio, wireless WAN analysis and design
+Author:                kd2bd@amsat.org (John A. Magliacane) (Creator, Lead Developer)
+               mcdonald@scs.uiuc.edu (Doug McDonald) (L-R Model Integration)
+               ronbentley@earthlink.net (Ron Bentley) (Fresnel Zone Plotting)
+Maintained-by: kd2bd@amsat.org (John A. Magliacane)
+Primary-site:  ftp.ibiblio.org /pub/Linux/apps/ham/splat-1.2.0.tar.gz
+Original-site: http://www.qsl.net/kd2bd/splat.html
+Platforms:     Linux/Unix
+Copying-policy:        GPL
+End
index 3e17692aafa79b69d410cb869cc403462873f38d..4c801c02913af133d86f894db828b8584296056f 100644 (file)
--- a/splat.cpp
+++ b/splat.cpp
@@ -1,6 +1,6 @@
 /****************************************************************************
 *      SPLAT: An RF Signal Propagation Loss and Terrain Analysis Tool       *
-*                        Last update: 31-Mar-2006                          *
+*                        Last update: 21-Dec-2006                          *
 *****************************************************************************
 *           Project started in 1997 by John A. Magliacane, KD2BD           *
 *****************************************************************************
 #define ARRAYSIZE 30025
 #endif
 
-char   string[255], sdf_path[255], opened=0, *splat_version={"1.1.1"};
+char   string[255], sdf_path[255], opened=0, *splat_version={"1.2.0"};
 
 double TWOPI=6.283185307179586, HALFPI=1.570796326794896,
        PI=3.141592653589793, deg2rad=1.74532925199e-02,
        EARTHRADIUS=20902230.97, METERS_PER_MILE=1609.344,
-       METERS_PER_FOOT=0.3048, earthradius, max_range=0.0;
+       METERS_PER_FOOT=0.3048, KM_PER_MILE=1.609344, earthradius,
+       max_range=0.0;
 
 int    min_north=90, max_north=-90, min_west=360, max_west=-1,
        max_elevation=-32768, min_elevation=32768, bzerror, maxdB=230;
 
-struct site { double lat;
-             double lon;
-             double alt;
-             char name[50];
-           } site;
-
-struct path { float lat[ARRAYSIZE];
-              float lon[ARRAYSIZE];
-              float elevation[ARRAYSIZE];
-              float distance[ARRAYSIZE];
-              int length;
-            } path;
-
-struct dem { int min_north;
-            int max_north;
-            int min_west;
-            int max_west;
-            int max_el;
-            int min_el;
-            short data[1200][1200];
-            unsigned char mask[1200][1200];
-           } dem[MAXSLOTS];
-
-struct LR { double eps_dielect; 
-           double sgm_conductivity; 
-           double eno_ns_surfref;
-           double frq_mhz; 
-           double conf; 
-           double rel;
-           int radio_climate;  
-           int pol;
-          } LR;
+unsigned char got_elevation_pattern=0, got_azimuth_pattern=0, metric=0;
+
+struct site {  double lat;
+               double lon;
+               float alt;
+               char name[50];
+           }   site;
+
+struct path {  double lat[ARRAYSIZE];
+               double lon[ARRAYSIZE];
+               double elevation[ARRAYSIZE];
+               double distance[ARRAYSIZE];
+               int length;
+           }   path;
+
+struct dem {   int min_north;
+               int max_north;
+               int min_west;
+               int max_west;
+               int max_el;
+               int min_el;
+               short data[1200][1200];
+               unsigned char mask[1200][1200];
+           }   dem[MAXSLOTS];
+
+struct LR {    double eps_dielect; 
+               double sgm_conductivity; 
+               double eno_ns_surfref;
+               double frq_mhz; 
+               double conf; 
+               double rel;
+               int radio_climate;  
+               int pol;
+               float antenna_pattern[361][1001];
+          }    LR;
 
 double elev_l[ARRAYSIZE+10];
 
@@ -138,12 +142,19 @@ char *dec2dms(double decimal)
 {
        /* Converts decimal degrees to degrees, minutes, seconds,
           (DMS) and returns the result as a character string. */
-       int degrees, minutes, seconds;
-       double a, b, c, d;
+
+       char    sign;
+       int     degrees, minutes, seconds;
+       double  a, b, c, d;
 
        if (decimal<0.0)
+       {
                decimal=-decimal;
+               sign=-1;
+       }
+
+       else
+               sign=1;
 
        a=floor(decimal);
        b=60.0*(decimal-a);
@@ -161,7 +172,7 @@ char *dec2dms(double decimal)
                seconds=59;
 
        string[0]=0;
-       sprintf(string,"%d%c %d\' %d\"", degrees, 176, minutes, seconds);
+       sprintf(string,"%d%c %d\' %d\"", degrees*sign, 176, minutes, seconds);
        return (string);
 }
 
@@ -173,8 +184,8 @@ int OrMask(double lat, double lon, int value)
           the mask based on the latitude and longitude of the area
           pointed to. */
 
-       int x, y, indx, minlat, minlon;
-       char found;
+       int     x, y, indx, minlat, minlon;
+       char    found;
 
        minlat=(int)floor(lat);
        minlon=(int)floor(lon);
@@ -213,9 +224,9 @@ double GetElevation(struct site location)
           represented by the digital elevation model data in memory.
           Function returns -5000.0 for locations not found in memory. */
 
-       char found;
-       int x, y, indx, minlat, minlon;
-       double elevation;
+       char    found;
+       int     x, y, indx, minlat, minlon;
+       double  elevation;
 
        elevation=-5000.0;
 
@@ -238,12 +249,41 @@ double GetElevation(struct site location)
        return elevation;
 }
 
+int AddElevation(double lat, double lon, double height)
+{
+       /* This function adds a user-defined terrain feature
+          (in meters AGL) to the digital elevation model data
+          in memory.  Does nothing and returns 0 for locations
+          not found in memory. */
+
+       char    found;
+       int     x, y, indx, minlat, minlon;
+
+       minlat=(int)floor(lat);
+       minlon=(int)floor(lon);
+
+       x=(int)(1199.0*(lat-floor(lat)));
+       y=(int)(1199.0*(lon-floor(lon)));
+
+       for (indx=0, found=0; indx<MAXSLOTS && found==0; indx++)
+       {
+               if (minlat==dem[indx].min_north && minlon==dem[indx].min_west)
+               {
+
+                       dem[indx].data[x][y]+=(short)rint(height);
+                       found=1;
+               }
+       }
+       
+       return found;
+}
+
 double Distance(struct site site1, struct site site2)
 {
        /* This function returns the great circle distance
           in miles between any two site locations. */
 
-       double lat1, lon1, lat2, lon2, distance;
+       double  lat1, lon1, lat2, lon2, distance;
 
        lat1=site1.lat*deg2rad;
        lon1=site1.lon*deg2rad;
@@ -260,8 +300,8 @@ double Azimuth(struct site source, struct site destination)
        /* This function returns the azimuth (in degrees) to the
           destination as seen from the location of the source. */
 
-       double dest_lat, dest_lon, src_lat, src_lon,
-              beta, azimuth, diff, num, den, fraction;
+       double  dest_lat, dest_lon, src_lat, src_lon,
+               beta, azimuth, diff, num, den, fraction;
 
        dest_lat=destination.lat*deg2rad;
        dest_lon=destination.lon*deg2rad;
@@ -307,10 +347,10 @@ double Azimuth(struct site source, struct site destination)
        return (azimuth/deg2rad);               
 }
 
-double ElevationAngle(struct site local, struct site remote)
+double ElevationAngle(struct site source, struct site destination)
 {
        /* This function returns the angle of elevation (in degrees)
-          of the remote location as seen from the local site.
+          of the destination as seen from the source location.
           A positive result represents an angle of elevation (uptilt),
           while a negative result represents an angle of depression
           (downtilt), as referenced to a normal to the center of
@@ -318,10 +358,10 @@ double ElevationAngle(struct site local, struct site remote)
           
        register double a, b, dx;
 
-       a=GetElevation(remote)+remote.alt+earthradius;
-       b=GetElevation(local)+local.alt+earthradius;
+       a=GetElevation(destination)+destination.alt+earthradius;
+       b=GetElevation(source)+source.alt+earthradius;
 
-       dx=5280.0*Distance(local,remote);
+       dx=5280.0*Distance(source,destination);
 
        /* Apply the Law of Cosines */
 
@@ -331,22 +371,35 @@ double ElevationAngle(struct site local, struct site remote)
 void ReadPath(struct site source, struct site destination)
 {
        /* This function generates a sequence of latitude and
-          longitude positions between a source location and
-          a destination along a great circle path, and stores
-          elevation and distance information for points along
-          that path in the "path" structure for later use. */
+          longitude positions between source and destination
+          locations along a great circle path, and stores
+          elevation and distance information for points
+          along that path in the "path" structure. */
 
-       int c;
-       double azimuth, distance, lat1, lon1, beta,
-              den, num, lat2, lon2, total_distance;
-       struct site tempsite;
+       int     c;
+       double  azimuth, distance, lat1, lon1, beta, den, num,
+               lat2, lon2, total_distance, x, y, path_length,
+               increment;
+       struct  site tempsite;
 
        lat1=source.lat*deg2rad;
        lon1=source.lon*deg2rad;
+
+       lat2=destination.lat*deg2rad;
+       lon2=destination.lon*deg2rad;
+
        azimuth=Azimuth(source,destination)*deg2rad;
+
        total_distance=Distance(source,destination);
 
-       for (distance=0, c=0; distance<=total_distance; distance+=0.04)
+       x=68755.0*acos(cos(lon1-lon2));         /* 1200 samples per degree */
+       y=68755.0*acos(cos(lat1-lat2));         /* 68755 samples per radian */
+
+       path_length=sqrt((x*x)+(y*y));          /* Total number of samples */
+
+       increment=total_distance/path_length;   /* Miles per sample */
+
+       for (distance=0, c=0; distance<=total_distance; distance+=increment)
        {
                beta=distance/3959.0;
                lat2=asin(sin(lat1)*cos(beta)+cos(azimuth)*sin(beta)*cos(lat1));
@@ -408,6 +461,75 @@ void ReadPath(struct site source, struct site destination)
                path.length=ARRAYSIZE-1;
 }
 
+double ElevationAngle2(struct site source, struct site destination, double er)
+{
+       /* This function returns the angle of elevation (in degrees)
+          of the destination as seen from the source location, UNLESS
+          the path between the sites is obstructed, in which case, the
+          elevation angle to the first obstruction is returned instead.
+          "er" represents the earth radius. */
+
+       int     x;
+       char    block=0;
+       double  source_alt, destination_alt, cos_xmtr_angle,
+               cos_test_angle, test_alt, elevation, distance,
+               source_alt2, first_obstruction_angle=0.0;
+       struct  path temp;
+
+       temp=path;
+
+       ReadPath(source,destination);
+
+       distance=5280.0*Distance(source,destination);
+       source_alt=er+source.alt+GetElevation(source);
+       destination_alt=er+destination.alt+GetElevation(destination);
+       source_alt2=source_alt*source_alt;
+
+       /* Calculate the cosine of the elevation angle of the
+          destination (receiver) as seen by the source (transmitter). */
+
+       cos_xmtr_angle=((source_alt2)+(distance*distance)-(destination_alt*destination_alt))/(2.0*source_alt*distance);
+
+       /* Test all points in between source and destination locations to
+          see if the angle to a topographic feature generates a higher
+          elevation angle than that produced by the destination.  Begin
+          at the source since we're interested in identifying the FIRST
+          obstruction along the path between source and destination. */
+       for (x=2, block=0; x<path.length && block==0; x++)
+       {
+               distance=5280.0*path.distance[x];
+
+               test_alt=earthradius+path.elevation[x];
+
+               cos_test_angle=((source_alt2)+(distance*distance)-(test_alt*test_alt))/(2.0*source_alt*distance);
+
+               /* Compare these two angles to determine if
+                  an obstruction exists.  Since we're comparing
+                  the cosines of these angles rather than
+                  the angles themselves, the sense of the
+                  following "if" statement is reversed from
+                  what it would be if the angles themselves
+                  were compared. */
+
+               if (cos_xmtr_angle>cos_test_angle)
+               {
+                       block=1;
+                       first_obstruction_angle=((acos(cos_test_angle))/deg2rad)-90.0;
+               }
+       }
+
+       if (block)
+               elevation=first_obstruction_angle;
+
+       else
+               elevation=((acos(cos_xmtr_angle))/deg2rad)-90.0;
+
+       path=temp;
+
+       return elevation;
+}
+
 double AverageTerrain(struct site source, double azimuthx, double start_distance, double end_distance)
 {
        /* This function returns the average terrain calculated in
@@ -418,9 +540,9 @@ double AverageTerrain(struct site source, double azimuthx, double start_distance
           memory to complete the survey (critical error), then
           -9999.0 is returned. */
  
-       int c, samples, endpoint;
-       double beta, lat1, lon1, lat2, lon2, num, den, azimuth, terrain=0.0;
-       struct site destination;
+       int     c, samples, endpoint;
+       double  beta, lat1, lon1, lat2, lon2, num, den, azimuth, terrain=0.0;
+       struct  site destination;
 
        lat1=source.lat*deg2rad;
        lon1=source.lon*deg2rad;
@@ -509,9 +631,9 @@ double haat(struct site antenna)
           error occurs, such as a lack of SDF data to complete the
           survey, -5000.0 is returned. */
 
-       int azi, c;
-       char error=0;
-       double terrain, avg_terrain, haat, sum=0.0;
+       int     azi, c;
+       char    error=0;
+       double  terrain, avg_terrain, haat, sum=0.0;
 
        /* Calculate the average terrain between 2 and 10 miles
           from the antenna site at azimuths of 0, 45, 90, 135,
@@ -586,7 +708,6 @@ void PlaceMarker(struct site location)
        lat=location.lat;
        lon=location.lon;
 
-
        if (lat<xmax && lat>xmin && (LonDiff(lon,ymax)<0.0) && (LonDiff(lon,ymin)>0.0))
        {
                p1=1.0/1200.0;
@@ -788,9 +909,9 @@ double ReadBearing(char *input)
           embedded within the numbers expressed in the
           input string.  Decimal seconds are permitted. */
  
-       double seconds, bearing=0.0;
-       char string[20];
-       int a, b, length, degrees, minutes;
+       double  seconds, bearing=0.0;
+       char    string[20];
+       int     a, b, length, degrees, minutes;
 
        /* Copy "input" to "string", and ignore any extra
           spaces that might be present in the process. */
@@ -800,7 +921,7 @@ double ReadBearing(char *input)
 
        for (a=0, b=0; a<length && a<18; a++)
        {
-               if ((input[a]!=32 && input[a]!='\n') || (input[a]==32 && input[a+1]!=32 && b!=0))
+               if ((input[a]!=32 && input[a]!='\n') || (input[a]==32 && input[a+1]!=32 && input[a+1]!='\n' && b!=0))
                {
                        string[b]=input[a];
                        b++;
@@ -823,7 +944,11 @@ double ReadBearing(char *input)
        if (b==2)  /* Degree, Minute, Second Format (40 08 23) */
        {
                sscanf(string,"%d %d %lf",&degrees, &minutes, &seconds);
-               bearing=(double)degrees+((double)minutes/60)+(seconds/3600);
+
+               bearing=(double)abs(degrees)+((double)abs(minutes)/60)+(fabs(seconds)/3600);
+
+               if ((degrees<0) || (minutes<0) || (seconds<0.0))
+                       bearing=-bearing;
        }
 
        /* Anything else returns a 0.0 */
@@ -844,10 +969,10 @@ struct site LoadQTH(char *filename)
           or 'm', or by the word "meters" or "Meters", in which
           case meters is assumed, and is handled accordingly. */
 
-       int x;
-       char string[50], qthfile[255];
-       struct site tempsite;
-       FILE *fd=NULL;
+       int     x;
+       char    string[50], qthfile[255];
+       struct  site tempsite;
+       FILE    *fd=NULL;
 
        for (x=0; filename[x]!='.' && filename[x]!=0 && x<250; x++)
                qthfile[x]=filename[x];
@@ -903,20 +1028,383 @@ struct site LoadQTH(char *filename)
                if (string[x]=='M' || string[x]=='m')
                {
                        string[x]=0;
-                       sscanf(string,"%lf",&tempsite.alt);
+                       sscanf(string,"%f",&tempsite.alt);
                        tempsite.alt*=3.28084;
                }
 
                else
                {
                        string[x]=0;
-                       sscanf(string,"%lf",&tempsite.alt);
+                       sscanf(string,"%f",&tempsite.alt);
                }
        }
 
        return tempsite;
 }
 
+void LoadPAT(char *filename)
+{
+       /* This function reads and processes antenna pattern (.az
+          and .el) files that correspond in name to previously
+          loaded SPLAT! .lrp files.  */
+
+       int     a, b, w, x, y, z, last_index, next_index, span;
+       char    string[255], azfile[255], elfile[255], *pointer=NULL;
+       float   az, xx, elevation, amplitude, rotation, valid1, valid2,
+               delta, azimuth[361], azimuth_pattern[361], el_pattern[10001],
+               elevation_pattern[361][1001], slant_angle[361], tilt,
+               mechanical_tilt, tilt_azimuth, tilt_increment, sum;
+       FILE    *fd=NULL;
+       unsigned char read_count[10001];
+
+       for (x=0; filename[x]!='.' && filename[x]!=0 && x<250; x++)
+       {
+               azfile[x]=filename[x];
+               elfile[x]=filename[x];
+       }
+
+       azfile[x]='.';
+       azfile[x+1]='a';
+       azfile[x+2]='z';
+       azfile[x+3]=0;
+
+       elfile[x]='.';
+       elfile[x+1]='e';
+       elfile[x+2]='l';
+       elfile[x+3]=0;
+
+       rotation=0.0;
+
+       /* Load .az antenna pattern file */
+
+       fd=fopen(azfile,"r");
+
+       if (fd!=NULL)
+       {
+               /* Clear azimuth pattern array */
+
+               for (x=0; x<=360; x++)
+               {
+                       azimuth[x]=0.0;
+                       read_count[x]=0;
+               }
+
+
+               /* Read azimuth pattern rotation
+                  in degrees measured clockwise
+                  from true North. */
+
+               fgets(string,254,fd);
+               pointer=strchr(string,';');
+
+               if (pointer!=NULL)
+                       *pointer=0;
+
+               sscanf(string,"%f",&rotation);
+
+
+               /* Read azimuth (degrees) and corresponding
+                  normalized field radiation pattern amplitude
+                  (0.0 to 1.0) until EOF is reached. */
+
+               fgets(string,254,fd);
+               pointer=strchr(string,';');
+
+               if (pointer!=NULL)
+                       *pointer=0;
+
+               sscanf(string,"%f %f",&az, &amplitude);
+
+               do
+               {
+                       x=(int)rintf(az);
+
+                       if (x>=0 && x<=360 && fd!=NULL)
+                       {
+                               azimuth[x]+=amplitude;
+                               read_count[x]++;
+                       }
+
+                       fgets(string,254,fd);
+                       pointer=strchr(string,';');
+
+                       if (pointer!=NULL)
+                               *pointer=0;
+
+                       sscanf(string,"%f %f",&az, &amplitude);
+
+               } while (feof(fd)==0);
+
+               fclose(fd);
+
+
+               /* Handle 0=360 degree ambiguity */
+
+               if ((read_count[0]==0) && (read_count[360]!=0))
+               {
+                       read_count[0]=read_count[360];
+                       azimuth[0]=azimuth[360];
+               }
+
+               if ((read_count[0]!=0) && (read_count[360]==0))
+               {
+                       read_count[360]=read_count[0];
+                       azimuth[360]=azimuth[0];
+               }
+
+               /* Average pattern values in case more than
+                   one was read for each degree of azimuth. */
+
+               for (x=0; x<=360; x++)
+               {
+                       if (read_count[x]>1)
+                               azimuth[x]/=(float)read_count[x];
+               }
+
+               /* Interpolate missing azimuths
+                  to completely fill the array */
+
+               last_index=-1;
+               next_index=-1;
+
+               for (x=0; x<=360; x++)
+               {
+                       if (read_count[x]!=0)
+                       {
+                               if (last_index==-1)
+                                       last_index=x;
+                               else
+                                       next_index=x;
+                       }
+
+                       if (last_index!=-1 && next_index!=-1)
+                       {
+                               valid1=azimuth[last_index];
+                               valid2=azimuth[next_index];
+
+                               span=next_index-last_index;
+                               delta=(valid2-valid1)/(float)span;
+
+                               for (y=last_index+1; y<next_index; y++)
+                                       azimuth[y]=azimuth[y-1]+delta;
+
+                               last_index=y;
+                               next_index=-1;
+                       }
+               }
+
+               /* Perform azimuth pattern rotation
+                  and load azimuth_pattern[361] with
+                  azimuth pattern data in its final form. */
+
+               for (x=0; x<360; x++)
+               {
+                       y=x+(int)rintf(rotation);
+
+                       if (y>=360)
+                               y-=360;
+
+                       azimuth_pattern[y]=azimuth[x];
+               }
+
+               azimuth_pattern[360]=azimuth_pattern[0];
+
+               got_azimuth_pattern=255;
+       }
+
+       /* Read and process .el file */
+
+       fd=fopen(elfile,"r");
+
+       if (fd!=NULL)
+       {
+               for (x=0; x<=10000; x++)
+               {
+                       el_pattern[x]=0.0;
+                       read_count[x]=0;
+               }
+
+               /* Read mechanical tilt (degrees) and
+                  tilt azimuth in degrees measured
+                  clockwise from true North. */  
+
+               fgets(string,254,fd);
+               pointer=strchr(string,';');
+
+               if (pointer!=NULL)
+                       *pointer=0;
+
+               sscanf(string,"%f %f",&mechanical_tilt, &tilt_azimuth);
+
+               /* Read elevation (degrees) and corresponding
+                  normalized field radiation pattern amplitude
+                  (0.0 to 1.0) until EOF is reached. */
+
+               fgets(string,254,fd);
+               pointer=strchr(string,';');
+
+               if (pointer!=NULL)
+                       *pointer=0;
+
+               sscanf(string,"%f %f", &elevation, &amplitude);
+
+               while (feof(fd)==0)
+               {
+                       /* Read in normalized radiated field values
+                          for every 0.01 degrees of elevation between
+                          -10.0 and +90.0 degrees */
+
+                       x=(int)rintf(100.0*(elevation+10.0));
+
+                       if (x>=0 && x<=10000)
+                       {
+                               el_pattern[x]+=amplitude;
+                               read_count[x]++;
+                       }
+
+                       fgets(string,254,fd);
+                       pointer=strchr(string,';');
+
+                       if (pointer!=NULL)
+                               *pointer=0;
+
+                       sscanf(string,"%f %f", &elevation, &amplitude);
+               }
+
+               fclose(fd);
+
+               /* Average the field values in case more than
+                  one was read for each 0.01 degrees of elevation. */
+
+               for (x=0; x<=10000; x++)
+               {
+                       if (read_count[x]>1)
+                               el_pattern[x]/=(float)read_count[x];
+               }
+
+               /* Interpolate between missing elevations (if
+                  any) to completely fill the array and provide
+                  radiated field values for every 0.01 degrees of
+                  elevation. */
+
+               last_index=-1;
+               next_index=-1;
+
+               for (x=0; x<=10000; x++)
+               {
+                       if (read_count[x]!=0)
+                       {
+                               if (last_index==-1)
+                                       last_index=x;
+                               else
+                                       next_index=x;
+                       }
+
+                       if (last_index!=-1 && next_index!=-1)
+                       {
+                               valid1=el_pattern[last_index];
+                               valid2=el_pattern[next_index];
+
+                               span=next_index-last_index;
+                               delta=(valid2-valid1)/(float)span;
+
+                               for (y=last_index+1; y<next_index; y++)
+                                       el_pattern[y]=el_pattern[y-1]+delta;
+
+                               last_index=y;
+                               next_index=-1;
+                       }
+               }
+
+               /* Fill slant_angle[] array with offset angles based
+                  on the antenna's mechanical beam tilt (if any)
+                  and tilt direction (azimuth). */
+
+               if (mechanical_tilt==0.0)
+               {
+                       for (x=0; x<=360; x++)
+                               slant_angle[x]=0.0;
+               }
+
+               else
+               {
+                       tilt_increment=mechanical_tilt/90.0;
+
+                       for (x=0; x<=360; x++)
+                       {
+                               xx=(float)x;
+                               y=(int)rintf(tilt_azimuth+xx);
+
+                               while (y>=360)
+                                       y-=360;
+
+                               while (y<0)
+                                       y+=360;
+
+                               if (x<=180)
+                                       slant_angle[y]=-(tilt_increment*(90.0-xx));
+
+                               if (x>180)
+                                       slant_angle[y]=-(tilt_increment*(xx-270.0));
+                       }
+               }
+
+               slant_angle[360]=slant_angle[0];   /* 360 degree wrap-around */
+
+               for (w=0; w<=360; w++)
+               {
+                       tilt=slant_angle[w];
+
+                       /** Convert tilt angle to
+                           an array index offset **/
+
+                       y=(int)rintf(100.0*tilt);
+
+                       /* Copy shifted el_pattern[10001] field
+                          values into elevation_pattern[361][1001]
+                          at the corresponding azimuth, downsampling
+                          (averaging) along the way in chunks of 10. */
+
+                       for (x=y, z=0; z<=1000; x+=10, z++)
+                       {
+                               for (sum=0.0, a=0; a<10; a++)
+                               {
+                                       b=a+x;
+
+                                       if (b>=0 && b<=10000)
+                                               sum+=el_pattern[b];
+                                       if (b<0)
+                                               sum+=el_pattern[0];
+                                       if (b>10000)
+                                               sum+=el_pattern[10000];
+                               }
+
+                               elevation_pattern[w][z]=sum/10.0;
+                       }
+               }
+
+               got_elevation_pattern=255;
+       }
+
+       for (x=0; x<=360; x++)
+       {
+               for (y=0; y<=1000; y++)
+               {
+                       if (got_elevation_pattern)
+                               elevation=elevation_pattern[x][y];
+                       else
+                               elevation=1.0;
+
+                       if (got_azimuth_pattern)
+                               az=azimuth_pattern[x];
+                       else
+                               az=1.0;
+
+                       LR.antenna_pattern[x][y]=az*elevation;
+               }
+       }
+}
+
 int LoadSDF_SDF(char *name)
 {
        /* This function reads uncompressed SPLAT Data Files (.sdf)
@@ -925,9 +1413,10 @@ int LoadSDF_SDF(char *name)
           quadrangle limits are stored in the first available
           dem[] structure. */
 
-       int x, y, data, indx, minlat, minlon, maxlat, maxlon;
-       char found, free_slot=0, line[20], sdf_file[255], path_plus_name[255];
-       FILE *fd;
+       int     x, y, data, indx, minlat, minlon, maxlat, maxlon;
+       char    found, free_slot=0, line[20], sdf_file[255],
+               path_plus_name[255];
+       FILE    *fd;
 
        for (x=0; name[x]!='.' && name[x]!=0 && x<250; x++)
                sdf_file[x]=name[x];
@@ -1149,10 +1638,10 @@ int LoadSDF_BZ(char *name)
           maximum and minimum elevations, and quadrangle limits are
           stored in the first available dem[] structure. */
 
-       int x, y, data, indx, minlat, minlon, maxlat, maxlon;
-       char found, free_slot=0, sdf_file[255], path_plus_name[255];
-       FILE *fd;
-       BZFILE *bzfd;
+       int     x, y, data, indx, minlat, minlon, maxlat, maxlon;
+       char    found, free_slot=0, sdf_file[255], path_plus_name[255];
+       FILE    *fd;
+       BZFILE  *bzfd;
 
        for (x=0; name[x]!='.' && name[x]!=0 && x<247; x++)
                sdf_file[x]=name[x];
@@ -1299,9 +1788,11 @@ int LoadSDF_BZ(char *name)
                        fflush(stdout);
                        return 1;
                }
+
                else
                        return -1;
        }
+
        else
                return 0;
 }
@@ -1317,9 +1808,9 @@ char LoadSDF(char *name)
           exists for the region requested, and that the region
           requested must be entirely over water. */
 
-       int x, y, indx, minlat, minlon, maxlat, maxlon;
-       char found, free_slot=0;
-       int  return_value=-1;
+       int     x, y, indx, minlat, minlon, maxlat, maxlon;
+       char    found, free_slot=0;
+       int     return_value=-1;
 
        /* Try to load an uncompressed SDF first. */
 
@@ -1448,10 +1939,10 @@ void LoadCities(char *filename)
           the locations and names of the cities and site locations
           read on topographic maps generated by SPLAT! */
 
-       int x, y, z;
-       char input[80], str[3][80];
-       struct site city_site;
-       FILE *fd=NULL;
+       int     x, y, z;
+       char    input[80], str[3][80];
+       struct  site city_site;
+       FILE    *fd=NULL;
 
        fd=fopen(filename,"r");
 
@@ -1496,45 +1987,185 @@ void LoadCities(char *filename)
                fprintf(stdout,"Done!\n");
                fflush(stdout);
        }
+
        else
                fprintf(stderr,"*** ERROR: \"%s\": not found!\n",filename);
 }
 
-void LoadBoundaries(char *filename)
+void LoadUDT(char *filename)
 {
-       /* This function reads Cartographic Boundary Files available from
-          the U.S. Census Bureau, and plots the data contained in those
-          files on the PPM Map generated by SPLAT!.  Such files contain
-          the coordinates that describe the boundaries of cities,
-          counties, and states. */
-
-       int x;
-       double lat0, lon0, lat1, lon1;
-       char string[80];
-       struct site source, destination;
-       FILE *fd=NULL;
+       /* This function reads a file containing User-Defined Terrain
+          features for their addition to the digital elevation model
+          data used by SPLAT!.  Elevations in the UDT file are evaluated
+          and then copied into a temporary file under /tmp.  Then the
+          contents of the temp file are scanned, and if found to be unique,
+          are added to the ground elevations described by the digital
+          elevation data already loaded into memory. */
+
+       int     i, x, y, z, fd=0;
+       char    input[80], str[3][80], tempname[15], *pointer=NULL;
+       double  latitude, longitude, height, templat, templon,
+               tempheight, one_pixel;
+       FILE    *fd1=NULL, *fd2=NULL;
+
+       strcpy(tempname,"/tmp/XXXXXX\0");
+       one_pixel=1.0/1200.0;
 
-       fd=fopen(filename,"r");
+       fd1=fopen(filename,"r");
 
-       if (fd!=NULL)
+       if (fd1!=NULL)
        {
-               fgets(string,78,fd);
+               fd=mkstemp(tempname);
+               fd2=fopen(tempname,"w");
+
+               fgets(input,78,fd1);
+
+               pointer=strchr(input,';');
+
+               if (pointer!=NULL)
+                       *pointer=0;
 
                fprintf(stdout,"Reading \"%s\"... ",filename);
                fflush(stdout);
 
-               do
+               while (feof(fd1)==0)
                {
-                       fgets(string,78,fd);
-                       sscanf(string,"%lf %lf", &lon0, &lat0);
-                       fgets(string,78,fd);
+                       /* Parse line for latitude, longitude, height */
 
-                       do
+                       for (x=0, y=0, z=0; x<78 && input[x]!=0 && z<3; x++)
                        {
-                               sscanf(string,"%lf %lf", &lon1, &lat1);
-
-                               lon0=fabs(lon0);
-                               lon1=fabs(lon1);
+                               if (input[x]!=',' && y<78)
+                               {
+                                       str[z][y]=input[x];
+                                       y++;
+                               }
+
+                               else
+                               {
+                                       str[z][y]=0;
+                                       z++;
+                                       y=0;
+                               }
+                       }
+
+                       latitude=ReadBearing(str[0]);
+                       longitude=ReadBearing(str[1]);
+
+                       /* Remove <CR> and/or <LF> from antenna height string */
+
+                       for (i=0; str[2][i]!=13 && str[2][i]!=10 && str[2][i]!=0; i++);
+
+                       str[2][i]=0;
+
+                       /* The terrain feature may be expressed in either
+                          feet or meters.  If the letter 'M' or 'm' is
+                          discovered in the string, then this is an
+                          indication that the value given is expressed
+                          in meters.  Otherwise the height is interpreted
+                          as being expressed in feet.  */
+
+                       for (i=0; str[2][i]!='M' && str[2][i]!='m' && str[2][i]!=0 && i<48; i++);
+
+                       if (str[2][i]=='M' || str[2][i]=='m')
+                       {
+                               str[2][i]=0;
+                               height=rint(atof(str[2]));
+                       }
+
+                       else
+                       {
+                               str[2][i]=0;
+                               height=rint(3.28084*atof(str[2]));
+                       }
+
+                       if (height>0.0)
+                               fprintf(fd2,"%f, %f, %f\n",latitude, longitude, height);
+
+                       fgets(input,78,fd1);
+
+                       pointer=strchr(input,';');
+
+                       if (pointer!=NULL)
+                               *pointer=0;
+               }
+
+               fclose(fd1);
+               fclose(fd2);
+               close(fd);
+
+               fprintf(stdout,"Done!\n");
+               fflush(stdout);
+
+               fd1=fopen(tempname,"r");
+               fd2=fopen(tempname,"r");
+
+               fscanf(fd1,"%lf, %lf, %lf", &latitude, &longitude, &height);
+
+               for (y=0; feof(fd1)==0; y++)
+               {
+                       rewind(fd2);
+
+                       fscanf(fd2,"%lf, %lf, %lf", &templat, &templon, &tempheight);
+
+                       for (x=0, z=0; feof(fd2)==0; x++)
+                       {
+                               if (x>y)
+                                       if (fabs(latitude-templat)<=one_pixel && fabs(longitude-templon)<=one_pixel)
+                                               z=1;
+
+                               fscanf(fd2,"%lf, %lf, %lf", &templat, &templon, &tempheight);
+                       }
+
+                       if (z==0)
+                               AddElevation(latitude, longitude, height);
+
+                       fscanf(fd1,"%lf, %lf, %lf", &latitude, &longitude, &height);
+               }
+
+               fclose(fd1);
+               fclose(fd2);
+               unlink(tempname);
+       }
+
+       else
+               fprintf(stderr,"*** ERROR: \"%s\": not found!\n",filename);
+}
+
+void LoadBoundaries(char *filename)
+{
+       /* This function reads Cartographic Boundary Files available from
+          the U.S. Census Bureau, and plots the data contained in those
+          files on the PPM Map generated by SPLAT!.  Such files contain
+          the coordinates that describe the boundaries of cities,
+          counties, and states. */
+
+       int     x;
+       double  lat0, lon0, lat1, lon1;
+       char    string[80];
+       struct  site source, destination;
+       FILE    *fd=NULL;
+
+       fd=fopen(filename,"r");
+
+       if (fd!=NULL)
+       {
+               fgets(string,78,fd);
+
+               fprintf(stdout,"Reading \"%s\"... ",filename);
+               fflush(stdout);
+
+               do
+               {
+                       fgets(string,78,fd);
+                       sscanf(string,"%lf %lf", &lon0, &lat0);
+                       fgets(string,78,fd);
+
+                       do
+                       {
+                               sscanf(string,"%lf %lf", &lon1, &lat1);
+
+                               lon0=fabs(lon0);
+                               lon1=fabs(lon1);
 
                                source.lat=lat0;
                                source.lon=lon0;
@@ -1575,12 +2206,12 @@ void ReadLRParm(char *txsite_filename)
           is not found, then the file "splat.lrp" is read from the
           current working directory.  Failure to load this file will
           result in the default parameters hard coded into this
-          being used and written to "splat.lrp". */
+          function to be used and written to "splat.lrp". */
 
-       double din;
-       char filename[255], lookup[256], string[80];
-       int iin, ok=0, x;
-       FILE *fd=NULL, *outfile=NULL;
+       double  din;
+       char    filename[255], string[80], *pointer=NULL;
+       int     iin, ok=0, x;
+       FILE    *fd=NULL, *outfile=NULL;
 
        /* Default parameters in case things go bad */
 
@@ -1605,20 +2236,6 @@ void ReadLRParm(char *txsite_filename)
        filename[x+3]='p';
        filename[x+4]=0;
 
-       /* Small lookup table to parse file, pass
-          numeric data, and ignore comments. */
-
-       for (x=0; x<=255; x++)
-               lookup[x]=0;
-
-       /* Valid characters */
-
-       for (x=48; x<=57; x++)
-               lookup[x]=x;
-
-       lookup[32]=32;
-       lookup[46]='.';
-
        fd=fopen(filename,"r");
 
        if (fd==NULL)
@@ -1633,10 +2250,10 @@ void ReadLRParm(char *txsite_filename)
        {
                fgets(string,80,fd);
 
-               for (x=0; lookup[(int)string[x]] && x<20; x++)
-                       string[x]=lookup[(int)string[x]];
+               pointer=strchr(string,';');
 
-               string[x]=0;
+               if (pointer!=NULL)
+                       *pointer=0;
 
                ok=sscanf(string,"%lf", &din);
 
@@ -1646,10 +2263,10 @@ void ReadLRParm(char *txsite_filename)
 
                        fgets(string,80,fd);
 
-                       for (x=0; lookup[(int)string[x]] && x<20; x++)
-                               string[x]=lookup[(int)string[x]];
+                       pointer=strchr(string,';');
 
-                       string[x]=0;
+                       if (pointer!=NULL)
+                               *pointer=0;
 
                        ok=sscanf(string,"%lf", &din);
                }
@@ -1660,10 +2277,10 @@ void ReadLRParm(char *txsite_filename)
 
                        fgets(string,80,fd);
 
-                       for (x=0; lookup[(int)string[x]] && x<20; x++)
-                               string[x]=lookup[(int)string[x]];
+                       pointer=strchr(string,';');
 
-                       string[x]=0;
+                       if (pointer!=NULL)
+                               *pointer=0;
 
                        ok=sscanf(string,"%lf", &din);
                }
@@ -1674,10 +2291,10 @@ void ReadLRParm(char *txsite_filename)
 
                        fgets(string,80,fd);
 
-                       for (x=0; lookup[(int)string[x]] && x<20; x++)
-                               string[x]=lookup[(int)string[x]];
+                       pointer=strchr(string,';');
 
-                       string[x]=0;
+                       if (pointer!=NULL)
+                               *pointer=0;
 
                        ok=sscanf(string,"%lf", &din);
                }
@@ -1688,10 +2305,10 @@ void ReadLRParm(char *txsite_filename)
 
                        fgets(string,80,fd);
 
-                       for (x=0; lookup[(int)string[x]] && x<20; x++)
-                               string[x]=lookup[(int)string[x]];
+                       pointer=strchr(string,';');
 
-                       string[x]=0;
+                       if (pointer!=NULL)
+                               *pointer=0;
 
                        ok=sscanf(string,"%d", &iin);
                }
@@ -1702,10 +2319,10 @@ void ReadLRParm(char *txsite_filename)
 
                        fgets(string,80,fd);
 
-                       for (x=0; lookup[(int)string[x]] && x<20; x++)
-                               string[x]=lookup[(int)string[x]];
+                       pointer=strchr(string,';');
 
-                       string[x]=0;
+                       if (pointer!=NULL)
+                               *pointer=0;
 
                        ok=sscanf(string,"%d", &iin);
                }
@@ -1716,10 +2333,10 @@ void ReadLRParm(char *txsite_filename)
 
                        fgets(string,80,fd);
 
-                       for (x=0; lookup[(int)string[x]] && x<20; x++)
-                               string[x]=lookup[(int)string[x]];
+                       pointer=strchr(string,';');
 
-                       string[x]=0;
+                       if (pointer!=NULL)
+                               *pointer=0;
 
                        ok=sscanf(string,"%lf", &din);
                }
@@ -1730,18 +2347,21 @@ void ReadLRParm(char *txsite_filename)
 
                        fgets(string,80,fd);
 
-                       for (x=0; lookup[(int)string[x]] && x<20; x++)
-                               string[x]=lookup[(int)string[x]];
+                       pointer=strchr(string,';');
 
-                       string[x]=0;
+                       if (pointer!=NULL)
+                               *pointer=0;
 
                        ok=sscanf(string,"%lf", &din);
                }
 
+               fclose(fd);
+
                if (ok)
+               {
                        LR.rel=din;
-
-               fclose(fd);
+                       LoadPAT(filename);
+               }
        } 
 
        if (fd==NULL)
@@ -1752,21 +2372,13 @@ void ReadLRParm(char *txsite_filename)
                outfile=fopen("splat.lrp","w");
 
                fprintf(outfile,"%.3f\t; Earth Dielectric Constant (Relative permittivity)\n",LR.eps_dielect);
-
                fprintf(outfile,"%.3f\t; Earth Conductivity (Siemens per meter)\n", LR.sgm_conductivity);
-
                fprintf(outfile,"%.3f\t; Atmospheric Bending Constant (N-Units)\n",LR.eno_ns_surfref);
-
                fprintf(outfile,"%.3f\t; Frequency in MHz (20 MHz to 20 GHz)\n", LR.frq_mhz);
-
                fprintf(outfile,"%d\t; Radio Climate\n",LR.radio_climate);
-
                fprintf(outfile,"%d\t; Polarization (0 = Horizontal, 1 = Vertical)\n", LR.pol);
-
                fprintf(outfile,"%.2f\t; Fraction of situations\n",LR.conf);
-
                fprintf(outfile, "%.2f\t; Fraction of time\n",LR.rel);
-
                fprintf(outfile,"\nPlease consult SPLAT! documentation for the meaning and use of this data.\n");
 
                fclose(outfile);
@@ -1778,98 +2390,6 @@ void ReadLRParm(char *txsite_filename)
                fprintf(stderr,"Longley-Rice default parameters have been assumed for this analysis.\n");
 }
 
-struct site los(struct site source, struct site destination)
-{
-       /* This function determines whether a line-of-sight path
-          unobstructed by terrain exists between source (transmitter)
-          and destination (receiver) based on the geographical
-          locations of the two sites, their respective antenna
-          heights above ground, and the terrain between them.
-          A site structure is returned upon completion.  If the
-          first character of site.name is ' ', then a clear path
-          exists between source and destination.  If the first
-          character is '*', then an obstruction exists, and the
-          site.lat and site.lon elements of the structure provide
-          the geographical location of the obstruction. */
-          
-       int x;
-       char block;
-       struct site test, blockage;
-       register double distance, tx_alt, rx_alt,
-                cos_xmtr_angle, cos_test_angle, test_alt;
-
-       ReadPath(source,destination);
-
-       distance=5280.0*Distance(source,destination);
-       tx_alt=earthradius+source.alt+GetElevation(source);
-       rx_alt=earthradius+destination.alt+GetElevation(destination);
-
-       /* Elevation angle of the xmtr (source) as seen by the rcvr */
-
-       cos_xmtr_angle=((rx_alt*rx_alt)+(distance*distance)-(tx_alt*tx_alt))/(2.0*rx_alt*distance);
-
-       /* Determine the elevation angle of each discrete location
-          along the path between the receiver and transmitter.
-
-          Since obstructions are more likely due to terrain effects
-          closest to the receiver rather than farther away, we start
-          looking for potential obstructions from the receiver's
-          location, and work our way towards the transmitter.
-          This loop is broken when the first obstruction is
-          detected.  If we can travel all the way to the transmitter
-          without detecting an obstruction, then we have a clear
-          unobstructed path between transmitter and receiver. */
-
-       for (x=path.length-1, block=0; x>0 && block==0; x--)
-       {
-               /* Build a structure for each test
-                  point along the path to be surveyed. */
-
-               test.lat=path.lat[x];
-               test.lon=path.lon[x];
-
-               /* Measure the distance between the
-                  test point and the receiver locations */
-
-               distance=5280.0*Distance(test,destination);
-               test_alt=earthradius+path.elevation[x];
-
-               /* Determine the cosine of the elevation of the test
-                  point as seen from the location of the receiver */
-
-               cos_test_angle=((rx_alt*rx_alt)+(distance*distance)-(test_alt*test_alt))/(2.0*rx_alt*distance);
-
-               /* If the elevation angle to the test point (as seen from
-                  the receiver) is greater than the elevation angle to the
-                  transmitter (as seen by the receiver), then we have a
-                  path obstructed by terrain.  Note: Since we're comparing
-                  the cosines of these angles rather than the angles
-                  themselves (eliminating the call to acos() saves
-                  considerable time), the following "if" statement is
-                  reversed from what it would normally be if the angles
-                  were compared. */
-
-               if (cos_xmtr_angle>cos_test_angle)
-               {
-                       block=1;
-                       blockage.lat=path.lat[x];
-                       blockage.lon=path.lon[x];
-                       blockage.alt=path.elevation[x];
-                       blockage.name[0]='*';
-               }
-       }
-
-       if (block==0)
-       {
-               blockage.lat=0.0;
-               blockage.lon=0.0;
-               blockage.alt=0.0;
-               blockage.name[0]=' ';
-       }
-
-       return blockage;
-}
-
 void PlotPath(struct site source, struct site destination, char mask_value)
 {
        /* This function analyzes the path between the source and
@@ -1928,39 +2448,146 @@ void PlotPath(struct site source, struct site destination, char mask_value)
        }
 }
 
-void PlotLRPath(struct site source, struct site destination)
+void PlotLRPath(struct site source, struct site destination, FILE *fd)
 {
-       /* This function plots the RF signal path loss
-          between source and destination points based
-          on the Longley-Rice propagation model. */
-
-       char strmode[100];
-       int x, y, errnum;
-       double loss;
+       /* This function plots the RF path loss between source and
+          destination points based on the Longley-Rice propagation
+          model, taking into account antenna pattern data, if available. */
+
+       char    block=0, strmode[100];
+       int     x, y, errnum;
+       double  loss, azimuth, pattern=0.0, 
+               source_alt, dest_alt, source_alt2, dest_alt2,
+               cos_xmtr_angle, cos_test_angle=0.0, test_alt,
+               elevation, distance=0.0,
+               four_thirds_earth;
+       struct  site temp;
 
        ReadPath(source,destination);
-       elev_l[1]=0.04*METERS_PER_MILE;
+
+       four_thirds_earth=EARTHRADIUS*(4.0/3.0);
+
+       /* Copy elevations along path into the elev_l[] array. */
 
        for (x=0; x<path.length; x++)
-               elev_l[x+2]=path.elevation[x]*METERS_PER_FOOT;  
-        
-       for (y=0; y<path.length; y++)
+               elev_l[x+2]=path.elevation[x]*METERS_PER_FOOT;
+
+       /* Since the only energy the Longley-Rice model considers
+          reaching the destination is based on what is scattered
+          or deflected from the first obstruction along the path,
+          we first need to find the location and elevation angle
+          of that first obstruction (if it exists).  This is done
+          using a 4/3rds Earth radius to match the model used by
+          Longley-Rice.  This information is required for properly
+          integrating the antenna's elevation pattern into the
+          calculation for overall path loss.  (Using path.length-1
+          below avoids a Longley-Rice model error from occuring at
+          the destination point.) */
+
+       for (y=2; (y<(path.length-1) && path.distance[y]<=max_range); y++)
        {
-               /* Test this point only if it has not already been tested. */
+               /* Process this point only if it
+                  has not already been processed. */
 
-               if (GetMask(path.lat[y],path.lon[y])==0 && 0.04*y<=max_range)
+               if (GetMask(path.lat[y],path.lon[y])==0)
                {
-                       elev_l[0]=y+1;
+                       distance=5280.0*path.distance[y];
+                       source_alt=four_thirds_earth+source.alt+path.elevation[0];
+                       dest_alt=four_thirds_earth+destination.alt+path.elevation[y];
+                       dest_alt2=dest_alt*dest_alt;
+                       source_alt2=source_alt*source_alt;
+
+                       /* Calculate the cosine of the elevation of
+                          the receiver as seen by the transmitter. */
+
+                       cos_xmtr_angle=((source_alt2)+(distance*distance)-(dest_alt2))/(2.0*source_alt*distance);
+
+                       if (got_elevation_pattern || fd!=NULL)
+                       {
+                               /* If no antenna elevation pattern is available, and
+                                  no output file is designated, the following code
+                                  that determines the elevation angle to the first
+                                  obstruction along the path is bypassed. */
+
+                               for (x=2, block=0; x<y && block==0; x++)
+                               {
+                                       distance=5280.0*(path.distance[y]-path.distance[x]);
+                                       test_alt=four_thirds_earth+path.elevation[x];
+
+                                       /* Calculate the cosine of the elevation
+                                          angle of the terrain (test point)
+                                          as seen by the transmitter. */
+
+                                       cos_test_angle=((source_alt2)+(distance*distance)-(test_alt*test_alt))/(2.0*source_alt*distance);
+
+                                       /* Compare these two angles to determine if
+                                          an obstruction exists.  Since we're comparing
+                                          the cosines of these angles rather than
+                                          the angles themselves, the sense of the
+                                          following "if" statement is reversed from
+                                          what it would be if the angles themselves
+                                          were compared. */
+
+                                       if (cos_xmtr_angle>cos_test_angle)
+                                               block=1;
+                               }
+
+                               /* At this point, we have the elevation angle
+                                  to the first obstruction (if it exists). */
+                       }
+
+                       /* Determine attenuation for each point along the
+                          path using Longley-Rice's point_to_point mode
+                          starting at y=2 (number_of_points = 1), the
+                          shortest distance terrain can play a role in
+                          path loss. */
+                       elev_l[0]=y-1;  /* (number of points - 1) */
+
+                       /* Distance between elevation samples */
+                       elev_l[1]=METERS_PER_MILE*(path.distance[y]-path.distance[y-1]);
 
                        point_to_point(elev_l,source.alt*METERS_PER_FOOT, 
-                       destination.alt*METERS_PER_FOOT,
-                       LR.eps_dielect, LR.sgm_conductivity, LR.eno_ns_surfref,
-                       LR.frq_mhz, LR.radio_climate, LR.pol, LR.conf, LR.rel,
-                       loss, strmode, errnum);
+                       destination.alt*METERS_PER_FOOT, LR.eps_dielect,
+                       LR.sgm_conductivity, LR.eno_ns_surfref, LR.frq_mhz,
+                       LR.radio_climate, LR.pol, LR.conf, LR.rel, loss,
+                       strmode, errnum);
+
+                       if (block)
+                               elevation=((acos(cos_test_angle))/deg2rad)-90.0;
+
+                       else
+                               elevation=((acos(cos_xmtr_angle))/deg2rad)-90.0;
+
+                       temp.lat=path.lat[y];
+                       temp.lon=path.lon[y];
+
+                       azimuth=(Azimuth(source,temp));
+
+                       if (fd!=NULL)
+                       {
+                               /* Write path loss data to output file */
+
+                               fprintf(fd,"%.7f, %.7f, %.3f, %.3f, %.2f\n",path.lat[y], path.lon[y], azimuth, elevation, loss);
+                       }
+
+                       /* Integrate the antenna's radiation
+                          pattern into the overall path loss. */
 
-                       /* Note: PASS BY REFERENCE ... loss and errnum are
-                          passed by reference, and are only used in this
-                          file by this function */
+                       x=(int)rint(10.0*(10.0-elevation));
+
+                       if (x>=0 && x<=1000)
+                       {
+                               azimuth=rint(azimuth);
+
+                               pattern=(double)LR.antenna_pattern[(int)azimuth][x];
+
+                               if (pattern!=0.0)
+                               {
+                                       pattern=20.0*log10(pattern);
+                                       loss-=pattern;
+                               }
+                       }
 
                        if (loss>225.0)
                                loss=225.0;
@@ -1975,7 +2602,7 @@ void PlotLRPath(struct site source, struct site destination)
                        OrMask(path.lat[y],path.lon[y],((unsigned char)(loss))<<3);
                }
 
-               else if (GetMask(path.lat[y],path.lon[y])==0 && 0.04*y>max_range)
+               else if (GetMask(path.lat[y],path.lon[y])==0 && path.distance[y]>max_range)
                        OrMask(path.lat[y],path.lon[y],1);
        }
 }
@@ -2011,7 +2638,7 @@ void PlotCoverage(struct site source, double altitude)
 
        count=0;        
 
-       fprintf(stdout,"\nComputing line-of-sight coverage of %s with an RX antenna\nat %.2f feet AGL:\n\n 0%c to  25%c ",source.name,altitude,37,37);
+       fprintf(stdout,"\nComputing line-of-sight coverage of %s with an RX antenna\nat %.2f %s AGL:\n\n 0%c to  25%c ",source.name,metric?altitude*METERS_PER_FOOT:altitude,metric?"meters":"feet",37,37);
        fflush(stdout);
 
        /* 18.75=1200 pixels/degree divided by 64 loops
@@ -2151,7 +2778,7 @@ void PlotCoverage(struct site source, double altitude)
        }
 }
 
-void PlotLRMap(struct site source, double altitude)
+void PlotLRMap(struct site source, double altitude, char *plo_filename)
 {
        /* This function performs a 360 degree sweep around the
           transmitter site (source location), and plots the
@@ -2166,6 +2793,7 @@ void PlotLRMap(struct site source, double altitude)
        struct site edge;
        float lat, lon, one_pixel;
        unsigned char symbol[4], x;
+       FILE *fd=NULL;
 
        one_pixel=1.0/1200.0;
 
@@ -2177,9 +2805,20 @@ void PlotLRMap(struct site source, double altitude)
        count=0;
 
        fprintf(stdout,"\nComputing Longley-Rice coverage of %s ", source.name);
-       fprintf(stdout,"out to a radius\nof %.2f miles with an RX antenna at %.2f feet AGL:\n\n 0%c to  25%c ",max_range,altitude,37,37);
+
+       fprintf(stdout,"out to a radius\nof %.2f %s with an RX antenna at %.2f %s AGL:\n\n 0%c to  25%c ",metric?max_range*KM_PER_MILE:max_range,metric?"kilometers":"miles",metric?altitude*METERS_PER_FOOT:altitude,metric?"meters":"feet",37,37);
        fflush(stdout);
 
+       if (plo_filename[0]!=0)
+               fd=fopen(plo_filename,"wb");
+
+       if (fd!=NULL)
+       {
+               /* Write header information to output file */
+
+               fprintf(fd,"%d, %d\t; max_west, min_west\n%d, %d\t; max_north, min_north\n",max_west, min_west, max_north, min_north);
+       }
+
        /* 18.75=1200 pixels/degree divided by 64 loops
           per progress indicator symbol (.oOo) printed. */
 
@@ -2194,7 +2833,7 @@ void PlotLRMap(struct site source, double altitude)
                edge.lon=lon;
                edge.alt=altitude;
 
-               PlotLRPath(source,edge);
+               PlotLRPath(source,edge,fd);
                count++;
 
                if (count==z) 
@@ -2222,7 +2861,7 @@ void PlotLRMap(struct site source, double altitude)
                edge.lon=min_west;
                edge.alt=altitude;
 
-               PlotLRPath(source,edge);
+               PlotLRPath(source,edge,fd);
                count++;
 
                if (count==z) 
@@ -2253,7 +2892,7 @@ void PlotLRMap(struct site source, double altitude)
                edge.lon=lon;
                edge.alt=altitude;
 
-               PlotLRPath(source,edge);
+               PlotLRPath(source,edge,fd);
                count++;
 
                if (count==z)
@@ -2281,7 +2920,7 @@ void PlotLRMap(struct site source, double altitude)
                edge.lon=max_west;
                edge.alt=altitude;
 
-               PlotLRPath(source,edge);
+               PlotLRPath(source,edge,fd);
                count++;
 
                if (count==z)
@@ -2297,11 +2936,14 @@ void PlotLRMap(struct site source, double altitude)
                }
        }
 
+       if (fd!=NULL)
+               fclose(fd);
+
        fprintf(stdout,"\nDone!\n");
        fflush(stdout);
 }
 
-void WritePPM(char *filename)
+void WritePPM(char *filename, unsigned char geo)
 {
        /* This function generates a topographic map in Portable Pix Map
           (PPM) format based on logarithmically scaled topology data,
@@ -2310,7 +2952,7 @@ void WritePPM(char *filename)
           from its representation in dem[][] so that north points
           up and east points right in the image generated. */
 
-       char mapfile[255];
+       char mapfile[255], geofile[255];
        unsigned char found, mask;
        unsigned width, height, output;
        int indx, x, y, x0=0, y0=0, minlat, minlon;
@@ -2329,13 +2971,35 @@ void WritePPM(char *filename)
        else
        {
                for (x=0; filename[x]!='.' && filename[x]!=0 && x<250; x++)
+               {
                        mapfile[x]=filename[x];
+                       geofile[x]=filename[x];
+               }
 
                mapfile[x]='.';
+               geofile[x]='.';
                mapfile[x+1]='p';
+               geofile[x+1]='g';
                mapfile[x+2]='p';
+               geofile[x+2]='e';
                mapfile[x+3]='m';
+               geofile[x+3]='o';
                mapfile[x+4]=0;
+               geofile[x+4]=0;
+       }
+
+       if (geo)
+       {
+               fd=fopen(geofile,"wb");
+
+               fprintf(fd,"FILENAME\t%s\n",mapfile);
+               fprintf(fd,"#\t\tX\tY\tLong\t\tLat\n");
+               fprintf(fd,"TIEPOINT\t0\t0\t%d.000\t\t%d.000\n",(max_west<180?-max_west:360-max_west),max_north);
+               fprintf(fd,"TIEPOINT\t%u\t%u\t%d.000\t\t%d.000\n",width-1,height-1,(min_west<180?-min_west:360-min_west),min_north);
+               fprintf(fd,"IMAGESIZE\t%u\t%u\n",width,height);
+               fprintf(fd,"#\n# Auto Generated by SPLAT! v%s\n#\n",splat_version);
+
+               fclose(fd);
        }
 
        fd=fopen(mapfile,"wb");
@@ -2482,7 +3146,7 @@ void WritePPM(char *filename)
        fflush(stdout);
 }
 
-void WritePPMLR(char *filename)
+void WritePPMLR(char *filename, unsigned char geo)
 {
        /* This function generates a topographic map in Portable Pix Map
           (PPM) format based on the content of flags held in the mask[][] 
@@ -2490,7 +3154,7 @@ void WritePPMLR(char *filename)
           90 degrees from its representation in dem[][] so that north
           points up and east points right in the image generated. */
 
-       char mapfile[255];
+       char mapfile[255], geofile[255];
        unsigned width, height, output;
        unsigned char found, mask, cityorcounty;
        int indx, x, y, t, t2, x0, y0, minlat, minlon, loss;
@@ -2509,13 +3173,35 @@ void WritePPMLR(char *filename)
        else
        {
                for (x=0; filename[x]!='.' && filename[x]!=0 && x<250; x++)
+               {
                        mapfile[x]=filename[x];
+                       geofile[x]=filename[x];
+               }
 
                mapfile[x]='.';
+               geofile[x]='.';
                mapfile[x+1]='p';
+               geofile[x+1]='g';
                mapfile[x+2]='p';
+               geofile[x+2]='e';
                mapfile[x+3]='m';
+               geofile[x+3]='o';
                mapfile[x+4]=0;
+               geofile[x+4]=0;
+       }
+
+       if (geo)
+       {
+               fd=fopen(geofile,"wb");
+
+               fprintf(fd,"FILENAME\t%s\n",mapfile);
+               fprintf(fd,"#\t\tX\tY\tLong\t\tLat\n");
+               fprintf(fd,"TIEPOINT\t0\t0\t%d.000\t\t%d.000\n",(max_west<180?-max_west:360-max_west),max_north);
+               fprintf(fd,"TIEPOINT\t%u\t%u\t%d.000\t\t%.3f\n",width-1,height+29,(min_west<180?-min_west:360-min_west),(double)(min_north-0.025));
+               fprintf(fd,"IMAGESIZE\t%u\t%u\n",width,height+30);
+               fprintf(fd,"#\n# Auto Generated by SPLAT! v%s\n#\n",splat_version);
+
+               fclose(fd);
        }
 
        fd=fopen(mapfile,"wb");
@@ -2554,7 +3240,6 @@ void WritePPMLR(char *filename)
                                {
                                        /* Text Labels - Black or Red */
 
-                                       /* if ((mask&120) && (loss<=maxdB)) */
                                        if ((mask&120) && (loss<=90))
                                                fprintf(fd,"%c%c%c",0,0,0);
                                        else
@@ -2797,18 +3482,24 @@ void GraphTerrain(struct site source, struct site destination, char *name)
           and destination locations.  "filename" is the name assigned
           to the output file generated by gnuplot.  The filename extension
           is used to set gnuplot's terminal setting and output file type.
-          If no extension is found, .gif is assumed.  */
+          If no extension is found, .png is assumed.  */
 
-       int x, y, z;
-       char filename[255], term[15], ext[15];
-       FILE *fd=NULL;
+       int     x, y, z;
+       char    filename[255], term[30], ext[15];
+       FILE    *fd=NULL;
 
        ReadPath(destination,source);
 
        fd=fopen("profile.gp","wb");
 
        for (x=0; x<path.length; x++)
-               fprintf(fd,"%f\t%f\n",path.distance[x],path.elevation[x]);
+       {
+               if (metric)
+                       fprintf(fd,"%f\t%f\n",KM_PER_MILE*path.distance[x],METERS_PER_FOOT*path.elevation[x]);
+
+               else
+                       fprintf(fd,"%f\t%f\n",path.distance[x],path.elevation[x]);
+       }
 
        fclose(fd);
 
@@ -2817,8 +3508,8 @@ void GraphTerrain(struct site source, struct site destination, char *name)
                /* Default filename and output file type */
 
                strncpy(filename,"profile\0",8);
-               strncpy(term,"gif\0",4);
-               strncpy(ext,"gif\0",4);
+               strncpy(term,"png\0",4);
+               strncpy(ext,"png\0",4);
        }
 
        else
@@ -2842,11 +3533,11 @@ void GraphTerrain(struct site source, struct site destination, char *name)
                }
 
                else
-               {       /* No extension -- Default is gif */
+               {       /* No extension -- Default is png */
 
                        filename[x]=0;
-                       strncpy(term,"gif\0",4);
-                       strncpy(ext,"gif\0",4);
+                       strncpy(term,"png\0",4);
+                       strncpy(ext,"png\0",4);
                }
        }
 
@@ -2857,7 +3548,7 @@ void GraphTerrain(struct site source, struct site destination, char *name)
                strncpy(ext,"ps\0",3);
 
        else if (strncmp(ext,"ps",2)==0)
-               strncpy(term,"postscript\0",11);
+               strncpy(term,"postscript enhanced color\0",26);
 
        fprintf(stdout,"Writing \"%s.%s\"...",filename,ext);
        fflush(stdout);
@@ -2865,10 +3556,24 @@ void GraphTerrain(struct site source, struct site destination, char *name)
        fd=fopen("splat.gp","w");
        fprintf(fd,"set grid\n");
        fprintf(fd,"set autoscale\n");
+       fprintf(fd,"set encoding iso_8859_1\n");
        fprintf(fd,"set term %s\n",term);
-       fprintf(fd,"set title \"SPLAT! Terrain Profile\"\n");
-       fprintf(fd,"set xlabel \"Distance Between %s and %s (miles)\"\n",destination.name,source.name);
-       fprintf(fd,"set ylabel \"Ground Elevation Above Sea Level (feet)\"\n");
+       fprintf(fd,"set title \"SPLAT! Terrain Profile Between %s and %s (%.2f%c Azimuth)\"\n",destination.name, source.name, Azimuth(destination,source),176);
+
+       if (metric)
+       {
+               fprintf(fd,"set xlabel \"Distance Between %s and %s (%.2f kilometers)\"\n",destination.name,source.name,KM_PER_MILE*Distance(source,destination));
+               fprintf(fd,"set ylabel \"Ground Elevation Above Sea Level (meters)\"\n");
+
+
+       }
+
+       else
+       {
+               fprintf(fd,"set xlabel \"Distance Between %s and %s (%.2f miles)\"\n",destination.name,source.name,Distance(source,destination));
+               fprintf(fd,"set ylabel \"Ground Elevation Above Sea Level (feet)\"\n");
+       }
+
        fprintf(fd,"set output \"%s.%s\"\n",filename,ext);
        fprintf(fd,"plot \"profile.gp\" title \"\" with lines\n");
        fclose(fd);
@@ -2894,13 +3599,13 @@ void GraphElevation(struct site source, struct site destination, char *name)
           and destination locations.  "filename" is the name assigned
           to the output file generated by gnuplot.  The filename extension
           is used to set gnuplot's terminal setting and output file type.
-          If no extension is found, .gif is assumed. */
+          If no extension is found, .png is assumed. */
 
-       int x, y, z;
-       char filename[255], term[15], ext[15];
-       double angle, refangle, maxangle=-90.0;
-       struct site remote;
-       FILE *fd=NULL, *fd2=NULL;
+       int     x, y, z;
+       char    filename[255], term[30], ext[15];
+       double  angle, refangle, maxangle=-90.0;
+       struct  site remote;
+       FILE    *fd=NULL, *fd2=NULL;
 
        ReadPath(destination,source);  /* destination=RX, source=TX */
        refangle=ElevationAngle(destination,source);
@@ -2914,15 +3619,34 @@ void GraphElevation(struct site source, struct site destination, char *name)
                remote.lon=path.lon[x];
                remote.alt=0.0;
                angle=ElevationAngle(destination,remote);
-               fprintf(fd,"%f\t%f\n",path.distance[x],angle);
-               fprintf(fd2,"%f\t%f\n",path.distance[x],refangle);
+
+               if (metric)
+               {
+                       fprintf(fd,"%f\t%f\n",KM_PER_MILE*path.distance[x],angle);
+                       fprintf(fd2,"%f\t%f\n",KM_PER_MILE*path.distance[x],refangle);
+               }
+
+               else
+               {
+                       fprintf(fd,"%f\t%f\n",path.distance[x],angle);
+                       fprintf(fd2,"%f\t%f\n",path.distance[x],refangle);
+               }
 
                if (angle>maxangle)
                        maxangle=angle;
        }
 
-       fprintf(fd,"%f\t%f\n",path.distance[path.length-1],refangle);
-       fprintf(fd2,"%f\t%f\n",path.distance[path.length-1],refangle);
+       if (metric)
+       {
+               fprintf(fd,"%f\t%f\n",KM_PER_MILE*path.distance[path.length-1],refangle);
+               fprintf(fd2,"%f\t%f\n",KM_PER_MILE*path.distance[path.length-1],refangle);
+       }
+
+       else
+       {
+               fprintf(fd,"%f\t%f\n",path.distance[path.length-1],refangle);
+               fprintf(fd2,"%f\t%f\n",path.distance[path.length-1],refangle);
+       }
 
        fclose(fd);
        fclose(fd2);
@@ -2932,8 +3656,8 @@ void GraphElevation(struct site source, struct site destination, char *name)
                /* Default filename and output file type */
 
                strncpy(filename,"profile\0",8);
-               strncpy(term,"gif\0",4);
-               strncpy(ext,"gif\0",4);
+               strncpy(term,"png\0",4);
+               strncpy(ext,"png\0",4);
        }
 
        else
@@ -2957,11 +3681,11 @@ void GraphElevation(struct site source, struct site destination, char *name)
                }
 
                else
-               {       /* No extension -- Default is gif */
+               {       /* No extension -- Default is png */
 
                        filename[x]=0;
-                       strncpy(term,"gif\0",4);
-                       strncpy(ext,"gif\0",4);
+                       strncpy(term,"png\0",4);
+                       strncpy(ext,"png\0",4);
                }
        }
 
@@ -2972,7 +3696,7 @@ void GraphElevation(struct site source, struct site destination, char *name)
                strncpy(ext,"ps\0",3);
 
        else if (strncmp(ext,"ps",2)==0)
-               strncpy(term,"postscript\0",11);
+               strncpy(term,"postscript enhanced color\0",26);
 
        fprintf(stdout,"Writing \"%s.%s\"...",filename,ext);
        fflush(stdout);
@@ -2981,12 +3705,19 @@ void GraphElevation(struct site source, struct site destination, char *name)
 
        fprintf(fd,"set grid\n");
        fprintf(fd,"set yrange [%2.3f to %2.3f]\n", (-fabs(refangle)-0.25), maxangle+0.25);
+       fprintf(fd,"set encoding iso_8859_1\n");
        fprintf(fd,"set term %s\n",term);
-       fprintf(fd,"set title \"SPLAT! Elevation Profile\"\n");
-       fprintf(fd,"set xlabel \"Distance Between %s and %s (miles)\"\n",destination.name,source.name);
-       fprintf(fd,"set ylabel \"Elevation Angle Along Path Between %s and %s (degrees)\"\n",destination.name,source.name);
+       fprintf(fd,"set title \"SPLAT! Elevation Profile Between %s and %s (%.2f%c azimuth)\"\n",destination.name,source.name,Azimuth(destination,source),176);
+
+       if (metric)
+               fprintf(fd,"set xlabel \"Distance Between %s and %s (%.2f kilometers)\"\n",destination.name,source.name,KM_PER_MILE*Distance(source,destination));
+       else
+               fprintf(fd,"set xlabel \"Distance Between %s and %s (%.2f miles)\"\n",destination.name,source.name,Distance(source,destination));
+
+
+       fprintf(fd,"set ylabel \"Elevation Angle Along LOS Path Between %s and %s (degrees)\"\n",destination.name,source.name);
        fprintf(fd,"set output \"%s.%s\"\n",filename,ext);
-       fprintf(fd,"plot \"profile.gp\" title \"Real Earth Profile\" with lines, \"reference.gp\" title \"Line Of Sight Path\" with lines\n");
+       fprintf(fd,"plot \"profile.gp\" title \"Real Earth Profile\" with lines, \"reference.gp\" title \"Line of Sight Path (%.2f%c elevation)\" with lines\n",refangle,176);
 
        fclose(fd);
                        
@@ -3006,68 +3737,209 @@ void GraphElevation(struct site source, struct site destination, char *name)
                fprintf(stderr,"\n*** ERROR: Error occurred invoking gnuplot!\n");
 }
 
-void GraphHeight(struct site source, struct site destination, char *name)
+void GraphHeight(struct site source, struct site destination, char *name, double f, unsigned char n)
 {
        /* This function invokes gnuplot to generate an appropriate
           output file indicating the terrain profile between the source
-          and destination locations.  What is plotted is the height of
-          land above or below a straight line between the receibe and
-          transmit sites.  "filename" is the name assigned to the output
-          file generated by gnuplot.  The filename extension is used
-          to set gnuplot's terminal setting and output file type.
-          If no extension is found, .gif is assumed. */
-
-       int x, y, z;
-       char filename[255], term[15], ext[15];
-       double a, b, c, height, refangle, cangle, maxheight=-100000.0,
-              minheight=100000.0;
-       struct site remote;
-       FILE *fd=NULL, *fd2=NULL;
+          and destination locations referenced to the line-of-sight path
+          between the receive and transmit sites.  "filename" is the name
+          assigned to the output file generated by gnuplot.  The filename
+          extension is used to set gnuplot's terminal setting and output
+          file type.  If no extension is found, .png is assumed. */
+
+       int     x, y, z;
+       char    filename[255], term[30], ext[15];
+       double  a, b, c, height=0.0, refangle, cangle, maxheight=-100000.0,
+               minheight=100000.0, lambda=0.0, f_zone=0.0, fpt6_zone=0.0,
+               nm=0.0, nb=0.0, ed=0.0, es=0.0, r=0.0, d=0.0, d1=0.0,
+               terrain, azimuth, distance, dheight=0.0, minterrain=100000.0,
+               minearth=100000.0, miny, maxy, min2y, max2y;
+       struct  site remote;
+       FILE    *fd=NULL, *fd2=NULL, *fd3=NULL, *fd4=NULL, *fd5=NULL;
 
        ReadPath(destination,source);  /* destination=RX, source=TX */
+       azimuth=Azimuth(destination,source);
+       distance=Distance(destination,source);
        refangle=ElevationAngle(destination,source);
        b=GetElevation(destination)+destination.alt+earthradius;
 
+       /* Wavelength and path distance (great circle) in feet. */
+
+       if (f)
+       {
+               lambda=9.8425e8/(f*1e6);
+               d=5280.0*path.distance[path.length-1];
+       }
+
+       if (n)
+       {
+               ed=GetElevation(destination);
+               es=GetElevation(source);
+               nb=-destination.alt-ed;
+               nm=(-source.alt-es-nb)/(path.distance[path.length-1]);
+       }
+
        fd=fopen("profile.gp","wb");
        fd2=fopen("reference.gp","wb");
+       fd5=fopen("curvature.gp", "wb");
 
-       for (x=1; x<path.length-1; x++)
+       if (f)
+       {
+               fd3=fopen("fresnel.gp", "wb");
+               fd4=fopen("fresnel_pt_6.gp", "wb");
+       }
+
+       for (x=0; x<path.length; x++)
        {
                remote.lat=path.lat[x];
                remote.lon=path.lon[x];
                remote.alt=0.0;
 
-               a=GetElevation(remote)+earthradius;
+               terrain=GetElevation(remote);
 
-               cangle=5280.0*Distance(destination,remote)/earthradius;
+               if (x==0)
+                       terrain+=destination.alt;  /* RX antenna spike */
 
+               a=terrain+earthradius;
+               cangle=5280.0*Distance(destination,remote)/earthradius;
                c=b*sin(refangle*deg2rad+HALFPI)/sin(HALFPI-refangle*deg2rad-cangle);
 
                height=a-c;
 
-               fprintf(fd,"%f\t%f\n",path.distance[x],height);
-               fprintf(fd2,"%f\t%f\n",path.distance[x],0.);
+               /* Per Fink and Christiansen, Electronics
+                * Engineers' Handbook, 1989:
+                *
+                *   H = sqrt(lamba * d1 * (d - d1)/d)
+                *
+                * where H is the distance from the LOS
+                * path to the first Fresnel zone boundary.
+                */
+
+               if (f)
+               {
+                       d1=5280.0*path.distance[x];
+                       f_zone=-1*sqrt(lambda*d1*(d-d1)/d);
+                       fpt6_zone=0.6*f_zone;
+               }
+
+               if (n)
+               {
+                       r=-(nm*path.distance[x])-nb;
+                       height+=r;
+
+                       if (f>0) 
+                       {
+                               f_zone+=r;
+                               fpt6_zone+=r;
+                       }
+               }
+
+               else
+                       r=0.0;
+
+               if (metric)
+               {
+                       fprintf(fd,"%f\t%f\n",KM_PER_MILE*path.distance[x],METERS_PER_FOOT*height);
+                       fprintf(fd2,"%f\t%f\n",KM_PER_MILE*path.distance[x],METERS_PER_FOOT*r);
+                       fprintf(fd5,"%f\t%f\n",KM_PER_MILE*path.distance[x],METERS_PER_FOOT*(height-terrain));
+               }
+
+               else
+               {
+                       fprintf(fd,"%f\t%f\n",path.distance[x],height);
+                       fprintf(fd2,"%f\t%f\n",path.distance[x],r);
+                       fprintf(fd5,"%f\t%f\n",path.distance[x],height-terrain);
+               }
+
+               if (f)
+               {
+                       if (metric)
+                       {
+                               fprintf(fd3,"%f\t%f\n",KM_PER_MILE*path.distance[x],METERS_PER_FOOT*f_zone);
+                               fprintf(fd4,"%f\t%f\n",KM_PER_MILE*path.distance[x],METERS_PER_FOOT*fpt6_zone);
+                       }
+
+                       else
+                       {
+                               fprintf(fd3,"%f\t%f\n",path.distance[x],f_zone);
+                               fprintf(fd4,"%f\t%f\n",path.distance[x],fpt6_zone);
+                       }
+
+                       if (f_zone<minheight)
+                               minheight=f_zone;
+               }
 
                if (height>maxheight)
                        maxheight=height;
 
                if (height<minheight)
                        minheight=height;
+
+               if (r>maxheight)
+                       maxheight=r;
+
+               if (terrain<minterrain)
+                       minterrain=terrain;
+
+               if ((height-terrain)<minearth)
+                       minearth=height-terrain;
+       }
+
+       if (n)
+               r=-(nm*path.distance[path.length-1])-nb;
+       else
+               r=0.0;
+
+       if (metric)
+       {
+               fprintf(fd,"%f\t%f\n",KM_PER_MILE*path.distance[path.length-1],METERS_PER_FOOT*r);
+               fprintf(fd2,"%f\t%f\n",KM_PER_MILE*path.distance[path.length-1],METERS_PER_FOOT*r);
+       }
+
+       else
+       {
+               fprintf(fd,"%f\t%f\n",path.distance[path.length-1],r);
+               fprintf(fd2,"%f\t%f\n",path.distance[path.length-1],r);
+       }
+
+       if (f)
+       {
+               if (metric)
+               {
+                       fprintf(fd3,"%f\t%f\n",path.distance[path.length-1],r);
+                       fprintf(fd4,"%f\t%f\n",path.distance[path.length-1],r);
+               }
+
+               else
+               {
+                       fprintf(fd3,"%f\t%f\n",KM_PER_MILE*path.distance[path.length-1],METERS_PER_FOOT*r);
+                       fprintf(fd4,"%f\t%f\n",KM_PER_MILE*path.distance[path.length-1],METERS_PER_FOOT*r);
+               }
        }
+       
+       if (r>maxheight)
+               maxheight=r;
 
-       fprintf(fd,"%f\t%f\n",path.distance[path.length-1],0.0);
-       fprintf(fd2,"%f\t%f\n",path.distance[path.length-1],0.0);
+       if (r<minheight)
+               minheight=r;
 
        fclose(fd);
        fclose(fd2);
+       fclose(fd5);
+
+       if (f)
+       {
+               fclose(fd3);
+               fclose(fd4);
+       }
 
        if (name[0]==0)
        {
                /* Default filename and output file type */
 
                strncpy(filename,"height\0",8);
-               strncpy(term,"gif\0",4);
-               strncpy(ext,"gif\0",4);
+               strncpy(term,"png\0",4);
+               strncpy(ext,"png\0",4);
        }
 
        else
@@ -3091,11 +3963,11 @@ void GraphHeight(struct site source, struct site destination, char *name)
                }
 
                else
-               {       /* No extension -- Default is gif */
+               {       /* No extension -- Default is png */
 
                        filename[x]=0;
-                       strncpy(term,"gif\0",4);
-                       strncpy(ext,"gif\0",4);
+                       strncpy(term,"png\0",4);
+                       strncpy(ext,"png\0",4);
                }
        }
 
@@ -3106,27 +3978,75 @@ void GraphHeight(struct site source, struct site destination, char *name)
                strncpy(ext,"ps\0",3);
 
        else if (strncmp(ext,"ps",2)==0)
-               strncpy(term,"postscript\0",11);
+               strncpy(term,"postscript enhanced color\0",26);
 
        fprintf(stdout,"Writing \"%s.%s\"...",filename,ext);
        fflush(stdout);
 
        fd=fopen("splat.gp","w");
 
-       minheight-=20.0;
-       maxheight+=20.0;
+       dheight=maxheight-minheight;
+       miny=minheight-0.15*dheight;
+       maxy=maxheight+0.05*dheight;
 
-       if (maxheight<20.0)
-               maxheight=20.0;
+       if (maxy<20.0)
+               maxy=20.0;
+
+       dheight=maxheight-minheight;
+       min2y=miny-minterrain+0.05*dheight;
+
+       if (minearth<min2y)
+       {
+               miny-=min2y-minearth+0.05*dheight;
+               min2y=minearth-0.05*dheight;
+       }
 
+       max2y=min2y+maxy-miny;
        fprintf(fd,"set grid\n");
-       fprintf(fd,"set yrange [%2.3f to %2.3f]\n", minheight, maxheight);
+       fprintf(fd,"set yrange [%2.3f to %2.3f]\n", metric?miny*METERS_PER_FOOT:miny, metric?maxy*METERS_PER_FOOT:maxy);
+       fprintf(fd,"set y2range [%2.3f to %2.3f]\n", metric?min2y*METERS_PER_FOOT:min2y, metric?max2y*METERS_PER_FOOT:max2y);
+       fprintf(fd,"set xrange [-0.5 to %2.3f]\n",metric?KM_PER_MILE*rint(distance+0.5):rint(distance+0.5));
+       fprintf(fd,"set encoding iso_8859_1\n");
        fprintf(fd,"set term %s\n",term);
-       fprintf(fd,"set title \"SPLAT! Height Profile\"\n");
-       fprintf(fd,"set xlabel \"Distance Between %s and %s (miles)\"\n",destination.name,source.name);
-       fprintf(fd,"set ylabel \"Ground Height Above Path Between %s and %s (feet)\"\n",destination.name,source.name);
+
+       if (f)
+               fprintf(fd,"set title \"SPLAT! Path Profile Between %s and %s (%.2f%c azimuth)\\nWith First Fresnel Zone\"\n",destination.name, source.name, azimuth,176);
+
+       else
+               fprintf(fd,"set title \"SPLAT! Height Profile Between %s and %s (%.2f%c azimuth)\"\n",destination.name, source.name, azimuth,176);
+
+       if (metric)
+               fprintf(fd,"set xlabel \"Distance Between %s and %s (%.2f kilometers)\"\n",destination.name,source.name,KM_PER_MILE*Distance(source,destination));
+       else
+               fprintf(fd,"set xlabel \"Distance Between %s and %s (%.2f miles)\"\n",destination.name,source.name,Distance(source,destination));
+
+       if (n)
+       {
+               if (metric)
+                       fprintf(fd,"set ylabel \"Normalized Height Referenced To LOS Path Between\\n%s and %s (meters)\"\n",destination.name,source.name);
+
+               else
+                       fprintf(fd,"set ylabel \"Normalized Height Referenced To LOS Path Between\\n%s and %s (feet)\"\n",destination.name,source.name);
+
+       }
+
+       else
+       {
+               if (metric)
+                       fprintf(fd,"set ylabel \"Height Referenced To LOS Path Between %s and %s (meters)\"\n",destination.name,source.name);
+
+               else
+                       fprintf(fd,"set ylabel \"Height Referenced To LOS Path Between %s and %s (feet)\"\n",destination.name,source.name);
+       }
+
        fprintf(fd,"set output \"%s.%s\"\n",filename,ext);
-       fprintf(fd,"plot \"profile.gp\" title \"Real Earth Profile\" with lines, \"reference.gp\" title \"Line Of Sight Path\" with lines\n");
+
+       if (f)
+               fprintf(fd,"plot \"profile.gp\" title \"Point-to-Point Profile\" with lines, \"reference.gp\" title \"Line of Sight Path\" with lines, \"curvature.gp\" axes x1y2 title \"Earth's Curvature Contour\" with lines, \"fresnel.gp\" axes x1y1 title \"First Fresnel Zone (%.3f MHz)\" with lines, \"fresnel_pt_6.gp\" title \"60%% of First Fresnel Zone\" with lines\n",f);
+
+       else
+               fprintf(fd,"plot \"profile.gp\" title \"Point-to-Point Profile\" with lines, \"reference.gp\" title \"Line Of Sight Path\" with lines, \"curvature.gp\" axes x1y2 title \"Earth's Curvature Contour\" with lines\n");
 
        fclose(fd);
 
@@ -3136,7 +4056,15 @@ void GraphHeight(struct site source, struct site destination, char *name)
        {
                unlink("splat.gp");
                unlink("profile.gp");
-               unlink("reference.gp"); 
+               unlink("reference.gp");
+               unlink("curvature.gp");
+
+               if (f)
+               {
+                       unlink("fresnel.gp");
+                       unlink("fresnel_pt_6.gp");
+               }
+
                fprintf(stdout," Done!\n");
                fflush(stdout);
        }
@@ -3149,19 +4077,26 @@ void GraphLongley(struct site source, struct site destination, char *name)
 {
        /* This function invokes gnuplot to generate an appropriate
           output file indicating the Longley-Rice model loss between
-          the source and destination locations.   "filename" is the
+          the source and destination locations.  "filename" is the
           name assigned to the output file generated by gnuplot.
           The filename extension is used to set gnuplot's terminal
           setting and output file type.  If no extension is found,
-          .gif is assumed.  */
-
-       int x, y, z, errnum, errflag=0;
-       char filename[255], term[15], ext[15], strmode[100], report_name[80];
-       double maxloss=-100000.0, minloss=100000.0, loss, haavt, angle;
-       FILE *fd=NULL, *fd2=NULL;
+          .png is assumed. */
+
+       int     x, y, z, errnum, errflag=0;
+       char    filename[255], term[30], ext[15], strmode[100],
+               report_name[80], block=0;
+       double  maxloss=-100000.0, minloss=100000.0, loss, haavt,
+               angle1, angle2, azimuth, pattern=1.0, patterndB=0.0,
+               total_loss=0.0, cos_xmtr_angle, cos_test_angle=0.0,
+               source_alt, test_alt, dest_alt, source_alt2, dest_alt2,
+               distance, elevation, four_thirds_earth;
+       FILE    *fd=NULL, *fd2=NULL;
 
        sprintf(report_name,"%s-to-%s.lro",source.name,destination.name);
 
+       four_thirds_earth=EARTHRADIUS*(4.0/3.0);
+
        for (x=0; report_name[x]!=0; x++)
                if (report_name[x]==32 || report_name[x]==17 || report_name[x]==92 || report_name[x]==42 || report_name[x]==47)
                        report_name[x]='_';     
@@ -3187,24 +4122,69 @@ void GraphLongley(struct site source, struct site destination, char *name)
        }
        
        fprintf(fd2, "%s W)\n", dec2dms(source.lon));
-       fprintf(fd2,"Ground elevation: %.2f feet AMSL\n",GetElevation(source));
-       fprintf(fd2,"Antenna height: %.2f feet AGL / %.2f feet AMSL\n",source.alt, source.alt+GetElevation(source));
+
+       if (metric)
+       {
+               fprintf(fd2,"Ground elevation: %.2f meters AMSL\n",METERS_PER_FOOT*GetElevation(source));
+               fprintf(fd2,"Antenna height: %.2f meters AGL / %.2f meters AMSL\n",METERS_PER_FOOT*source.alt,METERS_PER_FOOT*(source.alt+GetElevation(source)));
+       }
+
+       else
+       {
+               fprintf(fd2,"Ground elevation: %.2f feet AMSL\n",GetElevation(source));
+               fprintf(fd2,"Antenna height: %.2f feet AGL / %.2f feet AMSL\n",source.alt, source.alt+GetElevation(source));
+       }
 
        haavt=haat(source);
 
        if (haavt>-4999.0)
-               fprintf(fd2,"Antenna height above average terrain: %.2f feet\n",haavt);
+       {
+               if (metric)
+                       fprintf(fd2,"Antenna height above average terrain: %.2f meters\n",METERS_PER_FOOT*haavt);
+               else
+                       fprintf(fd2,"Antenna height above average terrain: %.2f feet\n",haavt);
+       }
+
+       azimuth=Azimuth(source,destination);
+       angle1=ElevationAngle(source,destination);
+       angle2=ElevationAngle2(source,destination,earthradius);
+
+       if (got_azimuth_pattern || got_elevation_pattern)
+       {
+               x=(int)rint(10.0*(10.0-angle2));
+
+               if (x>=0 && x<=1000)
+                       pattern=(double)LR.antenna_pattern[(int)rint(azimuth)][x];
+
+               patterndB=20.0*log10(pattern);
+
+               fprintf(fd2,"Antenna pattern between %s and %s: %.3f (%.2f dB)\n",source.name, destination.name, pattern, patterndB);
+
+       }
+
+       if (metric)
+               fprintf(fd2,"Distance to %s: %.2f kilometers\n",destination.name,METERS_PER_FOOT*Distance(source,destination));
 
-       fprintf(fd2,"Distance to %s: %.2f miles.\n",destination.name,Distance(source,destination));
-       fprintf(fd2,"Azimuth to %s: %.2f degrees.\n",destination.name,Azimuth(source,destination));
+       else
+               fprintf(fd2,"Distance to %s: %.2f miles.\n",destination.name,Distance(source,destination));
+
+       fprintf(fd2,"Azimuth to %s: %.2f degrees\n",destination.name,azimuth);
 
-       angle=ElevationAngle(source,destination);
+       if (angle1>=0.0)
+               fprintf(fd2,"Elevation angle to %s: %+.4f degrees\n",destination.name,angle1);
 
-       if (angle>=0.0)
-               fprintf(fd2,"Angle of elevation between %s and %s: %+.4f degrees.\n",source.name,destination.name,angle);
+       else
+               fprintf(fd2,"Depression angle to %s: %+.4f degrees\n",destination.name,angle1);
 
-       if (angle<0.0)
-               fprintf(fd2,"Angle of depression between %s and %s: %+.4f degrees.\n",source.name,destination.name,angle);
+       if (angle1!=angle2)
+       {
+               if (angle2<0.0)
+                       fprintf(fd2,"Depression");
+               else
+                       fprintf(fd2,"Elevation");
+
+               fprintf(fd2," angle to the first obstruction: %+.4f degrees\n",angle2);
+       }
 
        fprintf(fd2,"\n-------------------------------------------------------------------------\n\n");
 
@@ -3225,24 +4205,57 @@ void GraphLongley(struct site source, struct site destination, char *name)
        }
 
        fprintf(fd2, "%s W)\n", dec2dms(destination.lon));
-       fprintf(fd2,"Ground elevation: %.2f feet AMSL\n",GetElevation(destination));
-       fprintf(fd2,"Antenna height: %.2f feet AGL / %.2f feet AMSL\n",destination.alt, destination.alt+GetElevation(destination));
+
+       if (metric)
+       {
+               fprintf(fd2,"Ground elevation: %.2f meters AMSL\n",METERS_PER_FOOT*GetElevation(destination));
+               fprintf(fd2,"Antenna height: %.2f meters AGL / %.2f meters AMSL\n",METERS_PER_FOOT*destination.alt, METERS_PER_FOOT*(destination.alt+GetElevation(destination)));
+       }
+
+       else
+       {
+               fprintf(fd2,"Ground elevation: %.2f feet AMSL\n",GetElevation(destination));
+               fprintf(fd2,"Antenna height: %.2f feet AGL / %.2f feet AMSL\n",destination.alt, destination.alt+GetElevation(destination));
+       }
 
        haavt=haat(destination);
 
        if (haavt>-4999.0)
-               fprintf(fd2,"Antenna height above average terrain: %.2f feet\n",haavt);
+       {
+               if (metric)
+                       fprintf(fd2,"Antenna height above average terrain: %.2f meters\n",METERS_PER_FOOT*haavt);
+               else
+                       fprintf(fd2,"Antenna height above average terrain: %.2f feet\n",haavt);
+       }
+
+       if (metric)
+               fprintf(fd2,"Distance to %s: %.2f kilometers\n",source.name,KM_PER_MILE*Distance(source,destination));
+
+       else
+               fprintf(fd2,"Distance to %s: %.2f miles\n",source.name,Distance(source,destination));
+
+       azimuth=Azimuth(destination,source);
 
-       fprintf(fd2,"Distance to %s: %.2f miles.\n",source.name,Distance(source,destination));
-       fprintf(fd2,"Azimuth to %s: %.2f degrees.\n",source.name,Azimuth(destination,source));
+       angle1=ElevationAngle(destination,source);
+       angle2=ElevationAngle2(destination,source,earthradius);
 
-       angle=ElevationAngle(destination,source);
+       fprintf(fd2,"Azimuth to %s: %.2f degrees.\n",source.name,azimuth);
 
-       if (angle>=0.0)
-               fprintf(fd2,"Angle of elevation between %s and %s: %+.4f degrees.\n",destination.name,source.name,angle);
+       if (angle1>=0.0)
+               fprintf(fd2,"Elevation angle to %s: %+.4f degrees\n",source.name,angle1);
 
-       if (angle<0.0)
-               fprintf(fd2,"Angle of depression between %s and %s: %+.4f degrees.\n",destination.name,source.name,angle);
+       else
+               fprintf(fd2,"Depression angle to %s: %+.4f degrees\n",source.name,angle1);
+
+       if (angle1!=angle2)
+       {
+               if (angle2<0.0)
+                       fprintf(fd2,"Depression");
+               else
+                       fprintf(fd2,"Elevation");
+
+               fprintf(fd2," angle to the first obstruction: %+.4f degrees\n",angle2);
+       }
 
        fprintf(fd2,"\n-------------------------------------------------------------------------\n\n");
 
@@ -3297,54 +4310,145 @@ void GraphLongley(struct site source, struct site destination, char *name)
 
        fprintf(fd2,")\nFraction of Situations: %.1lf%c\n",LR.conf*100.0,37);
        fprintf(fd2,"Fraction of Time: %.1lf%c\n",LR.rel*100.0,37);
-
        fprintf(fd2,"\n-------------------------------------------------------------------------\n\n");
 
        fprintf(fd2,"Analysis Results:\n\n");
 
-       ReadPath(source, destination);  /* destination=RX, source=TX */
+       ReadPath(source, destination);  /* source=TX, destination=RX */
 
-       elev_l[1]=0.04*METERS_PER_MILE;
+       /* Copy elevations along path into the elev_l[] array. */
 
-       for (x=1; x<path.length; x++)
-               elev_l[x+1]=path.elevation[x]*METERS_PER_FOOT;  
+       for (x=0; x<path.length; x++)
+               elev_l[x+2]=path.elevation[x]*METERS_PER_FOOT;  
+
+       if (metric)
+               fprintf(fd2,"Distance (km)");
+       else
+               fprintf(fd2,"Distance (mi)");
 
-       fprintf(fd2,"Distance (mi)\tLoss (dB)\tErrnum\tComment\n\n"); 
+       fprintf(fd2,"\tLoss (dB)\tErrnum\tComment\n\n");
 
        fd=fopen("profile.gp","w");
 
-       for (x=2; x<path.length; x++)
+       azimuth=rint(Azimuth(source,destination));
+
+       for (y=2; y<(path.length-1); y++)  /* path.length-1 avoids LR error */
        {
-               elev_l[0]=x-1;
+               distance=5280.0*path.distance[y];
+               source_alt=four_thirds_earth+source.alt+path.elevation[0];
+               dest_alt=four_thirds_earth+destination.alt+path.elevation[y];
+               dest_alt2=dest_alt*dest_alt;
+               source_alt2=source_alt*source_alt;
+
+               /* Calculate the cosine of the elevation of
+                  the receiver as seen by the transmitter. */
+
+               cos_xmtr_angle=((source_alt2)+(distance*distance)-(dest_alt2))/(2.0*source_alt*distance);
+
+               if (got_elevation_pattern)
+               {
+                       /* If an antenna elevation pattern is available, the
+                          following code determines the elevation angle to
+                          the first obstruction along the path. */
+
+                       for (x=2, block=0; x<y && block==0; x++)
+                       {
+                               distance=5280.0*(path.distance[y]-path.distance[x]);
+                               test_alt=four_thirds_earth+path.elevation[x];
+
+                               /* Calculate the cosine of the elevation
+                                  angle of the terrain (test point)
+                                  as seen by the transmitter. */
+
+                               cos_test_angle=((source_alt2)+(distance*distance)-(test_alt*test_alt))/(2.0*source_alt*distance);
+
+                               /* Compare these two angles to determine if
+                                  an obstruction exists.  Since we're comparing
+                                  the cosines of these angles rather than
+                                  the angles themselves, the sense of the
+                                  following "if" statement is reversed from
+                                  what it would be if the angles themselves
+                                  were compared. */
+
+                               if (cos_xmtr_angle>cos_test_angle)
+                                       block=1;
+                       }
+
+                       /* At this point, we have the elevation angle
+                          to the first obstruction (if it exists). */
+               }
+
+               /* Determine path loss for each point along the
+                  path using Longley-Rice's point_to_point mode
+                  starting at x=2 (number_of_points = 1), the
+                  shortest distance terrain can play a role in
+                  path loss. */
+
+               elev_l[0]=y-1;  /* (number of points - 1) */
+
+               /* Distance between elevation samples */
+               elev_l[1]=METERS_PER_MILE*(path.distance[y]-path.distance[y-1]);
 
                point_to_point(elev_l, source.alt*METERS_PER_FOOT, 
-                       destination.alt*METERS_PER_FOOT,
-                       LR.eps_dielect, LR.sgm_conductivity, LR.eno_ns_surfref,
-                       LR.frq_mhz, LR.radio_climate, LR.pol, LR.conf, LR.rel,
-                       loss, strmode, errnum);
+               destination.alt*METERS_PER_FOOT, LR.eps_dielect,
+               LR.sgm_conductivity, LR.eno_ns_surfref, LR.frq_mhz,
+               LR.radio_climate, LR.pol, LR.conf, LR.rel, loss,
+               strmode, errnum);
+
+               if (block)
+                       elevation=((acos(cos_test_angle))/deg2rad)-90.0;
+               else
+                       elevation=((acos(cos_xmtr_angle))/deg2rad)-90.0;
+
+               /* Integrate the antenna's radiation
+                  pattern into the overall path loss. */
+
+               x=(int)rint(10.0*(10.0-elevation));
+
+               if (x>=0 && x<=1000)
+               {
+                       pattern=(double)LR.antenna_pattern[(int)azimuth][x];
+
+                       if (pattern!=0.0)
+                               patterndB=20.0*log10(pattern);
+               }
 
-                       /* Note: PASS BY REFERENCE ... loss and errnum are
-                          passed by reference, and are only used in this
-                          file by this function */
+               else
+                       patterndB=0.0;
+
+               total_loss=loss-patterndB;
 
+               if (metric)
+               {
+                       fprintf(fd,"%f\t%f\n",KM_PER_MILE*(path.distance[path.length-1]-path.distance[y]),total_loss);
+                       fprintf(fd2,"%7.2f\t\t%7.2f\t\t  %d\t%s\n",KM_PER_MILE*path.distance[y],total_loss, errnum, strmode);
+               }
 
-               fprintf(fd,"%f\t%f\n",path.distance[path.length-1]-path.distance[x],loss);
-               fprintf(fd2,"%7.2f\t\t%7.2f\t\t  %d\t%s\n",path.distance[x],loss, errnum, strmode);
+               else
+               {
+                       fprintf(fd,"%f\t%f\n",path.distance[path.length-1]-path.distance[y],total_loss);
+                       fprintf(fd2,"%7.2f\t\t%7.2f\t\t  %d\t%s\n",path.distance[y],total_loss, errnum, strmode);
+               }
 
                errflag|=errnum;
-                 
-               if (loss>maxloss)
-                       maxloss=loss;
 
-               if (loss<minloss)
-                       minloss=loss;
+               if (total_loss>maxloss)
+                       maxloss=total_loss;
+
+               if (total_loss<minloss)
+                       minloss=total_loss;
        }
 
        fclose(fd);
 
+       fprintf(fd2,"\nLongley-Rice path loss between %s and %s is %.2f dB.\n",source.name, destination.name, loss);
+
+       if (patterndB!=0.0)
+               fprintf(fd2,"Total path loss including TX antenna pattern is %.2f dB.\n",total_loss);
+
        if (errflag)
        {
-               fprintf(fd2,"\nNotes on \"errnum\"...\n\n");
+               fprintf(fd2,"\nNotes on \"errnum\":\n\n");
                fprintf(fd2,"  0: No error.  :-)\n");
                fprintf(fd2,"  1: Warning!  Some parameters are nearly out of range.\n");
                fprintf(fd2,"     Results should be used with caution.\n");
@@ -3355,7 +4459,11 @@ void GraphLongley(struct site source, struct site destination, char *name)
                fprintf(fd2,"    Results are probably invalid.\n\nEnd of Report\n");
        }
 
-       fprintf(stdout,"Longley-Rice Path Loss between %s and %s is %.2f db\n",source.name, destination.name, loss);
+       fprintf(stdout,"Longley-Rice path loss between %s and %s is %.2f dB.\n",source.name, destination.name, loss);
+
+       if (patterndB!=0.0)
+               fprintf(stdout,"Total path loss including TX antenna pattern is %.2f dB.\n",total_loss);
+
        fprintf(stdout,"Path Loss Report written to: \"%s\"\n",report_name);
        fflush(stdout);
 
@@ -3366,8 +4474,8 @@ void GraphLongley(struct site source, struct site destination, char *name)
                /* Default filename and output file type */
 
                strncpy(filename,"loss\0",5);
-               strncpy(term,"gif\0",4);
-               strncpy(ext,"gif\0",4);
+               strncpy(term,"png\0",4);
+               strncpy(ext,"png\0",4);
        }
 
        else
@@ -3391,11 +4499,11 @@ void GraphLongley(struct site source, struct site destination, char *name)
                }
 
                else
-               {       /* No extension -- Default is gif */
+               {       /* No extension -- Default is png */
 
                        filename[x]=0;
-                       strncpy(term,"gif\0",4);
-                       strncpy(ext,"gif\0",4);
+                       strncpy(term,"png\0",4);
+                       strncpy(ext,"png\0",4);
                }
        }
 
@@ -3406,7 +4514,7 @@ void GraphLongley(struct site source, struct site destination, char *name)
                strncpy(ext,"ps\0",3);
 
        else if (strncmp(ext,"ps",2)==0)
-               strncpy(term,"postscript\0",11);
+               strncpy(term,"postscript enhanced color\0",26);
 
        fprintf(stdout,"Writing \"%s.%s\"...",filename,ext);
        fflush(stdout);
@@ -3415,12 +4523,22 @@ void GraphLongley(struct site source, struct site destination, char *name)
 
        fprintf(fd,"set grid\n");
        fprintf(fd,"set yrange [%2.3f to %2.3f]\n", minloss, maxloss);
+       fprintf(fd,"set encoding iso_8859_1\n");
        fprintf(fd,"set term %s\n",term);
-       fprintf(fd,"set title \"SPLAT! Loss Profile\"\n");
-       fprintf(fd,"set xlabel \"Distance Between %s and %s (miles)\"\n",destination.name,source.name);
-       fprintf(fd,"set ylabel \"Longley-Rice Loss (dB)\"\n");
-       fprintf(fd,"set output \"%s.%s\"\n",filename,ext);
-       fprintf(fd,"plot \"profile.gp\" title \"Longley-Rice Loss\" with lines\n");
+       fprintf(fd,"set title \"SPLAT! Loss Profile Along Path Between %s and %s (%.2f%c azimuth)\"\n",destination.name, source.name, Azimuth(destination,source),176);
+
+       if (metric)
+               fprintf(fd,"set xlabel \"Distance Between %s and %s (%.2f kilometers)\"\n",destination.name,source.name,KM_PER_MILE*Distance(destination,source));
+       else
+               fprintf(fd,"set xlabel \"Distance Between %s and %s (%.2f miles)\"\n",destination.name,source.name,Distance(destination,source));
+
+       if (got_azimuth_pattern || got_elevation_pattern)
+               fprintf(fd,"set ylabel \"Total Path Loss (including TX antenna pattern) (dB)");
+       else
+               fprintf(fd,"set ylabel \"Longley-Rice Path Loss (dB)");
+
+       fprintf(fd,"\"\nset output \"%s.%s\"\n",filename,ext);
+       fprintf(fd,"plot \"profile.gp\" title \"Path Loss\" with lines\n");
 
        fclose(fd);
                        
@@ -3440,14 +4558,17 @@ void GraphLongley(struct site source, struct site destination, char *name)
                fprintf(stderr,"\n*** ERROR: Error occurred invoking gnuplot!\n");
 }
 
-void ObstructionReport(struct site xmtr, struct site rcvr, char report)
+void ObstructionReport(struct site xmtr, struct site rcvr, char report, double f)
 {
-       struct site result, result2, new_site;
-       double angle, haavt;
-       unsigned char block;
-       char report_name[80], string[255];
-       int x;
-       FILE *fd;
+       int     x;
+       struct  site site_x;
+       double  h_r, h_t, h_x, h_r_orig, cos_tx_angle, cos_test_angle,
+               cos_tx_angle_f1, cos_tx_angle_fpt6, haavt, d_tx, d_x,
+               h_r_f1, h_r_fpt6, h_f, h_los, lambda=0.0, azimuth,
+               pattern, patterndB, distance, angle1, angle2;
+       char    report_name[80], string[255], string_fpt6[255],
+               string_f1[255];
+       FILE    *fd;
 
        sprintf(report_name,"%s-to-%s.txt",xmtr.name,rcvr.name);
 
@@ -3458,7 +4579,7 @@ void ObstructionReport(struct site xmtr, struct site rcvr, char report)
        fd=fopen(report_name,"w");
 
        fprintf(fd,"\n\t\t--==[ SPLAT! v%s Obstruction Report ]==--\n\n",splat_version);
-       fprintf(fd,"Analysis of line-of-sight path conditions between %s and %s:\n",xmtr.name, rcvr.name);
+       fprintf(fd,"Analysis of great circle path between %s and %s:\n",xmtr.name, rcvr.name);
        fprintf(fd,"\n-------------------------------------------------------------------------\n\n");
        fprintf(fd,"Transmitter site: %s\n",xmtr.name);
 
@@ -3476,24 +4597,74 @@ void ObstructionReport(struct site xmtr, struct site rcvr, char report)
        }
 
        fprintf(fd, "%s W)\n", dec2dms(xmtr.lon));
-       fprintf(fd,"Ground elevation: %.2f feet AMSL\n",GetElevation(xmtr));
-       fprintf(fd,"Antenna height: %.2f feet AGL / %.2f feet AMSL\n",xmtr.alt, xmtr.alt+GetElevation(xmtr));
+
+       if (metric)
+       {
+               fprintf(fd,"Ground elevation: %.2f meters AMSL\n",METERS_PER_FOOT*GetElevation(xmtr));
+               fprintf(fd,"Antenna height: %.2f meters AGL / %.2f meters AMSL\n",METERS_PER_FOOT*xmtr.alt, METERS_PER_FOOT*(xmtr.alt+GetElevation(xmtr)));
+       }
+
+       else
+       {
+               fprintf(fd,"Ground elevation: %.2f feet AMSL\n",GetElevation(xmtr));
+               fprintf(fd,"Antenna height: %.2f feet AGL / %.2f feet AMSL\n",xmtr.alt, xmtr.alt+GetElevation(xmtr));
+       }
 
        haavt=haat(xmtr);
 
        if (haavt>-4999.0)
-               fprintf(fd,"Antenna height above average terrain: %.2f feet\n",haavt);
+       {
+               if (metric)
+                       fprintf(fd,"Antenna height above average terrain: %.2f meters\n",METERS_PER_FOOT*haavt);
+               else
+                       fprintf(fd,"Antenna height above average terrain: %.2f feet\n",haavt);
+       }
+
+       pattern=1.0;
+       patterndB=0.0;
+       distance=Distance(xmtr,rcvr);
+       azimuth=Azimuth(xmtr,rcvr);
+       angle1=ElevationAngle(xmtr,rcvr);
+       angle2=ElevationAngle2(xmtr,rcvr,earthradius);
+
+       if (got_azimuth_pattern || got_elevation_pattern)
+       {
+               x=(int)rint(10.0*(10.0-angle2));
+
+               if (x>=0 && x<=1000)
+                       pattern=(double)LR.antenna_pattern[(int)rint(azimuth)][x];
+
+               if (pattern!=1.0)
+               {
+                       fprintf(fd,"Antenna pattern toward %s: %.3f",rcvr.name,pattern);
+                       patterndB=20.0*log10(pattern);
+                       fprintf(fd," (%.2f dB)\n",patterndB);
+               }
+       }
 
-       fprintf(fd,"Distance to %s: %.2f miles.\n",rcvr.name,Distance(xmtr,rcvr));
-       fprintf(fd,"Azimuth to %s: %.2f degrees.\n",rcvr.name,Azimuth(xmtr,rcvr));
+       if (metric)
+               fprintf(fd,"Distance to %s: %.2f kilometers\n",rcvr.name,KM_PER_MILE*distance);
+
+       else
+               fprintf(fd,"Distance to %s: %.2f miles\n",rcvr.name,distance);
 
-       angle=ElevationAngle(xmtr,rcvr);
+       fprintf(fd,"Azimuth to %s: %.2f degrees\n",rcvr.name,azimuth);
+
+       if (angle1>=0.0)
+               fprintf(fd,"Elevation angle to %s: %+.4f degrees\n",rcvr.name,angle1);
+
+       else
+               fprintf(fd,"Depression angle to %s: %+.4f degrees\n",rcvr.name,angle1);
 
-       if (angle>=0.0)
-               fprintf(fd,"Angle of elevation between %s and %s: %+.4f degrees.\n",xmtr.name,rcvr.name,angle);
+       if (angle1!=angle2)
+       {
+               if (angle2<0.0)
+                       fprintf(fd,"Depression");
+               else
+                       fprintf(fd,"Elevation");
 
-       if (angle<0.0)
-               fprintf(fd,"Angle of depression between %s and %s: %+.4f degrees.\n",xmtr.name,rcvr.name,angle);
+               fprintf(fd," angle to the first obstruction: %+.4f degrees\n",angle2);
+       }
 
        fprintf(fd,"\n-------------------------------------------------------------------------\n\n");
 
@@ -3513,85 +4684,465 @@ void ObstructionReport(struct site xmtr, struct site rcvr, char report)
                fprintf(fd, " (%s S / ", dec2dms(rcvr.lat));
        }
 
-       fprintf(fd, "%s W)\n", dec2dms(rcvr.lon));
-       fprintf(fd,"Ground elevation: %.2f feet AMSL\n",GetElevation(rcvr));
-       fprintf(fd,"Antenna height: %.2f feet AGL / %.2f feet AMSL\n",rcvr.alt, rcvr.alt+GetElevation(rcvr));
+       fprintf(fd, "%s W)\n", dec2dms(rcvr.lon));
+
+       if (metric)
+       {
+               fprintf(fd,"Ground elevation: %.2f meters AMSL\n",METERS_PER_FOOT*GetElevation(rcvr));
+               fprintf(fd,"Antenna height: %.2f meters AGL / %.2f meters AMSL\n",METERS_PER_FOOT*rcvr.alt, METERS_PER_FOOT*(rcvr.alt+GetElevation(rcvr)));
+       }
+
+       else
+       {
+               fprintf(fd,"Ground elevation: %.2f feet AMSL\n",GetElevation(rcvr));
+               fprintf(fd,"Antenna height: %.2f feet AGL / %.2f feet AMSL\n",rcvr.alt, rcvr.alt+GetElevation(rcvr));
+       }
+
+       haavt=haat(rcvr);
+
+       if (haavt>-4999.0)
+       {
+               if (metric)
+                       fprintf(fd,"Antenna height above average terrain: %.2f meters\n",METERS_PER_FOOT*haavt);
+               else
+                       fprintf(fd,"Antenna height above average terrain: %.2f feet\n",haavt);
+       }
+
+       azimuth=Azimuth(rcvr,xmtr);
+       angle1=ElevationAngle(rcvr,xmtr);
+       angle2=ElevationAngle2(rcvr,xmtr,earthradius);
+
+       if (metric)
+               fprintf(fd,"Distance to %s: %.2f kilometers\n",xmtr.name,KM_PER_MILE*distance);
+       else
+               fprintf(fd,"Distance to %s: %.2f miles\n",xmtr.name,distance);
+
+       fprintf(fd,"Azimuth to %s: %.2f degrees\n",xmtr.name,azimuth);
+
+       if (angle1>=0.0)
+               fprintf(fd,"Elevation to %s: %+.4f degrees\n",xmtr.name,angle1);
+
+       else
+               fprintf(fd,"Depression angle to %s: %+.4f degrees\n",xmtr.name,angle1);
+
+       if (angle1!=angle2)
+       {
+               if (angle2<0.0)
+                       fprintf(fd,"Depression");
+               else
+                       fprintf(fd,"Elevation");
+
+               fprintf(fd," angle to the first obstruction: %+.4f degrees\n",angle2);
+
+       }
+
+       fprintf(fd,"\n-------------------------------------------------------------------------\n\n");
+
+       if (report=='y')
+       {
+               /* Generate profile of the terrain.  Create the path
+                  from transmitter to receiver because that's the
+                  way the original los() function did it, and going
+                  the other way can yield slightly different results. */
+
+               ReadPath(xmtr,rcvr);
+               h_r=GetElevation(rcvr)+rcvr.alt+earthradius;
+               h_r_f1=h_r;
+               h_r_fpt6=h_r;
+               h_r_orig=h_r;
+               h_t=GetElevation(xmtr)+xmtr.alt+earthradius;
+               d_tx=5280.0*Distance(rcvr,xmtr);
+               cos_tx_angle=((h_r*h_r)+(d_tx*d_tx)-(h_t*h_t))/(2.0*h_r*d_tx);
+               cos_tx_angle_f1=cos_tx_angle;
+               cos_tx_angle_fpt6=cos_tx_angle;
+
+               if (f)
+                       lambda=9.8425e8/(f*1e6);
+
+               /* At each point along the path calculate the cosine
+                  of a sort of "inverse elevation angle" at the receiver.
+                  From the antenna, 0 deg. looks at the ground, and 90 deg.
+                  is parallel to the ground.
+
+                  Start at the receiver.  If this is the lowest antenna,
+                  then terrain obstructions will be nearest to it.  (Plus,
+                  that's the way the original los() did it.)
+
+                  Calculate cosines only.  That's sufficient to compare
+                  angles and it saves the extra computational burden of
+                  acos().  However, note the inverted comparison: if
+                  acos(A) > acos(B), then B > A. */
+               
+               for (x=path.length-1; x>0; x--)
+               {
+                       site_x.lat=path.lat[x];
+                       site_x.lon=path.lon[x];
+                       site_x.alt=0.0;
+
+                       h_x=GetElevation(site_x)+earthradius;
+                       d_x=5280.0*Distance(rcvr,site_x);
+
+                       /* Deal with the LOS path first. */
+
+                       cos_test_angle=((h_r*h_r)+(d_x*d_x)-(h_x*h_x))/(2.0*h_r*d_x);
+
+                       if (cos_tx_angle>cos_test_angle)
+                       {
+                               if (h_r==h_r_orig)
+                                       fprintf(fd,"SPLAT! detected obstructions at:\n\n");
+
+                               if (site_x.lat>=0.0)
+                               {
+                                       if (metric)
+                                               fprintf(fd,"\t%.4f N, %.4f W, %5.2f kilometers, %6.2f meters AMSL\n",site_x.lat, site_x.lon, KM_PER_MILE*(d_x/5280.0), METERS_PER_FOOT*(h_x-earthradius));
+                                       else
+                                               fprintf(fd,"\t%.4f N, %.4f W, %5.2f miles, %6.2f feet AMSL\n",site_x.lat, site_x.lon, d_x/5280.0, h_x-earthradius);
+                               }
+
+                               else
+                               {
+                                       if (metric)
+                                               fprintf(fd,"\t%.4f S, %.4f W, %5.2f kilometers, %6.2f meters AMSL\n",-site_x.lat, site_x.lon, KM_PER_MILE*(d_x/5280.0), METERS_PER_FOOT*(h_x-earthradius));
+                                       else
+
+                                               fprintf(fd,"\t%.4f S, %.4f W, %5.2f miles, %6.2f feet AMSL\n",-site_x.lat, site_x.lon, d_x/5280.0, h_x-earthradius);
+                               }
+                       }
+
+                       while (cos_tx_angle>cos_test_angle)
+                       {
+                               h_r+=1;
+                               cos_test_angle=((h_r*h_r)+(d_x*d_x)-(h_x*h_x))/(2.0*h_r*d_x);
+                               cos_tx_angle=((h_r*h_r)+(d_tx*d_tx)-(h_t*h_t))/(2.0*h_r*d_tx);
+                       }
+
+                       if (f)
+                       {
+                               /* Now clear the first Fresnel zone, but don't
+                                  clutter the obstruction report. */
+
+                               cos_tx_angle_f1=((h_r_f1*h_r_f1)+(d_tx*d_tx)-(h_t*h_t))/(2.0*h_r_f1*d_tx);
+                               h_los=sqrt(h_r_f1*h_r_f1+d_x*d_x-2*h_r_f1*d_x*cos_tx_angle_f1);
+                               h_f=h_los-sqrt(lambda*d_x*(d_tx-d_x)/d_tx);
+
+                               while (h_f<h_x)
+                               {
+                                       h_r_f1+=1;
+                                       cos_tx_angle_f1=((h_r_f1*h_r_f1)+(d_tx*d_tx)-(h_t*h_t))/(2.0*h_r_f1*d_tx);
+                                       h_los=sqrt(h_r_f1*h_r_f1+d_x*d_x-2*h_r_f1*d_x*cos_tx_angle_f1);
+                                       h_f=h_los-sqrt(lambda*d_x*(d_tx-d_x)/d_tx);
+                               }
+
+                               /* And clear the 60% F1 zone. */
+
+                               cos_tx_angle_fpt6=((h_r_fpt6*h_r_fpt6)+(d_tx*d_tx)-(h_t*h_t))/(2.0*h_r_fpt6*d_tx);
+                               h_los=sqrt(h_r_fpt6*h_r_fpt6+d_x*d_x-2*h_r_fpt6*d_x*cos_tx_angle_fpt6);
+                               h_f=h_los-0.6*sqrt(lambda*d_x*(d_tx-d_x)/d_tx);
+
+                               while (h_f<h_x)
+                               {
+                                       h_r_fpt6+=1;
+                                       cos_tx_angle_fpt6=((h_r_fpt6*h_r_fpt6)+(d_tx*d_tx)-(h_t*h_t))/(2.0*h_r_fpt6*d_tx);
+                                       h_los=sqrt(h_r_fpt6*h_r_fpt6+d_x*d_x-2*h_r_fpt6*d_x*cos_tx_angle_fpt6);
+                                       h_f=h_los-0.6*sqrt(lambda*d_x*(d_tx-d_x)/d_tx);
+                               }
+                       }
+               }
+               
+               if (h_r>h_r_orig)
+               {
+                       if (metric)
+                               sprintf(string,"\nAntenna at %s must be raised to at least %.2f meters AGL\nto clear all obstructions detected by SPLAT!\n",rcvr.name, METERS_PER_FOOT*(h_r-GetElevation(rcvr)-earthradius));
+                       else
+                               sprintf(string,"\nAntenna at %s must be raised to at least %.2f feet AGL\nto clear all obstructions detected by SPLAT!\n",rcvr.name, h_r-GetElevation(rcvr)-earthradius);
+               }
+
+               else
+                       sprintf(string,"\nNo obstructions to LOS path due to terrain were detected by SPLAT!\n");
+
+               if (f)
+               {
+                       if (h_r_fpt6>h_r_orig)
+                       {
+                               if (metric)
+                                       sprintf(string_fpt6,"\nAntenna at %s must be raised to at least %.2f meters AGL\nto clear 60%c of the first Fresnel zone.\n",rcvr.name, METERS_PER_FOOT*(h_r_fpt6-GetElevation(rcvr)-earthradius),37);
+
+                               else
+                                       sprintf(string_fpt6,"\nAntenna at %s must be raised to at least %.2f feet AGL\nto clear 60%c of the first Fresnel zone.\n",rcvr.name, h_r_fpt6-GetElevation(rcvr)-earthradius,37);
+                       }
+
+                       else
+                               sprintf(string_fpt6,"\n60%c of the first Fresnel zone is clear.\n",37);
+       
+                       if (h_r_f1>h_r_orig)
+                       {
+                               if (metric)
+                                       sprintf(string_f1,"\nAntenna at %s must be raised to at least %.2f meters AGL\nto clear the first Fresnel zone.\n",rcvr.name, METERS_PER_FOOT*(h_r_f1-GetElevation(rcvr)-earthradius));
+
+                               else                    
+                                       sprintf(string_f1,"\nAntenna at %s must be raised to at least %.2f feet AGL\nto clear the first Fresnel zone.\n",rcvr.name, h_r_f1-GetElevation(rcvr)-earthradius);
+
+                       }
+
+                       else
+                           sprintf(string_f1,"\nThe first Fresnel zone is clear.\n\n");
+               }
+       }
+       
+       fprintf(fd,"%s",string);
+
+       if (f)
+       {
+               fprintf(fd,"%s",string_f1);
+               fprintf(fd,"%s",string_fpt6);
+       }
+
+       fclose(fd);
+
+       /* Display report summary on terminal */
+
+       /* Line-of-sight status */
+
+       fprintf(stdout,"%s",string);
+
+       if (f)
+       {
+               /* Fresnel zone status */
+
+               fprintf(stdout,"%s",string_f1);
+               fprintf(stdout,"%s",string_fpt6);
+       }
+
+       fprintf(stdout, "\nObstruction report written to: \"%s\"\n",report_name);
+
+       fflush(stdout);
+}
+
+void SiteReport(struct site xmtr)
+{
+       char    report_name[80];
+       double  terrain;
+       int     x, azi;
+       FILE    *fd;
+
+       sprintf(report_name,"%s-site_report.txt",xmtr.name);
+
+       for (x=0; report_name[x]!=0; x++)
+               if (report_name[x]==32 || report_name[x]==17 || report_name[x]==92 || report_name[x]==42 || report_name[x]==47)
+                       report_name[x]='_';     
+
+       fd=fopen(report_name,"w");
+
+       fprintf(fd,"\n\t--==[ SPLAT! v%s Site Analysis Report For: %s ]==--\n\n",splat_version,xmtr.name);
+
+       fprintf(fd,"---------------------------------------------------------------------------\n\n");
+
+       if (xmtr.lat>=0.0)
+       {
+               fprintf(fd,"Site location: %.4f North / %.4f West",xmtr.lat, xmtr.lon);
+               fprintf(fd, " (%s N / ",dec2dms(xmtr.lat));
+       }
+
+       else
+       {
+               fprintf(fd,"Site location: %.4f South / %.4f West",-xmtr.lat, xmtr.lon);
+               fprintf(fd, " (%s S / ",dec2dms(xmtr.lat));
+       }
+
+       fprintf(fd, "%s W)\n",dec2dms(xmtr.lon));
+
+       if (metric)
+       {
+               fprintf(fd,"Ground elevation: %.2f meters AMSL\n",METERS_PER_FOOT*GetElevation(xmtr));
+               fprintf(fd,"Antenna height: %.2f meters AGL / %.2f meters AMSL\n",METERS_PER_FOOT*xmtr.alt, METERS_PER_FOOT*(xmtr.alt+GetElevation(xmtr)));
+       }
+
+       else
+       {
+               fprintf(fd,"Ground elevation: %.2f feet AMSL\n",GetElevation(xmtr));
+               fprintf(fd,"Antenna height: %.2f feet AGL / %.2f feet AMSL\n",xmtr.alt, xmtr.alt+GetElevation(xmtr));
+       }
+
+       terrain=haat(xmtr);
+
+       if (terrain>-4999.0)
+       {
+               if (metric)
+                       fprintf(fd,"Antenna height above average terrain: %.2f meters\n\n",METERS_PER_FOOT*terrain);
+               else
+                       fprintf(fd,"Antenna height above average terrain: %.2f feet\n\n",terrain);
+
+               /* Display the average terrain between 2 and 10 miles
+                  from the transmitter site at azimuths of 0, 45, 90,
+                  135, 180, 225, 270, and 315 degrees. */
+
+               for (azi=0; azi<=315; azi+=45)
+               {
+                       fprintf(fd,"Average terrain at %3d degrees azimuth: ",azi);
+                       terrain=AverageTerrain(xmtr,(double)azi,2.0,10.0);
+
+                       if (terrain>-4999.0)
+                       {
+                               if (metric)
+                                       fprintf(fd,"%.2f meters AMSL\n",METERS_PER_FOOT*terrain);
+                               else
+                                       fprintf(fd,"%.2f feet AMSL\n",terrain);
+                       }
+
+                       else
+                               fprintf(fd,"No terrain\n");
+               }
+       }
+
+       fprintf(fd,"\n---------------------------------------------------------------------------\n\n");
+       fclose(fd);
+       fprintf(stdout,"\nSite analysis report written to: \"%s\"\n",report_name);
+}
+
+void LoadTopoData(int max_lon, int min_lon, int max_lat, int min_lat)
+{
+       /* This function loads the SDF files required
+          to cover the limits of the region specified. */ 
+
+       int     x, y, width, ymin, ymax;
+
+       width=ReduceAngle(max_lon-min_lon);
+
+       if ((max_lon-min_lon)<=180.0)
+       {
+               for (y=0; y<=width; y++)
+                       for (x=min_lat; x<=max_lat; x++)
+                       {
+                               ymin=(int)(min_lon+(double)y);
+
+                               while (ymin<0)
+                                       ymin+=360;
+
+                               while (ymin>=360)
+                                       ymin-=360;
+
+                               ymax=ymin+1;
+
+                               while (ymax<0)
+                                       ymax+=360;
+
+                               while (ymax>=360)
+                                       ymax-=360;
+
+                               sprintf(string,"%d:%d:%d:%d",x, x+1, ymin, ymax);
+                               LoadSDF(string);
+                       }
+       }
+
+       else
+       {
+               for (y=0; y<=width; y++)
+                       for (x=min_lat; x<=max_lat; x++)
+                       {
+                               ymin=max_lon+y;
+
+                               while (ymin<0)
+                                       ymin+=360;
+
+                               while (ymin>=360)
+                                       ymin-=360;
+                                       
+                               ymax=ymin+1;
+
+                               while (ymax<0)
+                                       ymax+=360;
+
+                               while (ymax>=360)
+                                       ymax-=360;
+
+                               sprintf(string,"%d:%d:%d:%d",x, x+1, ymin, ymax);
+                               LoadSDF(string);
+                       }
+       }
+}
+
+int LoadPLI(char *filename)
+{
+       int     error=0, max_west, min_west, max_north, min_north;
+       char    string[80], *pointer=NULL;
+       double  latitude=0.0, longitude=0.0, azimuth=0.0, elevation=0.0,
+               loss=0.0;
+       FILE    *fd;
+
+       fd=fopen(filename,"r");
 
-       haavt=haat(rcvr);
+       if (fd!=NULL)
+       {
+               fgets(string,78,fd);
+               pointer=strchr(string,';');
 
-       if (haavt>-4999.0)
-               fprintf(fd,"Antenna height above average terrain: %.2f feet\n",haavt);
+               if (pointer!=NULL)
+                       *pointer=0;
+
+               sscanf(string,"%d, %d",&max_west, &min_west);
 
-       fprintf(fd,"Distance to %s: %.2f miles.\n",xmtr.name,Distance(xmtr,rcvr));
-       fprintf(fd,"Azimuth to %s: %.2f degrees.\n",xmtr.name,Azimuth(rcvr,xmtr));
+               fgets(string,78,fd);
+               pointer=strchr(string,';');
 
-       angle=ElevationAngle(rcvr,xmtr);
+               if (pointer!=NULL)
+                       *pointer=0;
 
-       if (angle>=0.0)
-               fprintf(fd,"Angle of elevation between %s and %s: %+.4f degrees.\n",rcvr.name,xmtr.name,angle);
+               sscanf(string,"%d, %d",&max_north, &min_north);
 
-       if (angle<0.0)
-               fprintf(fd,"Angle of depression between %s and %s: %+.4f degrees.\n",rcvr.name,xmtr.name,angle);
+               fgets(string,78,fd);
+               pointer=strchr(string,';');
 
-       fprintf(fd,"\n-------------------------------------------------------------------------\n\n");
+               if (pointer!=NULL)
+                       *pointer=0;
 
-       if (report=='y')
-       {
-               /* Write an Obstruction Report */
+               LoadTopoData(max_west-1, min_west, max_north-1, min_north);
 
-               new_site=rcvr;
-               result=los(xmtr,rcvr);
-               result2=result;
-               result2.alt-=1;
-               block=result.name[0];
+               fprintf(stdout,"\nReading \"%s\"... ",filename);
+               fflush(stdout);
 
-               if (block=='*')
-                       fprintf(fd,"SPLAT! detected obstructions at:\n\n");
+               fscanf(fd,"%lf, %lf, %lf, %lf, %lf",&latitude, &longitude, &azimuth, &elevation, &loss);
 
-               while (block=='*')
+               while (feof(fd)==0)
                {
-                       if (result.lat!=result2.lat || result.lon!=result2.lon || result.alt!=result2.alt)
-                       {
-                               if (result.lat>=0.0)
-                                       fprintf(fd,"\t%.4f N, %.4f W, %5.2f miles, %6.2f feet AMSL.\n",result.lat, result.lon, Distance(rcvr,result), result.alt);
-                               else
+                       if (loss>225.0)
+                               loss=225.0;
 
-                                       fprintf(fd,"\t%.4f S, %.4f W, %5.2f miles, %6.2f feet AMSL.\n",-result.lat, result.lon, Distance(rcvr,result), result.alt);
-                       }
+                       if (loss<75.0)
+                               loss=75.0;
 
-                       result2=result;
-                       new_site.alt+=1.0;
+                       loss-=75.0;
+                       loss/=10.0;
+                       loss+=1.0;
 
-                       /* Can you hear me now? :-) */
+                       if (loss<=(double)maxdB)
+                               OrMask(latitude,longitude,((unsigned char)(loss))<<3);
 
-                       result=los(xmtr,new_site);
-                       block=result.name[0];
+                       fscanf(fd,"%lf, %lf, %lf, %lf, %lf",&latitude, &longitude, &azimuth, &elevation, &loss);
                }
 
-               if (new_site.alt!=rcvr.alt)
-                       sprintf(string,"\nAntenna at %s must be raised to at least %.2f feet AGL\nto clear all obstructions detected by SPLAT!\n\n",rcvr.name, new_site.alt);
-               else
-                       sprintf(string,"\nNo obstructions due to terrain were detected by SPLAT!\n\n");
-       }
-
-       fprintf(fd,"%s",string);
+               fclose(fd);
 
-       fclose(fd);
+               fprintf(stdout," Done!\n");
+               fflush(stdout);
+       }
 
-       /* Display LOS status to terminal */
+       else
+               error=1;
 
-       fprintf(stdout,"%sObstruction report written to: \"%s\"\n",string,report_name);
-       fflush(stdout);
+       return error;
 }
 
-void SiteReport(struct site xmtr)
+void WriteKML(struct site source, struct site destination)
 {
-       char report_name[80];
-       double terrain;
-       int x, azi;
-       FILE *fd;
+       int     x, y;
+       char    block, report_name[80];
+       double  distance, rx_alt, tx_alt, cos_xmtr_angle,
+               azimuth, cos_test_angle, test_alt;
+       FILE    *fd=NULL;
 
-       sprintf(report_name,"%s-site_report.txt",xmtr.name);
+       ReadPath(source,destination);
+
+       sprintf(report_name,"%s-to-%s.kml",source.name,destination.name);
 
        for (x=0; report_name[x]!=0; x++)
                if (report_name[x]==32 || report_name[x]==17 || report_name[x]==92 || report_name[x]==42 || report_name[x]==47)
@@ -3599,99 +5150,260 @@ void SiteReport(struct site xmtr)
 
        fd=fopen(report_name,"w");
 
-       fprintf(fd,"\n\t--==[ SPLAT! v%s Site Analysis Report For: %s ]==--\n\n",splat_version,xmtr.name);
+       fprintf(fd,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+       fprintf(fd,"<kml xmlns=\"http://earth.google.com/kml/2.0\">\n");
+       fprintf(fd,"<!-- Generated by SPLAT! Version %s -->\n",splat_version);
+       fprintf(fd,"<Folder>\n");
+       fprintf(fd,"<name>SPLAT! Path</name>\n");
+       fprintf(fd,"<open>1</open>\n");
+       fprintf(fd,"<description>Path Between %s and %s</description>\n",source.name,destination.name);
 
-       fprintf(fd,"---------------------------------------------------------------------------\n\n");
+       fprintf(fd,"<Placemark>\n");
+       fprintf(fd,"    <name>%s</name>\n",source.name);
+       fprintf(fd,"    <description>\n");
+       fprintf(fd,"       Transmit Site\n");
 
-       if (xmtr.lat>=0.0)
-       {
-               fprintf(fd,"Site location: %.4f North / %.4f West",xmtr.lat, xmtr.lon);
-               fprintf(fd, " (%s N / ",dec2dms(xmtr.lat));
-       }
+       if (source.lat>=0.0)
+               fprintf(fd,"       <BR>%s North</BR>\n",dec2dms(source.lat));
+       else
+               fprintf(fd,"       <BR>%s South</BR>\n",dec2dms(source.lat));
+
+       fprintf(fd,"       <BR>%s West</BR>\n",dec2dms(source.lon));
 
+       azimuth=Azimuth(source,destination);
+       distance=Distance(source,destination);
+
+       if (metric)
+               fprintf(fd,"       <BR>%.2f km",distance*KM_PER_MILE);
        else
-       {
-               fprintf(fd,"Site location: %.4f South / %.4f West",-xmtr.lat, xmtr.lon);
-               fprintf(fd, " (%s S / ",dec2dms(xmtr.lat));
-       }
+               fprintf(fd,"       <BR>%.2f miles",distance);
+
+       fprintf(fd," to %s</BR>\n       <BR>toward an azimuth of %.2f%c</BR>\n",destination.name,azimuth,176);
+
+       fprintf(fd,"    </description>\n");
+       fprintf(fd,"    <visibility>1</visibility>\n");
+       fprintf(fd,"    <Style>\n");
+       fprintf(fd,"      <IconStyle>\n");
+       fprintf(fd,"        <Icon>\n");
+       fprintf(fd,"          <href>root://icons/palette-5.png</href>\n");
+       fprintf(fd,"          <x>224</x>\n");
+       fprintf(fd,"          <y>224</y>\n");
+       fprintf(fd,"          <w>32</w>\n");
+       fprintf(fd,"          <h>32</h>\n");
+       fprintf(fd,"        </Icon>\n");
+       fprintf(fd,"      </IconStyle>\n");
+       fprintf(fd,"    </Style>\n");
+       fprintf(fd,"    <Point>\n");
+       fprintf(fd,"      <extrude>1</extrude>\n");
+       fprintf(fd,"      <altitudeMode>relativeToGround</altitudeMode>\n");
+       fprintf(fd,"      <coordinates>%f,%f,30</coordinates>\n",(source.lon<180.0?-source.lon:360.0-source.lon),source.lat);
+       fprintf(fd,"    </Point>\n");
+       fprintf(fd,"</Placemark>\n");
+
+       fprintf(fd,"<Placemark>\n");
+       fprintf(fd,"    <name>%s</name>\n",destination.name);
+       fprintf(fd,"    <description>\n");
+       fprintf(fd,"       Receive Site\n");
 
-       fprintf(fd, "%s W)\n",dec2dms(xmtr.lon));
-       fprintf(fd,"Ground elevation: %.2f feet AMSL\n",GetElevation(xmtr));
-       fprintf(fd,"Antenna height: %.2f feet AGL / %.2f feet AMSL\n",xmtr.alt, xmtr.alt+GetElevation(xmtr));
+       if (destination.lat>=0.0)
+               fprintf(fd,"       <BR>%s North</BR>\n",dec2dms(destination.lat));
+       else
+               fprintf(fd,"       <BR>%s South</BR>\n",dec2dms(destination.lat));
 
-       terrain=haat(xmtr);
+       fprintf(fd,"       <BR>%s West</BR>\n",dec2dms(destination.lon));
 
-       if (terrain>-4999.0)
+
+       if (metric)
+               fprintf(fd,"       <BR>%.2f km",distance*KM_PER_MILE);
+       else
+               fprintf(fd,"       <BR>%.2f miles",distance);
+
+       fprintf(fd," to %s</BR>\n       <BR>toward an azimuth of %.2f%c</BR>\n",source.name,Azimuth(destination,source),176);
+
+       fprintf(fd,"    </description>\n");
+       fprintf(fd,"    <visibility>1</visibility>\n");
+       fprintf(fd,"    <Style>\n");
+       fprintf(fd,"      <IconStyle>\n");
+       fprintf(fd,"        <Icon>\n");
+       fprintf(fd,"          <href>root://icons/palette-5.png</href>\n");
+       fprintf(fd,"          <x>224</x>\n");
+       fprintf(fd,"          <y>224</y>\n");
+       fprintf(fd,"          <w>32</w>\n");
+       fprintf(fd,"          <h>32</h>\n");
+       fprintf(fd,"        </Icon>\n");
+       fprintf(fd,"      </IconStyle>\n");
+       fprintf(fd,"    </Style>\n");
+       fprintf(fd,"    <Point>\n");
+       fprintf(fd,"      <extrude>1</extrude>\n");
+       fprintf(fd,"      <altitudeMode>relativeToGround</altitudeMode>\n");
+       fprintf(fd,"      <coordinates>%f,%f,30</coordinates>\n",(destination.lon<180.0?-destination.lon:360.0-destination.lon),destination.lat);
+       fprintf(fd,"    </Point>\n");
+       fprintf(fd,"</Placemark>\n");
+
+       fprintf(fd,"<Placemark>\n");
+       fprintf(fd,"<name>Point-to-Point Path</name>\n");
+       fprintf(fd,"  <visibility>1</visibility>\n");
+       fprintf(fd,"  <open>0</open>\n");
+       fprintf(fd,"  <Style>\n");
+       fprintf(fd,"    <LineStyle>\n");
+       fprintf(fd,"      <color>7fffffff</color>\n");
+       fprintf(fd,"    </LineStyle>\n");
+       fprintf(fd,"    <PolyStyle>\n");
+       fprintf(fd,"       <color>7fffffff</color>\n");
+       fprintf(fd,"    </PolyStyle>\n");
+       fprintf(fd,"  </Style>\n");
+       fprintf(fd,"  <LineString>\n");
+       fprintf(fd,"    <extrude>1</extrude>\n");
+       fprintf(fd,"    <tessellate>1</tessellate>\n");
+       fprintf(fd,"    <altitudeMode>relativeToGround</altitudeMode>\n");
+       fprintf(fd,"    <coordinates>\n");
+
+       for (x=0; x<path.length; x++)
+               fprintf(fd,"      %f,%f,5\n",(path.lon[x]<180.0?-path.lon[x]:360.0-path.lon[x]),path.lat[x]);
+
+       fprintf(fd,"    </coordinates>\n");
+       fprintf(fd,"   </LineString>\n");
+       fprintf(fd,"</Placemark>\n");
+
+       fprintf(fd,"<Placemark>\n");
+       fprintf(fd,"<name>Line-of-Sight Path</name>\n");
+       fprintf(fd,"  <visibility>1</visibility>\n");
+       fprintf(fd,"  <open>0</open>\n");
+       fprintf(fd,"  <Style>\n");
+       fprintf(fd,"    <LineStyle>\n");
+       fprintf(fd,"      <color>ff00ff00</color>\n");
+       fprintf(fd,"    </LineStyle>\n");
+       fprintf(fd,"    <PolyStyle>\n");
+       fprintf(fd,"       <color>7f00ff00</color>\n");
+       fprintf(fd,"    </PolyStyle>\n");
+       fprintf(fd,"  </Style>\n");
+       fprintf(fd,"  <LineString>\n");
+       fprintf(fd,"    <extrude>1</extrude>\n");
+       fprintf(fd,"    <tessellate>1</tessellate>\n");
+       fprintf(fd,"    <altitudeMode>relativeToGround</altitudeMode>\n");
+       fprintf(fd,"    <coordinates>\n");
+
+       /* Walk across the "path", indentifying obstructions along the way */
+
+       for (y=0; y<path.length; y++)
        {
-               fprintf(fd,"Antenna height above average terrain: %.2f feet\n\n",terrain);
+               distance=5280.0*path.distance[y];
+               tx_alt=earthradius+source.alt+path.elevation[0];
+               rx_alt=earthradius+destination.alt+path.elevation[y];
 
-               /* Display the average terrain between 2 and 10 miles
-                  from the transmitter site at azimuths of 0, 45, 90,
-                  135, 180, 225, 270, and 315 degrees. */
+               /* Calculate the cosine of the elevation of the
+                  transmitter as seen at the temp rx point. */
 
-               for (azi=0; azi<=315; azi+=45)
+               cos_xmtr_angle=((rx_alt*rx_alt)+(distance*distance)-(tx_alt*tx_alt))/(2.0*rx_alt*distance);
+
+               for (x=y, block=0; x>=0 && block==0; x--)
                {
-                       fprintf(fd,"Average terrain at %3d degrees azimuth: ",azi);
-                       terrain=AverageTerrain(xmtr,(double)azi,2.0,10.0);
+                       distance=5280.0*(path.distance[y]-path.distance[x]);
+                       test_alt=earthradius+path.elevation[x];
 
-                       if (terrain>-4999.0)
-                               fprintf(fd,"%.2f feet AMSL\n",terrain);
-                       else
-                               fprintf(fd,"No terrain\n");
+                       cos_test_angle=((rx_alt*rx_alt)+(distance*distance)-(test_alt*test_alt))/(2.0*rx_alt*distance);
+
+                       /* Compare these two angles to determine if
+                          an obstruction exists.  Since we're comparing
+                          the cosines of these angles rather than
+                          the angles themselves, the following "if"
+                          statement is reversed from what it would
+                          be if the actual angles were compared. */
+
+                       if (cos_xmtr_angle>cos_test_angle)
+                               block=1;
                }
+
+               if (block)
+                       fprintf(fd,"      %f,%f,-30\n",(path.lon[y]<180.0?-path.lon[y]:360.0-path.lon[y]),path.lat[y]);
+               else
+                       fprintf(fd,"      %f,%f,5\n",(path.lon[y]<180.0?-path.lon[y]:360.0-path.lon[y]),path.lat[y]);
        }
 
-       fprintf(fd,"\n---------------------------------------------------------------------------\n\n");
+       fprintf(fd,"    </coordinates>\n");
+       fprintf(fd,"  </LineString>\n");
+       fprintf(fd,"</Placemark>\n");
+
+       fprintf(fd,"    <LookAt>\n");
+       fprintf(fd,"      <longitude>%f</longitude>\n",(source.lon<180.0?-source.lon:360.0-source.lon));
+       fprintf(fd,"      <latitude>%f</latitude>\n",source.lat);
+       fprintf(fd,"      <range>300.0</range>\n");
+       fprintf(fd,"      <tilt>45.0</tilt>\n");
+       fprintf(fd,"      <heading>%f</heading>\n",azimuth);
+       fprintf(fd,"    </LookAt>\n");
+
+       fprintf(fd,"</Folder>\n");
+       fprintf(fd,"</kml>\n");
+
        fclose(fd);
-       fprintf(stdout,"\nSite analysis report written to: \"%s\"\n",report_name);
+
+       fprintf(stdout, "KML file written to: \"%s\"\n",report_name);
+
+       fflush(stdout);
 }
 
 int main(char argc, char *argv[])
 {
-       int             x, y, ymin, ymax, width, z=0, min_lat, min_lon,
-                       max_lat, max_lon, rxlat, rxlon, txlat, txlon,
-                       west_min, west_max, north_min, north_max;
+       int             x, y, z=0, min_lat, min_lon, max_lat, max_lon,
+                       rxlat, rxlon, txlat, txlon, west_min, west_max,
+                       north_min, north_max;
 
        unsigned char   coverage=0, LRmap=0, ext[20], terrain_plot=0,
                        elevation_plot=0, height_plot=0, 
                        longley_plot=0, cities=0, bfs=0, txsites=0,
-                       count, report='y';
+                       count, report='y', norm=0, topomap=0, geo=0,
+                       kml=0;
  
        char            mapfile[255], header[80], city_file[5][255], 
                        elevation_file[255], height_file[255], 
                        longley_file[255], terrain_file[255],
                        string[255], rxfile[255], *env=NULL,
                        txfile[255], map=0, boundary_file[5][255],
-                       rxsite=0;
+                       udt_file[255], rxsite=0, plo_filename[255],
+                       pli_filename[255], nf=0;
 
        double          altitude=0.0, altitudeLR=0.0, tx_range=0.0,
                        rx_range=0.0, deg_range=0.0, deg_limit,
-                       deg_range_lon, er_mult;
+                       deg_range_lon, er_mult, freq=0.0;
 
        struct          site tx_site[4], rx_site;
 
        FILE            *fd;
 
-       sprintf(header,"\n\t\t--==[ Welcome To SPLAT! v%s ]==--\n\n", splat_version);
 
        if (argc==1)
        {
-               fprintf(stdout, "%sAvailable Options...\n\n\t -t txsite(s).qth (max of 4)\n\t -r rxsite.qth\n",header);
-               fprintf(stdout,"\t -c plot coverage area(s) of TX(s) based on an RX antenna at X feet AGL\n");
-               fprintf(stdout,"\t -L plot path loss map of TX based on an RX antenna at X feet AGL\n");
-               fprintf(stdout,"\t -s filename(s) of city/site file(s) to import (max of 5)\n");
-               fprintf(stdout,"\t -b filename(s) of cartographic boundary file(s) to import (max of 5)\n");
-               fprintf(stdout,"\t -p filename of terrain profile graph to plot\n");
-               fprintf(stdout,"\t -e filename of terrain elevation graph to plot\n");
-               fprintf(stdout,"\t -h filename of terrain height graph to plot\n");
-               fprintf(stdout,"\t -l filename of Longley-Rice graph to plot\n");
-               fprintf(stdout,"\t -o filename of topographic map to generate (.ppm)\n");
-               fprintf(stdout,"\t -d sdf file directory path (overrides path in ~/.splat_path file)\n");
-               fprintf(stdout,"\t -n no analysis, brief report\n\t -N no analysis, no report\n");
-               fprintf(stdout,"\t -m earth radius multiplier\n");
-               fprintf(stdout,"\t -R modify default range for -c or -L (miles)\n");
-               fprintf(stdout,"\t-db maximum loss contour to display on path loss maps (80-230 dB)\n\n");
-
+               fprintf(stdout,"\n\t\t --==[ SPLAT! v%s Available Options... ]==--\n\n",splat_version);
+               fprintf(stdout,"       -t txsite(s).qth (max of 4)\n");
+               fprintf(stdout,"       -r rxsite.qth\n");
+               fprintf(stdout,"       -c plot coverage of TX(s) with an RX antenna at X feet/meters AGL\n");
+               fprintf(stdout,"       -L plot path loss map of TX based on an RX at X feet/meters AGL\n");
+               fprintf(stdout,"       -s filename(s) of city/site file(s) to import (5 max)\n");
+               fprintf(stdout,"       -b filename(s) of cartographic boundary file(s) to import (max of 5)\n");
+               fprintf(stdout,"       -p filename of terrain profile graph to plot\n");
+               fprintf(stdout,"       -e filename of terrain elevation graph to plot\n");
+               fprintf(stdout,"       -h filename of terrain height graph to plot\n");
+               fprintf(stdout,"       -H filename of normalized terrain height graph to plot\n");
+               fprintf(stdout,"       -l filename of Longley-Rice graph to plot\n");
+               fprintf(stdout,"       -o filename of topographic map to generate (.ppm)\n");
+               fprintf(stdout,"       -u filename of user-defined terrain file to import\n");
+               fprintf(stdout,"       -d sdf file directory path (overrides path in ~/.splat_path file)\n");
+               fprintf(stdout,"       -n no analysis, brief report\n");
+               fprintf(stdout,"       -N no analysis, no report\n");
+               fprintf(stdout,"       -m earth radius multiplier\n");
+               fprintf(stdout,"       -f frequency for Fresnel zone calculation (MHz)\n");
+               fprintf(stdout,"       -R modify default range for -c or -L (miles/kilometers)\n");
+               fprintf(stdout,"      -db maximum loss contour to display on path loss maps (80-230 dB)\n");
+               fprintf(stdout,"      -nf do not plot Fresnel zones in height plots\n");
+               fprintf(stdout,"     -plo filename of path-loss output file\n");
+               fprintf(stdout,"     -pli filename of path-loss input file\n");
+               fprintf(stdout,"     -udt filename of user defined terrain input file\n");
+               fprintf(stdout,"     -geo generate an Xastir .geo georeference file (with .ppm output)\n");
+               fprintf(stdout,"     -kml generate a Google Earth .kml file (for point-to-point links)\n");
+               fprintf(stdout,"  -metric employ metric rather than imperial units for all user I/O\n\n");
+
+               fprintf(stdout,"If that flew by too fast, consider piping the output through 'less':\n");
+               fprintf(stdout,"\n\tsplat | less\n\n");
                fprintf(stdout,"Type 'man splat', or see the documentation for more details.\n\n");
                fflush(stdout);
                return 1;
@@ -3699,6 +5411,7 @@ int main(char argc, char *argv[])
 
        y=argc-1;
 
+       metric=0;
        rxfile[0]=0;
        txfile[0]=0;
        string[0]=0;
@@ -3706,11 +5419,17 @@ int main(char argc, char *argv[])
        elevation_file[0]=0;
        terrain_file[0]=0;
        sdf_path[0]=0;
+       udt_file[0]=0;
        path.length=0;
+       LR.frq_mhz=0.0;
        rx_site.lat=91.0;
        rx_site.lon=361.0;
+       plo_filename[0]=0;
+       pli_filename[0]=0;
        earthradius=EARTHRADIUS;
 
+       sprintf(header,"\n\t\t--==[ Welcome To SPLAT! v%s ]==--\n\n", splat_version);
+
        for (x=0; x<4; x++)
        {
                tx_site[x].lat=91.0;
@@ -3727,7 +5446,6 @@ int main(char argc, char *argv[])
                dem[x].max_west=-1;
        }
 
-
        /* Scan for command line arguments */
 
        for (x=1; x<=y; x++)
@@ -3775,6 +5493,14 @@ int main(char argc, char *argv[])
                        map=1;
                }
 
+               if (strcmp(argv[x],"-u")==0)
+               {
+                       z=x+1;
+
+                       if (z<=y && argv[z][0] && argv[z][0]!='-')
+                               strncpy(udt_file,argv[z],253);
+               }
+
                if (strcmp(argv[x],"-c")==0)
                {
                        z=x+1;
@@ -3786,7 +5512,7 @@ int main(char argc, char *argv[])
                        }
                }
 
-               if (strcmp(argv[x],"-db")==0)
+               if (strcmp(argv[x],"-db")==0 || strcmp(argv[x],"-dB")==0)
                {
                        z=x+1;
 
@@ -3826,7 +5552,7 @@ int main(char argc, char *argv[])
                        }
                }
 
-               if (strcmp(argv[x],"-h")==0)
+               if (strcmp(argv[x],"-h")==0 || strcmp(argv[x],"-H")==0)
                {
                        z=x+1;
 
@@ -3835,26 +5561,37 @@ int main(char argc, char *argv[])
                                strncpy(height_file,argv[z],253);
                                height_plot=1;
                        }
+
+                       if (strcmp(argv[x],"-H")==0)
+                               norm=1;
+                       else
+                               norm=0;
                }
 
                if (strcmp(argv[x],"-n")==0)
                {
-                       if (z<=y && argv[z][0] && argv[z][0]!='-')
-                       {
-                               report='n';
-                               map=1;
-                       }
+                       report='n';
+                       map=1;
                }
 
                if (strcmp(argv[x],"-N")==0)
                {
-                       if (z<=y && argv[z][0] && argv[z][0]!='-');
-                       {
-                               report='N';
-                               map=1;
-                       }
+                       report='N';
+                       map=1;
                }
 
+               if (strcmp(argv[x],"-metric")==0)
+                       metric=1;
+
+               if (strcmp(argv[x],"-geo")==0)
+                       geo=1;
+
+               if (strcmp(argv[x],"-kml")==0)
+                       kml=1;
+
+               if (strcmp(argv[x],"-nf")==0)
+                       nf=1;
+
                if (strcmp(argv[x],"-d")==0)
                {
                        z=x+1;
@@ -3876,6 +5613,7 @@ int main(char argc, char *argv[])
                                txsites++;
                                z++;
                        }
+
                        z--;
                }
 
@@ -3936,6 +5674,7 @@ int main(char argc, char *argv[])
                                cities++;
                                z++;
                        }
+
                        z--;
                }
 
@@ -3951,8 +5690,41 @@ int main(char argc, char *argv[])
                                bfs++;
                                z++;
                        }
+
                        z--;
                }
+               
+               if (strcmp(argv[x],"-f")==0)
+               {
+                       z=x+1;
+
+                       if (z<=y && argv[z][0] && argv[z][0]!='-')
+                       {
+                               sscanf(argv[z],"%lf",&freq);
+
+                               if (freq<20)
+                                       freq=20;
+
+                               if (freq>20e3)
+                                       freq=20e3;
+                       }                        
+               }
+
+               if (strcmp(argv[x],"-plo")==0)
+               {
+                       z=x+1;
+
+                       if (z<=y && argv[z][0] && argv[z][0]!='-')
+                               strncpy(plo_filename,argv[z],253);
+               }
+
+               if (strcmp(argv[x],"-pli")==0)
+               {
+                       z=x+1;
+
+                       if (z<=y && argv[z][0] && argv[z][0]!='-')
+                               strncpy(pli_filename,argv[z],253);
+               }
        }
 
        /* Perform some error checking on the arguments
@@ -3981,13 +5753,34 @@ int main(char argc, char *argv[])
                exit (-1);
        }
 
-       if ((coverage+LRmap)==0 && rx_site.lat==91.0 && rx_site.lon==361.0)
+       if ((coverage+LRmap+pli_filename[0])==0 && rx_site.lat==91.0 && rx_site.lon==361.0)
        {
-               fprintf(stderr,"\n%c*** ERROR: No receiver site found or specified!\n\n",7);
-               exit (-1);
+               if (max_range!=0.0 && txsites!=0)
+               {
+                       /* Plot topographic map of radius "max_range" */
+
+                       map=0;
+                       topomap=1;
+                       report='N';
+               }
+
+               else
+               {
+                       fprintf(stderr,"\n%c*** ERROR: No receiver site found or specified!\n\n",7);
+                       exit (-1);
+               }
        }
 
-       /* No errors were detected.  Whew!  :-) */
+       /* No major errors were detected.  Whew!  :-) */
+
+       /* Adjust input parameters if -metric option is used */
+
+       if (metric)
+       {
+               altitudeLR/=METERS_PER_FOOT;    /* meters --> feet */
+               max_range/=KM_PER_MILE;         /* kilometers --> miles */
+               altitude/=METERS_PER_FOOT;      /* meters --> feet */
+       }
 
        /* If no SDF path was specified on the command line (-d), check
           for a path specified in the $HOME/.splat_path file.  If the
@@ -4032,6 +5825,33 @@ int main(char argc, char *argv[])
        fprintf(stdout,"%s",header);
        fflush(stdout);
 
+       if (pli_filename[0])
+       {
+               y=LoadPLI(pli_filename);
+
+               for (x=0; x<txsites; x++)
+                       PlaceMarker(tx_site[x]);
+
+               if (rxsite)
+                       PlaceMarker(rx_site);
+
+               if (bfs)
+               {
+                       for (x=0; x<bfs; x++)
+                               LoadBoundaries(boundary_file[x]);
+               }
+
+               if (cities)
+               {
+                       for (x=0; x<cities; x++)
+                               LoadCities(city_file[x]);
+               }
+
+               WritePPMLR(mapfile,geo);
+
+               exit(0);
+       }
+
        x=0;
        y=0;
 
@@ -4077,64 +5897,11 @@ int main(char argc, char *argv[])
                        max_lon=rxlon;
        }
 
-
        /* Load the required SDF files */ 
 
-       width=ReduceAngle(max_lon-min_lon);
-
-       if ((max_lon-min_lon)<=180.0)
-       {
-               for (y=0; y<=width; y++)
-                       for (x=min_lat; x<=max_lat; x++)
-                       {
-                               ymin=(int)(min_lon+(double)y);
-
-                               while (ymin<0)
-                                       ymin+=360;
-
-                               while (ymin>=360)
-                                       ymin-=360;
-
-                               ymax=ymin+1;
-
-                               while (ymax<0)
-                                       ymax+=360;
-
-                               while (ymax>=360)
-                                       ymax-=360;
-
-                               sprintf(string,"%d:%d:%d:%d",x, x+1, ymin, ymax);
-                               LoadSDF(string);
-                       }
-       }
-
-       else
-       {
-               for (y=0; y<=width; y++)
-                       for (x=min_lat; x<=max_lat; x++)
-                       {
-                               ymin=max_lon+y;
-
-                               while (ymin<0)
-                                       ymin+=360;
-
-                               while (ymin>=360)
-                                       ymin-=360;
-                                       
-                               ymax=ymin+1;
-
-                               while (ymax<0)
-                                       ymax+=360;
-
-                               while (ymax>=360)
-                                       ymax-=360;
-
-                               sprintf(string,"%d:%d:%d:%d",x, x+1, ymin, ymax);
-                               LoadSDF(string);
-                       }
-       }
+       LoadTopoData(max_lon, min_lon, max_lat, min_lat);
 
-       if (coverage | LRmap)
+       if (coverage | LRmap | topomap)
        {
                if (LRmap)
                        txsites=1;
@@ -4237,68 +6004,22 @@ int main(char argc, char *argv[])
                                max_lon=west_max;
                }
 
+               /* Load any additional SDF files, if required */ 
 
-               /* Load the required SDF files */ 
-
-               width=ReduceAngle(max_lon-min_lon);
-
-               if ((max_lon-min_lon)<=180.0)
-               {
-                       for (y=0; y<=width; y++)
-                               for (x=min_lat; x<=max_lat; x++)
-                               {
-                                       ymin=(int)(min_lon+(double)y);
-
-                                       while (ymin<0)
-                                               ymin+=360;
-
-                                       while (ymin>=360)
-                                               ymin-=360;
-
-                                       ymax=ymin+1;
-
-                                       while (ymax<0)
-                                               ymax+=360;
-
-                                       while (ymax>=360)
-                                               ymax-=360;
-
-                                       sprintf(string,"%d:%d:%d:%d",x, x+1, ymin, ymax);
-                                       LoadSDF(string);
-                               }
-               }
-
-               else
-               {
-                       for (y=0; y<=width; y++)
-                               for (x=min_lat; x<=max_lat; x++)
-                               {
-                                       ymin=(int)(max_lon+(double)y);
-
-                                       while (ymin<0)
-                                               ymin+=360;
-
-                                       while (ymin>=360)
-                                               ymin-=360;
-                                       
-                                       ymax=ymin+1;
-
-                                       while (ymax<0)
-                                               ymax+=360;
-
-                                       while (ymax>=360)
-                                               ymax-=360;
-
-                                       sprintf(string,"%d:%d:%d:%d",x, x+1, ymin, ymax);
-                                       LoadSDF(string);
-                               }
-               }
+               LoadTopoData(max_lon, min_lon, max_lat, min_lat);
        }
 
+       if (udt_file[0])
+               LoadUDT(udt_file);
 
-       if (mapfile[0])
+       if (mapfile[0] && topomap==0)
                map=1;
 
+       if (freq==0.0 && nf==0)
+               freq=LR.frq_mhz;
+       else
+               freq=0.0;
+
        if (coverage | LRmap)
        {
                for (x=0; x<txsites; x++)
@@ -4307,7 +6028,7 @@ int main(char argc, char *argv[])
                                PlotCoverage(tx_site[x],altitude);
 
                        if (LRmap)
-                               PlotLRMap(tx_site[x],altitudeLR);
+                               PlotLRMap(tx_site[x],altitudeLR,plo_filename);
 
                        PlaceMarker(tx_site[x]);
 
@@ -4348,11 +6069,14 @@ int main(char argc, char *argv[])
                        }
 
                        if (report!='N')
-                               ObstructionReport(tx_site[x],rx_site,report);
+                               ObstructionReport(tx_site[x],rx_site,report,freq);
+
+                       if (kml)
+                               WriteKML(tx_site[x],rx_site);
                }
        }
 
-       if (map)
+       if (map | topomap)
        {
                if (bfs)
                {
@@ -4365,11 +6089,11 @@ int main(char argc, char *argv[])
                        for (x=0; x<cities; x++)
                                LoadCities(city_file[x]);
                }
-                               
-               if (!LRmap)
-                       WritePPM(mapfile);
+
+               if (LRmap)
+                       WritePPMLR(mapfile,geo);
                else
-                       WritePPMLR(mapfile);
+                       WritePPM(mapfile,geo);
        }
 
        if (terrain_plot)
@@ -4463,14 +6187,14 @@ int main(char argc, char *argv[])
                        for (count=0; count<txsites; count++)
                        {
                                sprintf(string,"%s-%c%s%c",height_file,'1'+count,ext,0);
-                               GraphHeight(tx_site[count],rx_site,string);
+                               GraphHeight(tx_site[count],rx_site,string,freq,norm);
                        }
                }
 
                else
-                       GraphHeight(tx_site[0],rx_site,height_file);
+                       GraphHeight(tx_site[0],rx_site,height_file,freq,norm);
        }
-
+       
        if (longley_plot)
        {
                if (txsites>1)