<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:p="urn:schemas-microsoft-com:office:powerpoint" xmlns:a="urn:schemas-microsoft-com:office:access" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" xmlns:b="urn:schemas-microsoft-com:office:publisher" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet" xmlns:odc="urn:schemas-microsoft-com:office:odc" xmlns:oa="urn:schemas-microsoft-com:office:activation" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:q="http://schemas.xmlsoap.org/soap/envelope/" xmlns:D="DAV:" xmlns:mt="http://schemas.microsoft.com/sharepoint/soap/meetings/" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ois="http://schemas.microsoft.com/sharepoint/soap/ois/" xmlns:dir="http://schemas.microsoft.com/sharepoint/soap/directory/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:dsp="http://schemas.microsoft.com/sharepoint/dsp" xmlns:udc="http://schemas.microsoft.com/data/udc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sub="http://schemas.microsoft.com/sharepoint/soap/2002/1/alerts/" xmlns:ec="http://www.w3.org/2001/04/xmlenc#" xmlns:sp="http://schemas.microsoft.com/sharepoint/" xmlns:sps="http://schemas.microsoft.com/sharepoint/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:udcs="http://schemas.microsoft.com/data/udc/soap" xmlns:udcxf="http://schemas.microsoft.com/data/udc/xmlfile" xmlns:udcp2p="http://schemas.microsoft.com/data/udc/parttopart" xmlns:wf="http://schemas.microsoft.com/sharepoint/soap/workflow/" xmlns:dsss="http://schemas.microsoft.com/office/2006/digsig-setup" xmlns:dssi="http://schemas.microsoft.com/office/2006/digsig" xmlns:mdssi="http://schemas.openxmlformats.org/package/2006/digital-signature" xmlns:mver="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns:mrels="http://schemas.openxmlformats.org/package/2006/relationships" xmlns:spwp="http://microsoft.com/sharepoint/webpartpages" xmlns:ex12t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:ex12m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:pptsl="http://schemas.microsoft.com/sharepoint/soap/SlideLibrary/" xmlns:spsl="http://microsoft.com/webservices/SharePointPortalServer/PublishedLinksService" xmlns:Z="urn:schemas-microsoft-com:" xmlns:st="" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:"Courier New";}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:612.0pt 792.0pt;
        margin:72.0pt 0cm 72.0pt 0cm;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=EN-IE link=blue vlink=purple>

<div class=Section1>

<p class=MsoPlainText><span style='font-family:"Arial","sans-serif"'>I have a
script I use to print out a PDF of all my observations.  (It also has a
mode that generates a simple list of all observed objects and the date/times
for each observation.)  It’s based on an old script (that I think
Paul wrote), but it’s been through some major metamorphisis.<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:"Arial","sans-serif";color:black'><o:p> </o:p></span></p>

<p class=MsoPlainText><span style='font-family:"Arial","sans-serif";color:black'>I’d
upload it to the general area, but it contains a couple of sections of
hard-coded stuff that’s probably only useful with my plans.  (These
include the format of the transparency field and the location of a plan
containing all the planets and comets.)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:"Arial","sans-serif";color:black'><o:p> </o:p></span></p>

<p class=MsoPlainText><span style='font-family:"Arial","sans-serif";color:black'>However,
for those of you who write script and want to customize it (or simply change
the hard-coded parts to your liking), I’ve appended it to this message.<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:"Arial","sans-serif";color:black'><o:p> </o:p></span></p>

<p class=MsoPlainText><span style='font-family:"Arial","sans-serif";color:black'>Cheers,<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:"Arial","sans-serif";color:black'>--
Jeff.<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:"Arial","sans-serif";color:black'><o:p> </o:p></span></p>

