<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--
* This Source Code Form is subject to the terms of the Mozilla Public License,
* v. 2.0. If a copy of the MPL was not distributed with this file, You can
* obtain one at http://mozilla.org/MPL/2.0/
*
* Copyright (C) 2009-2012, Peter Johnson (www.delphidabbler.com).
*
* $Rev$
* $Date$
*
* Help topic dscribing the routine snippet kind.
-->
<html>
<head>
<meta http-equiv="Content-Type" content="text-html; charset=Windows-1252">
<title>
Routine Snippets
</title>
<link rel="stylesheet" href="../css/codesnip.css" type="text/css">
</head>
<body>
<object
type="application/x-oleobject"
classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"
>
<param name="ALink Name" value="SnippetRoutine">
</object>
<h1>
<a name="snippet_routine"></a>Routine Snippets
</h1>
<p>
A routine snippet, defines exactly one Pascal procedure or function.
Methods are not permitted.
</p>
<p>
Each routine snippet begins with either the <strong>function</strong> or
<strong>procedure</strong> keyword followed by a valid Pascal routine
prototype (see below). No source code or comments may not preceed the
<strong>function</strong> or <strong>procedure</strong> keywords. The
following directives may be included in the prototype.
</p>
<ul class="unspaced">
<li>
register
</li>
<li>
pascal
</li>
<li>
cdecl
</li>
<li>
stdcall
</li>
<li>
safecall
</li>
<li>
overload
</li>
</ul>
<p>
After the routine prototype there must be at least one space or newline
before the routine's implementation. Private functions, procedures, type
definitions, variables and constants are permitted.
</p>
<p>
A routine must be
fully implemented in Pascal – it can't be simply a DLL import.
Therefore the <strong>external</strong> and <strong>varargs</strong>
directives are not supported.
</p>
<p>
Here's an example of a valid routine snippet:
</p>
<pre class="source-code">function MyFunc(const Param1, Param2: string): string; stdcall;
begin
Result := Param1 + ' - ' + Param2;
end;</pre>
<p>
Routine snippets may refer to other routines,
<a href="snippet_type.htm">simple type</a> definitions,
<a href="snippet_class.htm">class & advanced record</a> definitions or
<a href="snippet_constant.htm">constants</a>, providing they are defined
in Delphi units or elsewhere in the database. The snippet's units and
dependency references should indicate where to find referenced types,
constants and routines. Routine snippets may not reference
<a href="snippet_freeform.htm">freeform</a> or
<a href="snippet_unit.htm">unit</a> snippets.
</p>
<p>
It is important that the routine prototype is recognisable by
<em>CodeSnip</em> because it must be able to extract the prototype for
inclusion in a generated unit's interface section, amongst other things.
</p>
<h2>
Overloading
</h2>
<p>
You may use overloaded routines by creating a separate routine snippet for
each overloaded version of the routine. The <strong>overload</strong>
directive must be used. While the name of the routines used in the source
code must be the same for each overloaded routine, each snippet must be
given a unique name for use by the database.
</p>
</body>
</html>