open-insight/LSL2/STPROC/SEND_INFO_TARGET.txt
Infineon\StieberD 7762b129af pre cutover push
2024-09-04 20:33:41 -07:00

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