Question about organization of large projects
J. Landman Gay
jacque at hyperactivesw.com
Sat Feb 5 15:04:26 EST 2022
On 2/5/22 12:21 AM, prothero--- via use-livecode wrote:
> Ok, thinking….. so for development, I would need to do something like:
>
> function resPath
> if the environment contains “Development” then
> put specialFolderPath("resources”)&”/mydataFolder" into dataPath
> else
> put specialFolderPath(“resources”)&”/dirSplashStackisin/pathToThisStack“&”/mydataFolder" into dataPath
> end if
> return dataPath
> end resPath
>
> In other words, all app paths would be relative to the splash stack.
>
> Is that right?
There are a couple of ways to handle this. One is by using the stackfiles and the other is by
creating a specific file path. In both cases, the module stacks should be in a folder structure
that lives in the same directory as the splash stack; files scattered around the hard drive
don't do well. You can choose either method, you don't need both. Either method will work the
same way in the IDE and a standalone (including mobile.)
For stackfiles: when you enter the path to the file, use a path relative to the main splash
stack. The standalone builder retains the file structure when it builds the app, so the
relative file paths will be correct anywhere. Add the entire folder of modules in Copy Files,
you don't need to include individual files. If you use this method, just refer to the module
stack by its short name.
For example, if your modules are inside a folder named "Resources" which contains other
folders, including a "FolderA":
Stack1 Resouces/FolderA/Stack1.livecode
When a script calls 'go stack "stack1"' LC will look at the stackfiles to get the path. It's
pretty easy to set up because the inspector includes a button that lets you choose a stack and
then fills out the correct path automatically.
For scripted paths: The specialFolderPath("resources") points to the folder containing the
stack that called it. What I usually do is write a filepath function and put it into the
splash's stack script. On startup I put the splash in use so that all other stacks can see it.
All navigation goes through this handler. Because it's in a single place,
specialFolderPath("resources") is always relative to the splash stack.
A very simplified example:
function getFilePath pFolder,pStack
-- pFolder can be a single folder or a path through more than one folder
if last char of pFolder <> slash then put slash after pFolder
put specialFolderPath("resouces") & slash & pFolder & pStack into tPath
put ".livecode" after tPath -- omit if you pass the extension in the pStack parameter
return tPath
end getFilePath
Call it like this:
put getFilePath("FolderA","Stack1.livecode") into tFilePath
or:
put getFilePath("FolderA/FolderB/FolderC","Stack1") into tFilePath
--
Jacqueline Landman Gay | jacque at hyperactivesw.com
HyperActive Software | http://www.hyperactivesw.com
More information about the use-livecode
mailing list