APSF //- This script adds the Argo Navis prefix back into your plan document, by //- replacing or modifying selected fields of each object. //- //- Paul Rodman. July, 2007 //- //- V1.0 - Original release. //- V1.1 - Cosmetic changes. User field headings included, if applicable. dim prefix as string, field as integer, modify as integer, highlightedonly as boolean dim i,seqnumber as integer, s,spfx,parts(-1) as string function MassagePrefix(pfx as string, ob as APPlanObject, seqno as integer) as string // Massage the prefix string where required dim pr as string, i as integer pr = pfx if instr(pr,"[c]")>0 then pr=ReplaceAll(pr,"[c]",Uppercase(ob.Constellation)) end if if instr(pr,"[n]")>0 then pr=ReplaceAll(pr,"[n]",format(seqno,"000")) end if if instr(pr,"[a]")>0 then i=seqno-1 s=chr(asc("A")+(i mod 26)) i=i\26 s=chr(asc("A")+(i mod 26))+s if nObjects>26*26 then i=i\26 s=chr(asc("A")+(i mod 26))+s end if pr=ReplaceAll(pr,"[a]",s) end if if instr(pr,"[k]")>0 then pr=ReplaceAll(pr,"[k]",trim(left(Uppercase(ob.Catalog),3))) end if if instr(pr,"[t]")>0 then pr=ReplaceAll(pr,"[t]",left(Uppercase(ob.Type),3)) end if return pr end function function ModifyField(sfld as string, pfx as string) as string if pfx="" then return sfld select case modify case 0 // Replace return pfx case 1 // Prefix if instr(sfld,pfx)<>1 then return pfx+sfld else return sfld case 2 // Suffix if right(sfld,len(pfx))<>pfx then return sfld+pfx else return sfld end select return sfld end function // Main program // Restore previous parameters SaveRestoreTag("ArgoNavisPrefix") prefix=RestoreStringValue("Prefix","[a]") field=RestoreIntegerValue("Field",3) modify=RestoreIntegerValue("Modify",0) highlightedonly=RestoreBooleanValue("Highlighted",false) // Display dialog to get user preferences SetStringParameter("Prefix*",prefix) SetCaptionParameter("* include [c] for constellation, [n] for 3-digit sequence number in plan, "+ _ "[a] for 2-character item position in plan, [k] for catalogue (if applicable), "+ _ "[t] for object type",4,true,false,false,true,true) parts.Append "ID" parts.Append "Name" parts.Append "Notes" for i=1 to 4 if UserHeading(i)="" or UserHeading(i)="User "+str(i) then parts.Append "User "+str(i) else parts.Append "User "+str(i)+" ("+UserHeading(i)+")" end if next SetChoiceParameter("Field to modify",field,parts) SetChoiceParameter("How to modify",modify,"Replace contents", _ "Prefix contents","Suffix contents") SetBooleanParameter("Highlighted objects only",highlightedonly) if not EditParameters("Argo Navis Prefixer") then return prefix=GetStringParameter("Prefix*") field=GetChoiceParameter("Field to modify") modify=GetChoiceParameter("How to modify") highlightedonly=GetBooleanParameter("Highlighted objects only") // Iterate though all objects seqnumber=0 for i=1 to nObjects if not highlightedonly or Obj(i).IsHighlighted then // Ignore comets and minor planets if Obj(i).Type<>"Minor" and Obj(i).Type<>"Comet" then seqnumber=seqnumber+1 spfx=MassagePrefix(prefix,Obj(i),seqnumber) // Modify the field select case field case 0 // ID Obj(i).ID=ModifyField(Obj(i).ID,spfx) case 1 // Name Obj(i).Name=ModifyField(Obj(i).Name,spfx) case 2 // Notes Obj(i).Notes=ModifyField(Obj(i).Notes,spfx) case 3 // User 1 Obj(i).User1=ModifyField(Obj(i).User1,spfx) case 4 // User 2 Obj(i).User2=ModifyField(Obj(i).User2,spfx) case 5 // User 3 Obj(i).User3=ModifyField(Obj(i).User3,spfx) case 6 // User 4 Obj(i).User4=ModifyField(Obj(i).User4,spfx) end select end if end if next // Save parameters for next run SaveStringValue("Prefix",prefix) SaveIntegerValue("Field",field) SaveIntegerValue("Modify",modify) SaveBooleanValue("Highlighted",highlightedonly)