REBOL [
Title: "Pack"
Date: 3-Jul-2002
Name: Pack
Version: 1.0.0
File: %Pack.r
Author: "Andrew Martin"
Purpose: "Self-extracting file packer & unpacker."
Email: Al.Bri@xtra.co.nz
Web: http://valley.150m.com
Category: [util compress 5]
]
make object! [
Unpacker: [
Rebol [
Name: 'Unpacker
Title: "Self-extracting file unpacker."
Date: (now)
]
Unpack: func [Pack [block!]][
parse Pack [
any [
set File file! set Data binary! (
make paren! [write/binary File decompress Data]
)
| set File file! (
make paren! [make-dir/deep File]
)
]
end
]
]
Unpack ; 'Case goes here.
]
Pack-Directory: function [Directory [file!]][Files Case][
Files: recursive-read Directory
Case: make block! 1 + (2 * length? Files)
append Case Directory
foreach File Files [
append Case Directory/:File
if not dir? Directory/:File [
append Case compress read/binary Directory/:File
]
]
Case
]
set 'Pack func [File [file!]][
append/only compose/deep Unpacker either dir? File [
Pack-Directory File
][
reduce [File compress read/binary File]
]
]
]