Flight-Check your Xtras

Ever got to the end of a job, sat down to make the some projectors and wondered what Lingo Xtras you have ended up using (and need to include)? Or taken over someone elses project or revisited an old project of your own, and seen some vaguely familiar 'global functions' but can't remember which Xtra provides them? If so, this script might be of use to you. It has two main functions:

  • GetUsedXtras
  • WhoUsesXtra(xtraName) .

GetUsedXtras works by doing two things: firstly, it scans through all your scripts look for the xtra keyword that it used to instantiate 'named' xtras. For example, it will recognise the Lingo statement fp = xtra("fileIO").new() as using the Xtra called "fileIO". The second thing it does is locate any 'global functions' provided by Xtras (i.e. functions that do not require a new instance of the Xtra). For example, it will recognise re_grep, sleep and baWindowList as global functions requiring PregEx, UIHelper and BuddyAPI respectively. It does this by taking advantage of a quirk in Director where if you attempt to put a xtra-provided function into a variable or the message window, a pointer to the Xtra is returned. So using some crude regular expressions, this script scans through all your lingo looking for likely candidates for Xtra functions (words, not after comments, not enclosed in quotes etc) and see what happens if these words are put into a variable.

WhoUsesXtra looks in the results of the scan, and returns the scripts that appear to use the named Xtra.

Limitations

This is beta - hopefully there are no really nasty bugs in there. Known limitations include:

  • When scanning for Xtras by name, it simply looks for the 'xtra' keyword followed by optional parenthesis, and then the name in quotes. Therefore, it will not find xtras instantiated by using a variable name such as obj = xtra(myvar).new()
  • When looking for 'used' Xtras, this script will try and ignored any commented out lingo. However, when looking for named xtras, it will also look in comments (this is partly by design, since I often list the xtras used by a script in a comment 'header')
  • When looking for global Xtra functions, the technique described above will only work if the Xtra is installed in your Authoring environment
  • No attempt at parsing Lingo to differentiate between variables and functions meaning the scanning process tries to check everything (which can be slow)
  • Not really javascript syntax aware (commented out global functions will still match)

Downloads

The script is here, or can be downloaded via the Xlib update script. After importing, don't forget to make sure the script castmember is named "FlightChecker.Xtraslib"

First published 25/08/2006