l i v e c o d e

Calling AppleScript Functions From an AppleScript File
Mac Only Mac Only

A very little known AppleScript feature is that you can call AS-functions from another file. Suppose there is a file "MacHD:otherFile" which contain a function named "executeThat". Then you can write:
set theScript to load script (alias "MacHD:otherFile")
tell theScript to executeThat("param",123)
The only thing "AppleScriptFunction" does is produce these two lines correctly and execute them as AppleScript.

The thing with the paramcount can be confusing as well. In Transcript, all parameters not named after the name of the function itself (in this case 2), are stored in param(3), param(4) etc. So the script puts them behind the first part of the variable ASfunc. The strings between quotes, the numbers without quotes.

Then there is a part I don't understand myself; there is no explicit value returned by this function. And yet it works and it returns the same thing the function in the "otherFile" returns. Why? I don't know, but when I wanted to implement that, it already seemed to be working.

So here is the bug-free, headache-proof working version of the script: You call it by using:
get AppleScriptFunction("executeThat", "MacHD:otherFile", "param", 123)
and in the stack-script you put:
function AppleScriptFunction aFun, aFile
  put "set theScript to load script (alias ""e&aFile"e&")"&return& \
      "tell theScript to "&aFun&"(" into ASfunc
  if paramcount() > 2 then
    repeat with e = 3 to paramcount()
      put param(e) into f
      if param(e) is a number then
        put f & "," after ASfunc
      else
        put quote & f & quote & "," after ASfunc
      end if
    end repeat
    put ")" into last char of ASfunc
  else
    put ")" after ASfunc
  end if
  do ASfunc as applescript
end AppleScriptFunction
			
Originally posted 3/12/2002, updated on 8/12/2002 by Terry Vogelaar to the Use-Revolution List   (See the complete post/thread)

 Print this tip

News and Rumors Products Services Developer Resources Contact STS About STS