APSF //- Operate AstroPlanner via the keyboard, with speech feedback. //- This obviates the need to be blinded by a computer screen. //- //- Paul Rodman, 2008 //- //- Requires speech synthesis to be enabled on your computer. //- May not work with non-English keyboards. //- //- Commands: //- Q or Esc: quit from script //- 0: move to first object in list //- 9: move to last object in list //- Down arrow: move to next object in list //- Up arrow: move to previous object in list //- S: Slew to object //- N: Object notes //- I: Object info //- //- V1.0 3 Feb 2008 //- First release dim command(-1),commandKey(-1) as integer const key_Q = 12 const key_Esc = 53 const key_0 = 29 const key_9 = 25 const key_Down = 125 const key_Up = 126 const key_S = 1 const key_N = 45 const key_I = 34 const cmd_Quit = 1 const cmd_First = 2 const cmd_Last = 3 const cmd_Next = 4 const cmd_Previous = 5 const cmd_Slew = 6 const cmd_Notes = 7 const cmd_Info = 8 //--------------------------------------------------------------------- sub SetupCommands() command.Append cmd_Quit commandKey.Append key_Q command.Append cmd_Quit commandKey.Append key_Esc command.Append cmd_First commandKey.Append key_0 command.Append cmd_Last commandKey.Append key_9 command.Append cmd_Next commandKey.Append key_Down command.Append cmd_Previous commandKey.Append key_Up command.Append cmd_Slew commandKey.Append key_S command.Append cmd_Notes commandKey.Append key_N command.Append cmd_Info commandKey.Append key_I end sub //--------------------------------------------------------------------- function ExecuteCommand(cmd as integer) as boolean dim s as string // Return TRUE if user wants to quit if cmd=cmd_Quit then speak "Quitting from script." return true end if select case cmd case cmd_First Obj(1).Selected=true speak "First object of "+str(nObj)+" selected. "+Obj(SelectedObject).ID+"." case cmd_Last Obj(nObj).Selected=true speak "Last object of "+str(nObj)+" selected. "+Obj(SelectedObject).ID+"." case cmd_Next if SelectedObject1 then Obj(SelectedObject-1).Selected=true speak "Previous object." else speak "Already at start of list" end if speak Obj(SelectedObject).ID+"." case cmd_Slew if not Obj(SelectedObject).IsVisible then speak Obj(SelectedObject).ID+" is currently not visible." else select case SlewTo(Obj(SelectedObject).RA,Obj(SelectedObject).Dec) case -1 speak "Telescope not connected." case 2 speak "Object below horizon." case 3 speak "Object outside limits." case 4 speak "Object blocked by user horizon." else speak "Slewing to "+Obj(SelectedObject).ID+"." end select end if case cmd_Notes speak Obj(SelectedObject).ID+"." if trim(Obj(SelectedObject).Notes)="" then speak "No notes." else speak Obj(SelectedObject).Notes+"." end if case cmd_Info speak Obj(SelectedObject).ID+"." if Obj(SelectedObject).Name<>"" and Obj(SelectedObject).Name<>Obj(SelectedObject).ID then speak "Name is "+Obj(SelectedObject).Name+"." end if speak "Type is "+Obj(SelectedObject).Type+"." speak "Magnitude is "+format(Obj(SelectedObject).Magnitude,"-0.0")+"." if Obj(SelectedObject).Magnitude2<30.0 then speak "Magnitude 2 is "+format(Obj(SelectedObject).Magnitude2,"-0.0")+"." end if speak "Magnitude is "+format(Obj(SelectedObject).Magnitude,"-0.0")+"." speak "Altitude is "+format(Obj(SelectedObject).Altitude,"-0.0")+" degrees." s=Obj(SelectedObject).Size if s<>"" then s=ReplaceAll(s,"x"," by ") s=ReplaceAll(s,"'"," minutes ") s=ReplaceAll(s,""""," seconds ") s=ReplaceAll(s," "," ") speak "Size is "+s+"." end if speak "Has "+str(Obj(SelectedObject).nGlobalObservations)+" observations." if Obj(SelectedObject).Separation>0.0 then speak "Separation is "+format(Obj(SelectedObject).Separation,"0")+" seconds." end if if Obj(SelectedObject).PosAngle>0 then speak "Position angle is "+format(Obj(SelectedObject).PosAngle,"0")+" degrees." end if end select end function //--------------------------------------------------------------------- dim i as integer, ptime as double if nObj<=0 then return // No objects in plan! if SelectedObject<1 then Obj(1).Selected=true SetupCommands Speak "Welcome to Flying Blind. Type Q or Escape at any time to quit" ptime=Microseconds while true if MicroSeconds>ptime+1E6 then Yield ptime=Microseconds end if for i=0 to ubound(command) if KeyDown(commandKey(i)) then if ExecuteCommand(command(i)) then return end if next wend //