@DIRECTORY id, dir$[, table]
dir$
into your applet or executable when compiling your script. This makes it possible to
conveniently link a lot of files into your applet or executable when compiling your
script because you only need to add one additional line to your script instead of
individual lines for each file.
Note that if you use @DIRECTORY
you have to use the GetDirectoryEntry()
function to access individual files and subdirectories stored in the directory
that you have linked to your applet or executable. See below for an example. In
case you are just running your script using the Hollywood interpreter, GetDirectoryEntry()
will simply return the string you passed to it so that the script will work identically
no matter if you're running it as a script using the Hollywood interpreter or
if you've compiled it as an applet or executable. See GetDirectoryEntry for details.
This preprocessor command also accepts an optional table argument that can be used to configure further options. The following tags are currently supported by the optional table argument:
Recursive:
True
, @DIRECTORY
will link all files in subdirectories of
dir$
as well. This is the default. Set it to False
if you don't want @DIRECTORY
to recurse into subdirectories as well.
Link:
False
if you do not want to have this directory
linked to your executable/applet when you compile your script.
This field defaults to True
which means that the directory will be linked
to your executable/applet when Hollywood is in compile mode.
Note that @DIRECTORY
doesn't only link all files and subdirectories inside dir$
into your applet or executable, it will also create a directory object which can
then be used with all functions that support directory objects, e.g. NextDirectoryEntry()
and RewindDirectory(). It is even possible to iterate
over all files and subdirectories linked by @DIRECTORY
to your script. See below
for an example.
Finally, please note that only file/directory names, sizes, and the files' actual content will be linked to your applet or executable. File attributes like protection flags, date stamps, and comments won't be linked so if you try to query them, you'll get some default values instead.
If you want to open directories at runtime, please use the OpenDirectory() command.
@DIRECTORY 1, "data" LoadBrush(1, GetDirectoryEntry("data/title.png"))The code above shows how to link all files and subdirectories inside the
data
directory
to your applet or executable and then load the file title.png
from this directory into
brush 1. Note that in case the script hasn't been compiled as an applet or executable, LoadBrush()
will simply load the file from data/title.png
. In case the script has been compiled as
an applet or executable, however, the file title.png
is loaded directly from the applet
or executable because it has been linked to it.
@DIRECTORY 1, "data" Function p_DumpDirs(d$, indent) Local handle If d$ <> "" handle = OpenDirectory(Nil, GetDirectoryFile(1, d$)) Else handle = 1 EndIf Local e = NextDirectoryEntry(handle) While e <> Nil If e.Type = #DOSTYPE_DIRECTORY Then e.size = 0 NPrint(RepeatStr(" ", indent) .. IIf(e.type = #DOSTYPE_FILE, "File:", "Directory:") .. " " .. e.name .. " " .. e.size .. " " .. HexStr(e.flags) .. " " .. e.time) If e.Type = #DOSTYPE_DIRECTORY Then p_DumpDirs(FullPath(d$, e.name), indent + 4) e = NextDirectoryEntry(handle) Wend If GetType(handle) = #LIGHTUSERDATA Then CloseDirectory(handle) EndFunction p_DumpDirs("", 0)The code above shows how to recursively print all files and directories in a directory that has been linked to the applet or executable.