added LSL2 stored procedures
This commit is contained in:
92
LSL2/STPROC/SEND_INFO_TARGET.txt
Normal file
92
LSL2/STPROC/SEND_INFO_TARGET.txt
Normal file
@ -0,0 +1,92 @@
|
||||
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
|
Reference in New Issue
Block a user