Made to Order Software Corporation Logo


Appendix B — History of the SSWF reference

Dec 2, 2009

Moved the monolithic documentation to a multi-page hierarchical document that includes everything we had before plus many links, many terms attached to all pages (tags, English words.) And revision of most of the text for better English and clarification in some places.

Strengthen the formatting with CCK fields so all declarations look alike.

Broken up the actions from one large table to a set of pages.

Dec 14, 2008

Started work on the Load() feature of the SSWF library. This helped fixing several small mistakes in the documentation.

May 18, 2008

Fixed the ...

SWF Any Filter (swf_any_filter)

SWF Structure Info
Tag Flash Version: 
SWF Structure: 
/* the filter type */
struct swf_filter_type {
	unsigned char	f_type;

struct swf_filter_glow {
	swf_filter_type	f_type;		/* 0, 2, 3, 4 or 7 */
	if(f_type == GradientGlow || f_type == GradientBevel) {
		unsigned char		f_count;
	else {
		f_count = 1;
	swf_rgba		f_rgba[f_count];
	if(f_type == Bevel) {
		swf_rgba		f_highlight_rgba[f_count];
	if(f_type == GradientGlow || f_type == GradientBevel) {
		unsigned char		f_position[f_count];
	signed long fixed	f_blur_horizontal;
	signed long fixed	f_blur_vertical;
	if(f_type != Glow) {
		signed long fixed	f_radian_angle;
		signed long fixed	f_distance;
	signed short fixed	f_strength;
	unsigned		f_inner_shadow : 1;
	unsigned		f_knock_out : 1;
	unsigned		f_composite_source : 1;
	if(f_type == Bevel) {
		unsigned		f_on_top : 1;
	else {
		unsigned		f_reserved : 1;
	if(f_type == GradientGlow || f_type == GradientBevel) {
		unsigned		f_passes : 4;
	else {
		unsigned		f_reserved : 4;

struct swf_filter_blur {
	swf_filter_type		f_type;	/* 1 */
	unsigned long fixed	f_blur_horizontal;
	unsigned long fixed	f_blur_vertical;
	unsigned		f_passes : 5;
	unsigned		f_reserved : 3;

struct swf_filter_convolution {
	swf_filter_type	f_type;		/* 5 */
	unsigned char	f_columns;
	unsigned char	f_rows;
	long float	f_divisor;
	long float	f_bias;
	long float	f_weights[f_columns × f_rows];
	swf_rgba	f_default_color;
	unsigned	f_reserved : 6;
	unsigned	f_clamp : 1;
	unsigned	f_preserve_alpha : 1;

struct swf_filter_colormatrix {
	swf_filter_type	f_type;		/* 6 */
	long float	f_matrix[20];

struct swf_any_filter {
	swf_filter_type			f_fitler_type;
	swf_filter_blur			f_filter_blur;
	swf_filter_colormatrix		f_filter_colormatrix;
	swf_filter_convolution		f_filter_convolution;
	swf_filter_glow			f_filter_glow;

A filter defines how to transform the objects it is attached to. The first byte is the filter type. The data following depend on the type. Because each filter is much different, they are defined in separate structures. You can attach a filter to an object using an ActionScript or the PlaceObject3 tag.

The following describes the different filters available since version 8.

PostgreSQL and Drupal conflict

We have been running Drupal for some time now and we have noticed that it generates a very large amount of warnings in our log files.

The warning is in link with improperly formatted strings. PostgreSQL tries to follow the SQL specification to the letter and that means you cannot use the backslash character to escape special character sequences (such as \n for a newline character.)

I knew that in most cases the error was generated because of the function saving a full page or some other content in the cache. In that case, the system includes the characters: \012 and \015 (\n and \r.) That ...

Page not found

Baby with a shirt saying "I'm here!"The page you tried to access either does not exist or it was removed.

If you are trying to access a documentation, it is likely that it was removed by the auto-generator we use for reference documentation (namely Doxygen.)

Also, we moved from an older site and some pages may not have made it here yet.

Terms & Conditions

Made to Order Software Corporation
Terms and Conditions for the Online Services
offered by Made to Order Software Corporation

This Agreement ("Agreement") is by and between Made to Order Software Corporation ("m2osw") a Californian Corporation and You, your heirs, your agents, successors and assigns ("You" and "Your"), and is made effective as of the date of electronic execution, which is when you register for an electronic account to use the Web site of m2osw. This Agreement sets forth the terms and conditions of Your use of the Online Services ...

Testing PHP properly...

I have been wondering, for a little while, how can I properly test my PHP code?! Only my server can run it, right? Well, no, there is CLI. Okay, but how can I make that work in there?

The best answer I’ve got so far: simpletest. This PHP library let you write a test a la C++. You simply create a class derived from a SimpleTest class, and voilà. You are done. Well… you still have to implement test functions. But that is still a breeze.

I used this library to test the PHP eFax classes and got about 4 bugs out (not too bad, considering I wrote over 1,000 lines of code and ...

The odbcpp library is now available!

Made to Order Software now uses the ODBC library with its modb library (which is part of our molib product.) Unfortunately, it is not only written in C, it generates many errors. Actually, every single function has the potential of returning an error. For this reason, using the C interface is simply not a safe option.

For this reason, Alexis Wilke, our CEO, wrote an C++ wrapper called odbcpp. It encapsulates all the necessary ODBC calls to access any ODBC compatible database.

The odbcpp library ensures the proper management of all the resources for you. It allocates and frees the handles as ...

Pointers and proper exception handling...

Many C++ programmers have been C programmers first. Therefore, a lot of times, you find statements written this way:

ptr = new type;

if(ptr == 0) // handle error...

This is a C programmer that does not yet know that the new operator will throw an error if the allocation cannot happen. This makes a lot of sense, but what does that mean to the C++ programmer?

GRUB error 16

Today I had a problem with one of our computers. It did not want to boot. The boot loader is called GRUB. Most Linux distributions now use GRUB which is much more advanced than LILO and some other boot loaders.

GRUB is great for several reasons:

The assert() macro in C/C++


This is a subject that comes back all the time in C/C++ boards.

Should you use assertions?

The answer is clearly yes. But the C/C++ assert() function is usually defined using a macro. Macros have several problems. The most common ones are: they offer no type checking, they do not warn you about weird side effects, they have a different syntax than the C/C++ language itself.

One good thing: for a fast program, the debug code used to check parameters, results, etc. is gone.

One really bad thing: if the expression in the macro has a side effect, the release program is different from ...