summaryrefslogtreecommitdiffstats
path: root/sipgen
diff options
context:
space:
mode:
authorgregory guy <gregory-tde@laposte.net>2021-11-06 17:01:39 +0100
committerSlávek Banko <slavek.banko@axis.cz>2022-01-12 03:34:47 +0100
commit976b20e0430a450c33a53970a089b5c001a1b42e (patch)
tree36a4c2fc90923d31b1c426762c6d18225d4b0e9e /sipgen
parentc1d6f4a527723728aeb28026f62461c146e3b716 (diff)
downloadsip4-tqt-976b20e0430a450c33a53970a089b5c001a1b42e.tar.gz
sip4-tqt-976b20e0430a450c33a53970a089b5c001a1b42e.zip
Rename sip into sip-tqt in order to be conflict free with upstream.
This relates to bug 2699. Signed-off-by: gregory guy <gregory-tde@laposte.net> Signed-off-by: Slávek Banko <slavek.banko@axis.cz>
Diffstat (limited to 'sipgen')
-rw-r--r--sipgen/gencode.c72
-rw-r--r--sipgen/heap.c8
-rw-r--r--sipgen/lexer.l10
-rw-r--r--sipgen/main.c14
-rw-r--r--sipgen/parser.y4
-rw-r--r--sipgen/sip.h22
-rw-r--r--sipgen/sipgen.sbf10
-rw-r--r--sipgen/transform.c10
8 files changed, 75 insertions, 75 deletions
diff --git a/sipgen/gencode.c b/sipgen/gencode.c
index f7d239e..9438d9b 100644
--- a/sipgen/gencode.c
+++ b/sipgen/gencode.c
@@ -1,18 +1,18 @@
/*
- * The code generator module for SIP.
+ * The code generator module for SIP-TQt.
*
* Copyright (c) 2010 Riverbank Computing Limited <info@riverbankcomputing.com>
*
- * This file is part of SIP.
+ * This file is part of SIP-TQt.
*
- * This copy of SIP is licensed for use under the terms of the SIP License
+ * This copy of SIP-TQt is licensed for use under the terms of the SIP License
* Agreement. See the file LICENSE for more details.
*
- * This copy of SIP may also used under the terms of the GNU General Public
+ * This copy of SIP-TQt may also used under the terms of the GNU General Public
* License v2 or v3 as published by the Free Software Foundation which can be
* found in the files LICENSE-GPL2 and LICENSE-GPL3 included in this package.
*
- * SIP is supplied WITHOUT ANY WARRANTY; without even the implied warranty of
+ * SIP-TQt is supplied WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
@@ -496,11 +496,11 @@ static void generateInternalAPIHeader(sipSpec *pt, moduleDef *mod,
"#define _%sAPI_H\n"
"\n"
"\n"
-"#include <sip.h>\n"
+"#include <sip-tqt.h>\n"
, mname
, mname);
- if (pluginPyTQt4(pt))
+ if (pluginPyQt4(pt))
prcode(fp,
"\n"
"#include <TQMetaType>\n"
@@ -787,7 +787,7 @@ static void generateInternalAPIHeader(sipSpec *pt, moduleDef *mod,
prcode(fp,
"\n"
-"/* The SIP API, this module's API and the APIs of any imported modules. */\n"
+"/* The SIP-TQt API, this module's API and the APIs of any imported modules. */\n"
"extern const sipAPIDef *sipAPI_%s;\n"
"extern sipExportedModuleDef sipModuleAPI_%s;\n"
, mname
@@ -802,7 +802,7 @@ static void generateInternalAPIHeader(sipSpec *pt, moduleDef *mod,
, mname, mld->module->name);
}
- if (pluginPyTQt4(pt))
+ if (pluginPyQt4(pt))
prcode(fp,
"\n"
"typedef const TQMetaObject *(*sip_qt_metaobject_func)(sipSimpleWrapper *,sipTypeDef *);\n"
@@ -1817,7 +1817,7 @@ static void generateCpp(sipSpec *pt, moduleDef *mod, const char *codeDir,
"/* This defines this module. */\n"
"sipExportedModuleDef sipModuleAPI_%s = {\n"
" 0,\n"
-" SIP_API_MINOR_NR,\n"
+" SIP_TQT_API_MINOR_NR,\n"
" %n,\n"
" 0,\n"
" %d,\n"
@@ -1880,7 +1880,7 @@ static void generateCpp(sipSpec *pt, moduleDef *mod, const char *codeDir,
prcode(fp,
"\n"
"\n"
-"/* The SIP API and the APIs of any imported modules. */\n"
+"/* The SIP-TQt API and the APIs of any imported modules. */\n"
"const sipAPIDef *sipAPI_%s;\n"
, mname);
@@ -1889,7 +1889,7 @@ static void generateCpp(sipSpec *pt, moduleDef *mod, const char *codeDir,
"const sipExportedModuleDef *sipModuleAPI_%s_%s;\n"
, mname, mld->module->name);
- if (pluginPyTQt4(pt))
+ if (pluginPyQt4(pt))
prcode(fp,
"\n"
"sip_qt_metaobject_func sip_%s_qt_metaobject;\n"
@@ -2006,7 +2006,7 @@ static void generateCpp(sipSpec *pt, moduleDef *mod, const char *codeDir,
prcode(fp,
" /* Export the module and publish it's API. */\n"
-" if (sipExportModule(&sipModuleAPI_%s,SIP_API_MAJOR_NR,SIP_API_MINOR_NR,0) < 0)\n"
+" if (sipExportModule(&sipModuleAPI_%s,SIP_TQT_API_MAJOR_NR,SIP_TQT_API_MINOR_NR,0) < 0)\n"
" {\n"
"#if !defined(SIP_USE_PYCAPSULE)\n"
" Py_DECREF(sip_sipmod);\n"
@@ -2016,7 +2016,7 @@ static void generateCpp(sipSpec *pt, moduleDef *mod, const char *codeDir,
" }\n"
, mname);
- if (pluginPyTQt4(pt))
+ if (pluginPyQt4(pt))
{
/* Import the helpers. */
prcode(fp,
@@ -2161,7 +2161,7 @@ static void generateTypesTable(sipSpec *pt, moduleDef *mod, FILE *fp)
argDef *ad;
const char *type_suffix;
- type_suffix = (pluginPyTQt4(pt) || pluginPyTQt3(pt)) ? ".super" : "";
+ type_suffix = (pluginPyQt4(pt) || pluginPyTQt3(pt)) ? ".super" : "";
prcode(fp,
"\n"
@@ -2214,18 +2214,18 @@ static void generateTypesTable(sipSpec *pt, moduleDef *mod, FILE *fp)
static void generateSipImport(moduleDef *mod, FILE *fp)
{
prcode(fp,
-" /* Get the SIP module's API. */\n"
+" /* Get the SIP-TQt module's API. */\n"
"#if defined(SIP_USE_PYCAPSULE)\n"
"\n"
);
if (generating_c)
prcode(fp,
-" sipAPI_%s = (const sipAPIDef *)PyCapsule_Import(\"sip._C_API\", 0);\n"
+" sipAPI_%s = (const sipAPIDef *)PyCapsule_Import(\"sip_tqt._C_API\", 0);\n"
, mod->name);
else
prcode(fp,
-" sipAPI_%s = reinterpret_cast<const sipAPIDef *>(PyCapsule_Import(\"sip._C_API\", 0));\n"
+" sipAPI_%s = reinterpret_cast<const sipAPIDef *>(PyCapsule_Import(\"sip_tqt._C_API\", 0));\n"
, mod->name);
prcode(fp,
@@ -2239,17 +2239,17 @@ static void generateSipImport(moduleDef *mod, FILE *fp)
"#else\n"
"\n"
"#if PY_VERSION_HEX >= 0x02050000\n"
-" sip_sipmod = PyImport_ImportModule(\"sip\");\n"
+" sip_sipmod = PyImport_ImportModule(\"sip_tqt\");\n"
"#else\n"
, mod->name);
if (generating_c)
prcode(fp,
-" sip_sipmod = PyImport_ImportModule((char *)\"sip\");\n"
+" sip_sipmod = PyImport_ImportModule((char *)\"sip_tqt\");\n"
);
else
prcode(fp,
-" sip_sipmod = PyImport_ImportModule(const_cast<char *>(\"sip\"));\n"
+" sip_sipmod = PyImport_ImportModule(const_cast<char *>(\"sip_tqt\"));\n"
);
prcode(fp,
@@ -2911,7 +2911,7 @@ static int generateClasses(sipSpec *pt, moduleDef *mod, classDef *cd, FILE *fp)
* code rather than through a static table. This is because C++ does
* not guarantee the order in which the table and the instance will be
* created. So far this has only been seen to be a problem when
- * statically linking SIP generated modules on Windows.
+ * statically linking SIP-TQt generated modules on Windows.
*/
if (!generating_c && vd->accessfunc == NULL && vd->type.nrderefs == 0)
continue;
@@ -3816,7 +3816,7 @@ static void generateTypeDefLink(sipSpec *pt, ifaceFileDef *iff, FILE *fp)
if (iff->next_alt->type == mappedtype_iface)
prcode(fp, ".mtd_base");
- else if (pluginPyTQt3(pt) || pluginPyTQt4(pt))
+ else if (pluginPyTQt3(pt) || pluginPyQt4(pt))
prcode(fp, ".super.ctd_base");
else
prcode(fp, ".ctd_base");
@@ -6066,9 +6066,9 @@ static void generateShadowCode(sipSpec *pt, moduleDef *mod, classDef *cd,
}
/* The meta methods if required. */
- if (pluginPyTQt4(pt) && isTQObjectSubClass(cd))
+ if (pluginPyQt4(pt) && isTQObjectSubClass(cd))
{
- if (!noPyTQt4TQMetaObject(cd))
+ if (!noPyQt4TQMetaObject(cd))
prcode(fp,
"\n"
"const TQMetaObject *sip%C::metaObject() const\n"
@@ -8022,7 +8022,7 @@ static void generateClassAPI(classDef *cd, sipSpec *pt, FILE *fp)
{
const char *type_prefix;
- if (pluginPyTQt4(pt))
+ if (pluginPyQt4(pt))
type_prefix = "pyqt4";
else if (pluginPyTQt3(pt))
type_prefix = "pyqt3";
@@ -8179,7 +8179,7 @@ static void generateShadowClassDeclaration(sipSpec *pt,classDef *cd,FILE *fp)
,(cd->vmembers != NULL ? "virtual " : ""),classFTQCName(cd),cd->dtorexceptions);
/* The metacall methods if required. */
- if (pluginPyTQt4(pt) && isTQObjectSubClass(cd))
+ if (pluginPyQt4(pt) && isTQObjectSubClass(cd))
{
prcode(fp,
"\n"
@@ -8187,7 +8187,7 @@ static void generateShadowClassDeclaration(sipSpec *pt,classDef *cd,FILE *fp)
" void *qt_metacast(const char *);\n"
);
- if (!noPyTQt4TQMetaObject(cd))
+ if (!noPyQt4TQMetaObject(cd))
prcode(fp,
" const TQMetaObject *metaObject() const;\n"
);
@@ -8986,10 +8986,10 @@ static void generateTypeDefinition(sipSpec *pt, classDef *cd, FILE *fp)
nr_methods = generateClassMethodTable(pt, cd, fp);
nr_enums = generateEnumMemberTable(pt, mod, cd, NULL, fp);
- /* Generate the PyTQt4 signals table. */
+ /* Generate the PyQt4 signals table. */
is_signals = FALSE;
- if (pluginPyTQt4(pt) && isTQObjectSubClass(cd))
+ if (pluginPyQt4(pt) && isTQObjectSubClass(cd))
{
/* The signals must be grouped by name. */
for (md = cd->members; md != NULL; md = md->next)
@@ -9025,7 +9025,7 @@ static void generateTypeDefinition(sipSpec *pt, classDef *cd, FILE *fp)
prcode(fp,
"\n"
"\n"
-"/* Define this type's PyTQt4 signals. */\n"
+"/* Define this type's PyQt4 signals. */\n"
"static const pyqt4QtSignal pyqt4_signals_%C[] = {\n"
, classFTQCName(cd));
}
@@ -9135,7 +9135,7 @@ static void generateTypeDefinition(sipSpec *pt, classDef *cd, FILE *fp)
has_docstring = TRUE;
}
- if (pluginPyTQt4(pt))
+ if (pluginPyQt4(pt))
{
type_prefix = "pyqt4";
embedded = TRUE;
@@ -9540,9 +9540,9 @@ static void generateTypeDefinition(sipSpec *pt, classDef *cd, FILE *fp)
);
}
- if (pluginPyTQt4(pt))
+ if (pluginPyQt4(pt))
{
- if (isTQObjectSubClass(cd) && !noPyTQt4TQMetaObject(cd))
+ if (isTQObjectSubClass(cd) && !noPyQt4TQMetaObject(cd))
prcode(fp,
" &%U::staticMetaObject,\n"
, cd);
@@ -9572,7 +9572,7 @@ static void generateTypeDefinition(sipSpec *pt, classDef *cd, FILE *fp)
/*
- * Generate an entry in the PyTQt4 signal table.
+ * Generate an entry in the PyQt4 signal table.
*/
static void generateSignalTableEntry(sipSpec *pt, classDef *cd, overDef *sig,
memberDef *md, int membernr, FILE *fp)
@@ -12697,7 +12697,7 @@ static FILE *createFile(moduleDef *mod, const char *fname,
"/*\n"
" * %s\n"
" *\n"
-" * Generated by SIP %s on %s"
+" * Generated by SIP-TQt %s on %s"
,description
,sipVersion,ctime(&now));
diff --git a/sipgen/heap.c b/sipgen/heap.c
index a4b42ba..12f559c 100644
--- a/sipgen/heap.c
+++ b/sipgen/heap.c
@@ -3,16 +3,16 @@
*
* Copyright (c) 2010 Riverbank Computing Limited <info@riverbankcomputing.com>
*
- * This file is part of SIP.
+ * This file is part of SIP-TQt.
*
- * This copy of SIP is licensed for use under the terms of the SIP License
+ * This copy of SIP-TQt is licensed for use under the terms of the SIP License
* Agreement. See the file LICENSE for more details.
*
- * This copy of SIP may also used under the terms of the GNU General Public
+ * This copy of SIP-TQt may also used under the terms of the GNU General Public
* License v2 or v3 as published by the Free Software Foundation which can be
* found in the files LICENSE-GPL2 and LICENSE-GPL3 included in this package.
*
- * SIP is supplied WITHOUT ANY WARRANTY; without even the implied warranty of
+ * SIP-TQt is supplied WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
diff --git a/sipgen/lexer.l b/sipgen/lexer.l
index 53fd905..3e61972 100644
--- a/sipgen/lexer.l
+++ b/sipgen/lexer.l
@@ -1,18 +1,18 @@
/*
- * The SIP lexer.
+ * The SIP-TQt lexer.
*
* Copyright (c) 2010 Riverbank Computing Limited <info@riverbankcomputing.com>
*
- * This file is part of SIP.
+ * This file is part of SIP-TQt.
*
- * This copy of SIP is licensed for use under the terms of the SIP License
+ * This copy of SIP-TQt is licensed for use under the terms of the SIP License
* Agreement. See the file LICENSE for more details.
*
- * This copy of SIP may also used under the terms of the GNU General Public
+ * This copy of SIP-TQt may also used under the terms of the GNU General Public
* License v2 or v3 as published by the Free Software Foundation which can be
* found in the files LICENSE-GPL2 and LICENSE-GPL3 included in this package.
*
- * SIP is supplied WITHOUT ANY WARRANTY; without even the implied warranty of
+ * SIP-TQt is supplied WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
diff --git a/sipgen/main.c b/sipgen/main.c
index 199fab1..15085c8 100644
--- a/sipgen/main.c
+++ b/sipgen/main.c
@@ -1,18 +1,18 @@
/*
- * The main module for SIP.
+ * The main module for SIP-TQt.
*
* Copyright (c) 2010 Riverbank Computing Limited <info@riverbankcomputing.com>
*
- * This file is part of SIP.
+ * This file is part of SIP-TQt.
*
- * This copy of SIP is licensed for use under the terms of the SIP License
+ * This copy of SIP-TQt is licensed for use under the terms of the SIP License
* Agreement. See the file LICENSE for more details.
*
- * This copy of SIP may also used under the terms of the GNU General Public
+ * This copy of SIP-TQt may also used under the terms of the GNU General Public
* License v2 or v3 as published by the Free Software Foundation which can be
* found in the files LICENSE-GPL2 and LICENSE-GPL3 included in this package.
*
- * SIP is supplied WITHOUT ANY WARRANTY; without even the implied warranty of
+ * SIP-TQt is supplied WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
@@ -27,7 +27,7 @@
#ifndef PACKAGE
-#define PACKAGE "sip"
+#define PACKAGE "sip-tqt"
#endif
#define VERSION "4.10.5"
@@ -460,7 +460,7 @@ void fatal(char *fmt,...)
/*
- * Display the SIP version number on stdout and exit with zero exit status.
+ * Display the SIP-TQt version number on stdout and exit with zero exit status.
*/
static void version(void)
{
diff --git a/sipgen/parser.y b/sipgen/parser.y
index 0c4d803..33e42c4 100644
--- a/sipgen/parser.y
+++ b/sipgen/parser.y
@@ -3266,7 +3266,7 @@ static void finishClass(sipSpec *pt, moduleDef *mod, classDef *cd,
cd->pyqt4_flags = flg->fvalue.ival;
if (findOptFlag(of, "PyQt4NoQMetaObject", bool_flag) != NULL)
- setPyTQt4NoTQMetaObject(cd);
+ setPyQt4NoTQMetaObject(cd);
if (isOpaque(cd))
{
@@ -6071,7 +6071,7 @@ int pluginPyTQt3(sipSpec *pt)
/*
* Return TRUE if the PyQt4 plugin was specified.
*/
-int pluginPyTQt4(sipSpec *pt)
+int pluginPyQt4(sipSpec *pt)
{
return stringFind(pt->plugins, "PyQt4");
}
diff --git a/sipgen/sip.h b/sipgen/sip.h
index 4a4910b..af3f8fa 100644
--- a/sipgen/sip.h
+++ b/sipgen/sip.h
@@ -1,18 +1,18 @@
/*
- * The main header file for SIP.
+ * The main header file for SIP-TQt.
*
* Copyright (c) 2010 Riverbank Computing Limited <info@riverbankcomputing.com>
*
- * This file is part of SIP.
+ * This file is part of SIP-TQt.
*
- * This copy of SIP is licensed for use under the terms of the SIP License
+ * This copy of SIP-TQt is licensed for use under the terms of the SIP License
* Agreement. See the file LICENSE for more details.
*
- * This copy of SIP may also used under the terms of the GNU General Public
+ * This copy of SIP-TQt may also used under the terms of the GNU General Public
* License v2 or v3 as published by the Free Software Foundation which can be
* found in the files LICENSE-GPL2 and LICENSE-GPL3 included in this package.
*
- * SIP is supplied WITHOUT ANY WARRANTY; without even the implied warranty of
+ * SIP-TQt is supplied WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
@@ -137,8 +137,8 @@
#define setIsHoldGILDtor(cd) ((cd)->classflags |= CLASS_DTOR_HOLD_GIL)
#define assignmentHelper(cd) ((cd)->classflags & CLASS_ASSIGN_HELPER)
#define setAssignmentHelper(cd) ((cd)->classflags |= CLASS_ASSIGN_HELPER)
-#define noPyTQt4TQMetaObject(cd) ((cd)->classflags & CLASS_NO_TQMETAOBJECT)
-#define setPyTQt4NoTQMetaObject(cd) ((cd)->classflags |= CLASS_NO_TQMETAOBJECT)
+#define noPyQt4TQMetaObject(cd) ((cd)->classflags & CLASS_NO_TQMETAOBJECT)
+#define setPyQt4NoTQMetaObject(cd) ((cd)->classflags |= CLASS_NO_TQMETAOBJECT)
#define isTemplateClass(cd) ((cd)->classflags & CLASS_IS_TEMPLATE)
#define setIsTemplateClass(cd) ((cd)->classflags |= CLASS_IS_TEMPLATE)
#define resetIsTemplateClass(cd) ((cd)->classflags &= ~CLASS_IS_TEMPLATE)
@@ -989,7 +989,7 @@ typedef struct _mroDef {
typedef struct _classDef {
int classflags; /* The class flags. */
- int pyqt4_flags; /* The PyTQt4 specific flags. */
+ int pyqt4_flags; /* The PyQt4 specific flags. */
nameDef *pyname; /* The Python name. */
ifaceFileDef *iff; /* The interface file. */
struct _classDef *ecd; /* The enclosing scope. */
@@ -1085,8 +1085,8 @@ typedef struct _parserContext {
} parserContext;
-extern char *sipVersion; /* The version of SIP. */
-extern stringList *includeDirList; /* The include directory list for SIP files. */
+extern char *sipVersion; /* The version of SIP-TQt. */
+extern stringList *includeDirList; /* The include directory list for SIP-TQt files. */
void parse(sipSpec *, FILE *, char *, stringList *, stringList *, int, int);
@@ -1140,7 +1140,7 @@ ifaceFileDef *findIfaceFile(sipSpec *pt, moduleDef *mod,
scopedNameDef *fqname, ifaceFileType iftype,
apiVersionRangeDef *api_range, argDef *ad);
int pluginPyTQt3(sipSpec *pt);
-int pluginPyTQt4(sipSpec *pt);
+int pluginPyQt4(sipSpec *pt);
void yywarning(char *);
nameDef *cacheName(sipSpec *pt, const char *name);
scopedNameDef *encodedTemplateName(templateDef *td);
diff --git a/sipgen/sipgen.sbf b/sipgen/sipgen.sbf
index 3542663..25ddf09 100644
--- a/sipgen/sipgen.sbf
+++ b/sipgen/sipgen.sbf
@@ -2,18 +2,18 @@
#
# Copyright (c) 2010 Riverbank Computing Limited <info@riverbankcomputing.com>
#
-# This file is part of SIP.
+# This file is part of SIP-TQt.
#
-# This copy of SIP is licensed for use under the terms of the SIP License
+# This copy of SIP-TQt is licensed for use under the terms of the SIP License
# Agreement. See the file LICENSE for more details.
#
-# This copy of SIP may also used under the terms of the GNU General Public
+# This copy of SIP-TQt may also used under the terms of the GNU General Public
# License v2 or v3 as published by the Free Software Foundation which can be
# found in the files LICENSE-GPL2 and LICENSE-GPL3 included in this package.
#
-# SIP is supplied WITHOUT ANY WARRANTY; without even the implied warranty of
+# SIP-TQt is supplied WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-target = sip
+target = sip-tqt
sources = main.c transform.c gencode.c export.c heap.c parser.c lexer.c
headers = sip.h parser.h
diff --git a/sipgen/transform.c b/sipgen/transform.c
index 8e61351..c6d204d 100644
--- a/sipgen/transform.c
+++ b/sipgen/transform.c
@@ -1,18 +1,18 @@
/*
- * The parse tree transformation module for SIP.
+ * The parse tree transformation module for SIP-TQt.
*
* Copyright (c) 2010 Riverbank Computing Limited <info@riverbankcomputing.com>
*
- * This file is part of SIP.
+ * This file is part of SIP-TQt.
*
- * This copy of SIP is licensed for use under the terms of the SIP License
+ * This copy of SIP-TQt is licensed for use under the terms of the SIP License
* Agreement. See the file LICENSE for more details.
*
- * This copy of SIP may also used under the terms of the GNU General Public
+ * This copy of SIP-TQt may also used under the terms of the GNU General Public
* License v2 or v3 as published by the Free Software Foundation which can be
* found in the files LICENSE-GPL2 and LICENSE-GPL3 included in this package.
*
- * SIP is supplied WITHOUT ANY WARRANTY; without even the implied warranty of
+ * SIP-TQt is supplied WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/