93 lines
3.3 KiB
Plaintext
93 lines
3.3 KiB
Plaintext
Subroutine Send_Info_Target(File)
|
|
/*
|
|
Controls the output of SEND_INFO_TO subroutine.
|
|
|
|
Parameters :
|
|
File [in] -- The path to a file where output should be redirected. If path is empty then SEND_INFO will
|
|
stop being redirected.
|
|
|
|
*/
|
|
|
|
Declare function RTI_OS_Directory
|
|
Declare subroutine Send_Info, Set_Status, RTP27, Delete_Row, Write_Row
|
|
|
|
$insert Logical
|
|
|
|
// Set a named common so the SEND_INFO redirect knows which file to update.
|
|
Common /SEND_INFO_TO/ sitFile@
|
|
|
|
Error = ''
|
|
If Unassigned(sitFile@) then sitFile@ = ''
|
|
If Unassigned(File) then File = ''
|
|
|
|
If File NE '' then
|
|
// Create an MD pointer for our alias to the the stock SEND_INFO routine.
|
|
TableName = 'MD'
|
|
AliasKey = 'SEND_INFO_STOCK'
|
|
Rec = ''
|
|
Rec<1> = 'P'
|
|
Rec<5> = 'SYSOBJ'
|
|
Rec<6> = 'SEND_INFO'
|
|
Set_Status(0)
|
|
Write_Row(TableName, AliasKey, Rec, 0)
|
|
If Get_Status(StatusCode) then
|
|
Error = 'Unable to setup hooking. Pointer record ' : TableName : '*' : AliasKey : ' could not be written.'
|
|
Send_Info(Error)
|
|
end else
|
|
// Create an MD pointer to tell OpenInsight to call our redirect routine instead of the SEND_INFO routine.
|
|
StockKey = 'SEND_INFO'
|
|
Rec = ''
|
|
Rec<1> = 'P'
|
|
Rec<5> = 'SYSOBJ'
|
|
Rec<6> = 'SEND_INFO_TO'
|
|
Set_Status(0)
|
|
Write_Row(TableName, StockKey, Rec, 0)
|
|
If Get_Status(StatusCode) then
|
|
Error = 'Unable to setup hooking. Pointer record ' : TableName : '*' : StockKey : ' could not be written.'
|
|
Send_Info(Error)
|
|
Set_Status(0)
|
|
Delete_Row(TableName, AliasKey, 0)
|
|
end
|
|
end
|
|
|
|
If Error EQ '' then
|
|
// Both MD pointers have been created.
|
|
|
|
// Verify the path and file of where we want to direct output and create if needed.
|
|
FileName = File[-1, 'B\']
|
|
Path = File[1, Len(File) - Len(FileName)]
|
|
|
|
// Create the path to the redirect file if it doesn't already exist.
|
|
If RTI_OS_Directory('EXISTS', Path) EQ -1 then
|
|
Result = RTI_OS_Directory('CREATE', Path, True$)
|
|
If Result EQ False$ then
|
|
Error = 'Could not create ' : File : '.'
|
|
Send_Info(Error)
|
|
end
|
|
end
|
|
|
|
If Error EQ '' then
|
|
// Update the named common with the path to the redirect file.
|
|
sitFile@ = File
|
|
|
|
// Touch the file so we know it's working.
|
|
OSWrite 'SEND_INFO now directed to this file.' To sitFile@
|
|
|
|
// Load the SEND_INFO alias and reload the SEND_INFO routine so OpenInsight will call our routine instead.
|
|
RTP27('SEND_INFO_STOCK')
|
|
RTP27('SEND_INFO')
|
|
|
|
// Delete the MD pointers right away so this won't impact other users. This will also allow SEND_INFO
|
|
// to be restored in case the current session aborts and has to be restarted.
|
|
Delete_Row(TableName, StockKey, 0)
|
|
Delete_Row(TableName, AliasKey, 0)
|
|
end
|
|
end
|
|
end else
|
|
// For the reloading of the SEND_INFO routine. Since the MD pointers are removed, this will restore the original
|
|
// SEND_INFO.
|
|
RTP27('SEND_INFO')
|
|
end
|
|
|
|
Return
|