@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:
@DIRECTORYwill link all files in subdirectories of
dir$as well. This is the default. Set it to
Falseif you don't want
@DIRECTORYto recurse into subdirectories as well.
@DIRECTORY doesn't only link all files and subdirectories inside
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
datadirectory to your applet or executable and then load the file
title.pngfrom 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.pngis 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.