Here's my Library loader script:

use [Patches Files Provided Do_Script Defer_Script Script Header
Requires Provides] [
        do Patches: %Patches.r
        Files: exclude read %./ reduce [Rebol/script/header/File
Patches]
        Provided: make block! 100
        Do_Script: [
                do Script
                if all [
                        not none? Provides
                        Provides: get Provides
                        any [
                                word? Provides
                                block? Provides
                                ]
                        ] [
                        insert tail Provided Provides
                        ]
                true
                ]
        foreach File Files [
                Defer_Script: [
                        insert/only tail Files Script
                        ]
                Script: any [
                        if block? File [
                                File
                                ]
                        if all [
                                file? File
                                found? find/last File %.r
                                ] [
                                load/header File
                                ]
                        ]
                if Script [
                        Header: first Script
                        Requires: in Header 'Requires
                        Provides: in Header 'Provides
                        any [
                                if none? Requires Do_Script
                                if word? Requires: get Requires [
                                        either found? find Provided
Requires Do_Script Defer_Script
                                        ]
                                if block? Requires [
                                        either empty? exclude Requires
Provided Do_Script Defer_Script
                                        ]
                                ]
                        ]
                ]
        ]

It examines each script's header for the 'Requires and 'Provides fields,
like (from my ML.r %script):

        Requires: [Build-Tag Push Pop]
        Provides: [ML]

It doesn't attempt to do any versioning or downloading, just 'load-s and
'do-es scripts so that scripts that require words defined are 'do-ne
after scripts that provide values for those words. For the above
example, the files that provide 'Build-Tag, 'Push & 'Pop are 'do-ne
before the file containing a value for 'ML.

One problem the above script has, it that if a script requires a value
for a word that no other script provides, the above function never
returns. I haven't figured out a solution for this. Can anyone think of
one?

Andrew J Martin
Attendance Officer
Speaking in tongues and performing miracles.
Colenso High School
Arnold Street, Napier.
Tel: 64-6-8310180 ext 826
Fax: 64-6-8336759
http://colenso.net/scripts/Wiki.r?AJM
http://www.colenso.school.nz/

DISCLAIMER: Colenso High School and its Board of Trustees is not responsible (or 
legally 
liable) for materials distributed to or acquired from user e-mail accounts. You can 
report any 
misuse of an e-mail account to our ICT Manager and the complaint will be investigated. 
(Misuse can come in many forms, but can be viewed as any material sent/received that 
indicate or suggest pornography, unethical or illegal solicitation, racism, sexism, 
inappropriate 
language and/or other issues described in our Acceptable Use Policy.)

All outgoing messages are certified virus-free by McAfee GroupShield Exchange 
5.10.285.0
Phone: +64 6 843 5095  or  Fax: +64 6 833 6759  or  E-mail: [EMAIL PROTECTED] 


-- 
To unsubscribe from this list, just send an email to
[EMAIL PROTECTED] with unsubscribe as the subject.

Reply via email to