Using Stacks

In order to maintain separation between your local resources and the global framework resources there are two storage locations for stack files.

This concept permits your stacks to extend native stacks in system/stacks if you simply need to add some functionality to an existing stack. Or you can even replace native stacks just by placing identically named versions in your application/stacks folder.

In summary:

The page below explains the details.

Storage

Your stacks should be placed within your application/stacks folder, as this is where revIgniter will look for them when they are initialized. revIgniter stacks are located at system/stacks.

Naming Conventions

The Stack File

If your stack expects configuration data on load, your stack should have this basic prototype, that is the following code is optional:

Note:  It is not mandatory to modify your existing stacks that you may have inherited from other platforms in any way, as long as the stacks in question do not need to be configured on load like other revIgniter libraries. If you don't add the following code the part used for debugging is automatically added by revIgniter using a behavior.

Stack script:

# LOGGING
on libraryStack
  rigLogMessage "debug", "Stack" && the short name of me && "Loaded"
end libraryStack

# RUN INITIAL CONFIGURATION PROCEDURES.
command rigRunInitial<StacknameWithoutExtension>StackConfig pConfig
  if pConfig is not an array then
    if pConfig is not empty then
      split pConfig using numtochar(1) and numtochar(2)
    end if
  end if

  if pConfig is an array then
    --Do something with pConfig.
  end if
end rigRunInitial<StacknameWithoutExtension>StackConfig

Replace "<StacknameWithoutExtension>" with the file name of your stack. Don't use the stack name.

Card script:

# LOGGING
on openStack
  if the environment <> "development" then
    rigLogMessage "debug", "Stack" && the short name of this stack && "Loaded"
  end if
end openStack

Using Your Stack

From within any of your Controller handlers you can initialize your stack using the standard:

rigLoadStack "Somestack"

Where Somestack is the file name, without the ".rev" / ".livecode" file extension.

Once loaded you can access the handlers of your stack.

Passing Parameters When Initializing Your Stack

Note:  The following applies only to stacks which include the configuration handler as outlined above.

In the stack loading handler you can dynamically pass data as an array via the second parameter and it will be passed to your stack:

put "large" into tParamsA["type"]
put "red" into tParamsA["color"]

rigLoadStack "Somestack", tParamsA

Note:  You can also pass parameters stored in a config file. Simply create a config file named identically to the stack file name, add the file extension revIgniter uses (like Somestack.lc) and store it in your application/config/ folder. Note that if you dynamically pass parameters as described above, the config file option will not be available.

Replacing Native Stacks with Your Versions

Simply by naming your stack files identically to a native stack will cause revIgniter to use it instead of the native one. To use this feature you must name the file exactly the same as the native stack.

To load your stack you'll see the standard loading handler:

rigLoadStack "Nativestack"

Extending Native Stacks

If all you need to do is add some functionality to an existing stack - perhaps add a function or two - then it's overkill to replace the entire stack with your version. In this case it's better to simply extend the stack. Extending a stack is nearly identical to replacing a stack with one exception:

For example, to extend the native Nativestack stack you'll create a file named application/stacks/MY_Nativestack.livecode.

Loading Your Sub-stack

To load your sub-stack you'll use the standard syntax normally used. DO NOT include your prefix. For example, to load the example above, which extends the Nativestack stack, you will use:

rigLoadStack "Nativestack"

Setting Your Own Prefix

To set your own sub-stack prefix, open your application/config/config.lc file and look for this item:

put "MY_" into gConfig["sublibraryPrefix"]

Keep in mind that this setting applies to libraries too.

Your Stack and the Home Stack

To tell the engine where your stack script should sit in relation to the home stack you can use the optional third parameter. There are two options "front" and "behind". If you omit this parameter it is set to "behind".

Note:  If you set the third parameter to "front" you need to make sure that the stack's name property is identical to the file name of the stack.

Note:  It seems that "go stack" is currently not working properly in the server environment. As a workaround "start using" followed by "set the defaultStack" is used if you set this parameter to "front". Unfortunately this means that in this case the stack does not receive any open and preOpen messages.

revIgniter Stack Example Using the Quartam PDF Library

Let's say you want to integrate the Quartam PDF Library 1.1.5 stack (mind the version number) into revIgniter. This requires the following work steps (Note: This example assumes you name your copy of the server stack file "qrtpdflib.livecode"):

Step 1: Download the Quartam PDF Library stack from http://downloads.quartam.com/qrtpdflib_115_xplatform.zip

Step 2: Prepare a copy of the qrtpdflib.livecode stack. This involves the following:
Insert the lines below right after the license notes:

# LOGGING
on libraryStack
  rigLogMessage "debug", "Stack" && the short name of me && "Loaded";
end libraryStack

Insert the following lines right before it says "-> library handlers":

# RUN INITIAL CONFIGURATION PROCEDURES.
command rigRunInitialqrtpdflibStackConfig pConfig
  qrtPDF_ResetAll ------------------------------- this is a Quartam command!!!!!

  if pConfig is not an array then
    if pConfig is not empty then
      split pConfig using numtochar(1) and numtochar(2)
    end if
  end if

  if pConfig is an array then
    --Do something with pConfig.
  end if
end rigRunInitialqrtpdflibStackConfig

The parameter is optional. It is used to dynamically pass data to your stack on initialization.
Comment out the libraryStack handler.
Comment out the qrtPDF_InitLibrary handler. These two handlers are not needed as qrtPDF_ResetAll is called in rigRunInitialqrtpdflibStackConfig.

There are two server script blocks. Search for "START LIVECODE SERVER BLOCK". Uncomment both blocks.

Add the following code to the card script:

# LOGGING
on openStack
  if the environment <> "development" then
    rigLogMessage "debug", "Stack" && the short name of this stack && "Loaded";
  end if
end openStack

Step 3: Place the qrtpdflib.livecode stack into application/stacks, the dedicated location for your own stacks.

Step 4: Load the stack in your controller like: rigLoadStack "qrtpdflib"

Step 5: Testing and error reporting. For testing purposes you can use the scripts from qrtpdf demos. Do not load any view file.

Note: Be careful, comment out the qrtPDF_InitLibrary line in the demo scripts of Quartam.

For error reporting please see the Creating Libraries section of the User Guide.