''This VBScript will open a text file containing the RA and Dec for the observatory telescope
''and write it into the FITS header of whatever image is exposed

Option Explicit 'Will tell us if there are undefined variables
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Declare Variables

Dim cam ' "The" Camera object
Dim doc ' "The" Image Object
Dim app ' "The" Application Object
Dim objFileSystem 'File System Object Allowing access to files and folders
Dim crval1,crval2,cdelt1,cdelt2,crpix1,crpix2,ctype1,ctype2  'Values for Fits Header
Dim strTest,Position_text 'Text to be manipulated
Dim strCRVAL1,strCRVAL2,strCTYPE1,strCTYPE2,strCDELT1,strCDELT2,strCRPIX1,strCRPIX2,strRA,strDec 'Fits Keys
Dim Suc1,Suc2,Suc3,Suc4,Suc5,Suc6,Suc7,Suc8,Suc9,Suc10 'Booleans to see if write is successful
Dim strInputFile,objTelePositionFile 'Strings for Files and objects
Dim oRegExp,Num_Matches
Dim RA_text,Dec_text,Off_text,Db_Digits,Plus_Minus
Dim sto,Im_Array

Const ForReading=1

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'FITS KEYS
strCRVAL1="CRVAL1"
strCRVAL2="CRVAL2"
strCTYPE1="CTYPE1"
strCTYPE2="CTYPE2"
strCDELT1="CDELT1"
strCDELT2="CDELT2"
strCRPIX1="CRPIX1"
strCRPIX2="CRPIX2"
strRA="RA"
strDec="Dec"

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Values
cdelt1=CDbl(0.002002)
cdelt2=CDbl(0.002002)
ctype1="RA---TAN"
ctype2="Dec--TAN"
crpix1=CDbl(512)
crpix2=CDbl(512)
sto=CDbl(1)

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'Files
strInputFile="C:/Telescope Position.txt"

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Create Maxim objects with methods and properties of their own
'All these PIDs are listed in HKEY_CLASSES_ROOT 

Set cam = CreateObject("MaxIm.CCDCamera")
Set doc= CreateObject("MaxIm.Document")
Set app= CreateObject("MaxIm.Application")

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Utilize WSH objFileSystem for reading Telescope_Position.txt
Set objFileSystem=CreateObject("Scripting.fileSystemObject")
Set objTelePositionFile=objFileSystem.OpenTextFile(strInputFile,ForReading)
Set oRegExp = New RegExp



'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Begin by opening MaximDL with a call to its application object.  This 
'object will ensure that Maxim stays open even after COM objects are done with it

app.LockApp(True)


cam.LinkEnabled = True

Do While sto=1


'if Not cam.LinkEnabled Then
'wscript.echo "Failed to start camera."
'Quit
'End If
'wscript.echo "Camera is ready, Exposing."
'cam.Expose 1, 1, 0
'Do While Not cam.ImageReady
'Loop

'if cam.ReadyForDownload Then
if cam.ImageReady Then
'cam.SaveImage "C:/Script.fit"
'Im_Array=cam.ImageArray

Set objTelePositionFile=objFileSystem.OpenTextFile(strInputFile,ForReading)
Position_text=objTelePositionFile.Readline
objTelePositionFile.Close

oRegExp.Global= True
oRegExp.Pattern="\d\d"	'Set Search Pattern for consecutive Double Digits
Set Db_Digits = oRegExp.Execute(Position_text)	'Search String for matches

oRegExp.Pattern="\x2B|\x2D"	'Set Search Pattern for + or - in Declination (Hex ASCII code)
Set Plus_Minus= oRegExp.Execute(Position_text)  'Search String for matches
 
'MsgBox(Plus_Minus(0))

if Db_Digits.Count > 0 Then

	Num_Matches=Db_Digits.Count	'Search for two consecutive digits returns 15
	RA_text=Db_Digits(0)&"h "&Db_Digits(1)&"m "&Db_Digits(2)&"."&Db_Digits(3)&"s" 'Concatenate Strings for RA
	Dec_text=Plus_Minus(0)&Db_Digits(4)&" "&Db_Digits(5)&" "&Db_Digits(6)&"."&Db_Digits(7)	'Concatenate Strings for Dec
	crval1=15*(CDbl(Db_Digits(0))+CDbl(Db_Digits(1))/60+(CDbl(Db_Digits(2))+.01*CDbl(Db_Digits(3)))/3600)
	crval2=CDbl(CDbl(Db_Digits(4))+CDbl(Db_Digits(5))/60+(CDbl(Db_Digits(6))+.1*CDbl(Db_Digits(7)))/3600)
else 
	
	MsgBox("There was an error in obtaining the telescope coordinates")

End if


Suc1=cam.SetFITSKey(strCRVAL1,crval1)	'RA Value of Center pixel (Int)
Suc2=cam.SetFITSKey(strCRVAL2,crval2)	'Dec Value of Center pixe (Int)
Suc3=cam.SetFITSKey(strCTYPE1,ctype1)	'Label of X axis
Suc4=cam.SetFITSKey(strCTYPE2,ctype2)	'Label of Y axis
Suc5=cam.SetFITSKey(strCDELT1,cdelt1)	'ArcSeconds/Pixel in X
Suc6=cam.SetFITSKey(strCDELT2,cdelt2)	'ArcSeconds/Pixel in Y
Suc7=cam.SetFITSKey(strCRPIX1,crpix1)	'Center Pixel Number in X
Suc8=cam.SetFITSKey(strCRPIX2,crpix2)	'Center Pixel Number in Y
Suc9=cam.SetFITSKEY(strRA,RA_text)
Suc10=cam.SetFITSKEY(strDec,Dec_text)

'cam.SaveImage "C:/Script.fit"
wscript.echo "Exposure is done, Image saved as Script.fit"
cam.LinkEnabled= false
cam.LinkEnabled= true

End if

Loop