added sysprog entities
This commit is contained in:
97
SYSPROG/STPROC/RTI_DECOMPRESS_STRING.txt
Normal file
97
SYSPROG/STPROC/RTI_DECOMPRESS_STRING.txt
Normal file
@ -0,0 +1,97 @@
|
||||
function rti_decompress_string(inString, status)
|
||||
*#!Precompile
|
||||
/*
|
||||
* This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without
|
||||
* written permission from Revelation Technologies, Inc.
|
||||
!
|
||||
* No warranties, express or implied, are conveyed by the use of this routine
|
||||
!
|
||||
* VERSION : 1.0
|
||||
*
|
||||
*
|
||||
* AUTHOR : Bryan Shumsky
|
||||
*
|
||||
* CREATED : February 16, 2022
|
||||
*
|
||||
*
|
||||
!
|
||||
*
|
||||
* REVISION HISTORY (Most CURRENT first) :
|
||||
*
|
||||
* DATE IMPLEMENTOR FUNCTION
|
||||
* -------- ----------- --------
|
||||
*
|
||||
*/
|
||||
|
||||
$Insert RevDotNetEquates
|
||||
|
||||
If Assigned(inString) Else inString = ""
|
||||
Status = 0
|
||||
rslt = ""
|
||||
|
||||
If inString = "" Then
|
||||
Status = "-2"
|
||||
Return rslt
|
||||
End
|
||||
|
||||
dotNetHandle = ""
|
||||
dotNetVersion = "4.0"
|
||||
oNet = StartDotNet("", dotNetVersion, dotNetHandle)
|
||||
if Get_Status(errcode) Then
|
||||
Goto returnErr
|
||||
End
|
||||
netLocn = CheckDotNet(dotNetVersion)
|
||||
If netLocn <> "0" And netLocn <> "" Then
|
||||
If netLocn[-1,1] <> "\" Then netLocn := "\"
|
||||
End Else netLocn = ""
|
||||
oiLocn = drive()
|
||||
If oiLocn[-1,1] <> "\" Then oiLocn := "\"
|
||||
x = set_property.net(oNet, "AssemblyName", netLocn:"System.dll":@fm:netLocn:"mscorlib.dll", dotNetHandle)
|
||||
If Get_Status(errcode) Then Goto returnErr
|
||||
|
||||
* step 1: convert from base64 string to an array of bytes
|
||||
oConverter = create_class.net(oNet, "System.Convert", 0, "", "", dotNetHandle)
|
||||
If Get_Status(errcode) Then Goto returnErr
|
||||
oBytes = send_message.net(oConverter, "FromBase64String", inString, "", 1, dotNetHandle)
|
||||
If Get_Status(errcode) Then Goto returnErr
|
||||
|
||||
* step 2: make a "memory stream" from that byte array
|
||||
oInputStream = create_class.net(oNet, "System.IO.MemoryStream", 0, oBytes, "", dotNetHandle)
|
||||
If Get_Status(errcode) Then Goto returnErr
|
||||
|
||||
* step 3: use gzipstream to decompress the incoming memory stream to an outgoing memory stream
|
||||
oOutputStream = create_class.net(oNet, "System.IO.MemoryStream", 0, "", "", dotNetHandle)
|
||||
If Get_Status(errcode) Then Goto returnErr
|
||||
oCompressor = create_class.net(oNet, "System.IO.Compression.GZipStream", 0, oInputStream:@FM:"0":@FM:"True", "":@FM:"System.IO.Compression.CompressionMode":@FM:"System.Boolean", dotNetHandle)
|
||||
If Get_Status(errcode) Then Goto returnErr
|
||||
dummy = send_message.net(oCompressor, "CopyTo", oOutputStream, "", 0, dotNetHandle)
|
||||
If Get_Status(errcode) Then Goto returnErr
|
||||
* note: must close the gzipstream to "flush" the contents
|
||||
dummy = send_message.net(oCompressor, "Close", "", "", 0, dotNetHandle)
|
||||
If Get_Status(errcode) Then Goto returnErr
|
||||
|
||||
* step 4: turn the outgoing memory stream into an array of bytes
|
||||
oDecompressed = send_message.net(oOutputStream, "ToArray", "", "", 1, dotNetHandle)
|
||||
If Get_Status(errcode) Then Goto returnErr
|
||||
* note: must close the streams
|
||||
dummy = send_message.net(oOutputStream, "Close", "", "", 0, dotNetHandle)
|
||||
dummy = send_message.net(oInputStream, "Close", "", "", 0, dotNetHandle)
|
||||
|
||||
* step 5: turn the array of bytes into a UTF8 string
|
||||
oEncoding = create_class.net(oNet, "System.Text.UTF8Encoding", 0, "", "", dotNetHandle)
|
||||
If Get_Status(errcode) Then Goto returnErr
|
||||
rslt = send_message.net(oEncoding, "GetString", oDecompressed, "", 0, dotNetHandle)
|
||||
If Get_Status(errcode) Then Goto returnErr
|
||||
|
||||
Goto wrapup
|
||||
|
||||
returnErr:
|
||||
* error handling here
|
||||
* Do something With errcode
|
||||
Status = "-1"
|
||||
|
||||
|
||||
wrapup:
|
||||
free_class.net("", dotNetHandle)
|
||||
|
||||
Return rslt
|
Reference in New Issue
Block a user