summaryrefslogtreecommitdiffstats
path: root/doc/html/ksquirrel-libs-olibs3.html
diff options
context:
space:
mode:
Diffstat (limited to 'doc/html/ksquirrel-libs-olibs3.html')
-rw-r--r--doc/html/ksquirrel-libs-olibs3.html365
1 files changed, 365 insertions, 0 deletions
diff --git a/doc/html/ksquirrel-libs-olibs3.html b/doc/html/ksquirrel-libs-olibs3.html
new file mode 100644
index 0000000..46150ec
--- /dev/null
+++ b/doc/html/ksquirrel-libs-olibs3.html
@@ -0,0 +1,365 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+ <title>KSquirrel: development</title>
+
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <meta name='Author' content='Baryshev Dmitry/Krasu'>
+
+ <link rel="stylesheet" href="styles.css" type="text/css">
+</head>
+<body>
+
+<center><h3><b>How to write a new library for KSquirrel (for example, it will decode abstract 'ttx' format) ?</b></h3></center>
+
+<ul>
+<li>Create a directory with necessary sources ('generate' is distributed with ksquirrel-libs):
+<br><br>
+<table cellpadding="2" cellspacing="2" width="70%" align="center">
+ <tbody>
+ <tr>
+ <td valign="top" bgcolor="#CCCCCC">
+
+ <pre>
+# ./generate ttx -build
+ </pre>
+ </td>
+ </tr>
+ </tbody>
+</table>
+<br><br>
+<li>Typical fmt_codec_ttx_defs.h
+<br><br>
+<table cellpadding="2" cellspacing="2" width="70%" align="center">
+ <tbody>
+ <tr>
+ <td valign="top" bgcolor="#CCCCCC">
+
+ <pre>
+#ifndef KSQUIRREL_READ_IMAGE_ttx
+#define KSQUIRREL_READ_IMAGE_ttx
+
+// Define constants you need here
+
+#endif
+ </pre>
+ </td>
+ </tr>
+ </tbody>
+</table>
+<br><br>
+<li>Typical fmt_codec_ttx.h
+<br><br>
+<table cellpadding="2" cellspacing="2" width="70%" align="center">
+ <tbody>
+ <tr>
+ <td valign="top" bgcolor="#CCCCCC">
+
+ <pre>
+#ifndef KSQUIRREL_LIBS_CLASS_DEFINITION_ttx_H
+#define KSQUIRREL_LIBS_CLASS_DEFINITION_ttx_H
+
+#include "fmt_codec_base.h"
+
+class fmt_codec : public fmt_codec_base
+{
+ public:
+
+ fmt_codec();
+ ~fmt_codec();
+
+ virtual std::string fmt_version();
+ virtual std::string fmt_quickinfo();
+ virtual std::string fmt_filter();
+ virtual std::string fmt_mime();
+ virtual std::string fmt_pixmap();
+ virtual std::string fmt_extension(const s32 bpp);
+
+ virtual bool fmt_readable() const;
+ virtual s32 fmt_read_init(const std::string &amp;file);
+ virtual s32 fmt_read_next();
+ virtual s32 fmt_read_next_pass();
+ virtual s32 fmt_read_scanline(RGBA *scan);
+ virtual void fmt_read_close();
+
+
+ virtual bool fmt_writable() const;
+ virtual void fmt_getwriteoptions(fmt_writeoptionsabs *);
+ virtual s32 fmt_write_init(const std::string &amp;file, const fmt_image &amp;image,
+ const fmt_writeoptions &amp;opt);
+ virtual s32 fmt_write_next();
+ virtual s32 fmt_write_next_pass();
+ virtual s32 fmt_write_scanline(RGBA *scan);
+ virtual void fmt_write_close();
+
+ private:
+ // define variables you need here
+};
+
+extern "C" fmt_codec_base* fmt_codec_create()
+{
+ return (new fmt_codec);
+}
+
+extern "C" void fmt_codec_destroy(fmt_codec_base *p)
+{
+ delete p;
+}
+</pre>
+ </td>
+ </tr>
+ </tbody>
+</table>
+<br><br>
+<li>Typical fmt_codec_ttx.cpp
+<br><br>
+<table cellpadding="2" cellspacing="2" width="70%" align="center">
+ <tbody>
+ <tr>
+ <td valign="top" bgcolor="#CCCCCC">
+
+ <pre>
+
+#include &#60;iostream&#62;
+
+#include "fmt_types.h"
+#include "fileio.h"
+#include "fmt_codec_ttx_defs.h"
+#include "fmt_codec_ttx.h"
+
+#include "error.h"
+
+fmt_codec::fmt_codec() : fmt_codec_base()
+{}
+
+fmt_codec::~fmt_codec()
+{}
+
+<b>Returns library's version</b>
+std::string fmt_codec::fmt_version()
+{
+ return std::string("0.0.1");
+}
+
+<b>Returns common information on ttx format</b>
+std::string fmt_codec::fmt_quickinfo()
+{
+ return std::string("TTX is a very cool format!");
+}
+
+<b>Filter for a file manager (with a blank after
+each extension)</b>
+std::string fmt_codec::fmt_filter()
+{
+ return std::string("*.ttx1 *.ttx2 *.ttx3 ");
+}
+
+<b>The regular expression defining the file type
+(usually first 2-5 characters in a file).
+This example shows, that format TTX is defined by header
+TTX7, TTX8 or TTX9. If the file has no header
+ (like .ico and .pix) this function should return empty string.</b>
+std::string fmt_codec::fmt_mime()
+{
+ return std::string("TTX[789]");
+}
+
+<b>Compile <a href='bits.html'>this program</a>,
+create PNG icon 16x16 and run
+#./bits icon.png > icon.bits.
+Then copy contents of icon.bits here</b>
+std::string fmt_codec::fmt_pixmap()
+{
+ return std::string("");
+}
+
+<b>Open file, initialize variables, etc.</b>
+s32 fmt_codec::fmt_read_init(const std::string &amp;file)
+{
+ frs.open(file.c_str(), ios::binary | ios::in);
+
+ if(!frs.good())
+ return SQERR_NOFILE;
+
+ currentImage = -1;
+ read_error = false;
+
+ finfo.animated = false;
+
+ return SQERR_OK;
+}
+
+<b>This method will be called BEFORE decoding of each image in a file,
+so we should seek to correct file offset or do something important now.
+Return SQERR_NOTOK, if the next image can't be decoded (no such image),
+and any other error code on error.</b>
+s32 fmt_codec::fmt_read_next()
+{
+ currentImage++;
+
+ if(currentImage)
+ return SQERR_NOTOK; <b>return, if TTX can
+ have only one image.</b>
+
+ fmt_image image;
+
+ <b>Non-interlaced image has 1 pass.
+ If you need to define another value, do it here</b>
+ image.passes = 1;
+
+<b>Here you should read necessary data from file,
+and initialize finfo.image[currentImage].w,h,bpp. Return error
+code you need on error.</b>
+<b>...</b>
+
+ image.compression = "-";
+ image.colorspace = "RGB";
+
+ finfo.image.push_back(image);
+
+ return SQERR_OK;
+}
+
+<b>This method will be called BEFORE decoding of each pass
+in the interlaced image.</b>
+s32 fmt_codec::fmt_read_next_pass()
+{
+ <b>Our TTX fromat can't be interlaced, so we
+ won't do anything, just return SQERR_OK</b>
+ return SQERR_OK;
+}
+
+<b>Reads scanline in 'scan'. This example just fills
+'scan' with white color (RGBA(255,255,255,255))</b>
+s32 fmt_codec::fmt_read_scanline(RGBA *scan)
+{
+ memset(scan, 255, finfo.image[currentImage].w * sizeof(RGBA));
+
+ return SQERR_OK;
+}
+
+<b>Closes everything, frees allocated memory, etc.</b>
+void fmt_codec::fmt_read_close()
+{
+ frs.close();
+
+ // you should free information on close
+ finfo.meta.clear();
+ finfo.image.clear();
+}
+
+<b>Returns write options for TTX format. This method won't be
+called, if fmt_writable() returns 'false'</b>
+void fmt_codec::fmt_getwriteoptions(fmt_writeoptionsabs *opt)
+{
+ <b>Can TTX format be interlaced ? No.</b>
+ opt->interlaced = false;
+
+ <b>With which compression it can be compressed ?
+ With no compression (like not-RLE BMP).</b>
+ opt->compression_scheme = CompressionNo;
+
+ <b>minimum, maximum, and default compression level.
+ Ignored, if the compression is CompressionNo.</b>
+ opt->compression_min = 0;
+ opt->compression_max = 0;
+ opt->compression_def = 0;
+
+ <b>TTX can't be interlaced, passes = 1</b>
+ opt->passes = 1;
+
+ <b>KSquirrel shouldn't flip the image
+ before writing</b>
+ opt->needflip = false;
+}
+
+<b>Same to fmt_read_init()</b>
+s32 fmt_codec::fmt_write_init(const std::string &amp;file, const fmt_image &image,
+ const fmt_writeoptions &opt)
+{
+ if(!image.w || !image.h || file.empty())
+ return SQE_W_WRONGPARAMS;
+
+ writeimage = image;
+ writeopt = opt;
+
+ fws.open(file.c_str(), ios::binary | ios::out);
+
+ if(!fws.good())
+ return SQE_W_NOFILE;
+
+ return SQE_OK;
+}
+
+<b>Same to fmt_read_next()</b>
+s32 fmt_codec::fmt_write_next()
+{
+ return SQE_OK;
+}
+
+<b>Same to fmt_read_next_pass()</b>
+s32 fmt_codec::fmt_write_next_pass()
+{
+ return SQE_OK;
+}
+
+<b>Write scanline. Same to fmt_read_scanline()</b>
+s32 fmt_codec::fmt_write_scanline(RGBA *scan)
+{
+ ...
+ return SQE_OK;
+}
+
+<b>Same to fmt_read_init()</b>
+void fmt_codec::fmt_write_close()
+{
+ fws.close();
+}
+
+<b>Can this library write TTX ? No.</b>
+bool fmt_codec::fmt_writable() const
+{
+ return false;
+}
+
+<b>Can this library read TTX ? Yes.</b>
+bool fmt_codec::fmt_readable() const
+{
+ return true;
+}
+
+<b>Some libraries support several image types (like PNM library).
+This method should be used by writing function to determine file extension by image's bpp.
+For example, 1 bpp means .pbm, 8 bpp - pgm</b>"
+std::string fmt_codec::fmt_extension(const s32 /*bpp*/)
+{
+ return std::string("");
+}
+
+ </pre>
+ </td>
+ </tr>
+ </tbody>
+</table>
+<br><br>
+<li>Compile it
+<br><br>
+<table cellpadding="2" cellspacing="2" width="70%" align="center">
+ <tbody>
+ <tr>
+ <td valign="top" bgcolor="#CCCCCC">
+ <pre>
+# ./compile-c++
+#
+ </pre>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<br><br>
+<li>That's all. You've just created a new decoder for KSquirrel. Copy libSQ_codec_ttx.so in /usr/lib/ksquirrel-libs.
+</ul>
+
+</body>
+</html>