swfmill 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.swfmill +21 -0
- data/VERSION +1 -1
- data/ext/.gitignore +1 -0
- data/ext/base64.c +21 -0
- data/ext/extconf.rb +17 -3
- data/ext/libb64/AUTHORS +7 -0
- data/ext/libb64/BENCHMARKS +85 -0
- data/ext/libb64/CHANGELOG +25 -0
- data/ext/libb64/INSTALL +44 -0
- data/ext/libb64/LICENSE +29 -0
- data/ext/libb64/Makefile +25 -0
- data/ext/libb64/README +138 -0
- data/ext/libb64/TODO +0 -0
- data/ext/libb64/base64/Makefile +56 -0
- data/ext/libb64/base64/VisualStudioProject/Makefile +11 -0
- data/ext/libb64/base64/VisualStudioProject/base64.sln +20 -0
- data/ext/libb64/base64/VisualStudioProject/base64.vcxproj +92 -0
- data/ext/libb64/base64/VisualStudioProject/base64.vcxproj.filters +36 -0
- data/ext/libb64/base64/base64.cc +94 -0
- data/ext/libb64/include/b64/cdecode.h +28 -0
- data/ext/libb64/include/b64/cencode.h +31 -0
- data/ext/libb64/include/b64/decode.h +70 -0
- data/ext/libb64/include/b64/encode.h +77 -0
- data/ext/libb64/src/Makefile +43 -0
- data/ext/libb64/src/cdecode.c +88 -0
- data/ext/libb64/src/cencode.c +109 -0
- data/ext/swfmill/src/SWFItem.cpp +2 -0
- data/ext/swfmill/src/SWFItem.h +7 -2
- data/ext/swfmill/src/swfmill.cpp +2 -2
- data/ext/swfmill_ext.cc +12 -0
- data/ext/swfmill_ext_to_swf.cc +2 -0
- data/ext/swfmill_ext_to_xml.cc +2 -10
- metadata +26 -4
data/.swfmill
CHANGED
@@ -104,3 +104,24 @@ ext/swfmill/test/Makefile.in
|
|
104
104
|
ext/swfmill/test/xml/Makefile.am
|
105
105
|
ext/swfmill/test/xml/Makefile.in
|
106
106
|
ext/swfmill/test/xml/test-xml
|
107
|
+
ext/libb64/Makefile
|
108
|
+
ext/libb64/BENCHMARKS
|
109
|
+
ext/libb64/base64/Makefile
|
110
|
+
ext/libb64/base64/base64.cc
|
111
|
+
ext/libb64/base64/VisualStudioProject/Makefile
|
112
|
+
ext/libb64/base64/VisualStudioProject/base64.vcxproj.filters
|
113
|
+
ext/libb64/base64/VisualStudioProject/base64.sln
|
114
|
+
ext/libb64/base64/VisualStudioProject/base64.vcxproj
|
115
|
+
ext/libb64/README
|
116
|
+
ext/libb64/INSTALL
|
117
|
+
ext/libb64/CHANGELOG
|
118
|
+
ext/libb64/include/b64/decode.h
|
119
|
+
ext/libb64/include/b64/cencode.h
|
120
|
+
ext/libb64/include/b64/encode.h
|
121
|
+
ext/libb64/include/b64/cdecode.h
|
122
|
+
ext/libb64/src/Makefile
|
123
|
+
ext/libb64/src/cdecode.c
|
124
|
+
ext/libb64/src/cencode.c
|
125
|
+
ext/libb64/LICENSE
|
126
|
+
ext/libb64/AUTHORS
|
127
|
+
ext/libb64/TODO
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.3
|
data/ext/.gitignore
CHANGED
data/ext/base64.c
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
#include "b64/cdecode.h"
|
2
|
+
#include "b64/cencode.h"
|
3
|
+
|
4
|
+
long
|
5
|
+
base64_decode(char *to, char *from, unsigned int len)
|
6
|
+
{
|
7
|
+
base64_decodestate state;
|
8
|
+
base64_init_decodestate(&state);
|
9
|
+
return base64_decode_block(from, len, to, &state);
|
10
|
+
}
|
11
|
+
|
12
|
+
long
|
13
|
+
base64_encode(char *to, char *from, unsigned int len)
|
14
|
+
{
|
15
|
+
base64_encodestate state;
|
16
|
+
int size;
|
17
|
+
base64_init_encodestate(&state);
|
18
|
+
size = base64_encode_block(from, len, to, &state);
|
19
|
+
size+= base64_encode_blockend(to + size, &state);
|
20
|
+
return size;
|
21
|
+
}
|
data/ext/extconf.rb
CHANGED
@@ -98,7 +98,7 @@ have_func("iconv", "iconv.h") or have_library("iconv", "iconv", "iconv.h")
|
|
98
98
|
|
99
99
|
have_library("stdc++")
|
100
100
|
|
101
|
-
$
|
101
|
+
$INCFLAGS += " -I./swfmill/src -I./swfmill/src/swft -I./swfmill/src/xslt -I./libb64/include"
|
102
102
|
|
103
103
|
Dir.chdir("swfmill") do
|
104
104
|
cmd = <<CMD
|
@@ -107,14 +107,28 @@ FREETYPE_CFLAGS="#{$FREETYPE_CFLAGS}" FREETYPE_LIBS="#{$FREETYPE_LIBS}" \
|
|
107
107
|
XML_CFLAGS="#{$XML_CFLAGS}" XML_LIBS="#{$XML_LIBS}" \
|
108
108
|
XSLT_CFLAGS="#{$XSLT_CFLAGS}" XSLT_LIBS="#{$XSLT_LIBS}" \
|
109
109
|
PNG_CFLAGS="#{$PNG_CFLAGS}" PNG_LIBS="#{$PNG_LIBS}" \
|
110
|
-
|
110
|
+
--with-pic \
|
111
|
+
--enable-shared \
|
112
|
+
CFLAGS="-fPIC -O3" \
|
113
|
+
CXXFLAGS="-fPIC -O3 -finline -finline-functions"
|
111
114
|
CMD
|
112
115
|
raise "error: #{cmd}" unless system(cmd)
|
113
116
|
cmd = "make"
|
114
117
|
raise "error: #{cmd}" unless system(cmd)
|
115
118
|
end
|
116
119
|
|
120
|
+
Dir.chdir("libb64") do
|
121
|
+
cmd = "make"
|
122
|
+
raise "error: #{cmd}" unless system(cmd)
|
123
|
+
end
|
124
|
+
|
117
125
|
create_makefile("swfmill_ext")
|
118
126
|
File.open(File.dirname("__FILE__") + "/Makefile", "ab") do |f|
|
119
|
-
|
127
|
+
exclude = ['swfmill/src/swfmill-base64.o']
|
128
|
+
objects = Dir["swfmill/src/**/*.o"] - exclude
|
129
|
+
f.puts "OBJS += #{objects.join(" ")}"
|
130
|
+
end
|
131
|
+
|
132
|
+
File.open(File.dirname("__FILE__") + "/Makefile", "ab") do |f|
|
133
|
+
f.puts "OBJS += libb64/src/cdecode.o libb64/src/cencode.o"
|
120
134
|
end
|
data/ext/libb64/AUTHORS
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
-- Intro
|
2
|
+
|
3
|
+
Some people have expressed opinions about how
|
4
|
+
fast libb64's encoding and decoding routines
|
5
|
+
are, as compared to some other BASE64 packages
|
6
|
+
out there.
|
7
|
+
|
8
|
+
This document shows the result of a short and sweet
|
9
|
+
benchmark, which takes a large-ish file and
|
10
|
+
encodes/decodes it a number of times.
|
11
|
+
The winner is the executable that does this task the quickest.
|
12
|
+
|
13
|
+
-- Platform
|
14
|
+
|
15
|
+
The tests were all run on a Fujitsu-Siemens laptop,
|
16
|
+
with a Pentium M processor running at 2GHz, with
|
17
|
+
1GB of RAM, running Ubuntu 10.4.
|
18
|
+
|
19
|
+
-- Packages
|
20
|
+
|
21
|
+
The following BASE64 packages were used in this benchmark:
|
22
|
+
|
23
|
+
- libb64-1.2 (libb64-base64)
|
24
|
+
From libb64.sourceforge.net
|
25
|
+
Size of executable: 18808 bytes
|
26
|
+
Compiled with:
|
27
|
+
CFLAGS += -O3
|
28
|
+
BUFFERSIZE = 16777216
|
29
|
+
|
30
|
+
- base64-1.5 (fourmilab-base64)
|
31
|
+
From http://www.fourmilab.ch/webtools/base64/
|
32
|
+
Size of executable: 20261 bytes
|
33
|
+
Compiled with Default package settings
|
34
|
+
|
35
|
+
- coreutils 7.4-2ubuntu2 (coreutils-base64)
|
36
|
+
From http://www.gnu.org/software/coreutils/
|
37
|
+
Size of executable: 38488 bytes
|
38
|
+
Default binary distributed with Ubuntu 10.4
|
39
|
+
|
40
|
+
-- Input File
|
41
|
+
|
42
|
+
Using blender-2.49b-linux-glibc236-py25-i386.tar.bz2
|
43
|
+
from http://www.blender.org/download/get-blender/
|
44
|
+
Size: 18285329 bytes
|
45
|
+
(approx. 18MB)
|
46
|
+
|
47
|
+
-- Method
|
48
|
+
|
49
|
+
Encode and Decode the Input file 50 times in a loop,
|
50
|
+
using a simple shell script, and get the running time.
|
51
|
+
|
52
|
+
-- Results
|
53
|
+
|
54
|
+
$ time ./benchmark-libb64.sh
|
55
|
+
real 0m28.389s
|
56
|
+
user 0m14.077s
|
57
|
+
sys 0m12.309s
|
58
|
+
|
59
|
+
$ time ./benchmark-fourmilab.sh
|
60
|
+
real 1m43.160s
|
61
|
+
user 1m23.769s
|
62
|
+
sys 0m8.737s
|
63
|
+
|
64
|
+
$ time ./benchmark-coreutils.sh
|
65
|
+
real 0m36.288s
|
66
|
+
user 0m24.746s
|
67
|
+
sys 0m8.181s
|
68
|
+
|
69
|
+
28.389 for 18MB * 50
|
70
|
+
= 28.389 for 900
|
71
|
+
|
72
|
+
-- Conclusion
|
73
|
+
|
74
|
+
libb64 is the fastest encoder/decoder, and
|
75
|
+
has the smallest executable size.
|
76
|
+
|
77
|
+
On average it will encode and decode at roughly 31.7MB/second.
|
78
|
+
|
79
|
+
The closest "competitor" is base64 from GNU coreutils, which
|
80
|
+
reaches only 24.8MB/second.
|
81
|
+
|
82
|
+
--
|
83
|
+
14/06/2010
|
84
|
+
chris.venter@gmail.com
|
85
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
libb64: Base64 Encoding/Decoding Routines
|
2
|
+
======================================
|
3
|
+
|
4
|
+
## Changelog ##
|
5
|
+
|
6
|
+
Version 1.2 Release
|
7
|
+
-------------------
|
8
|
+
Removed the b64dec, b64enc, encoder and decoder programs in favour of
|
9
|
+
a better example, called base64, which encodes and decodes
|
10
|
+
depending on its arguments.
|
11
|
+
|
12
|
+
Created a solution for Microsoft Visual Studio C++ Express 2010
|
13
|
+
edition, which simply builds the base64 example as a console application.
|
14
|
+
|
15
|
+
Version 1.1 Release
|
16
|
+
-------------------
|
17
|
+
Modified encode.h to (correctly) read from the iostream argument,
|
18
|
+
instead of std::cin.
|
19
|
+
Thanks to Peter K. Lee for the heads-up.
|
20
|
+
|
21
|
+
No API changes.
|
22
|
+
|
23
|
+
Version 1.0 Release
|
24
|
+
-------------------
|
25
|
+
The current content is the changeset.
|
data/ext/libb64/INSTALL
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
libb64: Base64 Encoding/Decoding Routines
|
2
|
+
======================================
|
3
|
+
|
4
|
+
Requirements:
|
5
|
+
------------
|
6
|
+
This piece of software has minimal requirements.
|
7
|
+
|
8
|
+
I have tested it on the following systems:
|
9
|
+
|
10
|
+
- a Linux machine, with the following specs:
|
11
|
+
(this was the original development machine)
|
12
|
+
* FedoraCore 4
|
13
|
+
* kernel v. 2.6.11 (stock FC4 kernel)
|
14
|
+
* gcc version 4.0.1 20050727 (Red Hat 4.0.1-5)
|
15
|
+
* glibc-2.3.5-10
|
16
|
+
* make v. 3.80
|
17
|
+
* some arb version of makedepend
|
18
|
+
|
19
|
+
- Windows XP machine
|
20
|
+
* MSYS 1.0
|
21
|
+
* MinGW 5.1.4
|
22
|
+
* gcc version 3.4.5 (mingw-vista special r3)
|
23
|
+
|
24
|
+
- Windows XP machine (same as above)
|
25
|
+
* Microsoft Visual Studio 2010, Version 10.0.30319.1 RTMRel
|
26
|
+
|
27
|
+
Barring any serious screwups on my part, this code should compile and run sweetly
|
28
|
+
under Cygwin and other systems too. If you DO get it running under some weird arch/os setup,
|
29
|
+
send me a mail, please.
|
30
|
+
|
31
|
+
Compiling:
|
32
|
+
---------
|
33
|
+
There is no configure. It would be overkill for something so simple...
|
34
|
+
Run make in the root directory.
|
35
|
+
|
36
|
+
Installing:
|
37
|
+
----------
|
38
|
+
Since the current targets are a standalone executable and a static library
|
39
|
+
(fancy name for archive) with some headers, an install script has not been implemented yet.
|
40
|
+
Simply copy the executable into your path, and use it.
|
41
|
+
|
42
|
+
--
|
43
|
+
peace out
|
44
|
+
Chris
|
data/ext/libb64/LICENSE
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
Copyright-Only Dedication (based on United States law)
|
2
|
+
or Public Domain Certification
|
3
|
+
|
4
|
+
The person or persons who have associated work with this document (the
|
5
|
+
"Dedicator" or "Certifier") hereby either (a) certifies that, to the best of
|
6
|
+
his knowledge, the work of authorship identified is in the public domain of the
|
7
|
+
country from which the work is published, or (b) hereby dedicates whatever
|
8
|
+
copyright the dedicators holds in the work of authorship identified below (the
|
9
|
+
"Work") to the public domain. A certifier, moreover, dedicates any copyright
|
10
|
+
interest he may have in the associated work, and for these purposes, is
|
11
|
+
described as a "dedicator" below.
|
12
|
+
|
13
|
+
A certifier has taken reasonable steps to verify the copyright status of this
|
14
|
+
work. Certifier recognizes that his good faith efforts may not shield him from
|
15
|
+
liability if in fact the work certified is not in the public domain.
|
16
|
+
|
17
|
+
Dedicator makes this dedication for the benefit of the public at large and to
|
18
|
+
the detriment of the Dedicator's heirs and successors. Dedicator intends this
|
19
|
+
dedication to be an overt act of relinquishment in perpetuity of all present
|
20
|
+
and future rights under copyright law, whether vested or contingent, in the
|
21
|
+
Work. Dedicator understands that such relinquishment of all rights includes
|
22
|
+
the relinquishment of all rights to enforce (by lawsuit or otherwise) those
|
23
|
+
copyrights in the Work.
|
24
|
+
|
25
|
+
Dedicator recognizes that, once placed in the public domain, the Work may be
|
26
|
+
freely reproduced, distributed, transmitted, used, modified, built upon, or
|
27
|
+
otherwise exploited by anyone for any purpose, commercial or non-commercial,
|
28
|
+
and in any way, including by methods that have not yet been invented or
|
29
|
+
conceived.
|
data/ext/libb64/Makefile
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
all: all_src all_base64
|
2
|
+
|
3
|
+
all_src:
|
4
|
+
$(MAKE) -C src
|
5
|
+
all_base64: all_src
|
6
|
+
$(MAKE) -C base64
|
7
|
+
|
8
|
+
clean: clean_src clean_base64 clean_include
|
9
|
+
rm -f *~ *.bak
|
10
|
+
|
11
|
+
clean_include:
|
12
|
+
rm -f include/b64/*~
|
13
|
+
|
14
|
+
clean_src:
|
15
|
+
$(MAKE) -C src clean;
|
16
|
+
clean_base64:
|
17
|
+
$(MAKE) -C base64 clean;
|
18
|
+
|
19
|
+
distclean: clean distclean_src distclean_base64
|
20
|
+
|
21
|
+
distclean_src:
|
22
|
+
$(MAKE) -C src distclean;
|
23
|
+
distclean_base64:
|
24
|
+
$(MAKE) -C base64 distclean;
|
25
|
+
|
data/ext/libb64/README
ADDED
@@ -0,0 +1,138 @@
|
|
1
|
+
b64: Base64 Encoding/Decoding Routines
|
2
|
+
======================================
|
3
|
+
|
4
|
+
Overview:
|
5
|
+
--------
|
6
|
+
libb64 is a library of ANSI C routines for fast encoding/decoding data into and
|
7
|
+
from a base64-encoded format. C++ wrappers are included, as well as the source
|
8
|
+
code for standalone encoding and decoding executables.
|
9
|
+
|
10
|
+
base64 consists of ASCII text, and is therefore a useful encoding for storing
|
11
|
+
binary data in a text file, such as xml, or sending binary data over text-only
|
12
|
+
email.
|
13
|
+
|
14
|
+
References:
|
15
|
+
----------
|
16
|
+
* Wikipedia article:
|
17
|
+
http://en.wikipedia.org/wiki/Base64
|
18
|
+
* base64, another implementation of a commandline en/decoder:
|
19
|
+
http://www.fourmilab.ch/webtools/base64/
|
20
|
+
|
21
|
+
Why?
|
22
|
+
---
|
23
|
+
I did this because I need an implementation of base64 encoding and decoding,
|
24
|
+
without any licensing problems. Most OS implementations are released under
|
25
|
+
either the GNU/GPL, or a BSD-variant, which is not what I require.
|
26
|
+
|
27
|
+
Also, the chance to actually use the co-routine implementation in code is rare,
|
28
|
+
and its use here is fitting. I couldn't pass up the chance.
|
29
|
+
For more information on this technique, see "Coroutines in C", by Simon Tatham,
|
30
|
+
which can be found online here:
|
31
|
+
http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html
|
32
|
+
|
33
|
+
So then, under which license do I release this code? On to the next section...
|
34
|
+
|
35
|
+
License:
|
36
|
+
-------
|
37
|
+
This work is released under into the Public Domain.
|
38
|
+
It basically boils down to this: I put this work in the public domain, and you
|
39
|
+
can take it and do whatever you want with it.
|
40
|
+
|
41
|
+
An example of this "license" is the Creative Commons Public Domain License, a
|
42
|
+
copy of which can be found in the LICENSE file, and also online at
|
43
|
+
http://creativecommons.org/licenses/publicdomain/
|
44
|
+
|
45
|
+
Commandline Use:
|
46
|
+
---------------
|
47
|
+
There is a new executable available, it is simply called base64.
|
48
|
+
It can encode and decode files, as instructed by the user.
|
49
|
+
|
50
|
+
To encode a file:
|
51
|
+
$ ./base64 -e filea fileb
|
52
|
+
fileb will now be the base64-encoded version of filea.
|
53
|
+
|
54
|
+
To decode a file:
|
55
|
+
$ ./base64 -d fileb filec
|
56
|
+
filec will now be identical to filea.
|
57
|
+
|
58
|
+
Programming:
|
59
|
+
-----------
|
60
|
+
Some C++ wrappers are provided as well, so you don't have to get your hands
|
61
|
+
dirty. Encoding from standard input to standard output is as simple as
|
62
|
+
|
63
|
+
#include <b64/encode.h>
|
64
|
+
#include <iostream>
|
65
|
+
int main()
|
66
|
+
{
|
67
|
+
base64::encoder E;
|
68
|
+
E.encode(std::cin, std::cout);
|
69
|
+
return 0;
|
70
|
+
}
|
71
|
+
|
72
|
+
Both standalone executables and a static library is provided in the package,
|
73
|
+
|
74
|
+
Implementation:
|
75
|
+
--------------
|
76
|
+
It is DAMN fast, if I may say so myself. The C code uses a little trick which
|
77
|
+
has been used to implement coroutines, of which one can say that this
|
78
|
+
implementation is an example.
|
79
|
+
|
80
|
+
(To see how the libb64 codebase compares with some other BASE64 implementations
|
81
|
+
available, see the BENCHMARKS file)
|
82
|
+
|
83
|
+
The trick involves the fact that a switch-statement may legally cross into
|
84
|
+
sub-blocks. A very thorough and enlightening essay on co-routines in C, using
|
85
|
+
this method, can be found in the above mentioned "Coroutines in C", by Simon
|
86
|
+
Tatham: http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html
|
87
|
+
|
88
|
+
For example, an RLE decompressing routine, adapted from the article:
|
89
|
+
1 static int STATE = 0;
|
90
|
+
2 static int len, c;
|
91
|
+
3 switch (STATE)
|
92
|
+
4 {
|
93
|
+
5 while (1)
|
94
|
+
6 {
|
95
|
+
7 c = getchar();
|
96
|
+
8 if (c == EOF) return EOF;
|
97
|
+
9 if (c == 0xFF) {
|
98
|
+
10 len = getchar();
|
99
|
+
11 c = getchar();
|
100
|
+
12 while (len--)
|
101
|
+
13 {
|
102
|
+
14 STATE = 0;
|
103
|
+
15 return c;
|
104
|
+
16 case 0:
|
105
|
+
17 }
|
106
|
+
18 } else
|
107
|
+
19 STATE = 1;
|
108
|
+
20 return c;
|
109
|
+
21 case 1:
|
110
|
+
22 }
|
111
|
+
23 }
|
112
|
+
24 }
|
113
|
+
|
114
|
+
As can be seen from this example, a coroutine depends on a state variable,
|
115
|
+
which it sets directly before exiting (lines 14 and 119). The next time the
|
116
|
+
routine is entered, the switch moves control to the specific point directly
|
117
|
+
after the previous exit (lines 16 and 21).hands
|
118
|
+
|
119
|
+
(As an aside, in the mentioned article the combination of the top-level switch,
|
120
|
+
the various setting of the state, the return of a value, and the labelling of
|
121
|
+
the exit point is wrapped in #define macros, making the structure of the
|
122
|
+
routine even clearer.)
|
123
|
+
|
124
|
+
The obvious problem with any such routine is the static keyword.
|
125
|
+
Any static variables in a function spell doom for multithreaded applications.
|
126
|
+
Also, in situations where this coroutine is used by more than one other
|
127
|
+
coroutines, the consistency is disturbed.
|
128
|
+
|
129
|
+
What is needed is a structure for storing these variabled, which is passed to
|
130
|
+
the routine seperately. This obviously breaks the modularity of the function,
|
131
|
+
since now the caller has to worry about and care for the internal state of the
|
132
|
+
routine (the callee). This allows for a fast, multithreading-enabled
|
133
|
+
implementation, which may (obviously) be wrapped in a C++ object for ease of
|
134
|
+
use.
|
135
|
+
|
136
|
+
The base64 encoding and decoding functionality in this package is implemented
|
137
|
+
in exactly this way, providing both a high-speed high-maintanence C interface,
|
138
|
+
and a wrapped C++ which is low-maintanence and only slightly less performant.
|