# Defines a function called NAME that is sourced automatically from
# FILE when called.  If FILE is NULL, it defaults to NAME.

autosrc = function (name; file)
{
  if (name == NULL)
  {
    message ("run time error: NULL passed as 1st argument.");
    exception ();
  }

  if (file == NULL) { file = name; }
  return source (sprintf (self.code; name; name; file; name));
};

autosrc.src = function (name; file; a; b; c; d; e; f; g; h; i; j)
{
  local (old);

  old = $$.(name);
  if (src (file) != 0)
  {
    message ("run time error: Can't autosrc file \"%s\"."; name);
    exception ();
  }
  if (old == $$.(name))
  {
    message( "run time error: Function \"%s\" not assigned in file \"%s\".";
             name; file );
    exception();
  }

  # What an eyesore!  Wouldn't it be nice to have variable length
  # argument lists in Algae?

  if     ( j != NULL ) {
    return $$.(name)( a; b; c; d; e; f; g; h; i; j );
  elseif ( i != NULL )
    return $$.(name)( a; b; c; d; e; f; g; h; i );
  elseif ( h != NULL )
    return $$.(name)( a; b; c; d; e; f; g; h );
  elseif ( g != NULL )
    return $$.(name)( a; b; c; d; e; f; g );
  elseif ( f != NULL )
    return $$.(name)( a; b; c; d; e; f );
  elseif ( e != NULL )
    return $$.(name)( a; b; c; d; e );
  elseif ( d != NULL )
    return $$.(name)( a; b; c; d );
  elseif ( c != NULL )
    return $$.(name)( a; b; c );
  elseif ( b != NULL )
    return $$.(name)( a; b );
  elseif ( a != NULL )
    return $$.(name)( a );
  else
    return $$.(name)();
  }
};

autosrc.code = ( "!echo '$$.(\"%s\") = " +
  "function( a; b; c; d; e; f; g; h; i; j )\n" +
  "{ return autosrc.src( \"%s\"; \"%s\"; a; b; c; d; e; f; g; h; i; j ); };'"
);



syntax highlighted by Code2HTML, v. 0.9.1