<p class=MsoPlainText><span style='font-family:"Arial","sans-serif";color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>//----------------------------------------------------------------------------------------------<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>sub PageNumbering(c as Canvas,
title as string, doPrint as boolean)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   // Handle page
numbering<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   dim dateStr, page
as string, x as integer<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>  <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   c.TextItalic =
true<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   c.ForeColor(64,
64, 64)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   dim now as Date<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   now = new Date<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   dateStr =
now.ShortDate + "  " + now.ShortTime<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   page = "Page
" + str(c.PageNumber)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   if doPrint then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
c.DrawText(title, 0, c.TextHeight)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
c.DrawText(dateStr, c.Width - c.TextWidth(dateStr), c.TextHeight)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
c.DrawText(page, c.Width - c.TextWidth(page), c.Height)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   else<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
c.DrawText(dateStr, 0, c.TextHeight)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
c.DrawText(title, c.TextWidth(dateStr) + 20, c.TextHeight)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
c.DrawText(page, c.Width - c.TextWidth(page), c.TextHeight)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   end<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   c.TextItalic =
false   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   c.ForeColor(0, 0,
0)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>end sub<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>//----------------------------------------------------------------------------------------------<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>//<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>function
FormatDateTime(dateTime as double) as string<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      dim
obsDate as Date<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      obsDate
= new Date(dateTime)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      dim
s as string<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      s
= obsDate.ShortDate + "  " + DoubleToTime(dateTime, false) +
" UT"<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      return
s<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>end function<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>//----------------------------------------------------------------------------------------------<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>//<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>function
FormatConditions(seeing as string, trans as string) as string<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      dim
s as string<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      //
Seeing should be either "Seeing 2/5" or "Pickering 6":<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      //<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      if
InStr(seeing, "/") > 0 then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>            s
= "Seeing " + seeing<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      elseif
InStr(seeing, ".") > 0 then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>            s
= "Pickering " + NthField(seeing, ".", 1)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      elseif
Len(seeing) > 0 then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>            s
= seeing<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      end
if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      //
See if we have NELM and/or SQM readings:<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      //<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      dim
nelm, sqm as string<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      nelm
= Trim(NthField(trans, " ", 1))<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      sqm
= Trim(NthField(trans, " ", 2))<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      if
Left(sqm, 1) = "(" then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>            sqm
= Mid(sqm, 2, sqm.len - 2)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      end
if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      //
Format them into "NELM 5.5, SQM 20.7":<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      //<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      if
Len(nelm) > 0 then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>            if
Len(s) > 0 then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                  s
= s + ",  "<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>            end
if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>            s
= s + "NELM " + nelm<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      end
if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      if
Len(sqm) > 0 then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>            if
Len(s) > 0 then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                  s
= s + ",  "<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>            end
if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>            s
= s + "SQM " + sqm<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      end
if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      return
s<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>end function<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>//----------------------------------------------------------------------------------------------<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>//<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>function FormatEquipment(scope
as string, ep as string, filter as string, aid as string) as string<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      dim
s as string<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      s
= scope<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      if
Len(ep) > 0 AND ep <> "None" then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>            s
= s + ",  " + Trim(ep)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      end
if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      if
Len(filter) > 0 AND filter <> "None" then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>            s
= s + ",  " + filter<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      end
if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      if
Len(aid) > 0 AND aid <> "None" then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>            s
= s + ",  " + aid<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      end
if <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      return
s<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>end function<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>//----------------------------------------------------------------------------------------------<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>// Support function which
calculates magnification and performs optional rounding.<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>//<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>function
GetMagnification(scopeName as string, epName as string, aidName as string,
doRound as boolean) as string<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   dim scope as
TelescopeResource, ep as EyepieceResource, aid as VisualAidResource<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   scope =
TelescopeResource.Get(scopeName)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   ep =
EyepieceResource.Get(epName)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   aid =
VisualAidResource.Get(aidName)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   dim mag as double<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   if
scope.IsBinocular then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      mag =
scope.Magnification<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   else <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      mag =
APResource.Magnification(scope, ep, aid)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   if doRound AND
scope.IsTelescope then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
if mag < 200 then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
dim dime, dimeFit, quarter, quarterFit as double<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
dime = Round(mag / 10) * 10<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
dimeFit = Abs(mag - dime)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
quarter = Round(mag / 25) * 25<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
quarterFit = Abs(mag - quarter)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
if quarterFit < dimeFit then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
mag = quarter<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
else<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      
     mag = dime<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
