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] ] ] ]