[REBOL] Unit/s
From: al::bri::xtra::co::nz at: 24-Nov-2000 19:49
Here's %Units.r. It acts a bit like C's #include function.
Andrew Martin
ICQ: 26227169
http://members.nbci.com/AndrewMartin/
-><-
[
Rebol [
Name: 'Units
Title: "Units"
File: %Units.r
Author: "Andrew Martin"
eMail: [Al--Bri--xtra--co--nz]
Date: 5/November/2000
Home: http://members.nbci.com/AndrewMartin/Rebol/Units/Units.r
Version: 1.1.0
History: [
1.1.0 "Allowed 'Unit to take blocks of filenames."
1.0.0 "Original"
]
]
Unit!: make object! [
Units: make block! 0
Do-Once: func [Filename [file!]] [
throw-on-error [
Filename: clean-path Filename
all [
not found? find Units Filename
(
do Filename
append Units Filename
true
)
]
]
]
set 'Unit func [[catch] Filename [file! block!]] [
throw-on-error [
either block? Filename [
foreach File Filename [
Do-Once File
]
][
Do-Once Filename
]
]
]
]
Units: function [
Directory [file!] Units [word!] Filter [block!]
][
Unit Original-Directory Headers Files Script Header
][
Unit: none
Original-Directory: what-dir
Headers: make block! 0
error? try [
change-dir Directory
Unit: make object! compose [
Directory: what-dir
(to set-word! Units) make block! 0
]
Files: read %.
foreach File Files [
if all [
not dir? File
any [
found? find/tail File ".r"
found? find/tail File ".rip"
]
][
Script: load/header File
Header: first Script
if all bind bind Filter 'Header 'File [
do Script
append Headers reduce [to set-word! Header/Name Header]
]
]
]
set in Unit Units make object! Headers
]
change-dir Original-Directory
Unit
]
Patches: Units %../Patches/ 'Patch [
not none? in Header 'File
Header/File = File
not none? in Header 'Patch
Header/Patch = Header/Name
]
Enhancements: Units %../Enhancements/ 'Enhancement [
not none? in Header 'File
Header/File = File
not none? in Header 'Enhancement
Header/Enhancement = Header/Name
]
]