else<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
mag = Round(mag / 25) * 25<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   if mag > 0 then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
return str(mag) + "X"<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   else<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
return "--"<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>end function<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>//----------------------------------------------------------------------------------------------<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>// A couple of routines to
convert names to indicies.<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>//<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>function
CurrentTelescopeIndex(scopes() as string) as integer<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   dim target as
TelescopeResource<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   target =
TelescopeResource.Current<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   if target = nil
then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
target = TelescopeResource.Default<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   if target <>
nil then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      dim i
as integer<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      for i
= 0 to Ubound(scopes)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>            if
scopes(i) = target.Name then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
   return i<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>            end
if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      next<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   return 1<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>end function<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>function
CurrentSiteIndex(sites() as string) as integer<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      dim
target as SiteResource<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      target
= SiteResource.Current<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      if
target = nil then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>            target
= SiteResource.Default<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      end
if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      if
target <> nil then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
dim i as integer<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      for i
= 0 to Ubound(sites)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>            if
sites(i) = target.Name then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>          return
i<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>            end
if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      next <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      end
if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>       
<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   return 1<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>end function<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>//----------------------------------------------------------------------------------------------<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>// Searches the open plans for
a particular ID.  Useful for comets and planets where we can't<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>// use RA/Dec to fetch images,
etc.<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>//<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>function GetPlanObject(id as
string) as APPlanObject<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>       dim
ssPlan as APPlan<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>       ssPlan
= APPlan.Plan("Solar_System.apd")<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>       <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>       if
ssPlan = nil then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>         
ssPlan = APPlan.OpenPlan("C:\Documents and Settings\jey\My
Documents\AstroPlanner\Plans\Solar_System.apd")<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>       end
if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>       <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>       if
ssPlan <> nil then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>            dim
i as integer<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>         
for i = 1 to ssPlan.nObjects<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>               
if ssPlan.Obj(i).ID = id then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                     
return ssPlan.Obj(i)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>               
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>         
next<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>       end
if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>end function<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>//----------------------------------------------------------------------------------------------<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>// Collect a list of all
observers, telescopes and sites mentioned in global observations.<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>//<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>sub AddToList(s as string,
list() as string)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   dim i as integer,
found as boolean<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   if Len(s) = 0 then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
exit<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   found = false<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   for i = 0 to
Ubound(list)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
if list(i) = s then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
found = true<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
exit<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   next<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   if NOT found then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
list.Append(s)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>end sub<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>sub
CollectResources(observerList() as string, scopeList() as string, siteList() as
string)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   dim i as integer<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   dim obs as
APObservation<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   dim session as
APSession<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   for i = 1 to
APObservation.Count<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
obs = APObservation.Observation(i)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
AddToList(obs.Telescope(1), scopeList)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   next<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   for i = 1 to
APSession.Count<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>            session
= APSession.Session(i)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>            AddToList(session.Observer,
observerList)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
AddToList(session.Site, siteList)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   next<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>end sub<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>//----------------------------------------------------------------------------------------------<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>// Sort "M8" before
"M71", not after it (ie: a string compare won't quite do).<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>//<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>function CompareIDs(id1 as
string, id2 as string) as integer<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   dim i, cmp as
integer<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   i = 1<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   while i <=
len(id1) AND i <= len(id2)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
// If we've gotten to numbers, proceed with numeric compare<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
dim c1, c2 as string<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
dim v1, v2 as double<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
c1 = mid(id1, i, 1)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
c2 = mid(id2, i, 1)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
if IsNumeric(c1) AND IsNumeric(c2) then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
dim j1 as integer<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
j1 = i + 1<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
while j1 <= len(id1) AND IsNumeric(mid(id1, j1, 1))<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
j1 = j1 + 1<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
wend         <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
dim j2 as integer<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
j2 = i + 1<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
while j2 <= len(id2) AND IsNumeric(mid(id2, j2, 1))<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
j2 = j2 + 1<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
wend<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
v1 = val(mid(id1, i))<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
v2 = val(mid(id2, i))<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
if v1 < v2 then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
return -1<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
elseif v1 > v2 then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
return 1<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
else // Numbers equal, continue compare after them<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
if j1 <= len(id1) AND j2 <= len(id2) then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
return CompareIDs(mid(id1, j1), mid(id2, j2))<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
else<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
return 0<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
// Continue with single-character string compares<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
cmp = strcomp(c1, c2, 0)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
if cmp < 0 then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
return -1<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
elseif cmp > 0 then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
return 1<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
else<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
i = i + 1<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   wend<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   if len(id1) <
len(id2) then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      return
-1<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   elseif len(id1)
> len(id2) then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
return 1<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   else<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
return 0<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   end if  
<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>end function<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>//----------------------------------------------------------------------------------------------<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>// My first REALBasic
class.  And dang, am I proud of it.<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>//<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>class target<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   dim ID as string<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   dim obs(-1) as
integer<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>end class<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>//----------------------------------------------------------------------------------------------<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>// Short form constants and
table routines.<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>//<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>const ID_width = 16.0<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>const Obs_width = 84.0<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>function NewShortFormTable() as
Table<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   dim t as table<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   t = new Table(1,
2)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   t.ColumnTitle(1) =
"ID"<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   t.ColumnTitle(2) =
"Observations"<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   t.ColumnWidth(1) =
ID_width<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   return t<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>end function<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>//----------------------------------------------------------------------------------------------<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>// Long form table routines.<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>//<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>function
ConstructObservationTable() as Table<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      dim
t as Table<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      t
= new Table(3, 1)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>  <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      dim
row as integer<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      for
row = 1 to t.RowCount<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>            t.RowHeight(row)
= 100.0<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      next<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'> <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      return
t<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>end function<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>function
PopulateObservationTable(t as Table, session as APSession, obs as
APObservation, _<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                                 
doRound as boolean, c as Canvas, cellmargin as integer) as integer<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
                   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      t.Cell(1,
1) = FormatDateTime(obs.LocalDateTime) + ",  " + session.Site +
";  " _<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                                          +
FormatConditions(session.Seeing, session.Transparency)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      t.Cell(2,
1) = FormatEquipment(obs.Telescope(1), obs.Eyepiece(1), obs.Filter(1), obs.VisualAid(1))
+ ";  " _<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                    
+ GetMagnification(obs.Telescope(1), obs.Eyepiece(1), obs.VisualAid(1),
doRound)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      dim
paras() as string<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      dim
i, nLines, colWidth as integer<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      colWidth
= c.Width - cellmargin<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      nLines
= 0<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      paras
= Split(obs.Notes, Chr(13))<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      for
i = 0 to Ubound(paras)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>            nLines
= nLines + Round((c.TextWidth(paras(i)) * 1.05 / colWidth) + 0.5)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      next<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      t.RowHeight(3)
= 20.0 + (nLines * 80.0)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>    <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      t.Cell(3,
1) = LTrim(obs.Notes)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      return
nLines - 1<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>end function<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>//----------------------------------------------------------------------------------------------<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>// Main script.<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>//<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>sub main()<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>try       
// Be a good citizen<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   dim
observerList(-1), scopeList(-1), siteList(-1) as string<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>  
CollectResources(observerList, scopeList, siteList)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   //<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   // Throw up a
dialog to see if user wants to limit to specific telescopes/sites.<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   //<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   const
observerCheckbox = "For Specific Observer:"<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   const
observerPopup = ".0"<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   const
telescopeCheckbox = "For Specific Telescope:"<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   const telescopePopup
= ".1"<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   const siteCheckbox
= "At Specific Site:"<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   const sitePopup =
".2"<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   const
longFormCheckbox = "Include Observation Details"<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   const
pageBreaksCheckbox = "Start Objects at Top of Page"   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   const
roundMagsCheckbox = "Round Magnifications"<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   const
imagesCheckbox = "Include User Images:"<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   const
imagesPerLinePopup = ".3"<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   const
printCheckbox = "Print Report"<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   dim
imagesPerLine(4) as string<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   imagesPerLine(0) =
"2 Images Per Line"<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   imagesPerLine(1) =
"3 Images Per Line"<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   imagesPerLine(2) =
"4 Images Per Line"<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   imagesPerLine(3) =
"5 Images Per Line"<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   imagesPerLine(4) =
"6 Images Per Line"<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   dim forObserver,
forScope, forSite as string<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   dim doPrint,
doLong, doBreaks, doRound, doImages as boolean<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   dim imagewidth as
double<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      dim
dlg as Dialog<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      dlg
= new Dialog<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>  
dlg.BooleanParameter(observerCheckbox, Ubound(observerList) >= 0)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>  
dlg.PopupParameter(true, observerPopup, 0, observerList)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>  
dlg.ParameterDependency(observerPopup, observerCheckbox)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>  
dlg.BooleanParameter(telescopeCheckbox, Ubound(scopeList) >= 0)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>  
dlg.PopupParameter(true, telescopePopup, CurrentTelescopeIndex(scopeList),
scopeList)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>  
dlg.ParameterDependency(telescopePopup, telescopeCheckbox)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>  
dlg.BooleanParameter(siteCheckbox, Ubound(siteList) >= 0)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>  
dlg.PopupParameter(true, sitePopup, CurrentSiteIndex(siteList), siteList)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>  
dlg.ParameterDependency(sitePopup, siteCheckbox)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>  
dlg.CaptionParameter("If options are not checked, report will include all
observers, telescopes and/or sites.", _<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      
                 3,
true, false, false, false, true)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>  
dlg.BooleanParameter(longFormCheckbox, true)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>  
dlg.BooleanParameter(pageBreaksCheckbox, false)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>  
dlg.BooleanParameter(true, roundMagsCheckbox, true)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>  
dlg.BooleanParameter(imagesCheckbox, true)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      dlg.PopupParameter(true,
imagesPerLinePopup, 0, imagesPerLine)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>  
dlg.ParameterDependency(pageBreaksCheckbox, longFormCheckbox)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>  
dlg.ParameterDependency(roundMagsCheckbox, longFormCheckbox)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>  
dlg.ParameterDependency(imagesCheckbox, longFormCheckbox)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>  
dlg.ParameterDependency(imagesPerLinePopup, imagesCheckbox)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>  
dlg.CaptionParameter("", 1, true, false, false, false,
true)    // spacer<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>  
dlg.BooleanParameter(printCheckbox, true)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   if NOT
dlg.Show("Observing Report") then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
return<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   if
dlg.BooleanParameter(observerCheckbox) then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
forObserver = dlg.PopupParameterAsString(observerPopup)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   else<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
forObserver = "All Observers"<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   if
dlg.BooleanParameter(telescopeCheckbox) then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
forScope = dlg.PopupParameterAsString(telescopePopup)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   else<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
forScope = "All Telescopes"<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   if
dlg.BooleanParameter(siteCheckbox) then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
forSite = dlg.PopupParameterAsString(sitePopup)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   else<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
forSite = "All Sites"<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   doLong =
dlg.BooleanParameter(longFormCheckbox)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   doBreaks =
dlg.BooleanParameter(pageBreaksCheckbox)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   doRound =
dlg.BooleanParameter(roundMagsCheckbox)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   doImages =
dlg.BooleanParameter(imagesCheckbox)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   if doImages then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
dim i as integer<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
i = dlg.PopupParameter(imagesPerLinePopup) + 2<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
imagewidth = (1 / i) * 100.0<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   doPrint =
dlg.BooleanParameter(printCheckbox)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   //<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   // Go through all
global observations which match the criteria, building a sorted list of<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   // unique targets.<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   //<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   dim i, j as integer,
session as APSession, obs as APObservation<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   dim targets(-1) as
target, nTargets as integer<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   nTargets = 0<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   // Our sort is
actually n log n, but we report progress exponentailly so that it speeds<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   // up at the end.<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>  
Dialog.StartProgress("Collecting Observations...", true,
APSession.Count * APSession.Count)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   for i = 1 to
APObservation.Count<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
if i MOD 100 = 0 AND Dialog.UpdateProgress(i * i) then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
return<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
obs = APObservation.Observation(i)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
session = APSession.Session(obs)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
if forObserver = "All Observers" OR forObserver = session.Observer
then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>             if
forSite = "All Sites" OR forSite = session.Site
then                <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
if forScope = "All Telescopes" OR forScope = obs.Telescope(1) then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>             
<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
dim upper, lower, middle, cmp as integer<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
dim found as boolean, t as target<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
found = false<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
lower = 0<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
upper = nTargets<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
while NOT found AND upper > lower<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                 
middle = (lower + upper) / 2<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                 
cmp = CompareIDs(obs.ID, targets(middle).ID)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                 
if cmp < 0 then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                    
upper = middle<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                 
elseif cmp > 0 then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                    
lower = middle + 1<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                    
middle = middle + 1<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                 
else<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                    
found = true<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                    
targets(middle).obs.Append(i)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                    
exit<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                 
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
wend<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                  
                <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
