View in color | View documentation | License |
Download script | History | Other scripts by: carl |
30-Apr 10:41 UTC
[0.058] 12.284k
[0.058] 12.284k
build-pack.rREBOL [
Title: "Build a Program Package"
Date: 6-Jul-2001
Version: 1.0.0
File: %build-pack.r
Author: "Carl Sassenrath"
Purpose: {Creates a single compressed REBOL program from a list of file modules. Modules can include binary data files such as images.}
Email: %carl--rebol--com
Note: "Output is text so it is compatible with all tools."
library: [
level: 'intermediate
platform: none
type: [Tool How-to]
domain: 'file-handling
tested-under: none
support: none
license: none
see-also: none
]
]
system/options/binary-base: 64
;-- Specify a list of files that belong in the package.
; If a file is preceded by a variable, then the file
; is assumed to be data (such as an image) and it
; is stored as the variable set to a binary value.
files: [
logo: %nyc.jpg
%show.r
]
error: func [str] [alert reform ["ERROR: " str] quit]
;-- Create a text file that contains contents of all files.
; Load each file, then mold it back. (Removes all comments)
out: make string! 20000
variable: main: none
foreach file files [
either any-word? :file [variable: to-word :file][
if not exists? file [error reform ["file does not exist:" file]]
either script? file [
script: load/all file
if none? main [main: script]
append out mold/only skip script 2 ; skip REBOL header
][
if variable [repend out [variable ": "]]
append out mold read/binary file
]
]
]
if none? main [error "At least one script file is required."]
out: compress out
;-- Create a header based on the header of the first script file.
; Add to it a decoder script and the program binary.
header: reform [
'REBOL
mold third make context main/2 [
Built: now
Length: length? out
]
]
repend header [
newline "code: " mold out {
if system/script/header/length <> length? code [alert "Corrupt program." quit]
do decompress code
}
]
file: request-file/only/title "Save file as:" "Save"
if file [write file header] Notes
|