File: w_memory.srw
Size: 7266
Date: Tue, 19 Apr 2022 01:58:04 +0200
$PBExportHeader$w_memory.srw
$PBExportComments$In-memory compress/uncompress
forward
global type w_memory from window
end type
type cb_close from commandbutton within w_memory
end type
type mle_result from multilineedit within w_memory
end type
type cb_decompress from commandbutton within w_memory
end type
type cb_compress from commandbutton within w_memory
end type
end forward

global type w_memory from window
integer x = 302
integer y = 396
integer width = 2647
integer height = 1556
boolean titlebar = true
string title = "Sample In-memory compress/uncompress"
boolean controlmenu = true
windowtype windowtype = response!
long backcolor = 79416533
boolean center = true
cb_close cb_close
mle_result mle_result
cb_decompress cb_decompress
cb_compress cb_compress
end type
global w_memory w_memory

type variables
blob iblob_zipped
ulong iul_original
String is_source

end variables

forward prototypes
public function string wf_loremipsum ()
end prototypes

public function string wf_loremipsum ();Return "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis diam augue, hendrerit in dapibus a, ultricies sed orci. Vivamus id leo sit amet neque tincidunt euismod vel nec metus. Sed eros lectus, placerat id nulla sed, porttitor feugiat arcu. Proin condimentum est a est accumsan accumsan. Maecenas id nisl a augue egestas viverra et quis nulla. Praesent a hendrerit metus. Nunc dui leo, commodo ut tellus non, pellentesque iaculis nisl. Integer at rutrum sapien. Donec volutpat facilisis enim vitae mattis. Phasellus maximus vulputate lectus, non pretium elit consequat vehicula. Ut a ornare massa.~r~n~r~n" + &
       "Phasellus cursus nisi vel libero ultrices, a commodo enim iaculis. Nunc at iaculis enim. Aenean pellentesque fermentum orci, eget commodo sem rhoncus eget. Ut lacinia pellentesque venenatis. Donec elementum vulputate lectus eget rhoncus. Proin et molestie orci. Sed vitae posuere turpis. Ut luctus orci vel nibh dictum dignissim a id neque. Pellentesque venenatis nisl et varius pretium. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam dignissim lorem id molestie feugiat. Aliquam in rhoncus magna. Nulla varius diam nisl, sed suscipit libero aliquam non. Cras sed pretium tellus. Mauris in nulla tempus, placerat mauris sed, pulvinar dui. Suspendisse at pretium quam.~r~n~r~n" + &
       "Fusce consequat tincidunt convallis. Integer sit amet tortor at risus aliquam pharetra nec ut ex. Suspendisse sed ante ullamcorper, tempor turpis sit amet, gravida risus. Donec ac purus ligula. Nunc ornare in dolor a tempus. Nullam eu mauris vel risus semper suscipit sed at leo. Pellentesque vitae eleifend turpis, at feugiat libero.~r~n~r~n" + &
       "Aenean vitae nunc in massa congue fermentum vitae sit amet dui. In ut ultricies dui. Nullam mauris enim, consequat nec turpis vel, sollicitudin aliquet eros. Duis nisi sapien, finibus in nisl at, feugiat porttitor libero. Proin ut mattis arcu. Sed facilisis tempor enim ac luctus. In odio orci, varius eu fermentum id, pretium sit amet urna. Maecenas cursus elementum enim et rutrum. Nam libero turpis, aliquet sit amet justo at, commodo vestibulum tortor. Nam malesuada sem dui, a auctor neque ultrices nec. Sed erat sem, semper eget finibus at, rutrum a ante. Phasellus euismod nibh pulvinar sem vulputate, at venenatis urna facilisis. Integer sed metus tincidunt, pretium neque sit amet, volutpat lectus. Sed quis lorem est.~r~n~r~n" + &
       "Donec posuere facilisis malesuada. Nulla facilisi. Donec tristique justo dolor, non finibus nisl venenatis id. Mauris molestie venenatis sem mattis consectetur. Nulla at erat volutpat, pulvinar mi vitae, egestas eros. Sed lacinia eget est vitae fermentum. In ac sapien ornare ligula posuere rutrum. Phasellus risus sem, commodo a ornare in, rutrum at felis. Aliquam erat volutpat. Nunc dignissim lorem nisi. Sed accumsan dolor nulla, in convallis nunc euismod sed. Maecenas lacus tortor, efficitur eget lectus in, tristique dapibus orci. Sed ex justo, laoreet in viverra quis, vulputate eu turpis. Integer ac ante nec libero tristique dapibus."

end function

on w_memory.create
this.cb_close=create cb_close
this.mle_result=create mle_result
this.cb_decompress=create cb_decompress
this.cb_compress=create cb_compress
this.Control[]={this.cb_close,&
this.mle_result,&
this.cb_decompress,&
this.cb_compress}
end on

on w_memory.destroy
destroy(this.cb_close)
destroy(this.mle_result)
destroy(this.cb_decompress)
destroy(this.cb_compress)
end on

type cb_close from commandbutton within w_memory
integer x = 2231
integer y = 32
integer width = 334
integer height = 100
integer taborder = 30
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "MS Sans Serif"
string text = "Close"
boolean cancel = true
end type

event clicked;Close(parent)

end event

type mle_result from multilineedit within w_memory
integer x = 37
integer y = 160
integer width = 2528
integer height = 1252
integer taborder = 40
integer textsize = -9
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = fixed!
fontfamily fontfamily = modern!
string facename = "Fixedsys"
long textcolor = 33554432
boolean vscrollbar = true
boolean displayonly = true
borderstyle borderstyle = stylelowered!
end type

type cb_decompress from commandbutton within w_memory
integer x = 475
integer y = 32
integer width = 370
integer height = 100
integer taborder = 20
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "MS Sans Serif"
boolean enabled = false
string text = "Decompress"
end type

event clicked;String ls_source

SetPointer(HourGlass!)

// uncompress original string
If gn_zlib.of_uncompress(iblob_zipped, iul_original, ls_source) Then
   If ls_source = is_source Then
      mle_result.text = ls_source
   Else
      MessageBox( Parent.title, &
                  "Uncompressed source does not match original!")
   End If
Else
   MessageBox(Parent.title, "Uncompress failed.")
End If

end event

type cb_compress from commandbutton within w_memory
integer x = 37
integer y = 32
integer width = 370
integer height = 100
integer taborder = 10
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "MS Sans Serif"
string text = "Compress"
end type

event clicked;Decimal{2} ldec_pct

SetPointer(HourGlass!)

// get userobject source to use as test string
is_source = wf_LoremIpsum()

// save original size
iul_original = Len(is_source)

// compress original string
If gn_zlib.of_compress(is_source, iblob_zipped) Then
   ldec_pct = 100 - ((Len(iblob_zipped) / iul_original) * 100)
   cb_decompress.enabled = True
   mle_result.text = "Compressed from " + &
         String(iul_original) + " to " + String(Len(iblob_zipped)) + &
         "~r~nA reduction of " + String(ldec_pct) + " percent"
Else
   MessageBox(Parent.title, "Compress failed.")
End If

end event