if NOT found
then                
<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                 
t = new target<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                 
t.ID = obs.ID<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                 
t.obs.Append(i)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                 
targets.Insert(middle, t)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                 
nTargets = nTargets + 1                 <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
end if                   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   next<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>  
Dialog.StopProgress()<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   //<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   // Open a new
printer document (or display window)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   //<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   dim reportTitle as
string<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   reportTitle =
"Observing Report for " + forObserver + " using " +
forScope + " at " + forSite<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   dim c as Canvas<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   if doPrint then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
c = new Canvas(true)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
c.TextFont("Times", 10)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   else<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
c = new Canvas(800, 1000, nil, "Observing Report")<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
c.TextFont("Times", 12)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   if c.Cancelled
then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
return<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   dim cellmargin as
integer<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   cellmargin = 0.33
* c.TextHeight<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   PageNumbering(c,
reportTitle, doPrint)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   if doLong then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
//<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
// Long-form table (in three parts).<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
//<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
dim w, h, x, y, y1, theight, imw, margin as integer<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
dim tbl as Table, s as string, brk as boolean<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
tbl = ConstructObservationTable()<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
theight = 0<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
margin = 3 * c.TextHeight<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
y = margin<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
imw = floor(c.Width * imagewidth * 0.01)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>    <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
dim t as target <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
for i = 0 to nTargets - 1<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
t = targets(i)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
for j = 0 to Ubound(t.obs)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
obs = APObservation.Observation(t.obs(j))<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
session = APSession.Session(obs)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
// Populate the observation table with values<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
dim extraLines, extraHeight as integer<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
extraLines = PopulateObservationTable(tbl, session, obs, doRound, c,
cellmargin)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
extraHeight = extraLines * c.textHeight<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
// New page?<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
brk = (j = 0 AND y > margin AND doBreaks)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
if brk OR y + theight + extraHeight > c.Height - margin then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
c.NewPage()<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
PageNumbering(c, reportTitle, doPrint)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
      y = margin<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
