summaryrefslogtreecommitdiff
path: root/im/src
diff options
context:
space:
mode:
authorPixel <pixel@nobis-crew.org>2010-06-14 23:47:31 -0700
committerPixel <pixel@nobis-crew.org>2010-06-14 23:47:31 -0700
commit7c0c85a86aa73c0c495523f994f8412e377a8195 (patch)
tree29929fdc4390224b3a4f8b728d50ae5dfc3589ce /im/src
parent5000908b9b2761854951cea3e7dad90be76ffd59 (diff)
Upgrading im to 3.6
Diffstat (limited to 'im/src')
-rwxr-xr-xim/src/COPYRIGHT2
-rwxr-xr-xim/src/config.mak2
-rwxr-xr-xim/src/im.def2
-rwxr-xr-xim/src/im_binfile.cpp4
-rwxr-xr-xim/src/im_dib.cpp4
-rwxr-xr-xim/src/im_file.cpp3
-rwxr-xr-xim/src/im_format.cpp23
-rwxr-xr-xim/src/im_image.cpp44
-rwxr-xr-xim/src/im_lib.cpp6
-rwxr-xr-xim/src/im_process.def1
-rw-r--r--im/src/lua5/clua/im_process.clua344
-rwxr-xr-xim/src/lua5/im_process.lua1
-rwxr-xr-xim/src/lua5/imlua_aux.c4
-rwxr-xr-xim/src/lua5/imlua_image.c46
-rwxr-xr-xim/src/lua5/imlua_process.c41
-rwxr-xr-xim/src/process/im_analyze.cpp23
-rwxr-xr-xim/src/process/im_arithmetic_bin.cpp144
-rwxr-xr-xim/src/process/im_color.cpp6
-rwxr-xr-xim/src/process/im_geometric.cpp37
-rwxr-xr-xim/src/process/im_resize.cpp24
-rw-r--r--im/src/tecmake.mak1253
21 files changed, 1777 insertions, 237 deletions
diff --git a/im/src/COPYRIGHT b/im/src/COPYRIGHT
index ca0b899..4aae86e 100755
--- a/im/src/COPYRIGHT
+++ b/im/src/COPYRIGHT
@@ -7,7 +7,7 @@ and commercial purposes at absolutely no cost.
===============================================================================
-Copyright (C) 1994-2009 Tecgraf, PUC-Rio.
+Copyright (C) 1994-2010 Tecgraf, PUC-Rio.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/im/src/config.mak b/im/src/config.mak
index a938100..f0b7966 100755
--- a/im/src/config.mak
+++ b/im/src/config.mak
@@ -60,7 +60,7 @@ ifneq ($(findstring Win, $(TEC_SYSNAME)), )
USE_EXIF = Yes
endif
else
- SRC += im_sysfile_unix.cpp
+ SRC += im_sysfile_unix.cpp
endif
ifdef USE_EXIF
diff --git a/im/src/im.def b/im/src/im.def
index 41aa175..9c448d5 100755
--- a/im/src/im.def
+++ b/im/src/im.def
@@ -118,8 +118,10 @@ EXPORTS
imImageSetPalette
imImageCopy
imImageCopyData
+ imImageCopyPlane
imImageCreateBased
imImageAddAlpha
+ imImageSetAlpha
imDibToHBitmap
imDibLogicalPalette
imDibCaptureScreen
diff --git a/im/src/im_binfile.cpp b/im/src/im_binfile.cpp
index 7171032..636a9a5 100755
--- a/im/src/im_binfile.cpp
+++ b/im/src/im_binfile.cpp
@@ -2,7 +2,7 @@
* \brief Binary File Access
*
* See Copyright Notice in im_lib.h
- * $Id: im_binfile.cpp,v 1.2 2009/10/01 14:15:47 scuri Exp $
+ * $Id: im_binfile.cpp,v 1.3 2010/01/26 19:13:02 scuri Exp $
*/
@@ -499,7 +499,7 @@ int imBinFileSetCurrentModule(int pModule)
return old_module;
}
-int imBinFileRegisterModule(imBinFileNewFunc pNewFunc)
+extern "C" int imBinFileRegisterModule(imBinFileNewFunc pNewFunc)
{
if (iBinFileModuleCount == MAX_MODULES) return -1;
int id = iBinFileModuleCount;
diff --git a/im/src/im_dib.cpp b/im/src/im_dib.cpp
index 3dd6780..4057f3e 100755
--- a/im/src/im_dib.cpp
+++ b/im/src/im_dib.cpp
@@ -2,7 +2,7 @@
* \brief Windows DIB
*
* See Copyright Notice in im_lib.h
- * $Id: im_dib.cpp,v 1.1 2008/10/17 06:10:16 scuri Exp $
+ * $Id: im_dib.cpp,v 1.2 2010/01/26 18:06:01 scuri Exp $
*/
@@ -964,7 +964,7 @@ void imDibDecodeToMap(const imDib* dib, unsigned char* map, long* palette)
DIB <-> File
*******************/
-int imDibSaveFile(const imDib* dib, char* filename)
+int imDibSaveFile(const imDib* dib, const char* filename)
{
DWORD dwTmp;
HANDLE hFile; /* file handle */
diff --git a/im/src/im_file.cpp b/im/src/im_file.cpp
index 3bfa779..9a4519a 100755
--- a/im/src/im_file.cpp
+++ b/im/src/im_file.cpp
@@ -2,7 +2,7 @@
* \brief File Access
*
* See Copyright Notice in im_lib.h
- * $Id: im_file.cpp,v 1.5 2009/08/23 23:57:51 scuri Exp $
+ * $Id: im_file.cpp,v 1.6 2009/11/23 17:13:05 scuri Exp $
*/
#include <stdlib.h>
@@ -125,6 +125,7 @@ void imFileClose(imFile* ifile)
if (ifile->line_buffer) free(ifile->line_buffer);
delete attrib_table;
+ delete ifileformat;
}
void* imFileHandle(imFile* ifile, int index)
diff --git a/im/src/im_format.cpp b/im/src/im_format.cpp
index d389743..ad04a3b 100755
--- a/im/src/im_format.cpp
+++ b/im/src/im_format.cpp
@@ -2,7 +2,7 @@
* \brief File Format Access
*
* See Copyright Notice in im_lib.h
- * $Id: im_format.cpp,v 1.2 2008/12/03 15:45:34 scuri Exp $
+ * $Id: im_format.cpp,v 1.3 2009/11/23 17:13:05 scuri Exp $
*/
@@ -194,7 +194,7 @@ imFileFormatBase* imFileFormatBaseOpen(const char* file_name, int *error)
imFileFormatBase* ifileformat = iformat->Create();
*error = ifileformat->Open(file_name);
if (*error != IM_ERR_NONE && *error != IM_ERR_FORMAT) // Error situation that must abort
- { // Only IM_ERR_FORMAT is a valid error here
+ { // Only IM_ERR_FORMAT is considered here
free(extension);
delete [] ext_mark;
delete ifileformat;
@@ -206,6 +206,11 @@ imFileFormatBase* imFileFormatBaseOpen(const char* file_name, int *error)
delete [] ext_mark;
return ifileformat;
}
+ else
+ {
+ /* Other errors, release the format and test another one */
+ delete ifileformat;
+ }
}
}
@@ -233,6 +238,11 @@ imFileFormatBase* imFileFormatBaseOpen(const char* file_name, int *error)
delete [] ext_mark;
return ifileformat;
}
+ else
+ {
+ /* Other errors, release the format and test another one */
+ delete ifileformat;
+ }
}
}
@@ -269,9 +279,12 @@ imFileFormatBase* imFileFormatBaseOpenAs(const char* file_name, const char* form
}
else if (*error == IM_ERR_NONE) // Sucessfully oppened the file
return ifileformat;
-
- *error = IM_ERR_FORMAT;
- return NULL;
+ else
+ {
+ *error = IM_ERR_FORMAT;
+ delete ifileformat;
+ return NULL;
+ }
}
imFileFormatBase* imFileFormatBaseNew(const char* file_name, const char* format, int *error)
diff --git a/im/src/im_image.cpp b/im/src/im_image.cpp
index 1fb993d..5f865f8 100755
--- a/im/src/im_image.cpp
+++ b/im/src/im_image.cpp
@@ -2,7 +2,7 @@
* \brief Image Manipulation
*
* See Copyright Notice in im_lib.h
- * $Id: im_image.cpp,v 1.4 2009/08/13 22:34:25 scuri Exp $
+ * $Id: im_image.cpp,v 1.7 2010/01/17 18:18:12 scuri Exp $
*/
#include <stdlib.h>
@@ -273,6 +273,39 @@ void imImageClear(imImage* image)
memset(image->data[image->depth], 0, image->plane_size);
}
+template <class T>
+inline void iSet(T *map, T value, int count)
+{
+ for (int i = 0; i < count; i++)
+ {
+ *map++ = value;
+ }
+}
+
+void imImageSetAlpha(imImage* image, float alpha)
+{
+ assert(image);
+
+ if (image->has_alpha)
+ {
+ switch(image->data_type)
+ {
+ case IM_BYTE:
+ memset(image->data[image->depth], (imbyte)alpha, image->plane_size);
+ break;
+ case IM_USHORT:
+ iSet((imushort*)image->data[image->depth], (imushort)alpha, image->plane_size);
+ break;
+ case IM_INT:
+ iSet((int*)image->data[image->depth], (int)alpha, image->plane_size);
+ break;
+ case IM_FLOAT:
+ iSet((float*)image->data[image->depth], (float)alpha, image->plane_size);
+ break;
+ }
+ }
+}
+
int imImageIsBitmap(const imImage* image)
{
assert(image);
@@ -302,6 +335,15 @@ void imImageCopyData(const imImage* src_image, imImage* dst_image)
}
}
+void imImageCopyPlane(const imImage* src_image, int src_plane, imImage* dst_image, int dst_plane)
+{
+ assert(src_image);
+ assert(dst_image);
+ assert(imImageMatchDataType(src_image, dst_image));
+
+ memcpy(dst_image->data[dst_plane], src_image->data[src_plane], src_image->plane_size);
+}
+
imImage* imImageDuplicate(const imImage* image)
{
assert(image);
diff --git a/im/src/im_lib.cpp b/im/src/im_lib.cpp
index 05a71d8..4860ea7 100755
--- a/im/src/im_lib.cpp
+++ b/im/src/im_lib.cpp
@@ -2,7 +2,7 @@
* \brief Library Management
*
* See Copyright Notice in im_lib.h
- * $Id: im_lib.cpp,v 1.5 2009/10/01 14:43:42 scuri Exp $
+ * $Id: im_lib.cpp,v 1.6 2010/04/23 17:45:44 scuri Exp $
*/
#include <stdlib.h>
@@ -11,8 +11,8 @@
#include "im_lib.h"
/* This appears only here to avoid changing the im_lib.h header for bug fixes */
-#define IM_VERSION_FIX ""
-#define IM_VERSION_FIX_NUMBER 0
+#define IM_VERSION_FIX ".1"
+#define IM_VERSION_FIX_NUMBER 1
static char *iVersion = "TECVERID.str:IM:LIB:" IM_VERSION IM_VERSION_FIX;
diff --git a/im/src/im_process.def b/im/src/im_process.def
index 07bba47..7e637e9 100755
--- a/im/src/im_process.def
+++ b/im/src/im_process.def
@@ -73,6 +73,7 @@ EXPORTS
imProcessBitwiseOp
imProcessBlendConst
imProcessBlend
+ imProcessCompose
imProcessCalcRotateSize
imProcessDifusionErrThreshold
imProcessDirectConv
diff --git a/im/src/lua5/clua/im_process.clua b/im/src/lua5/clua/im_process.clua
index b5274f7..bb91893 100644
--- a/im/src/lua5/clua/im_process.clua
+++ b/im/src/lua5/clua/im_process.clua
@@ -605,192 +605,194 @@ static const unsigned char B1[] = {
0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x42, 0x6c, 0x65, 0x6e, 0x64, 0x43,
0x6f, 0x6e, 0x73, 0x74, 0x22, 0x29, 0x0a, 0x54, 0x68, 0x72, 0x65, 0x65, 0x53, 0x6f, 0x75, 0x72,
0x63, 0x65, 0x73, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63,
- 0x65, 0x73, 0x73, 0x42, 0x6c, 0x65, 0x6e, 0x64, 0x22, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f,
- 0x75, 0x72, 0x63, 0x65, 0x54, 0x77, 0x6f, 0x44, 0x65, 0x73, 0x74, 0x73, 0x28, 0x22, 0x50, 0x72,
- 0x6f, 0x63, 0x65, 0x73, 0x73, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65,
- 0x78, 0x22, 0x29, 0x0a, 0x54, 0x77, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x4f, 0x6e,
- 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x65,
- 0x72, 0x67, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x22, 0x2c, 0x20, 0x6e, 0x69, 0x6c,
- 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x43,
- 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x29, 0x0a, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
- 0x20, 0x69, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x75, 0x6c, 0x74, 0x69,
- 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x61, 0x6e, 0x4e, 0x65, 0x77, 0x20, 0x28, 0x73, 0x72, 0x63, 0x5f,
- 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x2c, 0x20, 0x64, 0x73, 0x74, 0x5f,
- 0x69, 0x6d, 0x61, 0x67, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x64,
- 0x73, 0x74, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x20, 0x3d, 0x20, 0x69, 0x6d, 0x2e, 0x49, 0x6d,
- 0x61, 0x67, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x28, 0x73,
- 0x72, 0x63, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5b, 0x31, 0x5d,
- 0x29, 0x0a, 0x20, 0x20, 0x69, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x75,
- 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x61, 0x6e, 0x28, 0x73, 0x72, 0x63, 0x5f, 0x69,
- 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x2c, 0x20, 0x64, 0x73, 0x74, 0x5f, 0x69,
- 0x6d, 0x61, 0x67, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x64,
- 0x73, 0x74, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x66, 0x75,
- 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73,
- 0x73, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x53, 0x74, 0x64, 0x44, 0x65, 0x76, 0x4e,
- 0x65, 0x77, 0x20, 0x28, 0x73, 0x72, 0x63, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x6c, 0x69,
- 0x73, 0x74, 0x2c, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x29, 0x0a,
- 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x64, 0x73, 0x74, 0x5f, 0x69, 0x6d, 0x61, 0x67,
- 0x65, 0x20, 0x3d, 0x20, 0x69, 0x6d, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x72, 0x65, 0x61,
- 0x74, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x28, 0x73, 0x72, 0x63, 0x5f, 0x69, 0x6d, 0x61, 0x67,
- 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5b, 0x31, 0x5d, 0x29, 0x0a, 0x20, 0x20, 0x69, 0x6d, 0x2e,
- 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x53,
- 0x74, 0x64, 0x44, 0x65, 0x76, 0x28, 0x73, 0x72, 0x63, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f,
- 0x6c, 0x69, 0x73, 0x74, 0x2c, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65,
- 0x2c, 0x20, 0x64, 0x73, 0x74, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x72,
- 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x64, 0x73, 0x74, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x0a,
- 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x54, 0x77, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x4f,
- 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x41,
- 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x29, 0x0a,
- 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74,
- 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c,
- 0x79, 0x43, 0x6f, 0x6e, 0x6a, 0x22, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63,
- 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73,
- 0x73, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x52, 0x47, 0x42, 0x55, 0x6e, 0x69, 0x66,
- 0x6f, 0x72, 0x6d, 0x22, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20,
- 0x69, 0x6d, 0x2e, 0x4d, 0x41, 0x50, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x29, 0x0a, 0x4f, 0x6e, 0x65,
- 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50,
- 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x47, 0x72,
- 0x61, 0x79, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53,
- 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72,
- 0x6f, 0x63, 0x65, 0x73, 0x73, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x48, 0x69, 0x73, 0x74, 0x6f,
- 0x67, 0x72, 0x61, 0x6d, 0x22, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65,
- 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73,
- 0x45, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61,
- 0x6d, 0x22, 0x29, 0x0a, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6d,
- 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x59, 0x43, 0x68,
- 0x72, 0x6f, 0x6d, 0x61, 0x4e, 0x65, 0x77, 0x20, 0x28, 0x73, 0x72, 0x63, 0x5f, 0x69, 0x6d, 0x61,
- 0x67, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x79, 0x5f, 0x69, 0x6d,
- 0x61, 0x67, 0x65, 0x20, 0x3d, 0x20, 0x69, 0x6d, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x72,
- 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x28, 0x73, 0x72, 0x63, 0x5f, 0x69, 0x6d,
- 0x61, 0x67, 0x65, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x69,
- 0x6d, 0x2e, 0x47, 0x52, 0x41, 0x59, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x42, 0x59, 0x54, 0x45, 0x29,
- 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x5f,
- 0x69, 0x6d, 0x61, 0x67, 0x65, 0x20, 0x3d, 0x20, 0x69, 0x6d, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65,
- 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x28, 0x73, 0x72, 0x63, 0x5f,
- 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c,
- 0x20, 0x69, 0x6d, 0x2e, 0x52, 0x47, 0x42, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x42, 0x59, 0x54, 0x45,
- 0x29, 0x0a, 0x20, 0x20, 0x69, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x53, 0x70,
- 0x6c, 0x69, 0x74, 0x59, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x28, 0x73, 0x72, 0x63, 0x5f, 0x69,
- 0x6d, 0x61, 0x67, 0x65, 0x2c, 0x20, 0x79, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2c, 0x20, 0x63,
- 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x72,
- 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x79, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2c, 0x20, 0x63,
- 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x0a, 0x65, 0x6e, 0x64, 0x0a,
- 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x68, 0x72, 0x65, 0x65, 0x44,
- 0x65, 0x73, 0x74, 0x73, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x53, 0x70, 0x6c,
- 0x69, 0x74, 0x48, 0x53, 0x49, 0x22, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e, 0x69, 0x6c,
- 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x47, 0x52, 0x41, 0x59, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x46, 0x4c,
- 0x4f, 0x41, 0x54, 0x29, 0x0a, 0x54, 0x68, 0x72, 0x65, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65,
- 0x73, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73,
- 0x73, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x48, 0x53, 0x49, 0x22, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c,
- 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x52, 0x47, 0x42, 0x2c, 0x20, 0x69, 0x6d,
- 0x2e, 0x42, 0x59, 0x54, 0x45, 0x29, 0x0a, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
- 0x20, 0x69, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x53, 0x70, 0x6c, 0x69, 0x74,
- 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x4e, 0x65, 0x77, 0x20, 0x28, 0x73,
- 0x72, 0x63, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61,
- 0x6c, 0x20, 0x64, 0x65, 0x70, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x73, 0x72, 0x63, 0x5f, 0x69, 0x6d,
- 0x61, 0x67, 0x65, 0x3a, 0x44, 0x65, 0x70, 0x74, 0x68, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x6c, 0x6f,
- 0x63, 0x61, 0x6c, 0x20, 0x64, 0x73, 0x74, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x20, 0x3d,
- 0x20, 0x7b, 0x7d, 0x0a, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x31, 0x2c,
- 0x20, 0x64, 0x65, 0x70, 0x74, 0x68, 0x20, 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x61,
- 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x28, 0x64, 0x73, 0x74, 0x5f, 0x69,
- 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43,
- 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x28, 0x73, 0x72, 0x63, 0x5f, 0x69,
- 0x6d, 0x61, 0x67, 0x65, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20,
- 0x69, 0x6d, 0x2e, 0x47, 0x52, 0x41, 0x59, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a,
- 0x20, 0x20, 0x69, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x53, 0x70, 0x6c, 0x69,
- 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x28, 0x73, 0x72, 0x63, 0x5f,
- 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2c, 0x20, 0x64, 0x73, 0x74, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65,
- 0x73, 0x29, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x75, 0x6e, 0x70, 0x61,
- 0x63, 0x6b, 0x28, 0x64, 0x73, 0x74, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x29, 0x0a, 0x65,
- 0x6e, 0x64, 0x0a, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6d, 0x2e,
- 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x6d, 0x70,
- 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x4e, 0x65, 0x77, 0x20, 0x28, 0x73, 0x72, 0x63, 0x5f, 0x69,
- 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x63,
+ 0x65, 0x73, 0x73, 0x42, 0x6c, 0x65, 0x6e, 0x64, 0x22, 0x29, 0x0a, 0x54, 0x77, 0x6f, 0x53, 0x6f,
+ 0x75, 0x72, 0x63, 0x65, 0x73, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72,
+ 0x6f, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x22, 0x29, 0x0a, 0x4f,
+ 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x77, 0x6f, 0x44, 0x65, 0x73, 0x74, 0x73,
+ 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x43, 0x6f,
+ 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x22, 0x29, 0x0a, 0x54, 0x77, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x73, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65,
+ 0x73, 0x73, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x22, 0x2c,
+ 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20,
+ 0x69, 0x6d, 0x2e, 0x43, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x29, 0x0a, 0x0a, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4d,
+ 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x61, 0x6e, 0x4e, 0x65, 0x77, 0x20, 0x28,
+ 0x73, 0x72, 0x63, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x2c, 0x20,
+ 0x64, 0x73, 0x74, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x63,
0x61, 0x6c, 0x20, 0x64, 0x73, 0x74, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x20, 0x3d, 0x20, 0x69,
0x6d, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x73,
0x65, 0x64, 0x28, 0x73, 0x72, 0x63, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x6c, 0x69, 0x73,
- 0x74, 0x5b, 0x31, 0x5d, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20,
- 0x69, 0x6d, 0x2e, 0x52, 0x47, 0x42, 0x29, 0x0a, 0x20, 0x20, 0x69, 0x6d, 0x2e, 0x50, 0x72, 0x6f,
- 0x63, 0x65, 0x73, 0x73, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65,
- 0x6e, 0x74, 0x73, 0x28, 0x73, 0x72, 0x63, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x6c, 0x69,
- 0x73, 0x74, 0x2c, 0x20, 0x64, 0x73, 0x74, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x29, 0x0a, 0x20,
- 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x64, 0x73, 0x74, 0x5f, 0x69, 0x6d, 0x61, 0x67,
- 0x65, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65,
+ 0x74, 0x5b, 0x31, 0x5d, 0x29, 0x0a, 0x20, 0x20, 0x69, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65,
+ 0x73, 0x73, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x61, 0x6e, 0x28, 0x73,
+ 0x72, 0x63, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x2c, 0x20, 0x64,
+ 0x73, 0x74, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
+ 0x72, 0x6e, 0x20, 0x64, 0x73, 0x74, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x0a, 0x65, 0x6e, 0x64,
+ 0x0a, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6d, 0x2e, 0x50, 0x72,
+ 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x53, 0x74, 0x64,
+ 0x44, 0x65, 0x76, 0x4e, 0x65, 0x77, 0x20, 0x28, 0x73, 0x72, 0x63, 0x5f, 0x69, 0x6d, 0x61, 0x67,
+ 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x2c, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x5f, 0x69, 0x6d, 0x61,
+ 0x67, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x64, 0x73, 0x74, 0x5f,
+ 0x69, 0x6d, 0x61, 0x67, 0x65, 0x20, 0x3d, 0x20, 0x69, 0x6d, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65,
+ 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x28, 0x73, 0x72, 0x63, 0x5f,
+ 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5b, 0x31, 0x5d, 0x29, 0x0a, 0x20,
+ 0x20, 0x69, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x75, 0x6c, 0x74, 0x69,
+ 0x70, 0x6c, 0x65, 0x53, 0x74, 0x64, 0x44, 0x65, 0x76, 0x28, 0x73, 0x72, 0x63, 0x5f, 0x69, 0x6d,
+ 0x61, 0x67, 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x2c, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x5f, 0x69,
+ 0x6d, 0x61, 0x67, 0x65, 0x2c, 0x20, 0x64, 0x73, 0x74, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x29,
+ 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x64, 0x73, 0x74, 0x5f, 0x69, 0x6d,
+ 0x61, 0x67, 0x65, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x54, 0x77, 0x6f, 0x53, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x73, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63,
+ 0x65, 0x73, 0x73, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x63,
+ 0x65, 0x22, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65,
+ 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x75, 0x6c,
+ 0x74, 0x69, 0x70, 0x6c, 0x79, 0x43, 0x6f, 0x6e, 0x6a, 0x22, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53,
+ 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72,
+ 0x6f, 0x63, 0x65, 0x73, 0x73, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x52, 0x47, 0x42,
+ 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e,
+ 0x69, 0x6c, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x4d, 0x41, 0x50, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x29,
+ 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73,
+ 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x69,
+ 0x7a, 0x65, 0x47, 0x72, 0x61, 0x79, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x29, 0x0a,
+ 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74,
+ 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x48,
+ 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x22, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f,
+ 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f,
+ 0x63, 0x65, 0x73, 0x73, 0x45, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x48, 0x69, 0x73, 0x74,
+ 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x22, 0x29, 0x0a, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x69, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x53, 0x70, 0x6c, 0x69,
+ 0x74, 0x59, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x4e, 0x65, 0x77, 0x20, 0x28, 0x73, 0x72, 0x63,
+ 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
+ 0x79, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x20, 0x3d, 0x20, 0x69, 0x6d, 0x2e, 0x49, 0x6d, 0x61,
+ 0x67, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x28, 0x73, 0x72,
+ 0x63, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e, 0x69,
+ 0x6c, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x47, 0x52, 0x41, 0x59, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x42,
+ 0x59, 0x54, 0x45, 0x29, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x63, 0x68, 0x72,
+ 0x6f, 0x6d, 0x61, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x20, 0x3d, 0x20, 0x69, 0x6d, 0x2e, 0x49,
+ 0x6d, 0x61, 0x67, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x28,
+ 0x73, 0x72, 0x63, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20,
+ 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x52, 0x47, 0x42, 0x2c, 0x20, 0x69, 0x6d, 0x2e,
+ 0x42, 0x59, 0x54, 0x45, 0x29, 0x0a, 0x20, 0x20, 0x69, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65,
+ 0x73, 0x73, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x59, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x28, 0x73,
+ 0x72, 0x63, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2c, 0x20, 0x79, 0x5f, 0x69, 0x6d, 0x61, 0x67,
+ 0x65, 0x2c, 0x20, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x29,
+ 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x79, 0x5f, 0x69, 0x6d, 0x61, 0x67,
+ 0x65, 0x2c, 0x20, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x0a,
+ 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x68,
+ 0x72, 0x65, 0x65, 0x44, 0x65, 0x73, 0x74, 0x73, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73,
+ 0x73, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x48, 0x53, 0x49, 0x22, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c,
+ 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x47, 0x52, 0x41, 0x59, 0x2c, 0x20, 0x69,
+ 0x6d, 0x2e, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x29, 0x0a, 0x54, 0x68, 0x72, 0x65, 0x65, 0x53, 0x6f,
+ 0x75, 0x72, 0x63, 0x65, 0x73, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72,
+ 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x48, 0x53, 0x49, 0x22, 0x2c, 0x20,
+ 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x52, 0x47, 0x42,
+ 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x42, 0x59, 0x54, 0x45, 0x29, 0x0a, 0x0a, 0x66, 0x75, 0x6e, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x53,
+ 0x70, 0x6c, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x4e, 0x65,
+ 0x77, 0x20, 0x28, 0x73, 0x72, 0x63, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x29, 0x0a, 0x20, 0x20,
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x64, 0x65, 0x70, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x73, 0x72,
+ 0x63, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x3a, 0x44, 0x65, 0x70, 0x74, 0x68, 0x28, 0x29, 0x0a,
+ 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x64, 0x73, 0x74, 0x5f, 0x69, 0x6d, 0x61, 0x67,
+ 0x65, 0x73, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x0a, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x20,
+ 0x3d, 0x20, 0x31, 0x2c, 0x20, 0x64, 0x65, 0x70, 0x74, 0x68, 0x20, 0x64, 0x6f, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x28, 0x64,
+ 0x73, 0x74, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x49, 0x6d,
+ 0x61, 0x67, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x28, 0x73,
+ 0x72, 0x63, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e,
+ 0x69, 0x6c, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x47, 0x52, 0x41, 0x59, 0x29, 0x29, 0x0a, 0x20, 0x20,
+ 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x69, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73,
+ 0x53, 0x70, 0x6c, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x28,
+ 0x73, 0x72, 0x63, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2c, 0x20, 0x64, 0x73, 0x74, 0x5f, 0x69,
+ 0x6d, 0x61, 0x67, 0x65, 0x73, 0x29, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
+ 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x28, 0x64, 0x73, 0x74, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65,
+ 0x73, 0x29, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x69, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x65, 0x72, 0x67, 0x65,
+ 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x4e, 0x65, 0x77, 0x20, 0x28, 0x73,
+ 0x72, 0x63, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x29, 0x0a, 0x20,
+ 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x64, 0x73, 0x74, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65,
+ 0x20, 0x3d, 0x20, 0x69, 0x6d, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x42, 0x61, 0x73, 0x65, 0x64, 0x28, 0x73, 0x72, 0x63, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65,
+ 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5b, 0x31, 0x5d, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e,
+ 0x69, 0x6c, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x52, 0x47, 0x42, 0x29, 0x0a, 0x20, 0x20, 0x69, 0x6d,
+ 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x43, 0x6f, 0x6d,
+ 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x28, 0x73, 0x72, 0x63, 0x5f, 0x69, 0x6d, 0x61, 0x67,
+ 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x2c, 0x20, 0x64, 0x73, 0x74, 0x5f, 0x69, 0x6d, 0x61, 0x67,
+ 0x65, 0x29, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x64, 0x73, 0x74, 0x5f,
+ 0x69, 0x6d, 0x61, 0x67, 0x65, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f,
+ 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f,
+ 0x63, 0x65, 0x73, 0x73, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x6f, 0x6d,
+ 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e,
+ 0x69, 0x6c, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x46, 0x4c, 0x4f, 0x41,
+ 0x54, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44,
+ 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x70, 0x6c,
+ 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x29, 0x0a, 0x54, 0x77, 0x6f, 0x53, 0x6f,
+ 0x75, 0x72, 0x63, 0x65, 0x73, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72,
+ 0x6f, 0x63, 0x65, 0x73, 0x73, 0x42, 0x69, 0x74, 0x77, 0x69, 0x73, 0x65, 0x4f, 0x70, 0x22, 0x29,
+ 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73,
+ 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x42, 0x69, 0x74, 0x77, 0x69, 0x73,
+ 0x65, 0x4e, 0x6f, 0x74, 0x22, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65,
0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73,
- 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65,
- 0x6e, 0x74, 0x73, 0x22, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20,
- 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x29, 0x0a, 0x4f,
- 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28,
- 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x43,
- 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0x29, 0x0a, 0x54, 0x77, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65,
- 0x73, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73,
- 0x73, 0x42, 0x69, 0x74, 0x77, 0x69, 0x73, 0x65, 0x4f, 0x70, 0x22, 0x29, 0x0a, 0x4f, 0x6e, 0x65,
- 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50,
- 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x42, 0x69, 0x74, 0x77, 0x69, 0x73, 0x65, 0x4e, 0x6f, 0x74,
- 0x22, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44,
- 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x42, 0x69, 0x74, 0x4d,
- 0x61, 0x73, 0x6b, 0x22, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f,
- 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x42,
- 0x69, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x22, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75,
+ 0x42, 0x69, 0x74, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75,
0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63,
- 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6e, 0x65, 0x47, 0x61, 0x6d, 0x75, 0x74, 0x22, 0x29, 0x0a, 0x4f,
- 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28,
- 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x55, 0x6e, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c,
- 0x69, 0x7a, 0x65, 0x22, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20,
- 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x42, 0x59, 0x54, 0x45, 0x29, 0x0a, 0x4f, 0x6e,
+ 0x65, 0x73, 0x73, 0x42, 0x69, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x22, 0x29, 0x0a, 0x4f, 0x6e,
0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22,
- 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e,
- 0x76, 0x22, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e, 0x69,
- 0x6c, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x42, 0x59, 0x54, 0x45, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53,
- 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72,
- 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x22, 0x29, 0x0a,
+ 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6e, 0x65, 0x47, 0x61, 0x6d, 0x75, 0x74,
+ 0x22, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44,
+ 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x55, 0x6e, 0x4e, 0x6f,
+ 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x22, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e,
+ 0x69, 0x6c, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x42, 0x59, 0x54, 0x45,
+ 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65,
+ 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x44, 0x69, 0x72, 0x65, 0x63,
+ 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x22, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e, 0x69, 0x6c,
+ 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x42, 0x59, 0x54, 0x45, 0x29, 0x0a,
0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74,
- 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f,
- 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22,
- 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x42,
- 0x49, 0x4e, 0x41, 0x52, 0x59, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53,
- 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72,
- 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4d, 0x61, 0x78, 0x54, 0x68, 0x72,
- 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e, 0x69,
- 0x6c, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x2c, 0x20, 0x6e, 0x69,
- 0x6c, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44,
- 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x54, 0x68, 0x72, 0x65,
- 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e, 0x69, 0x6c,
- 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x2c, 0x20, 0x6e, 0x69, 0x6c,
- 0x29, 0x0a, 0x54, 0x77, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x4f, 0x6e, 0x65, 0x44,
- 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x54, 0x68, 0x72, 0x65,
- 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x42, 0x79, 0x44, 0x69, 0x66, 0x66, 0x22, 0x29, 0x0a, 0x4f, 0x6e,
- 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22,
- 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x48, 0x79, 0x73, 0x74, 0x65, 0x72, 0x65, 0x73, 0x69,
- 0x73, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x2c, 0x20, 0x6e, 0x69, 0x6c,
- 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59,
- 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65,
- 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73,
- 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x45, 0x72, 0x72, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68,
+ 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76,
+ 0x65, 0x22, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65,
+ 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x61, 0x6e,
+ 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68,
0x6f, 0x6c, 0x64, 0x22, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20,
0x69, 0x6d, 0x2e, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x29, 0x0a,
0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74,
- 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x44, 0x69, 0x66, 0x75, 0x73, 0x69, 0x6f,
- 0x6e, 0x45, 0x72, 0x72, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x29, 0x0a,
+ 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4d, 0x61,
+ 0x78, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x2c, 0x20, 0x6e, 0x69, 0x6c,
+ 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59,
+ 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65,
+ 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73,
+ 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c,
+ 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x2c,
+ 0x20, 0x6e, 0x69, 0x6c, 0x29, 0x0a, 0x54, 0x77, 0x6f, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73,
+ 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73,
+ 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x42, 0x79, 0x44, 0x69, 0x66, 0x66, 0x22,
+ 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65,
+ 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x48, 0x79, 0x73, 0x74, 0x65,
+ 0x72, 0x65, 0x73, 0x69, 0x73, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x2c,
+ 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x42, 0x49,
+ 0x4e, 0x41, 0x52, 0x59, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f,
+ 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f,
+ 0x63, 0x65, 0x73, 0x73, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x45, 0x72, 0x72, 0x54, 0x68,
+ 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e,
+ 0x69, 0x6c, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x2c, 0x20, 0x6e,
+ 0x69, 0x6c, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65,
+ 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x44, 0x69, 0x66,
+ 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c,
+ 0x64, 0x22, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65,
+ 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x50, 0x65, 0x72,
+ 0x63, 0x65, 0x6e, 0x74, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x29, 0x0a,
0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74,
- 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74,
- 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53,
- 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72,
- 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4f, 0x74, 0x73, 0x75, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f,
- 0x6c, 0x64, 0x22, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e,
- 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x69,
- 0x6e, 0x4d, 0x61, 0x78, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x2c, 0x20,
- 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x42, 0x49, 0x4e,
- 0x41, 0x52, 0x59, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75,
- 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63,
- 0x65, 0x73, 0x73, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c,
+ 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4f, 0x74, 0x73, 0x75, 0x54, 0x68, 0x72,
+ 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65,
+ 0x73, 0x73, 0x4d, 0x69, 0x6e, 0x4d, 0x61, 0x78, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c,
0x64, 0x22, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x69, 0x6d,
0x2e, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x29, 0x0a, 0x4f, 0x6e,
0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22,
- 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x22,
+ 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x54, 0x68, 0x72, 0x65,
+ 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x2c, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x6e, 0x69, 0x6c,
+ 0x2c, 0x20, 0x69, 0x6d, 0x2e, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x2c, 0x20, 0x6e, 0x69, 0x6c,
0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x6e, 0x65, 0x44, 0x65,
- 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x50, 0x6f, 0x73, 0x74, 0x65,
- 0x72, 0x69, 0x7a, 0x65, 0x22, 0x29, 0x0a, 0x0a,
+ 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x50, 0x69, 0x78, 0x65, 0x6c,
+ 0x61, 0x74, 0x65, 0x22, 0x29, 0x0a, 0x4f, 0x6e, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f,
+ 0x6e, 0x65, 0x44, 0x65, 0x73, 0x74, 0x28, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x50,
+ 0x6f, 0x73, 0x74, 0x65, 0x72, 0x69, 0x7a, 0x65, 0x22, 0x29, 0x0a, 0x0a,
};
if (luaL_loadbuffer(L, (const char *)B1, sizeof(B1), "im_process.lua") == 0) lua_call(L, 0, 0);
diff --git a/im/src/lua5/im_process.lua b/im/src/lua5/im_process.lua
index eefac4b..5c73b29 100755
--- a/im/src/lua5/im_process.lua
+++ b/im/src/lua5/im_process.lua
@@ -255,6 +255,7 @@ end
TwoSourcesOneDest("ProcessBlendConst")
ThreeSourcesOneDest("ProcessBlend")
+TwoSourcesOneDest("ProcessCompose")
OneSourceTwoDests("ProcessSplitComplex")
TwoSourcesOneDest("ProcessMergeComplex", nil, nil, nil, im.CFLOAT)
diff --git a/im/src/lua5/imlua_aux.c b/im/src/lua5/imlua_aux.c
index e472dca..b26df93 100755
--- a/im/src/lua5/imlua_aux.c
+++ b/im/src/lua5/imlua_aux.c
@@ -2,7 +2,7 @@
* \brief IM Lua 5 Binding
*
* See Copyright Notice in im_lib.h
- * $Id: imlua_aux.c,v 1.2 2009/08/04 21:35:26 scuri Exp $
+ * $Id: imlua_aux.c,v 1.3 2010/01/21 18:24:22 scuri Exp $
*/
#include <memory.h>
@@ -46,7 +46,7 @@ int imlua_newarrayint (lua_State *L, int *value, int count, int start)
lua_newtable(L);
for (i = 0; i < count; i++)
{
- lua_pushnumber(L, value[i]);
+ lua_pushinteger(L, value[i]);
lua_rawseti(L, -2, i+start);
}
return 1;
diff --git a/im/src/lua5/imlua_image.c b/im/src/lua5/imlua_image.c
index 55dcc82..0e8676d 100755
--- a/im/src/lua5/imlua_image.c
+++ b/im/src/lua5/imlua_image.c
@@ -2,7 +2,7 @@
* \brief IM Lua 5 Binding
*
* See Copyright Notice in im_lib.h
- * $Id: imlua_image.c,v 1.5 2009/09/25 18:40:31 scuri Exp $
+ * $Id: imlua_image.c,v 1.9 2010/01/17 18:18:12 scuri Exp $
*/
#include <string.h>
@@ -128,6 +128,15 @@ static int imluaImageAddAlpha (lua_State *L)
}
/*****************************************************************************\
+ image:SetAlpha()
+\*****************************************************************************/
+static int imluaImageSetAlpha (lua_State *L)
+{
+ imImageSetAlpha(imlua_checkimage(L, 1), (float)luaL_checknumber(L, 2));
+ return 0;
+}
+
+/*****************************************************************************\
image:Reshape()
\*****************************************************************************/
static int imluaImageReshape (lua_State *L)
@@ -167,6 +176,31 @@ static int imluaImageCopyData (lua_State *L)
}
/*****************************************************************************\
+ image:CopyPlane()
+\*****************************************************************************/
+static int imluaImageCopyPlane(lua_State *L)
+{
+ imImage* src_image = imlua_checkimage(L, 1);
+ int src_plane = luaL_checkint(L, 2);
+ imImage* dst_image = imlua_checkimage(L, 3);
+ int dst_plane = luaL_checkint(L, 4);
+ int src_depth, dst_depth;
+
+ imlua_matchdatatype(L, src_image, dst_image);
+
+ src_depth = src_image->has_alpha? src_image->depth+1: src_image->depth;
+ if (src_plane < 0 || src_plane >= src_depth)
+ luaL_argerror(L, 2, "invalid source channel, out of bounds");
+
+ dst_depth = dst_image->has_alpha? dst_image->depth+1: dst_image->depth;
+ if (dst_plane < 0 || dst_plane >= dst_depth)
+ luaL_argerror(L, 4, "invalid destiny channel, out of bounds");
+
+ imImageCopyPlane(src_image, src_plane, dst_image, dst_plane);
+ return 0;
+}
+
+/*****************************************************************************\
image:Duplicate()
\*****************************************************************************/
static int imluaImageDuplicate (lua_State *L)
@@ -751,13 +785,14 @@ static int imluaImage_tostring (lua_State *L)
if (*image_p)
{
imImage *image = *image_p;
- lua_pushfstring(L, "imImage(%p) [width=%d,height=%d,color_space=%s,data_type=%s,depth=%d]",
+ lua_pushfstring(L, "imImage(%p) [width=%d,height=%d,color_space=%s,data_type=%s,depth=%d,has_alpha=%d]",
image_p,
image->width,
image->height,
imColorModeSpaceName(image->color_space),
imDataTypeName(image->data_type),
- image->depth
+ image->depth,
+ image->has_alpha
);
}
else
@@ -956,7 +991,8 @@ static int imluaImage_index (lua_State *L)
int channel = luaL_checkint(L, 2);
/* create channel */
- if (channel < 0 || channel >= image->depth)
+ int depth = image->has_alpha? image->depth+1: image->depth;
+ if (channel < 0 || channel >= depth)
luaL_argerror(L, 2, "invalid channel, out of bounds");
imlua_newimagechannel(L, image, channel);
@@ -989,9 +1025,11 @@ static const luaL_reg imimage_lib[] = {
static const luaL_reg imimage_metalib[] = {
{"Destroy", imluaImageDestroy},
{"AddAlpha", imluaImageAddAlpha},
+ {"SetAlpha", imluaImageSetAlpha},
{"Reshape", imluaImageReshape},
{"Copy", imluaImageCopy},
{"CopyData", imluaImageCopyData},
+ {"CopyPlane", imluaImageCopyPlane},
{"Duplicate", imluaImageDuplicate},
{"Clone", imluaImageClone},
{"SetAttribute", imluaImageSetAttribute},
diff --git a/im/src/lua5/imlua_process.c b/im/src/lua5/imlua_process.c
index 38d39e9..978428b 100755
--- a/im/src/lua5/imlua_process.c
+++ b/im/src/lua5/imlua_process.c
@@ -2,7 +2,7 @@
* \brief IM Lua 5 Binding
*
* See Copyright Notice in im_lib.h
- * $Id: imlua_process.c,v 1.8 2009/10/01 02:56:58 scuri Exp $
+ * $Id: imlua_process.c,v 1.11 2010/03/21 22:29:10 scuri Exp $
*/
#include <memory.h>
@@ -1703,6 +1703,22 @@ static int imluaProcessBlend (lua_State *L)
}
/*****************************************************************************\
+ im.ProcessCompose
+\*****************************************************************************/
+static int imluaProcessCompose(lua_State *L)
+{
+ imImage *src_image1 = imlua_checkimage(L, 1);
+ imImage *src_image2 = imlua_checkimage(L, 2);
+ imImage *dst_image = imlua_checkimage(L, 3);
+
+ imlua_match(L, src_image1, src_image2);
+ imlua_match(L, src_image1, dst_image);
+
+ imProcessCompose(src_image1, src_image2, dst_image);
+ return 0;
+}
+
+/*****************************************************************************\
im.ProcessSplitComplex
\*****************************************************************************/
static int imluaProcessSplitComplex (lua_State *L)
@@ -2009,18 +2025,19 @@ static int imluaProcessMergeHSI (lua_State *L)
\*****************************************************************************/
static int imluaProcessSplitComponents (lua_State *L)
{
- int i;
+ int i, src_depth;
imImage *src_image = imlua_checkimage(L, 1);
imImage **dst_image_list;
luaL_checktype(L, 2, LUA_TTABLE);
- if (imlua_getn(L, 2) != src_image->depth)
+ src_depth = src_image->has_alpha? src_image->depth+1: src_image->depth;
+ if (imlua_getn(L, 2) != src_depth)
luaL_error(L, "number of destiny images must match the depth of the source image");
- dst_image_list = (imImage**)malloc(sizeof(imImage*)*src_image->depth);
+ dst_image_list = (imImage**)malloc(sizeof(imImage*)*src_depth);
- for (i = 0; i < src_image->depth; i++)
+ for (i = 0; i < src_depth; i++)
{
lua_pushnumber(L, i+1);
lua_gettable(L, 2);
@@ -2029,7 +2046,7 @@ static int imluaProcessSplitComponents (lua_State *L)
lua_pop(L, 1);
}
- for (i = 0; i < src_image->depth; i++)
+ for (i = 0; i < src_depth; i++)
{
int check = imImageMatchDataType(src_image, dst_image_list[i]);
if (!check) free(dst_image_list);
@@ -2048,19 +2065,20 @@ static int imluaProcessSplitComponents (lua_State *L)
\*****************************************************************************/
static int imluaProcessMergeComponents (lua_State *L)
{
- int i;
+ int i, dst_depth;
imImage** src_image_list;
imImage *dst_image;
luaL_checktype(L, 1, LUA_TTABLE);
dst_image = imlua_checkimage(L, 2);
- if (imlua_getn(L, 1) != dst_image->depth)
+ dst_depth = dst_image->has_alpha? dst_image->depth+1: dst_image->depth;
+ if (imlua_getn(L, 1) != dst_depth)
luaL_error(L, "number of source images must match the depth of the destination image");
- src_image_list = (imImage**)malloc(sizeof(imImage*)*dst_image->depth);
+ src_image_list = (imImage**)malloc(sizeof(imImage*)*dst_depth);
- for (i = 0; i < dst_image->depth; i++)
+ for (i = 0; i < dst_depth; i++)
{
lua_pushnumber(L, i+1);
lua_gettable(L, 1);
@@ -2069,7 +2087,7 @@ static int imluaProcessMergeComponents (lua_State *L)
lua_pop(L, 1);
}
- for (i = 0; i < dst_image->depth; i++)
+ for (i = 0; i < dst_depth; i++)
{
int check = imImageMatchDataType(src_image_list[i], dst_image);
if (!check) free(src_image_list);
@@ -2988,6 +3006,7 @@ static const luaL_reg improcess_lib[] = {
{"ProcessArithmeticConstOp", imluaProcessArithmeticConstOp},
{"ProcessBlendConst", imluaProcessBlendConst},
{"ProcessBlend", imluaProcessBlend},
+ {"ProcessCompose", imluaProcessCompose},
{"ProcessSplitComplex", imluaProcessSplitComplex},
{"ProcessMergeComplex", imluaProcessMergeComplex},
{"ProcessMultipleMean", imluaProcessMultipleMean},
diff --git a/im/src/process/im_analyze.cpp b/im/src/process/im_analyze.cpp
index 6fa9405..5a775a0 100755
--- a/im/src/process/im_analyze.cpp
+++ b/im/src/process/im_analyze.cpp
@@ -2,7 +2,7 @@
* \brief Image Analysis
*
* See Copyright Notice in im_lib.h
- * $Id: im_analyze.cpp,v 1.2 2009/09/28 20:19:09 scuri Exp $
+ * $Id: im_analyze.cpp,v 1.5 2010/01/22 19:47:56 scuri Exp $
*/
@@ -139,7 +139,7 @@ static int DoAnalyzeFindRegions(int width, int height, imbyte* map, imushort* ne
int region_count = 2; // 0- background, 1-border
imushort* alias_table = new imushort [MAX_COUNT];
- memset(alias_table, 0, MAX_COUNT); // aliases are all zero at start (not used)
+ memset(alias_table, 0, MAX_COUNT*sizeof(imushort)); // aliases are all zero at start (not used)
for (i = 1; i < height; i++)
{
@@ -273,7 +273,7 @@ static int DoAnalyzeFindRegionsBorder(int width, int height, imbyte* map, imusho
int region_count = 2; // still consider: 0- background, 1-border
imushort* alias_table = new imushort [MAX_COUNT];
- memset(alias_table, 0, MAX_COUNT); // aliases are all zero at start (not used)
+ memset(alias_table, 0, MAX_COUNT*sizeof(imushort)); // aliases are all zero at start (not used)
for (i = 0; i < height; i++)
{
@@ -981,7 +981,7 @@ void imAnalyzeMeasurePerimeter(const imImage* image, float* perim_data, int regi
imushort* map = (imushort*)image->data[0];
- memset(perim_data, 0, region_count*sizeof(int));
+ memset(perim_data, 0, region_count*sizeof(float));
int width = image->width;
int height = image->height;
@@ -1203,8 +1203,19 @@ void imProcessRemoveByArea(const imImage* image, imImage* NewImage, int connect,
if (end_size == 0)
end_size = image->width*image->height;
- int outside=0;
- if (!inside) outside = 1;
+ int outside;
+ if (inside)
+ {
+ /* remove from inside */
+ inside = 0;
+ outside = 1;
+ }
+ else
+ {
+ /* remove from outside */
+ inside = 1;
+ outside = 0;
+ }
int* area_data = (int*)malloc(region_count*sizeof(int));
imAnalyzeMeasureArea(region_image, area_data, region_count);
diff --git a/im/src/process/im_arithmetic_bin.cpp b/im/src/process/im_arithmetic_bin.cpp
index 494b6c0..575e650 100755
--- a/im/src/process/im_arithmetic_bin.cpp
+++ b/im/src/process/im_arithmetic_bin.cpp
@@ -2,7 +2,7 @@
* \brief Binary Arithmetic Operations
*
* See Copyright Notice in im_lib.h
- * $Id: im_arithmetic_bin.cpp,v 1.2 2009/10/01 02:56:58 scuri Exp $
+ * $Id: im_arithmetic_bin.cpp,v 1.3 2010/01/08 03:49:05 scuri Exp $
*/
@@ -262,6 +262,148 @@ void imProcessBlend(const imImage* src_image1, const imImage* src_image2, const
}
}
+#define COMPOSE_OVER(_SRC, _SRC_ALPHA, _DST, _TMP_MULTI, _TMP_ALPHA) (T)(((_SRC_ALPHA)*(_SRC) + (_TMP_MULTI)*(_DST)) / (_TMP_ALPHA))
+#define ALPHA_BLEND(_src,_dst,_alpha) (T)(((_src) * (_alpha) + (_dst) * (max - (_alpha))) / max)
+
+template <class T, class TA>
+static inline T compose_op(const T& v1, const T& v2, const T& alpha1, const T& alpha2, const TA& max)
+{
+ if (alpha1 != max) /* some transparency */
+ {
+ if (alpha1 != 0) /* source not full transparent */
+ {
+ if (alpha2 == 0) /* destiny full transparent */
+ {
+ return v1;
+ }
+ else if (alpha2 == max) /* destiny opaque */
+ {
+ return ALPHA_BLEND(v1, v2, alpha1);
+ }
+ else /* (0<alpha2<max && 0<alpha1<max) destiny and source are semi-transparent */
+ {
+ /* Closed Compositing SRC over DST (see smith95a.pdf) */
+ /* Colors NOT Premultiplied by Alpha */
+ /* DST = SRC * SRC_ALPHA + DST * DST_ALPHA * (1 - SRC_ALPHA) */
+ /* DST_ALPHA = SRC_ALPHA + DST_ALPHA * (1 - SRC_ALPHA) */
+ /* DST /= DST_ALPHA */
+ TA _tmp_multi = alpha2 * (max - alpha1);
+ TA _tmp_src_alpha = alpha1*max;
+ TA _tmp_alpha = _tmp_src_alpha + _tmp_multi;
+ return COMPOSE_OVER(v1, _tmp_src_alpha, v2, _tmp_multi, _tmp_alpha);
+ }
+ }
+ else /* (alpha1 == 0) source full transparent */
+ {
+ return v2;
+ }
+ }
+ else /* (alpha1 == max) source has no alpha = opaque */
+ {
+ return v1;
+ }
+}
+
+template <class T, class TA>
+static inline T compose_alpha_op(const T& alpha1, const T& alpha2, const TA& max)
+{
+ if (alpha1 != max) /* some transparency */
+ {
+ if (alpha1 != 0) /* source not full transparent */
+ {
+ if (alpha2 == 0) /* destiny full transparent */
+ {
+ return alpha1;
+ }
+ else if (alpha2 == max) /* destiny opaque */
+ {
+ /* alpha2 is not changed */
+ return alpha2;
+ }
+ else /* (0<alpha2<max && 0<alpha1<max) destiny and source are semi-transparent */
+ {
+ /* Closed Compositing SRC over DST (see smith95a.pdf) */
+ /* Colors NOT Premultiplied by Alpha */
+ /* DST = SRC * SRC_ALPHA + DST * DST_ALPHA * (1 - SRC_ALPHA) */
+ /* DST_ALPHA = SRC_ALPHA + DST_ALPHA * (1 - SRC_ALPHA) */
+ /* DST /= DST_ALPHA */
+ TA _tmp_multi = alpha2 * (max - alpha1);
+ TA _tmp_src_alpha = alpha1*max;
+ TA _tmp_alpha = _tmp_src_alpha + _tmp_multi;
+ return (T)(_tmp_alpha / max);
+ }
+ }
+ else /* (alpha1 == 0) source full transparent */
+ {
+ /* alpha2 is not changed */
+ return alpha2;
+ }
+ }
+ else /* (alpha1 == max) source has no alpha = opaque */
+ {
+ return (unsigned char)max; /* set destiny as opaque */
+ }
+}
+
+template <class T, class TA>
+static void DoCompose(T *map1, T *map2, T *alpha1, T *alpha2, T *map, int count, TA max)
+{
+ for (int i = 0; i < count; i++)
+ map[i] = compose_op(map1[i], map2[i], alpha1[i], alpha2[i], max);
+}
+
+template <class T, class TA>
+static void DoComposeAlpha(T *alpha1, T *alpha2, T *dst_alpha, int count, TA max)
+{
+ for (int i = 0; i < count; i++)
+ dst_alpha[i] = compose_alpha_op(alpha1[i], alpha2[i], max);
+}
+
+void imProcessCompose(const imImage* src_image1, const imImage* src_image2, imImage* dst_image)
+{
+ int count = src_image1->count,
+ src_alpha = src_image1->depth;
+
+ if (!src_image1->has_alpha || !src_image2->has_alpha || !dst_image->has_alpha)
+ return;
+
+ for (int i = 0; i < src_image1->depth; i++)
+ {
+ switch(src_image1->data_type)
+ {
+ case IM_BYTE:
+ DoCompose((imbyte*)src_image1->data[i], (imbyte*)src_image2->data[i], (imbyte*)src_image1->data[src_alpha], (imbyte*)src_image2->data[src_alpha], (imbyte*)dst_image->data[i], count, (int)255);
+ break;
+ case IM_USHORT:
+ DoCompose((imushort*)src_image1->data[i], (imushort*)src_image2->data[i], (imushort*)src_image1->data[src_alpha], (imushort*)src_image2->data[src_alpha], (imushort*)dst_image->data[i], count, (int)65535);
+ break;
+ case IM_INT:
+ DoCompose((int*)src_image1->data[i], (int*)src_image2->data[i], (int*)src_image1->data[src_alpha], (int*)src_image2->data[src_alpha], (int*)dst_image->data[i], count, (int)2147483647);
+ break;
+ case IM_FLOAT:
+ DoCompose((float*)src_image1->data[i], (float*)src_image2->data[i], (float*)src_image1->data[src_alpha], (float*)src_image2->data[src_alpha], (float*)dst_image->data[i], count, 1.0f);
+ break;
+ }
+ }
+
+ /* one more for the alpha channel */
+ switch(src_image1->data_type)
+ {
+ case IM_BYTE:
+ DoComposeAlpha((imbyte*)src_image1->data[src_alpha], (imbyte*)src_image2->data[src_alpha], (imbyte*)dst_image->data[src_alpha], count, (int)255);
+ break;
+ case IM_USHORT:
+ DoComposeAlpha((imushort*)src_image1->data[src_alpha], (imushort*)src_image2->data[src_alpha], (imushort*)dst_image->data[src_alpha], count, (int)65535);
+ break;
+ case IM_INT:
+ DoComposeAlpha((int*)src_image1->data[src_alpha], (int*)src_image2->data[src_alpha], (int*)dst_image->data[src_alpha], count, (int)2147483647);
+ break;
+ case IM_FLOAT:
+ DoComposeAlpha((float*)src_image1->data[src_alpha], (float*)src_image2->data[src_alpha], (float*)dst_image->data[src_alpha], count, 1.0f);
+ break;
+ }
+}
+
static void DoBinaryConstOpCpxReal(imcfloat *map1, float value, imcfloat *map, int count, int op)
{
int i;
diff --git a/im/src/process/im_color.cpp b/im/src/process/im_color.cpp
index b27d4b3..29933c4 100755
--- a/im/src/process/im_color.cpp
+++ b/im/src/process/im_color.cpp
@@ -2,7 +2,7 @@
* \brief Color Processing Operations
*
* See Copyright Notice in im_lib.h
- * $Id: im_color.cpp,v 1.1 2008/10/17 06:16:33 scuri Exp $
+ * $Id: im_color.cpp,v 1.2 2010/01/06 20:16:30 scuri Exp $
*/
#include <im.h>
@@ -142,7 +142,7 @@ void imProcessSplitComponents(const imImage* src_image, imImage** dst_image)
memcpy(dst_image[0]->data[0], src_image->data[0], src_image->plane_size);
memcpy(dst_image[1]->data[0], src_image->data[1], src_image->plane_size);
memcpy(dst_image[2]->data[0], src_image->data[2], src_image->plane_size);
- if (imColorModeDepth(src_image->color_space) == 4)
+ if (imColorModeDepth(src_image->color_space) == 4 || src_image->has_alpha)
memcpy(dst_image[3]->data[0], src_image->data[3], src_image->plane_size);
}
@@ -151,7 +151,7 @@ void imProcessMergeComponents(const imImage** src_image, imImage* dst_image)
memcpy(dst_image->data[0], src_image[0]->data[0], dst_image->plane_size);
memcpy(dst_image->data[1], src_image[1]->data[0], dst_image->plane_size);
memcpy(dst_image->data[2], src_image[2]->data[0], dst_image->plane_size);
- if (imColorModeDepth(dst_image->color_space) == 4)
+ if (imColorModeDepth(dst_image->color_space) == 4 || dst_image->has_alpha)
memcpy(dst_image->data[3], src_image[3]->data[0], dst_image->plane_size);
}
diff --git a/im/src/process/im_geometric.cpp b/im/src/process/im_geometric.cpp
index a0b5129..d4dbed3 100755
--- a/im/src/process/im_geometric.cpp
+++ b/im/src/process/im_geometric.cpp
@@ -2,7 +2,7 @@
* \brief Geometric Operations
*
* See Copyright Notice in im_lib.h
- * $Id: im_geometric.cpp,v 1.1 2008/10/17 06:16:33 scuri Exp $
+ * $Id: im_geometric.cpp,v 1.2 2010/01/07 19:12:53 scuri Exp $
*/
@@ -393,7 +393,8 @@ static void InterlaceSplit(int src_width,
void imProcessRotate90(const imImage* src_image, imImage* dst_image, int dir)
{
- for (int i = 0; i < src_image->depth; i++)
+ int src_depth = src_image->has_alpha? src_image->depth+1: src_image->depth;
+ for (int i = 0; i < src_depth; i++)
{
switch(src_image->data_type)
{
@@ -418,7 +419,8 @@ void imProcessRotate90(const imImage* src_image, imImage* dst_image, int dir)
void imProcessRotate180(const imImage* src_image, imImage* dst_image)
{
- for (int i = 0; i < src_image->depth; i++)
+ int src_depth = src_image->has_alpha? src_image->depth+1: src_image->depth;
+ for (int i = 0; i < src_depth; i++)
{
switch(src_image->data_type)
{
@@ -446,9 +448,10 @@ int imProcessRadial(const imImage* src_image, imImage* dst_image, float k1, int
int ret = 0;
int counter = imCounterBegin("Radial Distort");
- imCounterTotal(counter, dst_image->depth*dst_image->height, "Processing...");
+ int src_depth = src_image->has_alpha? src_image->depth+1: src_image->depth;
+ imCounterTotal(counter, src_depth*dst_image->height, "Processing..."); /* size of the destiny image */
- for (int i = 0; i < src_image->depth; i++)
+ for (int i = 0; i < src_depth; i++)
{
switch(src_image->data_type)
{
@@ -483,9 +486,10 @@ int imProcessSwirl(const imImage* src_image, imImage* dst_image, float k, int or
int ret = 0;
int counter = imCounterBegin("Swirl Distort");
- imCounterTotal(counter, dst_image->depth*dst_image->height, "Processing...");
+ int src_depth = src_image->has_alpha? src_image->depth+1: src_image->depth;
+ imCounterTotal(counter, src_depth*dst_image->height, "Processing..."); /* size of the destiny image */
- for (int i = 0; i < src_image->depth; i++)
+ for (int i = 0; i < src_depth; i++)
{
switch(src_image->data_type)
{
@@ -559,7 +563,8 @@ int imProcessRotate(const imImage* src_image, imImage* dst_image, double cos0, d
int ret = 0;
int counter = imCounterBegin("Rotate");
- imCounterTotal(counter, dst_image->depth*dst_image->height, "Processing...");
+ int src_depth = src_image->has_alpha? src_image->depth+1: src_image->depth;
+ imCounterTotal(counter, src_depth*dst_image->height, "Processing..."); /* size of the destiny image */
if (src_image->color_space == IM_MAP)
{
@@ -567,7 +572,7 @@ int imProcessRotate(const imImage* src_image, imImage* dst_image, double cos0, d
}
else
{
- for (int i = 0; i < src_image->depth; i++)
+ for (int i = 0; i < src_depth; i++)
{
switch(src_image->data_type)
{
@@ -603,7 +608,8 @@ int imProcessRotateRef(const imImage* src_image, imImage* dst_image, double cos0
int ret = 0;
int counter = imCounterBegin("RotateRef");
- imCounterTotal(counter, dst_image->depth*dst_image->height, "Processing...");
+ int src_depth = src_image->has_alpha? src_image->depth+1: src_image->depth;
+ imCounterTotal(counter, src_depth*dst_image->height, "Processing..."); /* size of the destiny image */
if (src_image->color_space == IM_MAP)
{
@@ -611,7 +617,7 @@ int imProcessRotateRef(const imImage* src_image, imImage* dst_image, double cos0
}
else
{
- for (int i = 0; i < src_image->depth; i++)
+ for (int i = 0; i < src_depth; i++)
{
switch(src_image->data_type)
{
@@ -645,8 +651,9 @@ int imProcessRotateRef(const imImage* src_image, imImage* dst_image, double cos0
void imProcessMirror(const imImage* src_image, imImage* dst_image)
{
int i;
+ int src_depth = src_image->has_alpha? src_image->depth+1: src_image->depth;
- for (i = 0; i < src_image->depth; i++)
+ for (i = 0; i < src_depth; i++)
{
switch(src_image->data_type)
{
@@ -672,8 +679,9 @@ void imProcessMirror(const imImage* src_image, imImage* dst_image)
void imProcessFlip(const imImage* src_image, imImage* dst_image)
{
int i;
+ int src_depth = src_image->has_alpha? src_image->depth+1: src_image->depth;
- for (i = 0; i < src_image->depth; i++)
+ for (i = 0; i < src_depth; i++)
{
switch(src_image->data_type)
{
@@ -699,8 +707,9 @@ void imProcessFlip(const imImage* src_image, imImage* dst_image)
void imProcessInterlaceSplit(const imImage* src_image, imImage* dst_image1, imImage* dst_image2)
{
int i;
+ int src_depth = src_image->has_alpha? src_image->depth+1: src_image->depth;
- for (i = 0; i < src_image->depth; i++)
+ for (i = 0; i < src_depth; i++)
{
switch(src_image->data_type)
{
diff --git a/im/src/process/im_resize.cpp b/im/src/process/im_resize.cpp
index ddf6e47..4dbaa60 100755
--- a/im/src/process/im_resize.cpp
+++ b/im/src/process/im_resize.cpp
@@ -2,7 +2,7 @@
* \brief Image Resize
*
* See Copyright Notice in im_lib.h
- * $Id: im_resize.cpp,v 1.1 2008/10/17 06:16:33 scuri Exp $
+ * $Id: im_resize.cpp,v 1.2 2010/01/07 19:12:53 scuri Exp $
*/
@@ -106,9 +106,10 @@ int imProcessReduce(const imImage* src_image, imImage* dst_image, int order)
int ret = 0;
int counter = imCounterBegin("Reduce Size");
const char* int_msg = (order == 1)? "Bilinear Decimation": "Zero Order Decimation";
- imCounterTotal(counter, src_image->depth*dst_image->height, int_msg);
+ int src_depth = src_image->has_alpha? src_image->depth+1: src_image->depth;
+ imCounterTotal(counter, src_depth*dst_image->height, int_msg);
- for (int i = 0; i < src_image->depth; i++)
+ for (int i = 0; i < src_depth; i++)
{
switch(src_image->data_type)
{
@@ -149,9 +150,10 @@ int imProcessResize(const imImage* src_image, imImage* dst_image, int order)
int ret = 0;
int counter = imCounterBegin("Resize");
const char* int_msg = (order == 3)? "Bicubic Interpolation": (order == 1)? "Bilinear Interpolation": "Zero Order Interpolation";
- imCounterTotal(counter, src_image->depth*dst_image->height, int_msg);
+ int src_depth = src_image->has_alpha? src_image->depth+1: src_image->depth;
+ imCounterTotal(counter, src_depth*dst_image->height, int_msg);
- for (int i = 0; i < src_image->depth; i++)
+ for (int i = 0; i < src_depth; i++)
{
switch(src_image->data_type)
{
@@ -219,8 +221,9 @@ static void ReduceBy4(int src_width,
void imProcessReduceBy4(const imImage* src_image, imImage* dst_image)
{
int i;
+ int src_depth = src_image->has_alpha? src_image->depth+1: src_image->depth;
- for (i = 0; i < src_image->depth; i++)
+ for (i = 0; i < src_depth; i++)
{
switch(src_image->data_type)
{
@@ -246,7 +249,8 @@ void imProcessReduceBy4(const imImage* src_image, imImage* dst_image)
void imProcessCrop(const imImage* src_image, imImage* dst_image, int xmin, int ymin)
{
int type_size = imDataTypeSize(src_image->data_type);
- for (int i = 0; i < src_image->depth; i++)
+ int src_depth = src_image->has_alpha? src_image->depth+1: src_image->depth;
+ for (int i = 0; i < src_depth; i++)
{
imbyte *src_map = (imbyte*)src_image->data[i];
imbyte *dst_map = (imbyte*)dst_image->data[i];
@@ -269,6 +273,7 @@ void imProcessInsert(const imImage* src_image, const imImage* rgn_image, imImage
int dst_offset2 = dst_size1+rgn_image->line_size;
int ymax = ymin+rgn_image->height-1;
int rgn_size = rgn_image->line_size;
+ int src_depth = src_image->has_alpha? src_image->depth+1: src_image->depth;
if (dst_size2 < 0)
{
@@ -280,7 +285,7 @@ void imProcessInsert(const imImage* src_image, const imImage* rgn_image, imImage
if (ymax > src_image->height-1)
ymax = src_image->height-1;
- for (int i = 0; i < src_image->depth; i++)
+ for (int i = 0; i < src_depth; i++)
{
imbyte *src_map = (imbyte*)src_image->data[i];
imbyte *rgn_map = (imbyte*)rgn_image->data[i];
@@ -315,7 +320,8 @@ void imProcessInsert(const imImage* src_image, const imImage* rgn_image, imImage
void imProcessAddMargins(const imImage* src_image, imImage* dst_image, int xmin, int ymin)
{
int type_size = imDataTypeSize(src_image->data_type);
- for (int i = 0; i < src_image->depth; i++)
+ int src_depth = src_image->has_alpha? src_image->depth+1: src_image->depth;
+ for (int i = 0; i < src_depth; i++)
{
imbyte *dst_map = (imbyte*)dst_image->data[i];
imbyte *src_map = (imbyte*)src_image->data[i];
diff --git a/im/src/tecmake.mak b/im/src/tecmake.mak
new file mode 100644
index 0000000..56bd748
--- /dev/null
+++ b/im/src/tecmake.mak
@@ -0,0 +1,1253 @@
+#-------------------------------------------------------------------------#
+#- Tecmake (POSIX Version) -#
+#- Generic Makefile to build applications and libraries at TeCGraf -#
+#- The user makefile usually has the name "config.mak". -#
+#-------------------------------------------------------------------------#
+
+#---------------------------------#
+# Tecmake Version
+VERSION = 4.0
+
+
+#---------------------------------#
+# First target
+.PHONY: build
+build: tecmake
+
+
+#---------------------------------#
+# System Variables Definitions
+
+ifndef TEC_UNAME
+ # Base Defintions
+ TEC_SYSNAME:=$(shell uname -s)
+ TEC_SYSVERSION:=$(shell uname -r|cut -f1 -d.)
+ TEC_SYSMINOR:=$(shell uname -r|cut -f2 -d.)
+ TEC_SYSARCH:=$(shell uname -m)
+
+ # Fixes
+ ifeq ($(TEC_SYSNAME), SunOS)
+ TEC_SYSARCH:=$(shell uname -p)
+ endif
+ ifeq ($(TEC_SYSNAME), IRIX)
+ TEC_SYSARCH:=$(shell uname -p)
+ endif
+ ifeq ($(TEC_SYSNAME), FreeBSD)
+ TEC_SYSMINOR:=$(shell uname -r|cut -f2 -d.|cut -f1 -d-)
+ endif
+ ifeq ($(TEC_SYSNAME), AIX)
+ TEC_SYSVERSION:=$(shell uname -v)
+ TEC_SYSMINOR:=$(shell uname -r)
+ TEC_SYSARCH:=ppc
+ endif
+ ifeq ($(TEC_SYSNAME), Darwin)
+ TEC_SYSARCH:=$(shell uname -p)
+ endif
+
+ ifeq ($(TEC_SYSARCH), i686)
+ TEC_SYSARCH:=x86
+ endif
+ ifeq ($(TEC_SYSARCH), i386)
+ TEC_SYSARCH:=x86
+ endif
+ ifeq ($(TEC_SYSARCH), powerpc)
+ TEC_SYSARCH:=ppc
+ endif
+ ifeq ($(TEC_SYSARCH), x86_64)
+ TEC_SYSARCH:=x64
+ endif
+
+ # Compose
+ TEC_SYSRELEASE:=$(TEC_SYSVERSION).$(TEC_SYSMINOR)
+ TEC_UNAME:=$(TEC_SYSNAME)$(TEC_SYSVERSION)$(TEC_SYSMINOR)
+
+ # Linux 2.4 and GCC 3.x
+ ifeq ($(TEC_UNAME), Linux24)
+ GCCVER:=$(shell gcc -dumpversion|cut -f1 -d.)
+ ifeq ($(GCCVER), 3)
+ TEC_UNAME:=$(TEC_UNAME)g3
+ endif
+ endif
+
+ # Linux 2.6 and GCC 4.x
+ ifeq ($(TEC_UNAME), Linux26)
+ GCCVER:=$(shell gcc -dumpversion|cut -f1 -d.)
+ ifeq ($(GCCVER), 4)
+ TEC_UNAME:=$(TEC_UNAME)g4
+ endif
+ endif
+
+ # Linux and PowerPC
+ ifeq ($(TEC_SYSNAME), Linux)
+ ifeq ($(TEC_SYSARCH), ppc)
+ TEC_UNAME:=$(TEC_UNAME)ppc
+ endif
+ endif
+
+ # 64-bits Linux
+ ifeq ($(TEC_SYSARCH), x64)
+ BUILD_64=Yes
+ TEC_UNAME:=$(TEC_UNAME)_64
+ endif
+
+ ifeq ($(TEC_SYSARCH), ia64)
+ BUILD_64=Yes
+ TEC_UNAME:=$(TEC_UNAME)_ia64
+ endif
+
+ # Solaris and Intel
+ ifeq ($(TEC_SYSNAME), SunOS)
+ ifeq ($(TEC_SYSARCH) , x86)
+ TEC_UNAME:=$(TEC_UNAME)x86
+ endif
+ endif
+
+ # Darwin and Intel
+ ifeq ($(TEC_SYSNAME), Darwin)
+ ifeq ($(TEC_SYSARCH), x86)
+ TEC_UNAME:=$(TEC_UNAME)x86
+ endif
+ endif
+
+endif
+
+
+#---------------------------------#
+# System Info
+.PHONY: sysinfo
+sysinfo:
+ @echo ''; echo 'Tecmake - System Info'
+ @echo 'TEC_SYSNAME = $(TEC_SYSNAME)'
+ @echo 'TEC_SYSVERSION = $(TEC_SYSVERSION)'
+ @echo 'TEC_SYSMINOR = $(TEC_SYSMINOR)'
+ @echo 'TEC_SYSARCH = $(TEC_SYSARCH)'
+ @echo 'TEC_UNAME = $(TEC_UNAME)'; echo ''
+
+
+#---------------------------------#
+# Known Platforms
+
+UNAMES = Linux24 Linux24g3 Linux24g3_64 Linux26 Linux26_64 Linux26g4 Linux26g4_64 Linux26_ia64 FreeBSD54 SunOS57 SunOS58 SunOS510 SunOS510_x86 AIX43 IRIX65 IRIX6465
+
+
+#---------------------------------#
+# Directories Definitions
+
+PROJDIR = ..
+SRCDIR = .
+OBJROOT = $(PROJDIR)/obj
+
+
+#---------------------------------#
+# Byte Order and Word Size
+
+ifneq ($(findstring x86, $(TEC_SYSARCH)), )
+ TEC_BYTEORDER = TEC_LITTLEENDIAN
+else
+ifeq ($(TEC_SYSARCH), arm)
+ TEC_BYTEORDER = TEC_LITTLEENDIAN
+else
+ TEC_BYTEORDER = TEC_BIGENDIAN
+endif
+endif
+
+ifeq ($(TEC_SYSARCH), x64)
+ TEC_BYTEORDER = TEC_LITTLEENDIAN
+ TEC_WORDSIZE = TEC_64
+else
+ifdef BUILD_64
+ TEC_WORDSIZE = TEC_64
+else
+ TEC_WORDSIZE = TEC_32
+endif
+endif
+
+# Itanium Exception
+ifeq ($(TEC_SYSARCH), ia64)
+ TEC_BYTEORDER = TEC_LITTLEENDIAN
+ TEC_WORDSIZE = TEC_64
+endif
+
+
+#---------------------------------#
+# Compilation Flags
+STDFLAGS := -Wall
+STDDEFS := -DTEC_UNAME=$(TEC_UNAME) -DTEC_SYSNAME=$(TEC_SYSNAME) -D$(TEC_SYSNAME)=$(TEC_SYSRELEASE) -D$(TEC_BYTEORDER) -D$(TEC_WORDSIZE) -DFUNCPROTO=15
+STDINCS :=
+OPTFLAGS := -O2
+STDLFLAGS := r
+DEBUGFLAGS := -g
+STDLDFLAGS := -shared
+DLIBEXT := so
+DLIBPRE := lib
+APPEXT :=
+
+
+ifneq ($(findstring cygw, $(TEC_UNAME)), )
+ GTK_DEFAULT = Yes
+endif
+ifneq ($(findstring Linux, $(TEC_UNAME)), )
+ GTK_DEFAULT = Yes
+endif
+ifneq ($(findstring Darwin, $(TEC_UNAME)), )
+ GTK_DEFAULT = Yes
+endif
+ifneq ($(findstring FreeBSD, $(TEC_UNAME)), )
+ GTK_DEFAULT = Yes
+endif
+ifneq ($(findstring Linux24, $(TEC_UNAME)), )
+ GTK_DEFAULT :=
+endif
+
+
+#---------------------------------#
+# Tools
+
+CC := $(TEC_TOOLCHAIN)gcc
+CPPC := $(TEC_TOOLCHAIN)g++
+FF := $(TEC_TOOLCHAIN)g77
+RANLIB := $(TEC_TOOLCHAIN)ranlib
+AR := $(TEC_TOOLCHAIN)ar
+DEBUGGER := $(TEC_TOOLCHAIN)gdb
+RCC := $(TEC_TOOLCHAIN)windres
+
+# Remote build script
+REMOTE = $(TECMAKE_HOME)/remote
+
+# Packed LOHs script
+LUAPRE = $(TECMAKE_HOME)/luapre.lua
+
+
+#---------------------------------#
+# User Configuration File
+
+MAKENAME = config.mak
+
+ifdef MF
+ MAKENAME = $(MF).mak
+endif
+
+###################
+include $(MAKENAME)
+###################
+
+
+#---------------------------------#
+# Definitions of public variables
+
+ifdef LIBNAME
+ TARGETNAME = $(LIBNAME)
+ MAKETYPE = LIB
+else
+ TARGETNAME = $(APPNAME)
+ MAKETYPE = APP
+endif
+
+ifndef TARGETNAME
+ $(error LIBNAME nor APPNAME defined in $(MAKENAME))
+endif
+
+PROJNAME ?= $(TARGETNAME)
+
+DEPEND := $(TARGETNAME).dep
+
+ifdef DEPENDDIR
+ DEPEND := $(DEPENDDIR)/$(TARGETNAME).dep.$(TEC_UNAME)
+endif
+
+SRCLUADIR ?= $(SRCDIR)
+LOHDIR ?= $(SRCLUADIR)
+
+ifeq ($(MAKETYPE), APP)
+ TARGETROOT ?= $(PROJDIR)/bin
+else
+ TARGETROOT ?= $(PROJDIR)/lib
+endif
+
+ifneq ($(PROJNAME), $(TARGETNAME))
+ OBJROOT := $(OBJROOT)/$(TARGETNAME)
+endif
+
+ifdef DBG
+ STDFLAGS += $(DEBUGFLAGS)
+ STDDEFS += -DDEBUG
+else
+ STDDEFS += -DNDEBUG
+ ifdef OPT
+ STDFLAGS += $(OPTFLAGS)
+ STRIP ?= Yes
+ endif
+endif
+
+ifdef BUILD_64
+ ifneq ($(findstring SunOS, $(TEC_UNAME)), )
+ USE_CC = Yes
+ BUILD_64_DIR = Yes
+ endif
+ ifneq ($(findstring AIX, $(TEC_UNAME)), )
+ USE_CC = Yes
+ BUILD_64_DIR = Yes
+ endif
+ ifneq ($(findstring IRIX, $(TEC_UNAME)), )
+ USE_CC = Yes
+ BUILD_64_DIR = Yes
+ endif
+endif
+
+ifdef USE_CC
+ CC := cc
+ CPPC := CC
+ STDFLAGS =
+ UNAMES := $(UNAMES_CC)
+ ifdef USE_CC_DIR
+ TEC_UNAME := $(TEC_UNAME)cc
+ endif
+endif
+
+ifdef BUILD_64
+ ifdef BUILD_64_DIR
+ TEC_UNAME := $(TEC_UNAME)_64
+ endif
+endif
+
+TEC_UNAME_DIR ?= $(TEC_UNAME)
+TEC_UNAME_LIB_DIR ?= $(TEC_UNAME)
+ifdef DBG
+ ifdef DBG_LIB_DIR
+ TEC_UNAME_LIB_DIR := $(TEC_UNAME_DIR)d
+ endif
+ ifdef DBG_DIR
+ TEC_UNAME_DIR := $(TEC_UNAME_DIR)d
+ endif
+endif
+
+OBJDIR := $(OBJROOT)/$(TEC_UNAME_DIR)
+TARGETDIR := $(TARGETROOT)/$(TEC_UNAME_DIR)
+
+# Change linker if any C++ source
+ifndef LINKER
+ ifneq "$(findstring .cpp, $(SRC))" ""
+ LINKER := $(CPPC)
+ LD := $(CPPC)
+ else
+ LINKER := $(CC)
+ LD := $(CC)
+ endif
+endif
+
+
+#---------------------------------#
+# LO and LOH Suffix
+
+ifeq ($(TEC_BYTEORDER), TEC_BIGENDIAN)
+ ifeq ($(TEC_WORDSIZE), TEC_64)
+ LO_SUFFIX ?= _be64
+ else
+ LO_SUFFIX ?= _be32
+ endif
+else
+ ifeq ($(TEC_WORDSIZE), TEC_64)
+ LO_SUFFIX ?= _le64
+ else
+ LO_SUFFIX ?=
+ endif
+endif
+
+
+#---------------------------------#
+# Platform specific variables
+
+# Definitions for X11
+X11_LIBS := Xmu Xt Xext X11
+#X11_LIB :=
+#X11_INC := #include <X11/X.h>
+
+# Definitions for OpenGL
+OPENGL_LIBS := GLU GL
+#OPENGL_LIB :=
+#OPENGL_INC := #include <GL/gl.h> and possibly
+MOTIFGL_LIB := GLw #include <GL/GLwMDrawA.h>
+
+# Definitions for Motif
+#MOTIF_LIB :=
+#MOTIF_INC := #include <Xm/Xm.h>
+
+# Definitions for GLUT
+#GLUT_LIB :=
+#GLUT_INC :=
+
+
+ifneq ($(findstring Linux, $(TEC_UNAME)), )
+ ifdef BUILD_64
+ ifeq ($(TEC_SYSARCH), ia64)
+ STDFLAGS += -fPIC
+ X11_LIB := /usr/X11R6/lib
+ else
+ STDFLAGS += -m64 -fPIC
+ X11_LIB := /usr/X11R6/lib64
+ endif
+ else
+ X11_LIB := /usr/X11R6/lib
+ endif
+ X11_INC := /usr/X11R6/include
+ MOTIFGL_LIB :=
+endif
+
+ifneq ($(findstring IRIX, $(TEC_UNAME)), )
+ LD = ld
+ STDLDFLAGS := -elf -shared -rdata_shared -soname lib$(TARGETNAME).so
+ RANLIB := /bin/true
+ X11_LIBS := Xmu Xt X11
+ ifdef BUILD_64
+ ifdef USE_CC
+ STDFLAGS += -64 -KPIC
+ STDLDFLAGS += -64
+ LINKER += -64
+ endif
+ X11_LIB := /usr/lib64
+ MOTIF_LIB := /usr/Motif-2.1/lib64
+ else
+ X11_LIB := /usr/lib32
+ MOTIF_LIB := /usr/Motif-2.1/lib32
+ endif
+ MOTIF_INC = /usr/Motif-2.1/include
+endif
+
+ifneq ($(findstring AIX, $(TEC_UNAME)), )
+ NO_DYNAMIC ?= Yes
+ ifdef BUILD_64
+ ifdef USE_CC
+ STDFLAGS += -q64 # to compilers C and C++
+ STDLFLAGS := -X64 $(STDLFLAGS) # to librarian
+ STDLDFLAGS += -64
+ LINKER += -q64 # to linker
+ endif
+ endif
+endif
+
+ifneq ($(findstring HP-UX, $(TEC_UNAME)), )
+ NO_DYNAMIC ?= Yes
+ MOTIF_INC := /usr/include/Motif2.1
+ X11_LIBS := Xt Xext X11
+ OPENGL_LIB := /opt/graphics/OpenGL/lib
+ OPENGL_INC := /opt/graphics/OpenGL/include
+ STDDEFS := -DTEC_UNAME=$(TEC_UNAME) -DTEC_SYSNAME=$(TEC_SYSNAME) -D$(TEC_BYTEORDER) -D$(TEC_WORDSIZE) -DFUNCPROTO=15
+ CC := aCC
+ CPPC := aCC
+ LINKER := aCC
+endif
+
+ifneq ($(findstring SunOS, $(TEC_UNAME)), )
+ LD = ld
+ STDLDFLAGS := -G
+ X11_INC := /usr/openwin/share/include
+ X11_LIB := /usr/openwin/lib
+ MOTIF_INC := /usr/dt/share/include
+ MOTIF_LIB := /usr/dt/lib
+ OPENGL_INC := /usr/openwin/share/include/X11
+ GLUT_LIB := /usr/local/glut-3.7/lib/glut
+ GLUT_INC := /usr/local/glut-3.7/include
+ ifdef BUILD_64
+ ifdef USE_CC
+ STDFLAGS += -xarch=v9 -KPIC
+ # have to force these PATHs because of a conflict with standard PATHs
+ STDLDFLAGS += -64 -L/usr/lib/64 -L/usr/ucblib/sparcv9
+ LINKER += -xarch=v9
+ endif
+ endif
+endif
+
+ifneq ($(findstring Darwin, $(TEC_UNAME)), )
+ X11_LIBS := Xmu Xp Xt Xext X11
+ X11_LIB := /usr/X11R6/lib
+ X11_INC := /usr/X11R6/include
+ MOTIF_INC := /usr/OpenMotif/include
+ MOTIF_LIB := /usr/OpenMotif/lib
+ ifdef BUILD_DYLIB
+ STDLDFLAGS := -dynamiclib -Wl -fno-common -headerpad_max_install_names -undefined dynamic_lookup -install_name lib$(TARGETNAME).dylib
+ DLIBEXT := dylib
+ STDFLAGS += -fno-common
+ else
+ STDLDFLAGS := -bundle -undefined dynamic_lookup
+ endif
+endif
+
+ifneq ($(findstring FreeBSD, $(TEC_UNAME)), )
+ X11_LIB := /usr/X11R6/lib
+ X11_INC := /usr/X11R6/include
+endif
+
+
+#---------------------------------#
+# Allows an extra configuration file.
+ifdef EXTRA_CONFIG
+include $(EXTRA_CONFIG)
+endif
+
+
+#---------------------------------#
+# Tecgraf Libraries Location
+TECTOOLS_HOME ?= ../..
+
+IUP ?= $(TECTOOLS_HOME)/iup
+CD ?= $(TECTOOLS_HOME)/cd
+IM ?= $(TECTOOLS_HOME)/im
+LUA ?= $(TECTOOLS_HOME)/lua
+LUA51 ?= $(TECTOOLS_HOME)/lua5.1
+LUA52 ?= $(TECTOOLS_HOME)/lua52
+
+
+#---------------------------------#
+# Pre-defined libraries
+
+# Library order:
+# user + iupcd + cd + iup + motif + X
+# Library path order is reversed
+
+ifdef USE_LUA
+ LUASUFX :=
+ LIBLUASUFX := 3
+endif
+
+ifdef USE_LUA4
+ LUASUFX := 4
+ LIBLUASUFX := 4
+ override USE_LUA = Yes
+ LUA := $(LUA4)
+endif
+
+ifdef USE_LUA5
+ LUASUFX := 5
+ LIBLUASUFX := 5
+ override USE_LUA = Yes
+ LUA := $(LUA5)
+endif
+
+ifdef USE_LUA50
+ LUASUFX := 50
+ LIBLUASUFX := 5
+ override USE_LUA = Yes
+ LUA := $(LUA50)
+ NO_LUALIB := Yes
+endif
+
+ifdef USE_LUA51
+ LUASUFX := 5.1
+ LIBLUASUFX := 51
+ override USE_LUA = Yes
+ LUA := $(LUA51)
+ NO_LUALIB := Yes
+endif
+
+ifdef USE_LUA52
+ LUASUFX := 52
+ LIBLUASUFX := 52
+ override USE_LUA = Yes
+ LUA := $(LUA52)
+ NO_LUALIB := Yes
+endif
+
+ifdef USE_IUP3
+ override USE_IUP = Yes
+# Inside Tecgraf only
+ ifndef IUP3_BUILD
+# IUP := $(IUP)3
+ endif
+endif
+
+ifdef USE_IUPBETA
+ IUP := $(IUP)/beta
+endif
+
+ifdef USE_CDBETA
+ CD := $(CD)/beta
+endif
+
+ifdef USE_IMBETA
+ IM := $(IM)/beta
+endif
+
+ifdef USE_GLUT
+ override USE_OPENGL = Yes
+endif
+
+ifdef USE_GDK
+ override USE_GTK = Yes
+endif
+
+ifdef USE_IUPCONTROLS
+ override USE_CD = Yes
+ override USE_IUP = Yes
+ ifdef USE_IUPLUA
+ ifdef USE_STATIC
+ SLIB += $(IUP)/lib/$(TEC_UNAME_LIB_DIR)/libiupluacontrols$(LIBLUASUFX).a
+ else
+ LIBS += iupluacontrols$(LIBLUASUFX)
+ endif
+ override USE_CDLUA = Yes
+ endif
+ ifdef USE_STATIC
+ SLIB += $(IUP)/lib/$(TEC_UNAME_LIB_DIR)/libiupcontrols.a
+ else
+ LIBS += iupcontrols
+ endif
+endif
+
+ifdef USE_IMLUA
+ override USE_IM = Yes
+ ifdef USE_STATIC
+ SLIB += $(IM)/lib/$(TEC_UNAME_LIB_DIR)/libimlua$(LIBLUASUFX).a
+ else
+ LIBS += imlua$(LIBLUASUFX)
+ endif
+endif
+
+ifdef USE_CDLUA
+ override USE_CD = Yes
+ ifdef USE_STATIC
+ ifdef USE_IUP
+ ifdef USE_OLDNAMES
+ SLIB += $(CD)/lib/$(TEC_UNAME_LIB_DIR)/libcdluaiup$(LIBLUASUFX).a
+ endif
+ endif
+ SLIB += $(CD)/lib/$(TEC_UNAME_LIB_DIR)/libcdlua$(LIBLUASUFX).a
+ else
+ ifdef USE_IUP
+ ifdef USE_OLDNAMES
+ LIBS += cdluaiup$(LIBLUASUFX)
+ endif
+ endif
+ LIBS += cdlua$(LIBLUASUFX)
+ endif
+endif
+
+ifdef USE_IUPLUA
+ override USE_IUP = Yes
+ ifdef USE_STATIC
+ ifdef USE_CD
+ ifndef USE_OLDNAMES
+ SLIB += $(IUP)/lib/$(TEC_UNAME_LIB_DIR)/libiupluacd$(LIBLUASUFX).a
+ endif
+ endif
+ ifdef USE_OPENGL
+ SLIB += $(IUP)/lib/$(TEC_UNAME_LIB_DIR)/libiupluagl$(LIBLUASUFX).a
+ endif
+ SLIB += $(IUP)/lib/$(TEC_UNAME_LIB_DIR)/libiuplua$(LIBLUASUFX).a
+ else
+ ifdef USE_CD
+ ifndef USE_OLDNAMES
+ LIBS += iupluacd$(LIBLUASUFX)
+ endif
+ endif
+ ifdef USE_OPENGL
+ LIBS += iupluagl$(LIBLUASUFX)
+ endif
+ LIBS += iuplua$(LIBLUASUFX)
+ endif
+endif
+
+ifdef USE_LUA
+ LUA_LIB ?= $(LUA)/lib/$(TEC_UNAME_LIB_DIR)
+ ifdef USE_STATIC
+ ifndef NO_LUALIB
+ SLIB += $(LUA_LIB)/liblualib$(LUASUFX).a
+ endif
+ SLIB += $(LUA_LIB)/liblua$(LUASUFX).a
+ else
+ ifndef NO_LUALIB
+ LIBS += lualib$(LUASUFX)
+ endif
+ ifndef NO_LUALINK
+ LIBS += lua$(LUASUFX)
+ LDIR += $(LUA_LIB)
+ else
+ ifneq ($(findstring cygw, $(TEC_UNAME)), )
+ LIBS += lua$(LUASUFX)
+ LDIR += $(LUA_LIB)
+ endif
+ endif
+ endif
+
+ LUA_INC ?= $(LUA)/include
+ INCLUDES += $(LUA_INC)
+
+ LUA_BIN ?= $(LUA)/bin/$(TEC_UNAME)
+ BIN2C := $(LUA_BIN)/bin2c$(LUASUFX)
+ LUAC := $(LUA_BIN)/luac$(LUASUFX)
+ LUABIN := $(LUA_BIN)/lua$(LUASUFX)
+endif
+
+ifdef USE_IUP
+ IUPSUFX :=
+ ifdef USE_IUP3
+ ifdef GTK_DEFAULT
+ ifdef USE_MOTIF
+ IUPSUFX := mot
+ else
+ override USE_GTK = Yes
+ endif
+ else
+ ifdef USE_GTK
+ IUPSUFX := gtk
+ else
+ override USE_MOTIF = Yes
+ endif
+ endif
+ else
+ override USE_MOTIF = Yes
+ endif
+ ifdef USE_STATIC
+ ifdef USE_CD
+ ifndef USE_OLDNAMES
+ SLIB += $(IUP)/lib/$(TEC_UNAME_LIB_DIR)/libiupcd.a
+ endif
+ endif
+ ifdef USE_OPENGL
+ SLIB += $(IUP)/lib/$(TEC_UNAME_LIB_DIR)/libiupgl.a
+ endif
+ SLIB += $(IUP)/lib/$(TEC_UNAME_LIB_DIR)/libiup$(IUPSUFX).a
+ else
+ ifdef USE_CD
+ ifndef USE_OLDNAMES
+ LIBS += iupcd
+ endif
+ endif
+ ifdef USE_OPENGL
+ LIBS += iupgl
+ endif
+ LIBS += iup$(IUPSUFX)
+ LDIR += $(IUP)/lib/$(TEC_UNAME_LIB_DIR)
+ endif
+ INCLUDES += $(IUP)/include
+endif
+
+ifdef USE_CD
+ override USE_X11 = Yes
+ ifdef USE_STATIC
+ ifdef USE_IUP
+ ifdef USE_OLDNAMES
+ SLIB += $(CD)/lib/$(TEC_UNAME_LIB_DIR)/libcdiup.a
+ endif
+ endif
+ ifdef USE_XRENDER
+ ifdef USE_OLDNAMES
+ SLIB += $(CD)/lib/$(TEC_UNAME_LIB_DIR)/libcdxrender.a
+ else
+ SLIB += $(CD)/lib/$(TEC_UNAME_LIB_DIR)/libcdcontextplus.a
+ endif
+ endif
+ ifdef USE_GDK
+ SLIB += $(CD)/lib/$(TEC_UNAME_LIB_DIR)/libcdgdk.a
+ else
+ SLIB += $(CD)/lib/$(TEC_UNAME_LIB_DIR)/libcd.a
+ endif
+ ifdef USE_XRENDER
+ LIBS += Xrender Xft
+ else
+ ifndef USE_GTK
+ ifndef USE_OLDNAMES
+ # Freetype is included in GTK
+ SLIB += $(CD)/lib/$(TEC_UNAME_LIB_DIR)/libfreetype.a
+ endif
+ endif
+ endif
+ else
+ ifdef USE_IUP
+ ifdef USE_OLDNAMES
+ LIBS += cdiup
+ endif
+ endif
+ ifdef USE_XRENDER
+ ifdef USE_OLDNAMES
+ LIBS += cdxrender
+ else
+ LIBS += cdcontextplus
+ endif
+ endif
+ ifdef USE_GDK
+ LIBS += cdgdk
+ else
+ LIBS += cd
+ endif
+ LDIR += $(CD)/lib/$(TEC_UNAME_LIB_DIR)
+ ifdef USE_XRENDER
+ LIBS += Xrender Xft
+ else
+ ifndef USE_GTK
+ ifndef USE_OLDNAMES
+ # Freetype is included in GTK
+ LIBS += freetype
+ endif
+ endif
+ endif
+ endif
+ INCLUDES += $(CD)/include
+endif
+
+ifdef USE_IM
+ ifdef USE_STATIC
+ SLIB += $(IM)/lib/$(TEC_UNAME_LIB_DIR)/libim.a
+ else
+ LIBS += im
+ LDIR += $(IM)/lib/$(TEC_UNAME_LIB_DIR)
+ endif
+ INCLUDES += $(IM)/include
+endif
+
+ifdef USE_GLUT
+ LIBS += glut
+ LDIR += $(GLUT_LIB)
+ STDINCS += $(GLUT_INC)
+endif
+
+ifdef USE_OPENGL
+ override USE_X11 = Yes
+ ifdef USE_MOTIF
+ ifndef USE_IUP3
+ LIBS += $(MOTIFGL_LIB)
+ endif
+ endif
+ LIBS += $(OPENGL_LIBS)
+ LDIR += $(OPENGL_LIB)
+ STDINCS += $(OPENGL_INC)
+endif
+
+ifdef USE_MOTIF
+ override USE_X11 = Yes
+ LIBS += Xm
+ LDIR += $(MOTIF_LIB)
+ STDINCS += $(MOTIF_INC)
+ ifneq ($(findstring Linux, $(TEC_UNAME)), )
+ X11_LIBS := Xpm $(X11_LIBS)
+ endif
+ ifneq ($(findstring cygw, $(TEC_UNAME)), )
+ X11_LIBS := Xpm $(X11_LIBS)
+ endif
+endif
+
+ifdef USE_GTK
+ ifneq ($(findstring Darwin, $(TEC_UNAME)), )
+# Option 1 - Fink GTK port
+ GTK_BASE ?= /sw
+ LDIR += $(GTK_BASE)/lib
+ override USE_X11 = Yes
+ LIBS += gtk-x11-2.0 gdk-x11-2.0 pangox-1.0
+# Option 2 - Imendio Framework
+# STDINCS += /Library/Frameworks/Gtk.framework/Headers
+# STDINCS += /Library/Frameworks/GLib.framework/Headers
+# STDINCS += /Library/Frameworks/Cairo.framework/Headers
+# LFLAGS += -framework Gtk
+# Option 3 - GTK-OSX Framework
+# GTK_BASE := /Users/cpts/gtk/inst
+# LDIR += $(GTK_BASE)/lib
+# LFLAGS += -framework Carbon
+# LIBS += gtk-quartz-2.0 gdk-quartz-2.0 pangoft2-1.0
+
+ LIBS += freetype
+ else
+ # if not the default, then include it for linker
+ # must be before the default
+ ifdef GTK_BASE
+ LDIR += $(GTK_BASE)/lib
+ endif
+ GTK_BASE ?= /usr
+ override USE_X11 = Yes
+ LIBS += gtk-x11-2.0 gdk-x11-2.0 pangox-1.0
+ endif
+
+ LIBS += gdk_pixbuf-2.0 pango-1.0 gobject-2.0 gmodule-2.0 glib-2.0
+ STDINCS += $(GTK_BASE)/include/atk-1.0 $(GTK_BASE)/include/gtk-2.0 $(GTK_BASE)/include/cairo $(GTK_BASE)/include/pango-1.0 $(GTK_BASE)/include/glib-2.0
+
+ ifeq ($(TEC_SYSARCH), x64)
+ STDINCS += $(GTK_BASE)/lib64/glib-2.0/include $(GTK_BASE)/lib64/gtk-2.0/include
+ else
+ ifeq ($(TEC_SYSARCH), ia64)
+ STDINCS += $(GTK_BASE)/lib64/glib-2.0/include $(GTK_BASE)/lib64/gtk-2.0/include
+ else
+ STDINCS += $(GTK_BASE)/lib/glib-2.0/include $(GTK_BASE)/lib/gtk-2.0/include
+ endif
+ endif
+ ifneq ($(findstring FreeBSD, $(TEC_UNAME)), )
+ STDINCS += /lib/X11R6/include/gtk-2.0
+ endif
+endif
+
+ifdef USE_QT
+ override USE_X11 = Yes
+ LIBS += QtGui QtCore
+ QT_BASE_INC := /usr/include/qt4
+ STDINCS += $(QT_BASE_INC) $(QT_BASE_INC)/QtCore $(QT_BASE_INC)/QtGui
+ STDDEFS += -DQT_DLL -DQT_QT3SUPPORT_LIB -DQT3_SUPPORT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT
+endif
+
+ifdef USE_X11
+ LIBS += $(X11_LIBS)
+ LDIR += $(X11_LIB)
+ STDINCS += $(X11_INC)
+endif
+
+LIBS += m
+
+ifneq ($(findstring cygw, $(TEC_UNAME)), )
+ # INCLUDES for dependencies, remove references to "c:" and similars
+ DEPINCS := $(patsubst c:%, /cygdrive/c%, $(INCLUDES))
+ DEPINCS := $(patsubst d:%, /cygdrive/d%, $(DEPINCS))
+ DEPINCS := $(patsubst x:%, /cygdrive/x%, $(DEPINCS))
+ DEPINCS := $(patsubst t:%, /cygdrive/t%, $(DEPINCS))
+
+ DLIBEXT := dll
+ APPEXT := .exe
+ # Use the cyg prefix to indicate that it is a Cygwin Posix DLL
+ DLIBPRE := cyg
+
+ STDLDFLAGS += -Wl,--out-implib=$(TARGETDIR)/lib$(TARGETNAME).dll.a
+endif
+
+#---------------------------------#
+# Building compilation flags that are sets
+
+DEPINCS ?= $(INCLUDES)
+DEPINCS := $(addprefix -I, $(DEPINCS))
+
+INCLUDES := $(addprefix -I, $(INCLUDES))
+STDINCS := $(addprefix -I, $(STDINCS))
+EXTRAINCS := $(addprefix -I, $(EXTRAINCS))
+DEFINES := $(addprefix -D, $(DEFINES))
+
+LIBS := $(addprefix -l, $(LIBS))
+ifdef LDIR
+ LDIR := $(addprefix -L, $(LDIR))
+endif
+
+
+#---------------------------------#
+# Definitions of private variables
+
+# Library flags for application and dynamic library linker
+LFLAGS += $(LDIR) $(LIBS)
+# C compiler flags
+CFLAGS = $(FLAGS) $(STDFLAGS) $(INCLUDES) $(STDINCS) $(EXTRAINCS) $(DEFINES) $(STDDEFS)
+# C++ compiler flags
+CXXFLAGS = $(CPPFLAGS) $(STDFLAGS) $(INCLUDES) $(STDINCS) $(EXTRAINCS) $(DEFINES) $(STDDEFS)
+
+# Sources with relative path
+SOURCES := $(addprefix $(SRCDIR)/, $(SRC))
+
+TARGETAPPNAME := $(TARGETNAME)$(APPEXT)
+TARGETSLIBNAME := lib$(TARGETNAME).a
+TARGETDLIBNAME := $(DLIBPRE)$(TARGETNAME).$(DLIBEXT)
+
+# Target for applications or libraries
+ifeq ($(MAKETYPE), APP)
+ TARGET := $(TARGETDIR)/$(TARGETAPPNAME)
+else
+ ifeq ($(NO_DYNAMIC), Yes)
+ TARGET := $(TARGETDIR)/$(TARGETSLIBNAME)
+ else
+ TARGET := $(TARGETDIR)/$(TARGETSLIBNAME) $(TARGETDIR)/$(TARGETDLIBNAME)
+ endif
+endif
+
+# OBJ: list of .o, without path
+# OBJS: list of .o with relative path
+OBJ = $(notdir $(SRC))
+OBJ := $(OBJ:.c=.o)
+OBJ := $(OBJ:.cpp=.o)
+OBJ := $(OBJ:.cxx=.o)
+OBJ := $(OBJ:.cc=.o)
+OBJ := $(OBJ:.f=.o)
+OBJ := $(OBJ:.for=.o)
+OBJ := $(OBJ:.rc=.ro)
+OBJS = $(addprefix $(OBJDIR)/, $(OBJ))
+
+ifdef LOHPACK
+ # Package with all LOHs
+ LOHS := $(LOHDIR)/$(LOHPACK)
+ LOHDIRS :=
+else
+ # LOH: list of .loh, without path
+ # LOHS: list of .loh, with relative path
+ LO = $(notdir $(SRCLUA))
+ LO := $(LO:.lua=$(LO_SUFFIX).lo)
+ LOS = $(addprefix $(OBJROOT)/, $(LO))
+
+ LOH = $(notdir $(SRCLUA))
+ LOH := $(LOH:.lua=$(LO_SUFFIX).loh)
+ LOHS = $(addprefix $(LOHDIR)/, $(LOH))
+endif
+
+# Construct VPATH variable
+P-SRC = $(dir $(SRC))
+P-SRC += $(dir $(SRCLUA))
+VPATH = .:$(foreach dir,$(P-SRC),$(if $(dir)="./",:$(dir)))
+
+
+#---------------------------------#
+# Main Rule - Build Everything that it is necessary
+
+.PHONY: tecmake
+ifeq ($(MAKETYPE), APP)
+ tecmake: print-start directories application scripts
+else
+ ifeq ($(NO_DYNAMIC), Yes)
+ tecmake: print-start directories static-lib
+ else
+ tecmake: print-start directories static-lib dynamic-lib
+ endif
+endif
+
+.PHONY: print-start
+print-start:
+ @echo ''; echo 'Tecmake - Starting [ $(TARGETNAME):$(TEC_UNAME) ]'
+
+
+#---------------------------------#
+# Dynamic Library Build
+
+.PHONY: dynamic-lib
+dynamic-lib: $(TARGETDIR)/$(TARGETDLIBNAME)
+
+$(TARGETDIR)/$(TARGETDLIBNAME) : $(LOHS) $(OBJS) $(EXTRADEPS)
+ $(LD) $(STDLDFLAGS) -o $@ $(OBJS) $(SLIB) $(LFLAGS)
+ @echo 'Tecmake - Dynamic Library ($@) Done.'; echo ''
+
+
+#---------------------------------#
+# Static Library Build
+
+.PHONY: static-lib
+static-lib: $(TARGETDIR)/$(TARGETSLIBNAME)
+
+$(TARGETDIR)/$(TARGETSLIBNAME) : $(LOHS) $(OBJS) $(EXTRADEPS)
+ $(AR) $(STDLFLAGS) $@ $(OBJS) $(SLIB) $(LCFLAGS)
+ -$(RANLIB) $@
+ @echo 'Tecmake - Static Library ($@) Done.'; echo ''
+
+
+#---------------------------------#
+# Application Build
+
+.PHONY: application
+application: $(TARGETDIR)/$(TARGETAPPNAME)
+
+$(TARGETDIR)/$(TARGETAPPNAME) : $(LOHS) $(OBJS) $(EXTRADEPS)
+ $(LINKER) -o $@ $(OBJS) $(SLIB) $(LFLAGS)
+ @if [ ! -z "$(STRIP)" ]; then \
+ echo "Striping debug information" ;\
+ strip $@ ;\
+ fi
+ @echo 'Tecmake - Application ($@) Done.'; echo ''
+
+
+#---------------------------------#
+# Application Scripts
+
+# Script name
+SRELEASE := $(SRCDIR)/$(TARGETNAME)
+
+.PHONY: scripts
+ifdef NO_SCRIPTS
+ scripts: ;
+else
+ scripts: $(SRELEASE) ;
+endif
+
+$(SRELEASE): $(MAKENAME)
+ @echo 'Building script $(@F)'
+ @echo "#!/bin/csh" > $@
+ @echo "# Script generated automatically by tecmake v$(VERSION)" >> $@
+ @echo "# Remove the comment bellow to set the LD_LIBRARY_PATH if needed." >> $@
+ @echo '#setenv LD_LIBRARY_PATH $(MYLIB1)/lib/$${TEC_UNAME}:$(MYLIB2)/lib/$${TEC_UNAME}:$$LD_LIBRARY_PATH' >> $@
+ @echo 'if ( -r app.env ) source app.env' >> $@
+ @echo 'exec $(TARGETROOT)/$$TEC_UNAME/$(TARGETNAME) $$*' >> $@
+ @chmod a+x $@
+
+
+#---------------------------------#
+# Directories Creation
+
+.PHONY: directories
+directories: $(OBJDIR) $(TARGETDIR) $(EXTRADIR) $(LOHDIR)
+
+$(OBJDIR) $(TARGETDIR):
+ if [ ! -d $@ ] ; then mkdir -p $@ ; fi
+
+ifdef EXTRADIR
+ $(EXTRADIR):
+ if [ ! -d $@ ] ; then mkdir -p $@ ; fi
+else
+ $(EXTRADIR): ;
+endif
+
+ifdef LOHDIR
+ $(LOHDIR):
+ if [ ! -d $@ ] ; then mkdir -p $@ ; fi
+else
+ $(LOHDIR): ;
+endif
+
+
+#---------------------------------#
+# Compilation Rules
+
+$(OBJDIR)/%.o: $(SRCDIR)/%.c
+ @echo Compiling $(<F)...
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+$(OBJDIR)/%.o: $(SRCDIR)/%.cpp
+ @echo Compiling $(<F)...
+ $(CPPC) -c $(CXXFLAGS) -o $@ $<
+
+$(OBJDIR)/%.o: $(SRCDIR)/%.cxx
+ @echo Compiling $(<F)...
+ $(CPPC) -c $(CXXFLAGS) -o $@ $<
+
+$(OBJDIR)/%.o: $(SRCDIR)/%.cc
+ @echo Compiling $(<F)...
+ $(CPPC) -c $(CXXFLAGS) -o $@ $<
+
+$(OBJDIR)/%.o: $(SRCDIR)/%.f
+ @echo Compiling $(<F)...
+ $(FC) -c $(FFLAGS) -o $@ $<
+
+$(OBJDIR)/%.o: $(SRCDIR)/%.for
+ @echo Compiling $(<F)...
+ $(FC) -c $(FFLAGS) -o $@ $<
+
+$(OBJDIR)/%.ro: $(SRCDIR)/%.rc
+ @echo Compiling $(<F)...
+ $(RCC) $(RCFLAGS) -O coff -o $@ $<
+
+$(LOHDIR)/%.loh: $(OBJROOT)/%.lo
+ @echo Generating $(<F)...
+ $(BIN2C) $< > $@
+
+$(OBJROOT)/%$(LO_SUFFIX).lo: $(SRCLUADIR)/%.lua
+ @echo Compiling $(<F)...
+ $(LUAC) -o $@ $<
+
+ifdef LOHPACK
+$(LOHDIR)/$(LOHPACK): $(SRCLUA)
+ @echo Generating $(<F)...
+ $(LUABIN) $(LUAPRE) $(LUAPREFLAGS) -l $(SRCLUADIR) -o $@ $(SRCLUA)
+endif
+
+
+#---------------------------------#
+# Dependencies
+
+# make depend
+# Build dependencies
+.PHONY: depend
+depend: $(DEPEND)
+
+$(DEPEND): $(MAKENAME)
+ ifdef SRC
+ @echo "" > $(DEPEND)
+ @which $(CPPC) 2> /dev/null 1>&2 ;\
+ if [ $$? -eq 0 ]; then \
+ echo "Building dependencies... (can be slow)" ;\
+ $(CPPC) $(DEPINCS) $(DEFINES) $(STDDEFS) -MM $(SOURCES) | \
+ sed -e '1,$$s/^\([^ ]\)/$$(OBJDIR)\/\1/' > $(DEPEND) ;\
+ else \
+ echo "" ;\
+ echo "$(CPPC) not found. Dependencies can not be built." ;\
+ echo "Must set USE_NODEPEND=Yes." ;\
+ echo "" ;\
+ exit 1 ;\
+ fi
+ endif
+
+###################
+ifndef USE_NODEPEND
+include $(DEPEND)
+endif
+###################
+
+
+#---------------------------------#
+# Management Rules
+
+# make clean-extra
+# Remove extra files
+.PHONY: clean-extra
+clean-extra:
+ rm -f $(DEPEND) $(SRELEASE) so_locations
+
+# make clean-lohs
+# Remove Lua object inclusion files
+.PHONY: clean-lohs
+clean-lohs:
+ rm -f $(LOS) $(LOHS)
+
+# make clean-obj
+# Remove object files
+.PHONY: clean-obj
+clean-obj:
+ rm -f $(OBJS)
+
+# make clean-target
+# Remove target
+.PHONY: clean-target
+clean-target:
+ rm -f $(TARGET)
+
+# make clean-dir
+.PHONY: clean-dir
+clean-dir:
+ rm -fr $(OBJROOT) $(TARGETROOT)
+
+# make clean
+# Remove target and object files
+.PHONY: clean
+clean: clean-target clean-obj
+
+# make strip
+# Remove symbols from executables
+.PHONY: strip
+strip:
+ test -r $(TARGETDIR)/$(TARGETAPPNAME) && strip $(TARGETDIR)/$(TARGETAPPNAME)
+
+# make rebuild
+# Rebuild target and object files
+.PHONY: rebuild
+rebuild: clean-extra clean-lohs clean-obj clean-target tecmake
+
+# make relink
+# Rebuild target without rebuilding object files
+.PHONY: relink
+relink: clean-target tecmake
+
+# make clean-all-obj
+# Remove target and object files
+.PHONY: clean-all-obj
+clean-all-obj:
+ @for d in $(UNAMES); do \
+ (cd $(OBJROOT)/$$d; echo $(OBJ) | xargs rm -f) ;\
+ done
+
+# make clean-all-target
+# Remove libraries and executables for all platforms
+.PHONY: clean-all-target
+clean-all-target:
+ @for d in $(UNAMES); do \
+ (rm -f $(TARGETROOT)/$$d/$(TARGETNAME) $(TARGETROOT)/$$d/$(TARGETSLIBNAME) $(TARGETROOT)/$$d/$(TARGETDLIBNAME)) ;\
+ done
+
+#---------------------------------#
+# Remote build
+# There must be aliases in DNS for the known UNAMES
+.PHONY: $(UNAMES)
+$(UNAMES):
+ @cwd=`csh -c "\\pwd"` ; home=`csh -c "cd;\\pwd"` ;\
+ dir=`echo $$cwd | sed -e "s|$$home/||"` ;\
+ xterm -bg black -fg lightblue -T "Tecmake: $@ ($(TARGETNAME))" -e ssh $@ $(REMOTE) $$dir $(TECMAKEFLAGS) $(MAKEFLAGS) & 2> /dev/null
+
+
+#---------------------------------#
+
+.PHONY: version
+version:
+ @echo "Tecmake Posix Version $(VERSION)"
+
+#---------------------------------#