APSF //- Convert current plan document to Starry Night data file //- //- Paul Rodman, July, 2008 //- //- V1.0 19 July 2008 //- Initial release //- V1.1 19 July 2008 //- a. Get object description from User field, etc. (optionally). //- b. Save settings between uses. dim IDCode as string dim iobj, i, kdescr as integer dim ob as APPlanObject dim fout as APTextFile dim types(-1),s(6) as string // Load persistent values SaveRestoreGlobal(true) kdescr=RestoreIntegerValue("kdescr",0) IDCode=RestoreStringValue("IDCode","Plan") dim descr(-1) as string descr.Append "ID+Name" descr.Append "User Field 1 ("+UserHeading(1)+")" descr.Append "User Field 2 ("+UserHeading(2)+")" descr.Append "User Field 3 ("+UserHeading(3)+")" descr.Append "User Field 4 ("+UserHeading(4)+")" descr.Append "ID only" descr.Append "Name only" descr.Append "Notes" SetStringParameter("Plan Object ID",IDCode) SetCaptionParameter("(plan objects will be numbered sequentially with this ID)",1,true,false,false,true) SetPopupParameter("Object description from",kdescr,descr) SetCaptionParameter("(only the first 30 characters will be used)",1,true,false,false,true) if not EditParameters then return IDCode=GetStringParameter("Plan Object ID") kdescr=GetPopupParameter("Object description from") // Save persistent values SaveIntegerValue("kdescr",kdescr) SaveStringValue("IDCode",IDCode) // Set up output file fout=WriteTextFile if fout=nil then return // Write preamble fout.WriteLine "HEADER"+chr(9)+"DataName"+chr(9)+GetPlanName fout.WriteLine "HEADER"+chr(9)+"Description"+chr(9)+"Converted from AstroPlanner plan: "+GetPlanName fout.WriteLine "HEADER"+chr(9)+"NumberOfObjects"+chr(9)+format(nObjects,"0") fout.WriteLine "HEADER"+chr(9)+"UnknownMagnitude"+chr(9)+"10.0" fout.WriteLine "HEADER"+chr(9)+"DrawDepth"+chr(9)+"8000" fout.WriteLine "HEADER"+chr(9)+"CataloguePreamble"+chr(9)+"1"+chr(9)+IDCode // Find all types in the plan for iobj=1 to nObj ob=Obj(iobj) if types.IndexOf(ob.Type)<0 then types.Append ob.Type next for i=0 to ubound(types) fout.WriteLine "HEADER"+chr(9)+"KindName"+chr(9)+str(i)+chr(9)+types(i) next // Cycle through all objects in the plan for iobj=1 to nObj ob=Obj(iobj) s(0)=str(iobj) s(1)="1" // Catalogue kind if ob.Magnitude>=30.0 then s(2)="" // No Magnitude else s(2)=str(ob.Magnitude) // Magnitude end if s(3)=str(types.IndexOf(ob.Type)) // Kind s(4)=format(ob.RA*15.0,"-0.000000") // RA (in degrees) s(4)=Replace(s(4),",",".") // Take into account non-US formatting s(5)=format(ob.Dec,"-0.000000") // Dec (in degrees) s(5)=Replace(s(5),",",".") // Take into account non-US formatting select case kdescr case 1 to 4 s(6)=ob.User(kdescr) case 5 s(6)=ob.ID case 6 s(6)=ob.Name case 7 s(6)=ReplaceAll(ob.Notes,EndofLine," / ") else s(6)="" if ob.ID<>"" then s(6)=ob.ID if ob.Name<>"" and ob.Name<>s(6) then if s(6)<>"" then s(6)=s(6)+", " s(6)=s(6)+ob.Name end if end select s(6)=left(s(6),30) // Name fout.WriteLine(Join(s,chr(9))) next fout.Close