if j = 0 then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
// Display the object ID/Name, etc. before the first observation<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
if obs.ID = obs.Name then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                 
s = obs.ID<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
else  <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
         s = obs.ID +
"   " + obs.Name<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
c.TextBold = true<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
c.DrawText s, 0, y + c.TextHeight<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
if obs.RA <> 0 OR obs.Dec <> 0 then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                 
s = "RA: " + FormatRA(obs.RA) + "  Dec: " + FormatDec(obs.Dec)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                 
c.DrawText s, c.Width - c.TextWidth(s), y + c.TextHeight<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
c.TextBold = false<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
y = y + 1.6 * c.TextHeight<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
// Display/print the table<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
if theight = 0 then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
// Measure the height of the first table to be printed/displayed<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
y1 = c.DrawTable(tbl, 0, y, c.Width, c.Height, Canvas.grid_Thin)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
theight = y1 - y<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
theight = theight - (extraLines * c.textHeight)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
y = y1<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
else<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
y = c.DrawTable(tbl, 0, y, c.Width, c.Height, Canvas.grid_Thin)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
y = y + 0.5 * c.TextHeight<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
next<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
if doImages then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
// Draw user images, if available<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
y = y + c.TextHeight<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
x = 0<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
obs = APObservation.Observation(t.obs(0))<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
if obs.Type = "Planet" OR obs.Type = "Comet" OR obs.Type =
"Sun" then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
dim planObj as APPlanObject<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
planObj = GetPlanObject(obs.ID)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
if planObj = nil then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                 
goto skipImages<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
else<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                 
c.Target(planObj)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
else<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
c.Target(obs.RA, obs.Dec)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
for j = 1 to c.ImageCount<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
if c.IsUserImage(j) then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                 
if x + imw > c.Width then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                   
// New row required<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                    
x = 0<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                    
y = y + imw + margin<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                 
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                 
<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                 
if y + imw + margin > c.Height then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                    
// New page required<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                    
c.NewPage()<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                    
PageNumbering(c, reportTitle, doPrint)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
         y = margin<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                 
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                 
c.DrawImage(j, x, y, imw, obs.Type <> "Planet")<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>                 
x = x + imw<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
next<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
skipImages:<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
if x > 0 then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>              
y = y + imw + margin<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
else<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
y = y + c.TextHeight<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
next<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   else<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
//<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
// Short-form table.<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
//<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
dim lineHeight, header, footer, colWidth as integer<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
lineHeight = c.TextHeight + cellmargin<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
header = 1.5 * lineHeight<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
if doPrint then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
footer = 1.5 * lineHeight<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
else<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
footer = 0<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
colWidth = (c.Width * (Obs_width / 100)) - cellmargin<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
dim linesPerPage, linesOnPage as integer<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      linesPerPage
= (c.Height - (header + footer)) / lineHeight<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
linesOnPage = 1<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
dim tbl as Table, y as integer<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
tbl = NewShortFormTable()<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
tbl.RowStyle(0) = Table.style_Bold + Table.style_Inverted + Table.style_Gray<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
dim t as target, dates as string   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
for i = 0 to nTargets - 1<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
t = targets(i)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
dates = ""      <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
for j = 0 to Ubound(t.obs)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
if j > 0 then dates = dates + ", "<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
obs = APObservation.Observation(t.obs(j))<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
dates = dates + FormatDateTime(obs.LocalDateTime)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
next<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
dim nLines as integer<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
nLines = Round((c.TextWidth(dates) * 1.05 / colWidth) + 0.5)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
linesOnPage = linesOnPage + nLines<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
if linesOnPage > linesPerPage then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
// Create a new page<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
y = c.DrawTable(tbl, 0, header, c.Width, c.Height, Canvas.grid_Thin)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
tbl.Close()<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
c.NewPage()<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
PageNumbering(c, reportTitle, doPrint)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
   linesOnPage = 1 + nLines<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
tbl = NewShortFormTable()<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
tbl.RowStyle(0) = Table.style_Bold + Table.style_Inverted + Table.style_Gray<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>      <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
if linesOnPage > 1 + nLines then<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>           
tbl.AddRow()<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
tbl.RowHeight(tbl.RowCount()) = (nLines * 80.0) + 20.0<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
tbl.Cell(tbl.RowCount(), 1) = t.ID     <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>        
tbl.Cell(tbl.RowCount(), 2) = dates<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
next<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
y = c.DrawTable(tbl, 0, header, c.Width, c.Height, Canvas.grid_Thin)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>     
tbl.Close()<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   end if<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   <o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   c.Close()<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>catch<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>   print "My
bad.  Observing Report script generated an exception."<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>end try<o:p></o:p></span></p>

<p class=MsoPlainText><span style='color:black'>end sub<o:p></o:p></span></p>

</div>

</body>

</html>