* ----- Start ----
LParameters lcPRGName, lxP1, lxP2, lxP3, lxP4, lxP5, lxP6, lxP7, lxP8, lxP9, lxP10
Local loGetThor As 'GetThorRun'
Local lcFile, lcFolder, lcSys16, lcThorApp, lcThorFolder, llFirst, llThorInkey, lnI, lnInkey, lnPopUpID
Local lnWindowOnTop, loLink, loPEME_Tools, loResult, loThorEngine, loThorInfo, loThorRun
lcThorApp = 'C:\PROGRAM FILES\MICROSOFT VISUAL FOXPRO 9\Thor'
lcThorApp = 'C:\PROGRAM FILES\MICROSOFT VISUAL FOXPRO 9\Thor.APP'
lcThorFolder = 'C:\PROGRAM FILES\MICROSOFT VISUAL FOXPRO 9\Thor\'
llThorInkey = .F.
If Empty (lcPRGName)
llThorInkey = .T.
lcPRGName = ''
Do While Chrsaw()
lnInkey = Inkey()
If lnInkey = 13
Exit
Endif
lcPRGName = lcPRGName + Chr (lnInkey)
EndDo
Endif
Do Case
Case Atc('Thor_', lcPrgName) = 1
Return ExecuteThorProc(lcPRGName, lcThorFolder, llThorInkey, .F., Pcount(), @lxP1, @lxP2, @lxP3, @lxP4, @lxP5, @lxP6, @lxP7, @lxP8, @lxP9, @lxP10)
* Return Full Path
Case Atc([Full Path=], lcPrgName) = 1
lcFile = GetFullFileName (Alltrim (Substr (lcPRGName, At ('=', lcPRGName) + 1)), lcThorFolder)
Return lcFile
Case Atc([Class=], lcPrgName) = 1
Return ExecScript(_Screen.cThorDispatcherClasses, lcPRGName, lcThorAPP, Pcount(), lxP1, lxP2, lxP3, lxP4, lxP5)
Case Atc([PopupID=], lcPrgName) = 1
loGetThor = Createobject ('GetThorRun')
loThorRun = loGetThor.GetThorRun (lcThorApp, lcThorFolder)
lnPopUpID = Val (Substr (lcPRGName, 1 + At ('=', lcPRGName)))
loThorRun.ExecutePopup (lnPopUpID, lcThorFolder, Set ('DataSession'))
Case Atc([Result=], lcPrgName) = 1
_Screen.xThorResult = lxP1
Return lxP1
***************
Case Empty (lcPRGName)
Do (lcThorApp) With 'Edit'
Case Atc([FORMRUNTOOL], lcPrgName) = 1
Do (lcThorApp) With 'FORMRUNTOOL'
Case Atc([?], lcPrgName) = 1
Return ExecScript(_Screen.cThorDispatcherHelp)
Case Atc([Run], lcPrgName) = 1
loGetThor = Createobject ('GetThorRun')
loThorRun = loGetThor.GetThorRun (lcThorApp, lcThorFolder)
loThorRun.Run()
Case Atc([Tool Folder=], lcPrgName) = 1
Return lcThorFolder + 'Tools\'
Case Atc([Version=], lcPrgName) = 1
Return [Thor - 1.30.25 - December 16, 2012]
Case Atc([Thor Engine=], lcPrgName) = 1
loThorEngine = FetchThorEngine(lcThorApp, lcThorFolder)
Return loThorEngine
Case Atc([Thor Register=], lcPrgName) = 1
loGetThor = Createobject ('Getthorinfo')
loThorInfo = loGetThor.Getthorinfo (lcThorApp)
Return loThorInfo
Case Atc([Get Option=], lcPrgName) = 1
loThorEngine = FetchThorEngine(lcThorApp, lcThorFolder)
Return loThorEngine.GetOption(lxP1, lxP2)
Case Atc([Set Option=], lcPrgName) = 1
loThorEngine = FetchThorEngine(lcThorApp, lcThorFolder)
Return loThorEngine.SetOption(lxP1, lxP2, lxP3)
Case Atc([Thor Template Code=], lcPrgName) = 1
loGetThor = Createobject ('Getthorinfo')
loThorInfo = loGetThor.Getthorinfo (lcThorApp)
Return loThorInfo.GetSampleToolCode()
Case Atc([Clear HotKeys], lcPrgName) = 1
Do (lcThorApp) With 'Clear HotKeys'
Case Atc([Toggle Debug Mode], lcPrgName) = 1
_Screen.lThorDebugMode = not _Screen.lThorDebugMode
Set Mark of Bar 6 of Menu_3O91D8DCH to _Screen.lThorDebugMode
If _Screen.lThorDebugMode
Set Asserts on
EndIf
* Modify Tool
Case Atc([Edit=], lcPrgName) = 1
lcFile = GetFullFileName (Alltrim (Substr (lcPRGName, At ('=', lcPRGName) + 1)), lcThorFolder)
If Empty (lcFile)
Return .Null.
Endif
Return ExecuteThorProc('Thor_Proc_EditProc', lcThorFolder, llThorInkey, .F., 2, lcFile)
* Show home page for tool
Case Atc([Link=], lcPrgName) = 1
lcFile = GetFullFileName (Alltrim (Substr (lcPRGName, At ('=', lcPRGName) + 1)), lcThorFolder)
If Empty (lcFile)
Return .Null.
Endif
loThorInfo = Newobject ('ThorInfo', 'Thor_Utils.vcx', lcThorApp)
Do (lcFile) With loThorInfo
loThorInfo.PrgName = Justfname (lcFile)
loThorInfo.FullFileName = lcFile
If Empty (loThorInfo.Link)
loThorEngine = FetchThorEngine(lcThorApp, lcThorFolder)
Messagebox (loThorEngine.GetToolDescription (loThorInfo))
Else
loLink = Newobject ('_ShellExecute', Home() + 'FFC\_Environ.vcx')
loLink.ShellExecute (loThorInfo.Link)
Endif
* Get ToolInfo for tool
Case Atc([ToolInfo=], lcPrgName) = 1
loResult = .Null.
If Empty (lxP1) Or 'C' # Vartype (lxP1)
Return loResult
Endif
lcFile = GetFullFileName (lxP1, lcThorFolder)
If Empty (lcFile)
Return loResult
Endif
Try
loThorInfo = Newobject ('ThorInfo', 'Thor_Utils.vcx', lcThorApp)
Do (lcFile) With loThorInfo
loThorInfo.PrgName = Justfname (lcFile)
loThorInfo.FullFileName = lcFile
loResult = loThorInfo
Catch
Endtry
Return loResult
* DoDefault
Case Atc([DoDefault()], lcPrgName) = 1
lcPRGName = ''
llFirst = .F.
For lnI = Program (-1) To 1 Step - 1
lcSys16 = Sys(16, lnI)
Do Case
Case Upper (Getwordnum (lcSys16, 1)) = 'PROCEDURE'
Case Not llFirst
llFirst = .T.
Otherwise
lcPRGName = JustStem (lcSys16)
Exit
Endcase
Endfor
Return ExecuteThorProc (lcPRGName, lcThorFolder, llThorInkey, .T., Pcount(), @lxP1, @lxP2, @lxP3, @lxP4, @lxP5, @lxP6, @lxP7, @lxP8, @lxP9, @lxP10)
Otherwise
Return ExecuteThorProc(lcPRGName, lcThorFolder, llThorInkey, .F., Pcount(), @lxP1, @lxP2, @lxP3, @lxP4, @lxP5, @lxP6, @lxP7, @lxP8, @lxP9, @lxP10)
Endcase
Return
Procedure ExecuteThorProc
Lparameters lcPRGName, lcThorFolder, llThorInkey, llDoDefault, lnPCount, lxP1, lxP2, lxP3, lxP4, lxP5, lxP6, lxP7, lxP8, lxP9, lxP10, lcFileText
Local lcFullPRGName, lcParams, lnI
lcFullPRGName = GetFullFileName(lcPRGName, lcThorFolder, llDoDefault)
If Empty(lcFullPRGName)
Return .Null.
Endif
_Screen.lThorInkey = _Screen.lThorInkey Or llThorInkey
_Screen.xThorResult = .T.
Execscript(_Screen.cThorSavelog, lcFullPRGName)
If lnPCount < 2
lcParams = ''
Else
lcParams = 'with lxP1'
For lnI = 2 To lnPCount - 1
lcParams = lcParams + ', lxP' + Transform(lnI)
Endfor
Endif
Assert Not _Screen.lThorDebugMode Message 'Debug: ' + Juststem(lcFullPRGName)
Do(lcFullPRGName) &lcParams
_Screen.lThorInkey = _Screen.lThorInkey And Type('llThorInkey') = 'L' And Not llThorInkey
Return _Screen.xThorResult
Endproc
Function GetFullFileName (lcPRGName, lcThorFolder, llDoDefault)
Local lcFile, lcFullPRGName1, lcFullPRGName2
If Empty(JustExt(lcPRGName))
lcFile = Forceext (lcPRGName, 'prg')
Else
lcFile = lcPRGName
EndIf
lcFullPRGName1 = Forcepath (lcFile, lcThorFolder + 'Tools\' + 'My Tools')
lcFullPRGName2 = Forcepath (lcFile, lcThorFolder + 'Tools\' + 'Procs')
lcFullPRGName3 = Forcepath (lcFile, lcThorFolder + 'Tools\')
Do Case
Case File (lcFile) and not llDoDefault
lcFile = Fullpath (lcFile)
Case File (lcFullPRGName1) and not llDoDefault
lcFile = lcFullPRGName1
Case File (lcFullPRGName2)
lcFile = lcFullPRGName2
Case File (lcFullPRGName3)
lcFile = lcFullPRGName3
Otherwise
lcFile = ''
Endcase
Return lcFile
EndFunc
Function FetchThorEngine(lcThorApp, lcThorFolder)
Local loGetThor As 'GetThorEngine'
Local loThorEngine
If PemStatus(_Screen, 'oThorEngine', 5) and Vartype(_Screen.oThorEngine) = 'O'
loThorEngine = _Screen.oThorEngine
Else
loGetThor = Createobject('GetThorEngine')
loThorEngine = loGetThor.GetThorEngine(lcThorApp, lcThorFolder)
_Screen.AddProperty('oThorEngine', loThorEngine)
EndIf
Return loThorEngine
Endfunc
Define Class GetThorRun As Session
Procedure GetThorRun (lcThorApp, lcThorFolder)
Return Newobject ('Thor_Run', 'thor_run.vcx', lcThorApp, lcThorApp, lcThorFolder)
Endproc
Enddefine
Define Class GetThorEngine As Session
Procedure GetThorEngine (lcThorApp, lcThorFolder)
Return Newobject ('Thor_Engine', 'Thor.vcx', lcThorApp, lcThorFolder)
Endproc
Enddefine
Define Class GetThorInfo As Session
Procedure GetThorInfo (lcThorApp)
Return Newobject ('ThorInfo', 'Thor_Utils.vcx', lcThorApp)
Endproc
Enddefine
Warm regards,
mk.