summaryrefslogtreecommitdiffstats
path: root/meta-extras/packages
diff options
context:
space:
mode:
authorRichard Purdie <rpurdie@linux.intel.com>2010-08-27 15:14:24 +0100
committerRichard Purdie <rpurdie@linux.intel.com>2010-08-27 15:29:45 +0100
commit29d6678fd546377459ef75cf54abeef5b969b5cf (patch)
tree8edd65790e37a00d01c3f203f773fe4b5012db18 /meta-extras/packages
parentda49de6885ee1bc424e70bc02f21f6ab920efb55 (diff)
downloadpoky-29d6678fd546377459ef75cf54abeef5b969b5cf.tar.gz
Major layout change to the packages directory
Having one monolithic packages directory makes it hard to find things and is generally overwhelming. This commit splits it into several logical sections roughly based on function, recipes.txt gives more information about the classifications used. The opportunity is also used to switch from "packages" to "recipes" as used in OpenEmbedded as the term "packages" can be confusing to people and has many different meanings. Not all recipes have been classified yet, this is just a first pass at separating things out. Some packages are moved to meta-extras as they're no longer actively used or maintained. Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
Diffstat (limited to 'meta-extras/packages')
-rw-r--r--meta-extras/packages/cx3110x/cx3110x_1.1.bb21
-rw-r--r--meta-extras/packages/cx3110x/cx3110x_2.0.15.bb23
-rw-r--r--meta-extras/packages/cx3110x/files/no-linux-config.patch12
-rw-r--r--meta-extras/packages/helix/helix-libs.bb49
-rw-r--r--meta-extras/packages/helix/helix-libs/add-clutter.patch12668
-rw-r--r--meta-extras/packages/helix/helix-libs/helix-player.pc11
-rw-r--r--meta-extras/packages/helix/helix-libs/hxclient.pc11
-rw-r--r--meta-extras/packages/helix/ribosome.bb43
-rw-r--r--meta-extras/packages/helix/ribosome/buildrc4
-rwxr-xr-xmeta-extras/packages/helix/ribosome/clutter.bif68
-rw-r--r--meta-extras/packages/lirc/files/lirc_sir-sa1100.patch10
-rw-r--r--meta-extras/packages/lirc/files/lircd.conf_nslu21886
-rwxr-xr-xmeta-extras/packages/lirc/files/lircd.init39
-rwxr-xr-xmeta-extras/packages/lirc/files/lircexec.init37
-rwxr-xr-xmeta-extras/packages/lirc/files/lircmd.init38
-rw-r--r--meta-extras/packages/lirc/files/lircrc_nslu2113
-rw-r--r--meta-extras/packages/lirc/files/split-hauppauge.patch141
-rw-r--r--meta-extras/packages/lirc/lirc-config.inc13
-rw-r--r--meta-extras/packages/lirc/lirc-modules_0.8.3.bb33
-rw-r--r--meta-extras/packages/lirc/lirc_0.8.3.bb31
-rw-r--r--meta-extras/packages/llvm/llvm-native/fix_ldflags_export.patch26
-rw-r--r--meta-extras/packages/llvm/llvm-native_svn.bb13
-rw-r--r--meta-extras/packages/maemo/nokia770-init/fixup-770.sh26
-rw-r--r--meta-extras/packages/maemo/nokia770-init_1.0.bb38
-rw-r--r--meta-extras/packages/maemo/xpext/auxdir.patch13
-rw-r--r--meta-extras/packages/maemo/xpext_1.0-5.bb22
-rw-r--r--meta-extras/packages/maemo/xsp_1.0.0-8.bb12
-rwxr-xr-xmeta-extras/packages/osc/osc-native_svn.bb28
-rw-r--r--meta-extras/packages/tasks/task-poky-x11-netbook.bb28
-rw-r--r--meta-extras/packages/yum/createrepo-native/pathfix.patch81
-rw-r--r--meta-extras/packages/yum/createrepo-native_0.9.8.bb17
-rw-r--r--meta-extras/packages/yum/files/98_yum1
-rw-r--r--meta-extras/packages/yum/files/extract-postinst.awk11
-rw-r--r--meta-extras/packages/yum/files/fix18
-rw-r--r--meta-extras/packages/yum/files/hacks.patch81
-rw-r--r--meta-extras/packages/yum/files/paths.patch106
-rw-r--r--meta-extras/packages/yum/files/paths2.patch35
-rwxr-xr-xmeta-extras/packages/yum/files/yum-install-recommends.py39
-rw-r--r--meta-extras/packages/yum/yum_3.2.27.bb46
39 files changed, 15892 insertions, 0 deletions
diff --git a/meta-extras/packages/cx3110x/cx3110x_1.1.bb b/meta-extras/packages/cx3110x/cx3110x_1.1.bb
new file mode 100644
index 0000000000..95bbc35086
--- /dev/null
+++ b/meta-extras/packages/cx3110x/cx3110x_1.1.bb
@@ -0,0 +1,21 @@
1DESCRIPTION = "cx3110x wifi support as found in the Nokia 770/800"
2SECTION = "kernel/modules"
3LICENSE = "GPL"
4PR = "r1"
5PACKAGES = "${PN}"
6
7COMPATIBLE_MACHINE = "(nokia770|nokia800)"
8
9export KERNEL_SRC_DIR = ${STAGING_KERNEL_DIR}
10export LDFLAGS = ""
11
12SRC_URI = "https://garage.maemo.org/frs/download.php/939/cx3110x-1.1.tar.gz"
13
14S = "${WORKDIR}/cx3110x-${PV}"
15
16inherit module
17
18do_compile() {
19 oe_runmake modules
20}
21
diff --git a/meta-extras/packages/cx3110x/cx3110x_2.0.15.bb b/meta-extras/packages/cx3110x/cx3110x_2.0.15.bb
new file mode 100644
index 0000000000..c952b2a94d
--- /dev/null
+++ b/meta-extras/packages/cx3110x/cx3110x_2.0.15.bb
@@ -0,0 +1,23 @@
1DESCRIPTION = "cx3110x wifi support as found in the Nokia 770/N800/N810"
2SECTION = "kernel/modules"
3LICENSE = "GPL"
4PACKAGES = "${PN}"
5PR = "r1"
6
7COMPATIBLE_MACHINE = "(nokia800)"
8
9export KERNEL_SRC_DIR = ${STAGING_KERNEL_DIR}
10export LDFLAGS = ""
11
12DEFAULT_PREFERENCE_nokia770 = "-1"
13
14SRC_URI = "http://repository.maemo.org/pool/os2008/free/source/c/cx3110x-module-src/cx3110x-module-src_2.0.15-1.tar.gz \
15 file://no-linux-config.patch;patch=1"
16
17S = "${WORKDIR}/cx3110x-module-src-${PV}"
18
19inherit module
20
21do_compile() {
22 oe_runmake modules
23}
diff --git a/meta-extras/packages/cx3110x/files/no-linux-config.patch b/meta-extras/packages/cx3110x/files/no-linux-config.patch
new file mode 100644
index 0000000000..e6ab317249
--- /dev/null
+++ b/meta-extras/packages/cx3110x/files/no-linux-config.patch
@@ -0,0 +1,12 @@
1Index: cx3110x-module-src-2.0.15/src/sm_drv_spi.c
2===================================================================
3--- cx3110x-module-src-2.0.15.orig/src/sm_drv_spi.c 2008-02-08 13:52:28.000000000 +0100
4+++ cx3110x-module-src-2.0.15/src/sm_drv_spi.c 2008-02-08 13:52:40.000000000 +0100
5@@ -36,7 +36,6 @@
6 #include <linux/platform_device.h>
7 #include <linux/string.h>
8 #include <linux/firmware.h>
9-#include <linux/config.h>
10 #if !defined(CONFIG_FW_LOADER) && !defined(CONFIG_FW_LOADER_MODULE)
11 #error No Firmware Loading configured in the kernel !
12 #endif
diff --git a/meta-extras/packages/helix/helix-libs.bb b/meta-extras/packages/helix/helix-libs.bb
new file mode 100644
index 0000000000..9fcbd4b67f
--- /dev/null
+++ b/meta-extras/packages/helix/helix-libs.bb
@@ -0,0 +1,49 @@
1DESCRIPTION = "Helix Client Libraries"
2SECTION = "base"
3DEPENDS = "ribosome gtk+ libxv"
4HOMEPAGE = "http://helixcommunity.org"
5LICENSE = "RPSL"
6
7_SNAPSHOT = "atlas310_11212008"
8_TARBALL_SERVER = "http://git.moblin.org/repos/users/rusty"
9
10PV="r0"
11
12SRC_URI = "${_TARBALL_SERVER}/helix-libs_${_SNAPSHOT}.tar.bz2 \
13 file://helix-libs/helix-player.pc \
14 file://helix-libs/add-clutter.patch;patch=1"
15S = "${WORKDIR}/helix-libs_${_SNAPSHOT}"
16
17export BUILD_ROOT=${STAGING_DIR_HOST}${libdir}/ribosome
18export BUILDRC=${BUILD_ROOT}/buildrc
19export SYSTEM_ID=linux-2.2-libc6-gcc32-i586
20export BUILD=$BUILD_ROOT/bin/build.py
21
22COMPATIBLE_HOST = '(i.86.*-linux)'
23
24do_compile() {
25 ${BUILD} -k -trelease -mclutter -Phelix-client-all-defines clutter
26}
27
28do_install() {
29 mkdir -p ${D}/opt/helix/lib
30 mkdir -p ${D}/opt/helix/include
31 mkdir -p ${D}${libdir}/pkgconfig
32
33 install -m 0644 clientapps/clutter/player.h ${D}/opt/helix/include/
34 install -m 0644 ../helix-libs/helix-player.pc ${D}${libdir}/pkgconfig
35
36 install -m 0644 release/*.so ${D}/opt/helix/lib
37
38 install -d ${D}${libdir}
39 install -m 0644 release/libhelix-player.so ${D}${libdir}
40}
41
42sysroot_stage_all_append() {
43 sysroot_stage_dir ${D}/opt/helix ${SYSROOT_DESTDIR}/${STAGING_DIR_TARGET}/helix
44}
45
46FILES_${PN} = "/usr/lib/libhelix-player.so"
47FILES_${PN} += "/opt/helix/lib"
48FILES_${PN}-dev = "/usr/lib/pkgconfig"
49FILES_${PN}-dev += "/opt/helix/include"
diff --git a/meta-extras/packages/helix/helix-libs/add-clutter.patch b/meta-extras/packages/helix/helix-libs/add-clutter.patch
new file mode 100644
index 0000000000..eb545ff73f
--- /dev/null
+++ b/meta-extras/packages/helix/helix-libs/add-clutter.patch
@@ -0,0 +1,12668 @@
1Index: helix-libs/clientapps/clutter/LICENSE.txt
2===================================================================
3--- /dev/null 1970-01-01 00:00:00.000000000 +0000
4+++ helix-libs/clientapps/clutter/LICENSE.txt 2008-10-13 06:05:49.000000000 -0700
5@@ -0,0 +1,30 @@
6+ Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
7+
8+ The contents of this directory, and (except where otherwise
9+ indicated) the directories included within this directory, are
10+ subject to the current version of the RealNetworks Public Source
11+ License (the "RPSL") available at RPSL.txt in this directory, unless
12+ you have licensed the directory under the current version of the
13+ RealNetworks Community Source License (the "RCSL") available at
14+ RCSL.txt in this directory, in which case the RCSL will apply. You
15+ may also obtain the license terms directly from RealNetworks. You
16+ may not use the files in this directory except in compliance with the
17+ RPSL or, if you have a valid RCSL with RealNetworks applicable to
18+ this directory, the RCSL. Please see the applicable RPSL or RCSL for
19+ the rights, obligations and limitations governing use of the contents
20+ of the directory.
21+
22+ This directory is part of the Helix DNA Technology. RealNetworks is
23+ the developer of the Original Code and owns the copyrights in the
24+ portions it created.
25+
26+ This directory, and the directories included with this directory, are
27+ distributed and made available on an 'AS IS' basis, WITHOUT WARRANTY
28+ OF ANY KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY
29+ DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY
30+ WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
31+ QUIET ENJOYMENT OR NON-INFRINGEMENT.
32+
33+ Technology Compatibility Kit Test Suite(s) Location:
34+ http://www.helixcommunity.org/content/tck
35+
36Index: helix-libs/clientapps/clutter/RCSL.txt
37===================================================================
38--- /dev/null 1970-01-01 00:00:00.000000000 +0000
39+++ helix-libs/clientapps/clutter/RCSL.txt 2008-10-13 06:05:49.000000000 -0700
40@@ -0,0 +1,948 @@
41+The RCSL is made up of a base agreement and a few Attachments.
42+
43+For Research and Development use, you agree to the terms of the
44+RCSL R&D License (base RCSL and Attachments A, B, and C)
45+
46+For Commercial Use (either distribution or internal commercial
47+deployment) of the Helix DNA with or without support for RealNetworks'
48+RealAudio and RealVideo Add-on Technology, you agree to the
49+terms of the same RCSL R&D license
50+and execute one or more additional Commercial Use License attachments
51+<see http://www.helixcommunity.org/content/rcsl-attachments>.
52+
53+------------------------------------------------------------------------
54+
55+
56+ REALNETWORKS COMMUNITY SOURCE LICENSE
57+
58+Version 1.2 (Rev. Date: January 22, 2003).
59+
60+
61+ RECITALS
62+
63+Original Contributor has developed Specifications, Source Code
64+implementations and Executables of certain Technology; and
65+
66+Original Contributor desires to license the Technology to a large
67+community to facilitate research, innovation and product development
68+while maintaining compatibility of such products with the Technology as
69+delivered by Original Contributor; and
70+
71+Original Contributor desires to license certain Trademarks for the
72+purpose of branding products that are compatible with the relevant
73+Technology delivered by Original Contributor; and
74+
75+You desire to license the Technology and possibly certain Trademarks
76+from Original Contributor on the terms and conditions specified in this
77+License.
78+
79+In consideration for the mutual covenants contained herein, You and
80+Original Contributor agree as follows:
81+
82+
83+ AGREEMENT
84+
85+*1. Introduction.*
86+
87+The RealNetworks Community Source License ("RCSL") and effective
88+attachments ("License") may include five distinct licenses:
89+
90+i) Research Use license -- License plus Attachments A, B and C only.
91+
92+ii) Commercial Use and Trademark License, which may be for Internal
93+Deployment Use or external distribution, or both -- License plus
94+Attachments A, B, C, and D.
95+
96+iii) Technology Compatibility Kit (TCK) license -- Attachment C.
97+
98+iv) Add-On Technology License (Executable) Commercial Use License
99+-Attachment F.
100+
101+v) Add-On Technology Source Code Porting and Optimization
102+License-Attachment G.
103+
104+The Research Use license is effective when You click and accept this
105+License. The TCK is effective when You click and accept this License,
106+unless otherwise specified in the TCK attachments. The Commercial Use
107+and Trademark, Add-On Technology License, and the Add-On Technology
108+Source Code Porting and Optimization licenses must each be signed by You
109+and Original Contributor to become effective. Once effective, these
110+licenses and the associated requirements and responsibilities are
111+cumulative. Capitalized terms used in this License are defined in the
112+Glossary.
113+
114+*2. License Grants.*
115+
116+2.1 Original Contributor Grant.
117+
118+Subject to Your compliance with Sections 3, 8.10 and Attachment A of
119+this License, Original Contributor grants to You a worldwide,
120+royalty-free, non-exclusive license, to the extent of Original
121+Contributor's Intellectual Property Rights covering the Original Code,
122+Upgraded Code and Specifications, to do the following:
123+
124+(a) Research Use License:
125+
126+(i) use, reproduce and modify the Original Code, Upgraded Code and
127+Specifications to create Modifications and Reformatted Specifications
128+for Research Use by You;
129+
130+(ii) publish and display Original Code, Upgraded Code and Specifications
131+with, or as part of Modifications, as permitted under Section 3.1(b) below;
132+
133+(iii) reproduce and distribute copies of Original Code and Upgraded Code
134+to Licensees and students for Research Use by You;
135+
136+(iv) compile, reproduce and distribute Original Code and Upgraded Code
137+in Executable form, and Reformatted Specifications to anyone for
138+Research Use by You.
139+
140+(b) Other than the licenses expressly granted in this License, Original
141+Contributor retains all right, title, and interest in Original Code and
142+Upgraded Code and Specifications.
143+
144+2.2 Your Grants.
145+
146+(a) To Other Licensees. You hereby grant to each Licensee a license to
147+Your Error Corrections and Shared Modifications, of the same scope and
148+extent as Original Contributor's licenses under Section 2.1 a) above
149+relative to Research Use and Attachment D relative to Commercial Use.
150+
151+(b) To Original Contributor. You hereby grant to Original Contributor a
152+worldwide, royalty-free, non-exclusive, perpetual and irrevocable
153+license, to the extent of Your Intellectual Property Rights covering
154+Your Error Corrections, Shared Modifications and Reformatted
155+Specifications, to use, reproduce, modify, display and distribute Your
156+Error Corrections, Shared Modifications and Reformatted Specifications,
157+in any form, including the right to sublicense such rights through
158+multiple tiers of distribution.
159+
160+(c) Other than the licenses expressly granted in Sections 2.2(a) and (b)
161+above, and the restrictions set forth in Section 3.1(d)(iv) below, You
162+retain all right, title, and interest in Your Error Corrections, Shared
163+Modifications and Reformatted Specifications.
164+
165+2.3 Contributor Modifications.
166+
167+You may use, reproduce, modify, display and distribute Contributor Error
168+Corrections, Shared Modifications and Reformatted Specifications,
169+obtained by You under this License, to the same scope and extent as with
170+Original Code, Upgraded Code and Specifications.
171+
172+2.4 Subcontracting.
173+
174+You may deliver the Source Code of Covered Code to other Licensees
175+having at least a Research Use license, for the sole purpose of
176+furnishing development services to You in connection with Your rights
177+granted in this License. All such Licensees must execute appropriate
178+documents with respect to such work consistent with the terms of this
179+License, and acknowledging their work-made-for-hire status or assigning
180+exclusive right to the work product and associated Intellectual Property
181+Rights to You.
182+
183+*3. Requirements and Responsibilities*.
184+
185+3.1 Research Use License.
186+
187+As a condition of exercising the rights granted under Section 2.1(a)
188+above, You agree to comply with the following:
189+
190+(a) Your Contribution to the Community. All Error Corrections and Shared
191+Modifications which You create or contribute to are automatically
192+subject to the licenses granted under Section 2.2 above. You are
193+encouraged to license all of Your other Modifications under Section 2.2
194+as Shared Modifications, but are not required to do so. You agree to
195+notify Original Contributor of any errors in the Specification.
196+
197+(b) Source Code Availability. You agree to provide all Your Error
198+Corrections to Original Contributor as soon as reasonably practicable
199+and, in any event, prior to Internal Deployment Use or Commercial Use,
200+if applicable. Original Contributor may, at its discretion, post Source
201+Code for Your Error Corrections and Shared Modifications on the
202+Community Webserver. You may also post Error Corrections and Shared
203+Modifications on a web-server of Your choice; provided, that You must
204+take reasonable precautions to ensure that only Licensees have access to
205+such Error Corrections and Shared Modifications. Such precautions shall
206+include, without limitation, a password protection scheme limited to
207+Licensees and a click-on, download certification of Licensee status
208+required of those attempting to download from the server. An example of
209+an acceptable certification is attached as Attachment A-2.
210+
211+(c) Notices. All Error Corrections and Shared Modifications You create
212+or contribute to must include a file documenting the additions and
213+changes You made and the date of such additions and changes. You must
214+also include the notice set forth in Attachment A-1 in the file header.
215+If it is not possible to put the notice in a particular Source Code file
216+due to its structure, then You must include the notice in a location
217+(such as a relevant directory file), where a recipient would be most
218+likely to look for such a notice.
219+
220+(d) Redistribution.
221+
222+(i) Source. Covered Code may be distributed in Source Code form only to
223+another Licensee (except for students as provided below). You may not
224+offer or impose any terms on any Covered Code that alter the rights,
225+requirements, or responsibilities of such Licensee. You may distribute
226+Covered Code to students for use in connection with their course work
227+and research projects undertaken at accredited educational institutions.
228+Such students need not be Licensees, but must be given a copy of the
229+notice set forth in Attachment A-3 and such notice must also be included
230+in a file header or prominent location in the Source Code made available
231+to such students.
232+
233+(ii) Executable. You may distribute Executable version(s) of Covered
234+Code to Licensees and other third parties only for the purpose of
235+evaluation and comment in connection with Research Use by You and under
236+a license of Your choice, but which limits use of such Executable
237+version(s) of Covered Code only to that purpose.
238+
239+(iii) Modified Class, Interface and Package Naming. In connection with
240+Research Use by You only, You may use Original Contributor's class,
241+Interface and package names only to accurately reference or invoke the
242+Source Code files You modify. Original Contributor grants to You a
243+limited license to the extent necessary for such purposes.
244+
245+(iv) You expressly agree that any distribution, in whole or in part, of
246+Modifications developed by You shall only be done pursuant to the terms
247+and conditions of this License.
248+
249+(e) Extensions.
250+
251+(i) Covered Code. You may not include any Source Code of Community Code
252+in any Extensions. You may include the compiled Header Files of
253+Community Code in an Extension provided that Your use of the Covered
254+Code, including Heading Files, complies with the Commercial Use License,
255+the TCK and all other terms of this License.
256+
257+(ii) Publication. No later than the date on which You first distribute
258+such Extension for Commercial Use, You must publish to the industry, on
259+a non-confidential basis and free of all copyright restrictions with
260+respect to reproduction and use, an accurate and current specification
261+for any Extension. In addition, You must make available an appropriate
262+test suite, pursuant to the same rights as the specification,
263+sufficiently detailed to allow any third party reasonably skilled in the
264+technology to produce implementations of the Extension compatible with
265+the specification. Such test suites must be made available as soon as
266+reasonably practicable but, in no event, later than ninety (90) days
267+after Your first Commercial Use of the Extension. You must use
268+reasonable efforts to promptly clarify and correct the specification and
269+the test suite upon written request by Original Contributor.
270+
271+(iii) Open. You agree to refrain from enforcing any Intellectual
272+Property Rights You may have covering any interface(s) of Your
273+Extension, which would prevent the implementation of such interface(s)
274+by Original Contributor or any Licensee. This obligation does not
275+prevent You from enforcing any Intellectual Property Right You have that
276+would otherwise be infringed by an implementation of Your Extension.
277+
278+(iv) Interface Modifications and Naming. You may not modify or add to
279+the GUID space * * "xxxxxxxx-0901-11d1-8B06-00A024406D59" or any other
280+GUID space designated by Original Contributor. You may not modify any
281+Interface prefix provided with the Covered Code or any other prefix
282+designated by Original Contributor.* *
283+
284+* *
285+
286+(f) You agree that any Specifications provided to You by Original
287+Contributor are confidential and proprietary information of Original
288+Contributor. You must maintain the confidentiality of the Specifications
289+and may not disclose them to any third party without Original
290+Contributor's prior written consent. You may only use the Specifications
291+under the terms of this License and only for the purpose of implementing
292+the terms of this License with respect to Covered Code. You agree not
293+use, copy or distribute any such Specifications except as provided in
294+writing by Original Contributor.
295+
296+3.2 Commercial Use License.
297+
298+You may not make Commercial Use of any Covered Code unless You and
299+Original Contributor have executed a copy of the Commercial Use and
300+Trademark License attached as Attachment D.
301+
302+*4. Versions of the License.*
303+
304+4.1 License Versions.
305+
306+Original Contributor may publish revised versions of the License from
307+time to time. Each version will be given a distinguishing version number.
308+
309+4.2 Effect.
310+
311+Once a particular version of Covered Code has been provided under a
312+version of the License, You may always continue to use such Covered Code
313+under the terms of that version of the License. You may also choose to
314+use such Covered Code under the terms of any subsequent version of the
315+License. No one other than Original Contributor has the right to
316+promulgate License versions.
317+
318+4.3 Multiple-Licensed Code.
319+
320+Original Contributor may designate portions of the Covered Code as
321+"Multiple-Licensed." "Multiple-Licensed" means that the Original
322+Contributor permits You to utilize those designated portions of the
323+Covered Code under Your choice of this License or the alternative
324+license(s), if any, specified by the Original Contributor in an
325+Attachment to this License.
326+
327+*5. Disclaimer of Warranty.*
328+
329+5.1 COVERED CODE PROVIDED AS IS.
330+
331+COVERED CODE IS PROVIDED UNDER THIS LICENSE "AS IS," WITHOUT WARRANTY OF
332+ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION,
333+WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT
334+FOR A PARTICULAR PURPOSE OR NON-INFRINGING. YOU AGREE TO BEAR THE ENTIRE
335+RISK IN CONNECTION WITH YOUR USE AND DISTRIBUTION OF COVERED CODE UNDER
336+THIS LICENSE. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART
337+OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER
338+EXCEPT SUBJECT TO THIS DISCLAIMER.
339+
340+5.2 Not Designed for High Risk Activities.
341+
342+You acknowledge that Original Code, Upgraded Code and Specifications are
343+not designed or intended for use in high risk activities including, but
344+not limited to: (i) on-line control of aircraft, air traffic, aircraft
345+navigation or aircraft communications; or (ii) in the design,
346+construction, operation or maintenance of any nuclear facility. Original
347+Contributor disclaims any express or implied warranty of fitness for
348+such uses.
349+
350+*6. Termination.*
351+
352+6.1 By You.
353+
354+You may terminate this Research Use license at anytime by providing
355+written notice to Original Contributor.
356+
357+6.2 By Original Contributor.
358+
359+This License and the rights granted hereunder will terminate:
360+
361+(i) automatically if You fail to comply with the terms of this License
362+and fail to cure such breach within 30 days of receipt of written notice
363+of the breach;
364+
365+(ii) immediately in the event of circumstances specified in Sections 7.1
366+and 8.4; or
367+
368+(iii) at Original Contributor's discretion upon any action initiated by
369+You (including by cross-claim or counter claim) alleging that use or
370+distribution by Original Contributor or any Licensee, of Original Code,
371+Upgraded Code, Error Corrections, Shared Modifications or Specifications
372+infringe a patent owned or controlled by You.
373+
374+6.3 Effective of Termination.
375+
376+Upon termination, You agree to discontinue use of and destroy all copies
377+of Covered Code in Your possession. All sublicenses to the Covered Code
378+which You have properly granted shall survive any termination of this
379+License. Provisions that, by their nature, should remain in effect
380+beyond the termination of this License shall survive including, without
381+limitation, Sections 2.2, 3, 5, 7 and 8.
382+
383+6.4 No Compensation.
384+
385+Each party waives and releases the other from any claim to compensation
386+or indemnity for permitted or lawful termination of the business
387+relationship established by this License.
388+
389+*7. Liability.*
390+
391+7.1 Infringement. Should any of the Original Code, Upgraded Code, TCK or
392+Specifications ("Materials") become the subject of a claim of
393+infringement, Original Contributor may, at its sole option, (i) attempt
394+to procure the rights necessary for You to continue using the Materials,
395+(ii) modify the Materials so that they are no longer infringing, or
396+(iii) terminate Your right to use the Materials, immediately upon
397+written notice, and refund to You the amount, if any, having then
398+actually been paid by You to Original Contributor for the Original Code,
399+Upgraded Code and TCK, depreciated on a straight line, five year basis.
400+
401+7.2 LIMITATION OF LIABILITY. TO THE FULL EXTENT ALLOWED BY APPLICABLE
402+LAW, ORIGINAL CONTRIBUTOR'S LIABILITY TO YOU FOR CLAIMS RELATING TO THIS
403+LICENSE, WHETHER FOR BREACH OR IN TORT, SHALL BE LIMITED TO ONE HUNDRED
404+PERCENT (100%) OF THE AMOUNT HAVING THEN ACTUALLY BEEN PAID BY YOU TO
405+ORIGINAL CONTRIBUTOR FOR ALL COPIES LICENSED HEREUNDER OF THE PARTICULAR
406+ITEMS GIVING RISE TO SUCH CLAIM, IF ANY, DURING THE TWELVE MONTHS
407+PRECEDING THE CLAIMED BREACH. IN NO EVENT WILL YOU (RELATIVE TO YOUR
408+SHARED MODIFICATIONS OR ERROR CORRECTIONS) OR ORIGINAL CONTRIBUTOR BE
409+LIABLE FOR ANY INDIRECT, PUNITIVE, SPECIAL, INCIDENTAL OR CONSEQUENTIAL
410+DAMAGES IN CONNECTION WITH OR RISING OUT OF THIS LICENSE (INCLUDING,
411+WITHOUT LIMITATION, LOSS OF PROFITS, USE, DATA, OR OTHER ECONOMIC
412+ADVANTAGE), HOWEVER IT ARISES AND ON ANY THEORY OF LIABILITY, WHETHER IN
413+AN ACTION FOR CONTRACT, STRICT LIABILITY OR TORT (INCLUDING NEGLIGENCE)
414+OR OTHERWISE, WHETHER OR NOT YOU OR ORIGINAL CONTRIBUTOR HAS BEEN
415+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE AND NOTWITHSTANDING THE
416+FAILURE OF ESSENTIAL PURPOSE OF ANY REMEDY.
417+
418+*8. Miscellaneous.*
419+
420+8.1 Trademark.
421+
422+You shall not use any Trademark unless You and Original Contributor
423+execute a copy of the Commercial Use and Trademark License Agreement
424+attached hereto as Attachment D. Except as expressly provided in the
425+License, You are granted no right, title or license to, or interest in,
426+any Trademarks. Whether or not You and Original Contributor enter into
427+the Trademark License, You agree not to (i) challenge Original
428+Contributor's ownership or use of Trademarks; (ii) attempt to register
429+any Trademarks, or any mark or logo substantially similar thereto; or
430+(iii) incorporate any Trademarks into Your own trademarks, product
431+names, service marks, company names, or domain names.
432+
433+8.2 Integration.
434+
435+This License represents the complete agreement concerning the subject
436+matter hereof.
437+
438+8.3 Assignment.
439+
440+Original Contributor may assign this License, and its rights and
441+obligations hereunder, in its sole discretion. You may assign the
442+Research Use portions of this License and the TCK license to a third
443+party upon prior written notice to Original Contributor (which may be
444+provided electronically via the Community Web-Server). You may not
445+assign the Commercial Use and Trademark license, the Add-On Technology
446+License, or the Add-On Technology Source Code Porting License, including
447+by way of merger (regardless of whether You are the surviving entity) or
448+acquisition, without Original Contributor's prior written consent.
449+
450+8.4 Severability.
451+
452+If any provision of this License is held to be unenforceable, such
453+provision shall be reformed only to the extent necessary to make it
454+enforceable. Notwithstanding the foregoing, if You are prohibited by law
455+from fully and specifically complying with Sections 2.2 or 3, this
456+License will immediately terminate and You must immediately discontinue
457+any use of Covered Code.
458+
459+8.5 Governing Law.
460+
461+This License shall be governed by the laws of the United States and the
462+State of Washington, as applied to contracts entered into and to be
463+performed in Washington between Washington residents. The application of
464+the United Nations Convention on Contracts for the International Sale of
465+Goods is expressly excluded. You agree that the state and federal courts
466+located in Seattle, Washington have exclusive jurisdiction over any
467+claim relating to the License, including contract and tort claims.
468+
469+8.6 Dispute Resolution.
470+
471+a) Arbitration. Any dispute arising out of or relating to this License
472+shall be finally settled by arbitration as set out herein, except that
473+either party may bring any action, in a court of competent jurisdiction
474+(which jurisdiction shall be exclusive), with respect to any dispute
475+relating to such party's Intellectual Property Rights or with respect to
476+Your compliance with the TCK license. Arbitration shall be administered:
477+(i) by the American Arbitration Association (AAA), (ii) in accordance
478+with the rules of the United Nations Commission on International Trade
479+Law (UNCITRAL) (the "Rules") in effect at the time of arbitration as
480+modified herein; and (iii) the arbitrator will apply the substantive
481+laws of Washington and the United States. Judgment upon the award
482+rendered by the arbitrator may be entered in any court having
483+jurisdiction to enforce such award.
484+
485+b) Arbitration language, venue and damages. All arbitration proceedings
486+shall be conducted in English by a single arbitrator selected in
487+accordance with the Rules, who must be fluent in English and be either a
488+retired judge or practicing attorney having at least ten (10) years
489+litigation experience and be reasonably familiar with the technology
490+matters relative to the dispute. Unless otherwise agreed, arbitration
491+venue shall be in Seattle, Washington. The arbitrator may award monetary
492+damages only and nothing shall preclude either party from seeking
493+provisional or emergency relief from a court of competent jurisdiction.
494+The arbitrator shall have no authority to award damages in excess of
495+those permitted in this License and any such award in excess is void.
496+All awards will be payable in U.S. dollars and may include, for the
497+prevailing party (i) pre-judgment award interest, (ii) reasonable
498+attorneys' fees incurred in connection with the arbitration, and (iii)
499+reasonable costs and expenses incurred in enforcing the award. The
500+arbitrator will order each party to produce identified documents and
501+respond to no more than twenty-five single question interrogatories.
502+
503+8.7 Construction.
504+
505+Any law or regulation, which provides that the language of a contract
506+shall be construed against the drafter, shall not apply to this License.
507+
508+8.8 U.S. Government End Users.
509+
510+The Covered Code is a "commercial item," as that term is defined in 48
511+C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software"
512+and "commercial computer software documentation," as such terms are used
513+in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and
514+48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government
515+End Users acquire Covered Code with only those rights set forth herein.
516+You agree to pass this notice to our licensees.
517+
518+8.9 Marketing Activities.
519+
520+Licensee hereby grants Original Contributor a non-exclusive,
521+non-transferable, limited license to use the Licensee's company name and
522+logo ("Licensee Marks") in any presentations, press releases, or
523+marketing materials solely for the purpose of identifying Licensee as a
524+member of the Helix Community. Licensee shall provide samples of
525+Licensee Marks to Original Contributor upon request by Original
526+Contributor. Original Contributor acknowledges that the Licensee Marks
527+are the trademarks of Licensee. Original Contributor shall not use the
528+Licensee Marks in a way that may imply that Original Contributor is an
529+agency or branch of Licensee. Original Contributor understands and
530+agrees that the use of any Licensee Marks in connection with this
531+Agreement shall not create any right, title or interest, in, or to the
532+Licensee Marks or any Licensee trademarks and that all such use and
533+goodwill associated with any such trademarks will inure to the benefit
534+of Licensee. Further the Original Contributor will stop usage of the
535+Licensee Marks upon Licensee's request.
536+
537+8.10 Press Announcements.
538+
539+You may make press announcements or other public statements regarding
540+this License without the prior written consent of the Original
541+Contributor, if Your statement is limited to announcing the licensing of
542+the Covered Code or the availability of Your Product and its
543+compatibility with the Covered Code. All other public announcements
544+regarding this license require the prior written consent of the Original
545+Contributor. Consent requests are welcome at press@helixcommunity.org.
546+
547+8.11 International Use.
548+
549+a) Export/Import laws. Covered Code is subject to U.S. export control
550+laws and may be subject to export or import regulations in other
551+countries. Each party agrees to comply strictly with all such laws and
552+regulations and acknowledges their responsibility to obtain such
553+licenses to export, re-export, or import as may be required. You agree
554+to pass these obligations to Your licensees.
555+
556+b) Intellectual Property Protection. Due to limited intellectual
557+property protection and enforcement in certain countries, You agree not
558+to redistribute the Original Code, Upgraded Code, TCK and Specifications
559+to any country on the list of restricted countries on the Community Web
560+Server.
561+
562+8.12 Language.
563+
564+This License is in the English language only, which language shall be
565+controlling in all respects, and all versions of this License in any
566+other language shall be for accommodation only and shall not be binding
567+on the parties to this License. All communications and notices made or
568+given pursuant to this License, and all documentation and support to be
569+provided, unless otherwise noted, shall be in the English language.
570+
571+PLEASE READ THE TERMS OF THIS LICENSE CAREFULLY. BY CLICKING ON THE
572+"ACCEPT" BUTTON BELOW YOU ARE ACCEPTING AND AGREEING TO THE TERMS AND
573+CONDITIONS OF THIS LICENSE WITH REALNETWORKS, INC. IF YOU ARE AGREEING
574+TO THIS LICENSE ON BEHALF OF A COMPANY, YOU REPRESENT THAT YOU ARE
575+AUTHORIZED TO BIND THE COMPANY TO SUCH A LICENSE. WHETHER YOU ARE ACTING
576+ON YOUR OWN BEHALF, OR REPRESENTING A COMPANY, YOU MUST BE OF MAJORITY
577+AGE AND BE OTHERWISE COMPETENT TO ENTER INTO CONTRACTS. IF YOU DO NOT
578+MEET THIS CRITERIA OR YOU DO NOT AGREE TO ANY OF THE TERMS AND
579+CONDITIONS OF THIS LICENSE, CLICK ON THE REJECT BUTTON TO EXIT.
580+
581+
582+ GLOSSARY
583+
584+1. *"Added Value"* means code which:
585+
586+(i) has a principal purpose which is substantially different from that
587+of the stand-alone Technology;
588+
589+(ii) represents a significant functional and value enhancement to the
590+Technology;
591+
592+(iii) operates in conjunction with the Technology; and
593+
594+(iv) is not marketed as a technology which replaces or substitutes for
595+the Technology
596+
597+2. "*Applicable Patent Rights*" mean: (a) in the case where Original
598+Contributor is the grantor of rights, claims of patents that (i) are now
599+or hereafter acquired, owned by or assigned to Original Contributor and
600+(ii) are necessarily infringed by using or making the Original Code or
601+Upgraded Code, including Modifications provided by Original Contributor,
602+alone and not in combination with other software or hardware; and (b) in
603+the case where Licensee is the grantor of rights, claims of patents that
604+(i) are now or hereafter acquired, owned by or assigned to Licensee and
605+(ii) are infringed (directly or indirectly) by using or making
606+Licensee's Modifications or Error Corrections, taken alone or in
607+combination with Covered Code.
608+
609+3. "*Application Programming Interfaces (APIs)"* means the interfaces,
610+associated header files, service provider interfaces, and protocols that
611+enable a device, application, Operating System, or other program to
612+obtain services from or make requests of (or provide services in
613+response to requests from) other programs, and to use, benefit from, or
614+rely on the resources, facilities, and capabilities of the relevant
615+programs using the APIs. APIs includes the technical documentation
616+describing the APIs, the Source Code constituting the API, and any
617+Header Files used with the APIs.
618+
619+4. "*Commercial Use*" means any use (internal or external), copying,
620+sublicensing or distribution (internal or external), directly or
621+indirectly of Covered Code by You other than Your Research Use of
622+Covered Code within Your business or organization or in conjunction with
623+other Licensees with equivalent Research Use rights. Commercial Use
624+includes any use of the Covered Code for direct or indirect commercial
625+or strategic gain, advantage or other business purpose. Any Commercial
626+Use requires execution of Attachment D by You and Original Contributor.
627+
628+5. "*Community Code*" means the Original Code, Upgraded Code, Error
629+Corrections, Shared Modifications, or any combination thereof.
630+
631+6. "*Community Webserver(s)"* means the webservers designated by
632+Original Contributor for access to the Original Code, Upgraded Code, TCK
633+and Specifications and for posting Error Corrections and Shared
634+Modifications.
635+
636+7. "*Compliant Covered Code*" means Covered Code that complies with the
637+requirements of the TCK.
638+
639+8. "*Contributor*" means each Licensee that creates or contributes to
640+the creation of any Error Correction or Shared Modification.
641+
642+9. "*Covered Code*" means the Original Code, Upgraded Code,
643+Modifications, or any combination thereof.
644+
645+10. "*Error Correction*" means any change made to Community Code which
646+conforms to the Specification and corrects the adverse effect of a
647+failure of Community Code to perform any function set forth in or
648+required by the Specifications.
649+
650+11. "*Executable*" means Covered Code that has been converted from
651+Source Code to the preferred form for execution by a computer or digital
652+processor (e.g. binary form).
653+
654+12. "*Extension(s)"* means any additional Interfaces developed by or for
655+You which: (i) are designed for use with the Technology; (ii) constitute
656+an API for a library of computing functions or services; and (iii) are
657+disclosed or otherwise made available to third party software developers
658+for the purpose of developing software which invokes such additional
659+Interfaces. The foregoing shall not apply to software developed by Your
660+subcontractors to be exclusively used by You.
661+
662+13. "*Header File(s)"* means that portion of the Source Code that
663+provides the names and types of member functions, data members, class
664+definitions, and interface definitions necessary to implement the APIs
665+for the Covered Code. Header Files include, files specifically
666+designated by Original Contributor as Header Files. Header Files do not
667+include the code necessary to implement the functionality underlying the
668+Interface.
669+
670+14. *"Helix DNA Server Technology"* means the program(s) that implement
671+the Helix Universal Server streaming engine for the Technology as
672+defined in the Specification.
673+
674+15. *"Helix DNA Client Technology"* means the Covered Code that
675+implements the RealOne Player engine as defined in the Specification.
676+
677+16. *"Helix DNA Producer Technology"* means the Covered Code that
678+implements the Helix Producer engine as defined in the Specification.
679+
680+17. *"Helix DNA Technology"* means the Helix DNA Server Technology, the
681+Helix DNA Client Technology, the Helix DNA Producer Technology and other
682+Helix technologies designated by Original Contributor.
683+
684+18. "*Intellectual Property Rights*" means worldwide statutory and
685+common law rights associated solely with (i) Applicable Patent Rights;
686+(ii) works of authorship including copyrights, copyright applications,
687+copyright registrations and "moral rights"; (iii) the protection of
688+trade and industrial secrets and confidential information; and (iv)
689+divisions, continuations, renewals, and re-issuances of the foregoing
690+now existing or acquired in the future.
691+
692+19. *"Interface*" means interfaces, functions, properties, class
693+definitions, APIs, Header Files, GUIDs, V-Tables, and/or protocols
694+allowing one piece of software, firmware or hardware to communicate or
695+interoperate with another piece of software, firmware or hardware.
696+
697+20. "*Internal Deployment Use*" means use of Compliant Covered Code
698+(excluding Research Use) within Your business or organization only by
699+Your employees and/or agents on behalf of Your business or organization,
700+but not to provide services, including content distribution, to third
701+parties, subject to execution of Attachment D by You and Original
702+Contributor, if required.
703+
704+21. "*Licensee*" means any party that has entered into and has in effect
705+a version of this License with Original Contributor.
706+
707+22. "*MIME type*" means a description of what type of media or other
708+content is in a file, including by way of example but not limited to
709+'audio/x-pn-realaudio-plugin.'
710+
711+23. "*Modification(s)"* means (i) any addition to, deletion from and/or
712+change to the substance and/or structure of the Covered Code, including
713+Interfaces; (ii) the combination of any Covered Code and any previous
714+Modifications; (iii) any new file or other representation of computer
715+program statements that contains any portion of Covered Code; and/or
716+(iv) any new Source Code implementing any portion of the Specifications.
717+
718+24. "*MP3 Patents*" means any patents necessary to make, use or sell
719+technology implementing any portion of the specification developed by
720+the Moving Picture Experts Group known as MPEG-1 Audio Layer-3 or MP3,
721+including but not limited to all past and future versions, profiles,
722+extensions, parts and amendments relating to the MP3 specification.
723+
724+25. "*MPEG-4 Patents*" means any patents necessary to make, use or sell
725+technology implementing any portion of the specification developed by
726+the Moving Pictures Experts Group known as MPEG-4, including but not
727+limited to all past and future versions, profiles, extensions, parts and
728+amendments relating to the MPEG-4 specification.
729+
730+26. "*Original Code*" means the initial Source Code for the Technology
731+as described on the Community Web Server.
732+
733+27. "*Original Contributor*" means RealNetworks, Inc., its affiliates
734+and its successors and assigns.
735+
736+28. "*Original Contributor MIME Type*" means the MIME registry, browser
737+preferences, or local file/protocol associations invoking any Helix DNA
738+Client-based application, including the RealOne Player, for playback of
739+RealAudio, RealVideo, other RealMedia MIME types or datatypes (e.g.,
740+.ram, .rnx, .rpm, .ra, .rm, .rp, .rt, .rf, .prx, .mpe, .rmp, .rmj, .rav,
741+.rjs, .rmx, .rjt, .rms), and any other Original Contributor-specific or
742+proprietary MIME types that Original Contributor may introduce in the
743+future.
744+
745+29. "*Personal Use*" means use of Covered Code by an individual solely
746+for his or her personal, private and non-commercial purposes. An
747+individual's use of Covered Code in his or her capacity as an officer,
748+employee, member, independent contractor or agent of a corporation,
749+business or organization (commercial or non-commercial) does not qualify
750+as Personal Use.
751+
752+30. "*RealMedia File Format*" means the file format designed and
753+developed by RealNetworks for storing multimedia data and used to store
754+RealAudio and RealVideo encoded streams. Valid RealMedia File Format
755+extensions include: .rm, .rmj, .rmc, .rmvb, .rms.
756+
757+31. "*RCSL Webpage*" means the RealNetworks Community Source License
758+webpage located at https://www.helixcommunity.org/content/rcsl or such
759+other URL that Original Contributor may designate from time to time.
760+
761+32. "*Reformatted Specifications*" means any revision to the
762+Specifications which translates or reformats the Specifications (as for
763+example in connection with Your documentation) but which does not alter,
764+subset or superset * *the functional or operational aspects of the
765+Specifications.
766+
767+33. "*Research Use*" means use and distribution of Covered Code only for
768+Your Personal Use, research or development use and expressly excludes
769+Internal Deployment Use and Commercial Use. Research Use also includes
770+use of Covered Code to teach individuals how to use Covered Code.
771+
772+34. "*Shared Modifications*" means Modifications that You distribute or
773+use for a Commercial Use, in addition to any Modifications provided by
774+You, at Your option, pursuant to Section 2.2, or received by You from a
775+Contributor pursuant to Section 2.3.
776+
777+35. "*Source Code*" means the preferred form of the Covered Code for
778+making modifications to it, including all modules it contains, plus any
779+associated interface definition files, scripts used to control
780+compilation and installation of an Executable, or source code
781+differential comparisons against either the Original Code or another
782+well known, available Covered Code of the Contributor's choice. The
783+Source Code can be in a compressed or archival form, provided the
784+appropriate decompression or de-archiving software is widely available
785+for no charge.
786+
787+36. "*Specifications*" means the specifications for the Technology and
788+other documentation, as designated on the Community Web Server, as may
789+be revised by Original Contributor from time to time.
790+
791+37. "*Trademarks*" means Original Contributor's trademarks and logos,
792+including, but not limited to, RealNetworks, RealAudio, RealVideo,
793+RealOne, RealSystem, SureStream, Helix, Helix DNA and other trademarks
794+whether now used or adopted in the future.
795+
796+38. "*Technology*" means the technology described in Attachment B, and
797+Upgrades.
798+
799+39. "*Technology Compatibility Kit"* or *"TCK*" means the test programs,
800+procedures, acceptance criteria and/or other requirements, designated by
801+Original Contributor for use in verifying compliance of Covered Code
802+with the Specifications, in conjunction with the Original Code and
803+Upgraded Code. Original Contributor may, in its sole discretion and from
804+time to time, revise a TCK to correct errors and/or omissions and in
805+connection with Upgrades.
806+
807+40. "*Upgrade(s)"* means new versions of Technology designated
808+exclusively by Original Contributor as an "Upgrade" and released by
809+Original Contributor from time to time under the terms of the License.
810+
811+41. "*Upgraded Code*" means the Source Code and/or Executables for
812+Upgrades, possibly including Modifications made by Contributors.
813+
814+42. *"User's Guide"* means the users guide for the TCK which Original
815+Contributor makes available to You to provide direction in how to run
816+the TCK and properly interpret the results, as may be revised by
817+Original Contributor from time to time.
818+
819+43. "*You(r)*" means an individual, or a legal entity acting by and
820+through an individual or individuals, exercising rights either under
821+this License or under a future version of this License issued pursuant
822+to Section 4.1. For legal entities, "You(r)" includes any entity that by
823+majority voting interest controls, is controlled by, or is under common
824+control with You.
825+
826+44. "*Your Products*" means any (i) hardware products You distribute
827+integrating the Covered Code; (ii) any software products You distribute
828+with the Covered Code that utilize the APIs of the Covered Code; or
829+(iii) any services You provide using the Covered Code.
830+
831+
832+ ATTACHMENT A
833+
834+REQUIRED NOTICES
835+
836+
837+ ATTACHMENT A-1
838+
839+REQUIRED IN ALL CASES
840+
841+Notice to be included in header file of all Error Corrections and Shared
842+Modifications:
843+
844+Portions Copyright 1994-2003 © RealNetworks, Inc. All rights reserved.
845+
846+The contents of this file, and the files included with this file, are
847+subject to the current version of RealNetworks Community Source License
848+Version 1.1 (the "License"). You may not use this file except in
849+compliance with the License executed by both You and RealNetworks. You
850+may obtain a copy of the License at *
851+https://www.helixcommunity.org/content/rcsl.* You may also obtain a copy
852+of the License by contacting RealNetworks directly. Please see the
853+License for the rights, obligations and limitations governing use of the
854+contents of the file.
855+
856+This file is part of the Helix DNA technology. RealNetworks, Inc., is
857+the developer of the Original code and owns the copyrights in the
858+portions it created.
859+
860+This file, and the files included with this file, are distributed on an
861+'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
862+AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT
863+LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
864+PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
865+
866+Contributor(s):
867+
868+_______________________________________________
869+
870+Technology Compatibility Kit Test Suite(s) Location:
871+
872+________________________________
873+
874+
875+ ATTACHMENT A-2
876+
877+SAMPLE LICENSEE CERTIFICATION
878+
879+"By clicking the `Agree' button below, You certify that You are a
880+Licensee in good standing under the RealNetworks Community Source
881+License, ("License") and that Your access, use and distribution of code
882+and information You may obtain at this site is subject to the License.
883+If You are not a Licensee under the RealNetworks Community Source
884+License You agree not to download, copy or use the Helix DNA technology.
885+
886+
887+ ATTACHMENT A-3
888+
889+REQUIRED STUDENT NOTIFICATION
890+
891+"This software and related documentation has been obtained by Your
892+educational institution subject to the RealNetworks Community Source
893+License. You have been provided access to the software and related
894+documentation for use only in connection with your course work and
895+research activities as a matriculated student of Your educational
896+institution. Any other use is expressly prohibited.
897+
898+THIS SOFTWARE AND RELATED DOCUMENTATION CONTAINS PROPRIETARY MATERIAL OF
899+REALNETWORKS, INC, WHICH ARE PROTECTED BY VARIOUS INTELLECTUAL PROPERTY
900+RIGHTS.
901+
902+You may not use this file except in compliance with the License. You may
903+obtain a copy of the License on the web at
904+https://www.helixcommunity.org/content/rcsl.
905+
906+*
907+*
908+
909+
910+ ATTACHMENT B
911+
912+Description of Technology
913+
914+Helix DNA, which consists of Helix DNA Client, Helix DNA Server and
915+Helix DNA Producer.
916+
917+Description of "Technology"
918+
919+Helix DNA Technology v1.0 as described on the Community Web Server.
920+
921+
922+ ATTACHMENT C
923+
924+TECHNOLOGY COMPATIBILITY KIT LICENSE
925+
926+The following license is effective for the *Helix DNA* Technology
927+Compatibility Kit - as described on the Community Web Server. The
928+Technology Compatibility Kit(s) for the Technology specified in
929+Attachment B may be accessed at the Community Web Server.
930+
931+1. TCK License.
932+
933+1.1 Grants to use TCK
934+
935+Subject to the terms and restrictions set forth below and the
936+RealNetworks Community Source License, and the Research Use license,
937+Original Contributor grants to You a worldwide, non-exclusive,
938+non-transferable license, to the extent of Original Contributor's
939+Intellectual Property Rights in the TCK (without the right to
940+sublicense), to use the TCK to develop and test Covered Code.
941+
942+1.2 TCK Use Restrictions.
943+
944+You are not authorized to create derivative works of the TCK or use the
945+TCK to test any implementation of the Specification that is not Covered
946+Code. You may not publish Your test results or make claims of
947+comparative compatibility with respect to other implementations of the
948+Specification. In consideration for the license grant in Section 1.1
949+above You agree not to develop Your own tests that are intended to
950+validate conformation with the Specification.
951+
952+2. Test Results.
953+
954+You agree to provide to Original Contributor or the third party test
955+facility if applicable, Your test results that demonstrate that Covered
956+Code is Compliant Covered Code and that Original Contributor may publish
957+or otherwise distribute such test results.
958+
959+PLEASE READ THE TERMS OF THIS LICENSE CAREFULLY. BY CLICKING ON THE
960+"ACCEPT" BUTTON BELOW YOU ARE ACCEPTING AND AGREEING TO THE TERMS AND
961+CONDITIONS OF THIS LICENSE WITH THE ORIGINAL CONTRIBUTOR, REALNETWORKS,
962+INC. IF YOU ARE AGREEING TO THIS LICENSE ON BEHALF OF A COMPANY, YOU
963+REPRESENT THAT YOU ARE AUTHORIZED TO BIND THE COMPANY TO SUCH A LICENSE.
964+WHETHER YOU ARE ACTING ON YOUR OWN BEHALF, OR REPRESENTING A COMPANY,
965+YOU MUST BE OF MAJORITY AGE AND BE OTHERWISE COMPETENT TO ENTER INTO
966+CONTRACTS. IF YOU DO NOT MEET THIS CRITERIA OR YOU DO NOT AGREE TO ANY
967+OF THE TERMS AND CONDITIONS OF THIS LICENSE, CLICK ON THE REJECT BUTTON
968+TO EXIT.
969+
970+*ACCEPT / REJECT
971+*
972+
973+*
974+*
975+
976+*To agree to the R&D/academic terms of this license, please register
977+<https://www.helixcommunity.org/2002/intro/why-register> on the site --
978+you will then be given a chance to agree to the clickwrap RCSL
979+<https://reguseronly.helixcommunity.org/2002/clickwrap/rcsl-clickwrap>
980+R&D License
981+<https://reguseronly.helixcommunity.org/2002/clickwrap/rcsl-clickwrap>
982+and gain access to the RCSL-licensed source code. To build or deploy
983+commercial applications based on the RCSL, you will need to agree to the
984+Commercial Use license attachments
985+<https://www.helixcommunity.org/content/rcsl-attachments>*
986+
987+
988+
989Index: helix-libs/clientapps/clutter/RPSL.txt
990===================================================================
991--- /dev/null 1970-01-01 00:00:00.000000000 +0000
992+++ helix-libs/clientapps/clutter/RPSL.txt 2008-10-13 06:05:49.000000000 -0700
993@@ -0,0 +1,518 @@
994+RealNetworks Public Source License Version 1.0
995+(Rev. Date October 28, 2002)
996+
997+1. General Definitions. This License applies to any program or other work which
998+RealNetworks, Inc., or any other entity that elects to use this license,
999+("Licensor") makes publicly available and which contains a notice placed by
1000+Licensor identifying such program or work as "Original Code" and stating that it
1001+is subject to the terms of this RealNetworks Public Source License version 1.0
1002+(or subsequent version thereof) ("License"). You are not required to accept this
1003+License. However, nothing else grants You permission to use, copy, modify or
1004+distribute the software or its derivative works. These actions are prohibited by
1005+law if You do not accept this License. Therefore, by modifying, copying or
1006+distributing the software (or any work based on the software), You indicate your
1007+acceptance of this License to do so, and all its terms and conditions. In
1008+addition, you agree to the terms of this License by clicking the Accept button
1009+or downloading the software. As used in this License:
1010+
1011+1.1 "Applicable Patent Rights" mean: (a) in the case where Licensor is the
1012+grantor of rights, claims of patents that (i) are now or hereafter acquired,
1013+owned by or assigned to Licensor and (ii) are necessarily infringed by using or
1014+making the Original Code alone and not in combination with other software or
1015+hardware; and (b) in the case where You are the grantor of rights, claims of
1016+patents that (i) are now or hereafter acquired, owned by or assigned to You and
1017+(ii) are infringed (directly or indirectly) by using or making Your
1018+Modifications, taken alone or in combination with Original Code.
1019+
1020+1.2 "Compatible Source License" means any one of the licenses listed on Exhibit
1021+B or at https://www.helixcommunity.org/content/complicense or other licenses
1022+specifically identified by Licensor in writing. Notwithstanding any term to the
1023+contrary in any Compatible Source License, any code covered by any Compatible
1024+Source License that is used with Covered Code must be made readily available in
1025+Source Code format for royalty-free use under the terms of the Compatible Source
1026+License or this License.
1027+
1028+1.3 "Contributor" means any person or entity that creates or contributes to the
1029+creation of Modifications.
1030+
1031+1.4 "Covered Code" means the Original Code, Modifications, the combination of
1032+Original Code and any Modifications, and/or any respective portions thereof.
1033+
1034+1.5 "Deploy" means to use, sublicense or distribute Covered Code other than for
1035+Your internal research and development (R&D) and/or Personal Use, and includes
1036+without limitation, any and all internal use or distribution of Covered Code
1037+within Your business or organization except for R&D use and/or Personal Use, as
1038+well as direct or indirect sublicensing or distribution of Covered Code by You
1039+to any third party in any form or manner.
1040+
1041+1.6 "Derivative Work" means either the Covered Code or any derivative work under
1042+United States copyright law, and including any work containing or including any
1043+portion of the Covered Code or Modifications, either verbatim or with
1044+modifications and/or translated into another language. Derivative Work also
1045+includes any work which combines any portion of Covered Code or Modifications
1046+with code not otherwise governed by the terms of this License.
1047+
1048+1.7 "Externally Deploy" means to Deploy the Covered Code in any way that may be
1049+accessed or used by anyone other than You, used to provide any services to
1050+anyone other than You, or used in any way to deliver any content to anyone other
1051+than You, whether the Covered Code is distributed to those parties, made
1052+available as an application intended for use over a computer network, or used to
1053+provide services or otherwise deliver content to anyone other than You.
1054+
1055+1.8. "Interface" means interfaces, functions, properties, class definitions,
1056+APIs, header files, GUIDs, V-Tables, and/or protocols allowing one piece of
1057+software, firmware or hardware to communicate or interoperate with another piece
1058+of software, firmware or hardware.
1059+
1060+1.9 "Modifications" mean any addition to, deletion from, and/or change to, the
1061+substance and/or structure of the Original Code, any previous Modifications, the
1062+combination of Original Code and any previous Modifications, and/or any
1063+respective portions thereof. When code is released as a series of files, a
1064+Modification is: (a) any addition to or deletion from the contents of a file
1065+containing Covered Code; and/or (b) any new file or other representation of
1066+computer program statements that contains any part of Covered Code.
1067+
1068+1.10 "Original Code" means (a) the Source Code of a program or other work as
1069+originally made available by Licensor under this License, including the Source
1070+Code of any updates or upgrades to such programs or works made available by
1071+Licensor under this License, and that has been expressly identified by Licensor
1072+as such in the header file(s) of such work; and (b) the object code compiled
1073+from such Source Code and originally made available by Licensor under this
1074+License.
1075+
1076+1.11 "Personal Use" means use of Covered Code by an individual solely for his or
1077+her personal, private and non-commercial purposes. An individual's use of
1078+Covered Code in his or her capacity as an officer, employee, member, independent
1079+contractor or agent of a corporation, business or organization (commercial or
1080+non-commercial) does not qualify as Personal Use.
1081+
1082+1.12 "Source Code" means the human readable form of a program or other work that
1083+is suitable for making modifications to it, including all modules it contains,
1084+plus any associated interface definition files, scripts used to control
1085+compilation and installation of an executable (object code).
1086+
1087+1.13 "You" or "Your" means an individual or a legal entity exercising rights
1088+under this License. For legal entities, "You" or "Your" includes any entity
1089+which controls, is controlled by, or is under common control with, You, where
1090+"control" means (a) the power, direct or indirect, to cause the direction or
1091+management of such entity, whether by contract or otherwise, or (b) ownership of
1092+fifty percent (50%) or more of the outstanding shares or beneficial ownership of
1093+such entity.
1094+
1095+2. Permitted Uses; Conditions & Restrictions. Subject to the terms and
1096+conditions of this License, Licensor hereby grants You, effective on the date
1097+You accept this License (via downloading or using Covered Code or otherwise
1098+indicating your acceptance of this License), a worldwide, royalty-free,
1099+non-exclusive copyright license, to the extent of Licensor's copyrights cover
1100+the Original Code, to do the following:
1101+
1102+2.1 You may reproduce, display, perform, modify and Deploy Covered Code,
1103+provided that in each instance:
1104+
1105+(a) You must retain and reproduce in all copies of Original Code the copyright
1106+and other proprietary notices and disclaimers of Licensor as they appear in the
1107+Original Code, and keep intact all notices in the Original Code that refer to
1108+this License;
1109+
1110+(b) You must include a copy of this License with every copy of Source Code of
1111+Covered Code and documentation You distribute, and You may not offer or impose
1112+any terms on such Source Code that alter or restrict this License or the
1113+recipients' rights hereunder, except as permitted under Section 6;
1114+
1115+(c) You must duplicate, to the extent it does not already exist, the notice in
1116+Exhibit A in each file of the Source Code of all Your Modifications, and cause
1117+the modified files to carry prominent notices stating that You changed the files
1118+and the date of any change;
1119+
1120+(d) You must make Source Code of all Your Externally Deployed Modifications
1121+publicly available under the terms of this License, including the license grants
1122+set forth in Section 3 below, for as long as you Deploy the Covered Code or
1123+twelve (12) months from the date of initial Deployment, whichever is longer. You
1124+should preferably distribute the Source Code of Your Deployed Modifications
1125+electronically (e.g. download from a web site); and
1126+
1127+(e) if You Deploy Covered Code in object code, executable form only, You must
1128+include a prominent notice, in the code itself as well as in related
1129+documentation, stating that Source Code of the Covered Code is available under
1130+the terms of this License with information on how and where to obtain such
1131+Source Code. You must also include the Object Code Notice set forth in Exhibit A
1132+in the "about" box or other appropriate place where other copyright notices are
1133+placed, including any packaging materials.
1134+
1135+2.2 You expressly acknowledge and agree that although Licensor and each
1136+Contributor grants the licenses to their respective portions of the Covered Code
1137+set forth herein, no assurances are provided by Licensor or any Contributor that
1138+the Covered Code does not infringe the patent or other intellectual property
1139+rights of any other entity. Licensor and each Contributor disclaim any liability
1140+to You for claims brought by any other entity based on infringement of
1141+intellectual property rights or otherwise. As a condition to exercising the
1142+rights and licenses granted hereunder, You hereby assume sole responsibility to
1143+secure any other intellectual property rights needed, if any. For example, if a
1144+third party patent license is required to allow You to make, use, sell, import
1145+or offer for sale the Covered Code, it is Your responsibility to acquire such
1146+license(s).
1147+
1148+2.3 Subject to the terms and conditions of this License, Licensor hereby grants
1149+You, effective on the date You accept this License (via downloading or using
1150+Covered Code or otherwise indicating your acceptance of this License), a
1151+worldwide, royalty-free, perpetual, non-exclusive patent license under
1152+Licensor's Applicable Patent Rights to make, use, sell, offer for sale and
1153+import the Covered Code, provided that in each instance you comply with the
1154+terms of this License.
1155+
1156+3. Your Grants. In consideration of, and as a condition to, the licenses granted
1157+to You under this License:
1158+
1159+(a) You grant to Licensor and all third parties a non-exclusive, perpetual,
1160+irrevocable, royalty free license under Your Applicable Patent Rights and other
1161+intellectual property rights owned or controlled by You, to make, sell, offer
1162+for sale, use, import, reproduce, display, perform, modify, distribute and
1163+Deploy Your Modifications of the same scope and extent as Licensor's licenses
1164+under Sections 2.1 and 2.2; and
1165+
1166+(b) You grant to Licensor and its subsidiaries a non-exclusive, worldwide,
1167+royalty-free, perpetual and irrevocable license, under Your Applicable Patent
1168+Rights and other intellectual property rights owned or controlled by You, to
1169+make, use, sell, offer for sale, import, reproduce, display, perform,
1170+distribute, modify or have modified (for Licensor and/or its subsidiaries),
1171+sublicense and distribute Your Modifications, in any form and for any purpose,
1172+through multiple tiers of distribution.
1173+
1174+(c) You agree not use any information derived from Your use and review of the
1175+Covered Code, including but not limited to any algorithms or inventions that may
1176+be contained in the Covered Code, for the purpose of asserting any of Your
1177+patent rights, or assisting a third party to assert any of its patent rights,
1178+against Licensor or any Contributor.
1179+
1180+4. Derivative Works. You may create a Derivative Work by combining Covered Code
1181+with other code not otherwise governed by the terms of this License and
1182+distribute the Derivative Work as an integrated product. In each such instance,
1183+You must make sure the requirements of this License are fulfilled for the
1184+Covered Code or any portion thereof, including all Modifications.
1185+
1186+4.1 You must cause any Derivative Work that you distribute, publish or
1187+Externally Deploy, that in whole or in part contains or is derived from the
1188+Covered Code or any part thereof, to be licensed as a whole at no charge to all
1189+third parties under the terms of this License and no other license except as
1190+provided in Section 4.2. You also must make Source Code available for the
1191+Derivative Work under the same terms as Modifications, described in Sections 2
1192+and 3, above.
1193+
1194+4.2 Compatible Source Licenses. Software modules that have been independently
1195+developed without any use of Covered Code and which contain no portion of the
1196+Covered Code, Modifications or other Derivative Works, but are used or combined
1197+in any way wtih the Covered Code or any Derivative Work to form a larger
1198+Derivative Work, are exempt from the conditions described in Section 4.1 but
1199+only to the extent that: the software module, including any software that is
1200+linked to, integrated with, or part of the same applications as, the software
1201+module by any method must be wholly subject to one of the Compatible Source
1202+Licenses. Notwithstanding the foregoing, all Covered Code must be subject to the
1203+terms of this License. Thus, the entire Derivative Work must be licensed under a
1204+combination of the RPSL (for Covered Code) and a Compatible Source License for
1205+any independently developed software modules within the Derivative Work. The
1206+foregoing requirement applies even if the Compatible Source License would
1207+ordinarily allow the software module to link with, or form larger works with,
1208+other software that is not subject to the Compatible Source License. For
1209+example, although the Mozilla Public License v1.1 allows Mozilla code to be
1210+combined with proprietary software that is not subject to the MPL, if
1211+MPL-licensed code is used with Covered Code the MPL-licensed code could not be
1212+combined or linked with any code not governed by the MPL. The general intent of
1213+this section 4.2 is to enable use of Covered Code with applications that are
1214+wholly subject to an acceptable open source license. You are responsible for
1215+determining whether your use of software with Covered Code is allowed under Your
1216+license to such software.
1217+
1218+4.3 Mere aggregation of another work not based on the Covered Code with the
1219+Covered Code (or with a work based on the Covered Code) on a volume of a storage
1220+or distribution medium does not bring the other work under the scope of this
1221+License. If You deliver the Covered Code for combination and/or integration with
1222+an application previously provided by You (for example, via automatic updating
1223+technology), such combination and/or integration constitutes a Derivative Work
1224+subject to the terms of this License.
1225+
1226+5. Exclusions From License Grant. Nothing in this License shall be deemed to
1227+grant any rights to trademarks, copyrights, patents, trade secrets or any other
1228+intellectual property of Licensor or any Contributor except as expressly stated
1229+herein. No right is granted to the trademarks of Licensor or any Contributor
1230+even if such marks are included in the Covered Code. Nothing in this License
1231+shall be interpreted to prohibit Licensor from licensing under different terms
1232+from this License any code that Licensor otherwise would have a right to
1233+license. Modifications, Derivative Works and/or any use or combination of
1234+Covered Code with other technology provided by Licensor or third parties may
1235+require additional patent licenses from Licensor which Licensor may grant in its
1236+sole discretion. No patent license is granted separate from the Original Code or
1237+combinations of the Original Code with other software or hardware.
1238+
1239+5.1. Trademarks. This License does not grant any rights to use the trademarks or
1240+trade names owned by Licensor ("Licensor Marks" defined in Exhibit C) or to any
1241+trademark or trade name belonging to any Contributor. No Licensor Marks may be
1242+used to endorse or promote products derived from the Original Code other than as
1243+permitted by the Licensor Trademark Policy defined in Exhibit C.
1244+
1245+6. Additional Terms. You may choose to offer, and to charge a fee for, warranty,
1246+support, indemnity or liability obligations and/or other rights consistent with
1247+the scope of the license granted herein ("Additional Terms") to one or more
1248+recipients of Covered Code. However, You may do so only on Your own behalf and
1249+as Your sole responsibility, and not on behalf of Licensor or any Contributor.
1250+You must obtain the recipient's agreement that any such Additional Terms are
1251+offered by You alone, and You hereby agree to indemnify, defend and hold
1252+Licensor and every Contributor harmless for any liability incurred by or claims
1253+asserted against Licensor or such Contributor by reason of any such Additional
1254+Terms.
1255+
1256+7. Versions of the License. Licensor may publish revised and/or new versions of
1257+this License from time to time. Each version will be given a distinguishing
1258+version number. Once Original Code has been published under a particular version
1259+of this License, You may continue to use it under the terms of that version. You
1260+may also choose to use such Original Code under the terms of any subsequent
1261+version of this License published by Licensor. No one other than Licensor has
1262+the right to modify the terms applicable to Covered Code created under this
1263+License.
1264+
1265+8. NO WARRANTY OR SUPPORT. The Covered Code may contain in whole or in part
1266+pre-release, untested, or not fully tested works. The Covered Code may contain
1267+errors that could cause failures or loss of data, and may be incomplete or
1268+contain inaccuracies. You expressly acknowledge and agree that use of the
1269+Covered Code, or any portion thereof, is at Your sole and entire risk. THE
1270+COVERED CODE IS PROVIDED "AS IS" AND WITHOUT WARRANTY, UPGRADES OR SUPPORT OF
1271+ANY KIND AND LICENSOR AND LICENSOR'S LICENSOR(S) (COLLECTIVELY REFERRED TO AS
1272+"LICENSOR" FOR THE PURPOSES OF SECTIONS 8 AND 9) AND ALL CONTRIBUTORS EXPRESSLY
1273+DISCLAIM ALL WARRANTIES AND/OR CONDITIONS, EXPRESS OR IMPLIED, INCLUDING, BUT
1274+NOT LIMITED TO, THE IMPLIED WARRANTIES AND/OR CONDITIONS OF MERCHANTABILITY, OF
1275+SATISFACTORY QUALITY, OF FITNESS FOR A PARTICULAR PURPOSE, OF ACCURACY, OF QUIET
1276+ENJOYMENT, AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. LICENSOR AND EACH
1277+CONTRIBUTOR DOES NOT WARRANT AGAINST INTERFERENCE WITH YOUR ENJOYMENT OF THE
1278+COVERED CODE, THAT THE FUNCTIONS CONTAINED IN THE COVERED CODE WILL MEET YOUR
1279+REQUIREMENTS, THAT THE OPERATION OF THE COVERED CODE WILL BE UNINTERRUPTED OR
1280+ERROR-FREE, OR THAT DEFECTS IN THE COVERED CODE WILL BE CORRECTED. NO ORAL OR
1281+WRITTEN DOCUMENTATION, INFORMATION OR ADVICE GIVEN BY LICENSOR, A LICENSOR
1282+AUTHORIZED REPRESENTATIVE OR ANY CONTRIBUTOR SHALL CREATE A WARRANTY. You
1283+acknowledge that the Covered Code is not intended for use in high risk
1284+activities, including, but not limited to, the design, construction, operation
1285+or maintenance of nuclear facilities, aircraft navigation, aircraft
1286+communication systems, or air traffic control machines in which case the failure
1287+of the Covered Code could lead to death, personal injury, or severe physical or
1288+environmental damage. Licensor disclaims any express or implied warranty of
1289+fitness for such uses.
1290+
1291+9. LIMITATION OF LIABILITY. TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT
1292+SHALL LICENSOR OR ANY CONTRIBUTOR BE LIABLE FOR ANY INCIDENTAL, SPECIAL,
1293+INDIRECT OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR RELATING TO THIS LICENSE OR
1294+YOUR USE OR INABILITY TO USE THE COVERED CODE, OR ANY PORTION THEREOF, WHETHER
1295+UNDER A THEORY OF CONTRACT, WARRANTY, TORT (INCLUDING NEGLIGENCE OR STRICT
1296+LIABILITY), PRODUCTS LIABILITY OR OTHERWISE, EVEN IF LICENSOR OR SUCH
1297+CONTRIBUTOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES AND
1298+NOTWITHSTANDING THE FAILURE OF ESSENTIAL PURPOSE OF ANY REMEDY. SOME
1299+JURISDICTIONS DO NOT ALLOW THE LIMITATION OF LIABILITY OF INCIDENTAL OR
1300+CONSEQUENTIAL DAMAGES, SO THIS LIMITATION MAY NOT APPLY TO YOU. In no event
1301+shall Licensor's total liability to You for all damages (other than as may be
1302+required by applicable law) under this License exceed the amount of ten dollars
1303+($10.00).
1304+
1305+10. Ownership. Subject to the licenses granted under this License, each
1306+Contributor retains all rights, title and interest in and to any Modifications
1307+made by such Contributor. Licensor retains all rights, title and interest in and
1308+to the Original Code and any Modifications made by or on behalf of Licensor
1309+("Licensor Modifications"), and such Licensor Modifications will not be
1310+automatically subject to this License. Licensor may, at its sole discretion,
1311+choose to license such Licensor Modifications under this License, or on
1312+different terms from those contained in this License or may choose not to
1313+license them at all.
1314+
1315+11. Termination.
1316+
1317+11.1 Term and Termination. The term of this License is perpetual unless
1318+terminated as provided below. This License and the rights granted hereunder will
1319+terminate:
1320+
1321+(a) automatically without notice from Licensor if You fail to comply with any
1322+term(s) of this License and fail to cure such breach within 30 days of becoming
1323+aware of such breach;
1324+
1325+(b) immediately in the event of the circumstances described in Section 12.5(b);
1326+or
1327+
1328+(c) automatically without notice from Licensor if You, at any time during the
1329+term of this License, commence an action for patent infringement against
1330+Licensor (including by cross-claim or counter claim in a lawsuit);
1331+
1332+(d) upon written notice from Licensor if You, at any time during the term of
1333+this License, commence an action for patent infringement against any third party
1334+alleging that the Covered Code itself (excluding combinations with other
1335+software or hardware) infringes any patent (including by cross-claim or counter
1336+claim in a lawsuit).
1337+
1338+11.2 Effect of Termination. Upon termination, You agree to immediately stop any
1339+further use, reproduction, modification, sublicensing and distribution of the
1340+Covered Code and to destroy all copies of the Covered Code that are in your
1341+possession or control. All sublicenses to the Covered Code which have been
1342+properly granted prior to termination shall survive any termination of this
1343+License. Provisions which, by their nature, should remain in effect beyond the
1344+termination of this License shall survive, including but not limited to Sections
1345+3, 5, 8, 9, 10, 11, 12.2 and 13. No party will be liable to any other for
1346+compensation, indemnity or damages of any sort solely as a result of terminating
1347+this License in accordance with its terms, and termination of this License will
1348+be without prejudice to any other right or remedy of any party.
1349+
1350+12. Miscellaneous.
1351+
1352+12.1 Government End Users. The Covered Code is a "commercial item" as defined in
1353+FAR 2.101. Government software and technical data rights in the Covered Code
1354+include only those rights customarily provided to the public as defined in this
1355+License. This customary commercial license in technical data and software is
1356+provided in accordance with FAR 12.211 (Technical Data) and 12.212 (Computer
1357+Software) and, for Department of Defense purchases, DFAR 252.227-7015 (Technical
1358+Data -- Commercial Items) and 227.7202-3 (Rights in Commercial Computer Software
1359+or Computer Software Documentation). Accordingly, all U.S. Government End Users
1360+acquire Covered Code with only those rights set forth herein.
1361+
1362+12.2 Relationship of Parties. This License will not be construed as creating an
1363+agency, partnership, joint venture or any other form of legal association
1364+between or among You, Licensor or any Contributor, and You will not represent to
1365+the contrary, whether expressly, by implication, appearance or otherwise.
1366+
1367+12.3 Independent Development. Nothing in this License will impair Licensor's
1368+right to acquire, license, develop, have others develop for it, market and/or
1369+distribute technology or products that perform the same or similar functions as,
1370+or otherwise compete with, Modifications, Derivative Works, technology or
1371+products that You may develop, produce, market or distribute.
1372+
1373+12.4 Waiver; Construction. Failure by Licensor or any Contributor to enforce any
1374+provision of this License will not be deemed a waiver of future enforcement of
1375+that or any other provision. Any law or regulation which provides that the
1376+language of a contract shall be construed against the drafter will not apply to
1377+this License.
1378+
1379+12.5 Severability. (a) If for any reason a court of competent jurisdiction finds
1380+any provision of this License, or portion thereof, to be unenforceable, that
1381+provision of the License will be enforced to the maximum extent permissible so
1382+as to effect the economic benefits and intent of the parties, and the remainder
1383+of this License will continue in full force and effect. (b) Notwithstanding the
1384+foregoing, if applicable law prohibits or restricts You from fully and/or
1385+specifically complying with Sections 2 and/or 3 or prevents the enforceability
1386+of either of those Sections, this License will immediately terminate and You
1387+must immediately discontinue any use of the Covered Code and destroy all copies
1388+of it that are in your possession or control.
1389+
1390+12.6 Dispute Resolution. Any litigation or other dispute resolution between You
1391+and Licensor relating to this License shall take place in the Seattle,
1392+Washington, and You and Licensor hereby consent to the personal jurisdiction of,
1393+and venue in, the state and federal courts within that District with respect to
1394+this License. The application of the United Nations Convention on Contracts for
1395+the International Sale of Goods is expressly excluded.
1396+
1397+12.7 Export/Import Laws. This software is subject to all export and import laws
1398+and restrictions and regulations of the country in which you receive the Covered
1399+Code and You are solely responsible for ensuring that You do not export,
1400+re-export or import the Covered Code or any direct product thereof in violation
1401+of any such restrictions, laws or regulations, or without all necessary
1402+authorizations.
1403+
1404+12.8 Entire Agreement; Governing Law. This License constitutes the entire
1405+agreement between the parties with respect to the subject matter hereof. This
1406+License shall be governed by the laws of the United States and the State of
1407+Washington.
1408+
1409+Where You are located in the province of Quebec, Canada, the following clause
1410+applies: The parties hereby confirm that they have requested that this License
1411+and all related documents be drafted in English. Les parties ont exig&eacute;
1412+que le pr&eacute;sent contrat et tous les documents connexes soient
1413+r&eacute;dig&eacute;s en anglais.
1414+
1415+ EXHIBIT A.
1416+
1417+"Copyright &copy; 1995-2002
1418+RealNetworks, Inc. and/or its licensors. All Rights Reserved.
1419+
1420+The contents of this file, and the files included with this file, are subject to
1421+the current version of the RealNetworks Public Source License Version 1.0 (the
1422+"RPSL") available at https://www.helixcommunity.org/content/rpsl unless you have
1423+licensed the file under the RealNetworks Community Source License Version 1.0
1424+(the "RCSL") available at https://www.helixcommunity.org/content/rcsl, in which
1425+case the RCSL will apply. You may also obtain the license terms directly from
1426+RealNetworks. You may not use this file except in compliance with the RPSL or,
1427+if you have a valid RCSL with RealNetworks applicable to this file, the RCSL.
1428+Please see the applicable RPSL or RCSL for the rights, obligations and
1429+limitations governing use of the contents of the file.
1430+
1431+This file is part of the Helix DNA Technology. RealNetworks is the developer of
1432+the Original code and owns the copyrights in the portions it created.
1433+
1434+This file, and the files included with this file, is distributed and made
1435+available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR
1436+IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING
1437+WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
1438+PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
1439+
1440+Contributor(s): ____________________________________
1441+
1442+Technology Compatibility Kit Test
1443+Suite(s) Location (if licensed under the RCSL): ______________________________
1444+
1445+Object Code Notice: Helix DNA Client technology included. Copyright (c)
1446+RealNetworks, Inc., 1995-2002. All rights reserved.
1447+
1448+
1449+ EXHIBIT B
1450+
1451+Compatible Source Licenses for the RealNetworks Public Source License. The
1452+following list applies to the most recent version of the license as of October
1453+25, 2002, unless otherwise indicated.
1454+
1455+* Academic Free License
1456+* Apache Software License
1457+* Apple Public Source License
1458+* Artistic license
1459+* Attribution Assurance Licenses
1460+* BSD license
1461+* Common Public License (1)
1462+* Eiffel Forum License
1463+* GNU General Public License (GPL) (1)
1464+* GNU Library or "Lesser" General Public License (LGPL) (1)
1465+* IBM Public License
1466+* Intel Open Source License
1467+* Jabber Open Source License
1468+* MIT license
1469+* MITRE Collaborative Virtual Workspace License (CVW License)
1470+* Motosoto License
1471+* Mozilla Public License 1.0 (MPL)
1472+* Mozilla Public License 1.1 (MPL)
1473+* Nokia Open Source License
1474+* Open Group Test Suite License
1475+* Python Software Foundation License
1476+* Ricoh Source Code Public License
1477+* Sun Industry Standards Source License (SISSL)
1478+* Sun Public License
1479+* University of Illinois/NCSA Open Source License
1480+* Vovida Software License v. 1.0
1481+* W3C License
1482+* X.Net License
1483+* Zope Public License
1484+* zlib/libpng license
1485+
1486+(1) Note: because this license contains certain reciprocal licensing terms that
1487+purport to extend to independently developed code, You may be prohibited under
1488+the terms of this otherwise compatible license from using code licensed under
1489+its terms with Covered Code because Covered Code may only be licensed under the
1490+RealNetworks Public Source License. Any attempt to apply non RPSL license terms,
1491+including without limitation the GPL, to Covered Code is expressly forbidden.
1492+You are responsible for ensuring that Your use of Compatible Source Licensed
1493+code does not violate either the RPSL or the Compatible Source License.
1494+
1495+The latest version of this list can be found at:
1496+https://www.helixcommunity.org/content/complicense
1497+
1498+ EXHIBIT C
1499+
1500+RealNetworks' Trademark policy.
1501+
1502+RealNetworks defines the following trademarks collectively as "Licensor
1503+Trademarks": "RealNetworks", "RealPlayer", "RealJukebox", "RealSystem",
1504+"RealAudio", "RealVideo", "RealOne Player", "RealMedia", "Helix" or any other
1505+trademarks or trade names belonging to RealNetworks.
1506+
1507+RealNetworks "Licensor Trademark Policy" forbids any use of Licensor Trademarks
1508+except as permitted by and in strict compliance at all times with RealNetworks'
1509+third party trademark usage guidelines which are posted at
1510+http://www.realnetworks.com/info/helixlogo.html.
1511+
1512Index: helix-libs/clientapps/clutter/Umakefil
1513===================================================================
1514--- /dev/null 1970-01-01 00:00:00.000000000 +0000
1515+++ helix-libs/clientapps/clutter/Umakefil 2008-10-13 06:05:49.000000000 -0700
1516@@ -0,0 +1,325 @@
1517+#
1518+# ***** BEGIN LICENSE BLOCK *****
1519+# Version: RCSL 1.0/RPSL 1.0
1520+#
1521+# Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
1522+#
1523+# The contents of this file, and the files included with this file, are
1524+# subject to the current version of the RealNetworks Public Source License
1525+# Version 1.0 (the "RPSL") available at
1526+# http://www.helixcommunity.org/content/rpsl unless you have licensed
1527+# the file under the RealNetworks Community Source License Version 1.0
1528+# (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
1529+# in which case the RCSL will apply. You may also obtain the license terms
1530+# directly from RealNetworks. You may not use this file except in
1531+# compliance with the RPSL or, if you have a valid RCSL with RealNetworks
1532+# applicable to this file, the RCSL. Please see the applicable RPSL or
1533+# RCSL for the rights, obligations and limitations governing use of the
1534+# contents of the file.
1535+#
1536+# This file is part of the Helix DNA Technology. RealNetworks is the
1537+# developer of the Original Code and owns the copyrights in the portions
1538+# it created.
1539+#
1540+# This file, and the files included with this file, is distributed and made
1541+# available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
1542+# EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
1543+# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
1544+# FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
1545+#
1546+# Technology Compatibility Kit Test Suite(s) Location:
1547+# http://www.helixcommunity.org/content/tck
1548+#
1549+# Contributor(s):
1550+#
1551+# ***** END LICENSE BLOCK *****
1552+#
1553+
1554+UmakefileVersion(2,2)
1555+
1556+project.AddModuleIncludes("common/include",
1557+ "common/runtime/pub",
1558+ "client/include",
1559+ "client/common/system/pub",
1560+ "client/common/container/pub",
1561+ "client/audiosvc/pub",
1562+ "common/container/pub",
1563+ "video/sitelib/pub",
1564+ "video/colconverter/pub",
1565+ "video/sitelib/pub/platform/unix",
1566+ "video/sitelib",
1567+ "datatype/rm/include",
1568+ "client/core")
1569+
1570+project.AddSources("player.cpp",
1571+ "excontxt.cpp",
1572+ "exsite.cpp",
1573+ "exroot.cpp",
1574+ "exadvsnk.cpp",
1575+ "exerror.cpp",
1576+ "iids.cpp",
1577+ "exstateadvsnk.cpp",
1578+ "excallback.cpp",
1579+ "print.cpp")
1580+
1581+project.AddModuleLibraries(
1582+ "common/runtime[runtlib]",
1583+ "common/system[syslib]",
1584+ "common/container[contlib]",
1585+ "common/runtime[runtlib]",
1586+ "client/common/system[sysclntlib]",
1587+ "common/dbgtool[debuglib]",
1588+ "common/util[utillib]",
1589+ "video/sitelib[sitelib]",
1590+ "video/sitelib[sitecreatelib]",
1591+ "common/log/logutil[logutillib]",
1592+ "video/vidutil[vidutillib]"
1593+ )
1594+project.AddSystemLibraries('Xv', 'Xext')
1595+
1596+if project.IsDefined("HELIX_FEATURE_PREFERENCES"):
1597+ project.AddSources("preflist.cpp")
1598+
1599+if project.IsDefined("HELIX_FEATURE_AUTHENTICATION"):
1600+ project.AddSources("exaumgr.cpp")
1601+
1602+if project.IsDefined("HELIX_FEATURE_VIDEO"):
1603+ project.AddSources("exsitsup.cpp",
1604+ "fivemmap.cpp")
1605+ project.AddModuleIncludes('video/include')
1606+ if project.IsDefined("HELIX_FEATURE_PNG"):
1607+ project.AddModuleIncludes('datatype/image/png/common/pub')
1608+ project.AddModuleLibraries("common/import/zlib[zlib]",
1609+ "datatype/image/png/import/libpng[libpng]",
1610+ "datatype/image/png/common[pngcomlib]")
1611+
1612+if project.IsDefined("HELIX_FEATURE_PROGRESSIVE_DOWNLD_STATUS"):
1613+ project.AddSources("exprdnld.cpp")
1614+
1615+if project.BuildOption("nodll"):
1616+ ## Client core
1617+ static_plugin_list = ["clntcore"]
1618+ project.AddModuleLibraries("common/runtime[runtlib]",
1619+ "common/fileio[fileiolib]",
1620+ "client/common/system[sysclntlib]",
1621+ "client/common/container[contclntlib]",
1622+ "client/core[clntcorelib]")
1623+ if not project.IsDefined("HELIX_FEATURE_LOGLEVEL_NONE"):
1624+ project.AddModuleLibraries("common/log/logutil[logutillib]")
1625+ if not project.IsDefined("HELIX_CONFIG_MINIMIZE_SIZE"):
1626+ project.AddModuleLibraries("client/common/util[utlclntlib]")
1627+ ## Client core libraries
1628+ if project.IsDefined("HELIX_FEATURE_AUDIO"):
1629+ project.AddModuleLibraries("audio/device[auddevlib]",
1630+ "client/audiosvc[audsvclib]")
1631+ if ('HELIX_FEATURE_VOLUME' in project.defines):
1632+ project.AddModuleLibraries("audio/gaintool[audgainlib]" )
1633+ if ('HELIX_FEATURE_VOLUME' in project.defines):
1634+ project.AddModuleLibraries("audio/crossfade[audxfadelib]")
1635+ if project.IsDefined("HELIX_FEATURE_MIXER"):
1636+ project.AddModuleLibraries("audio/mixer[audmixlib]")
1637+ if project.IsDefined("HELIX_FEATURE_RESAMPLER"):
1638+ project.AddModuleLibraries("audio/resampler[audresamplib]")
1639+ if project.IsDefined("HELIX_FEATURE_LIMITER"):
1640+ project.AddModuleLibraries("audio/limiter[audlimiter]")
1641+
1642+ if project.IsDefined("HELIX_FEATURE_VIDEO"):
1643+ project.AddModuleLibraries("client/videosvc[vidsvclib]",
1644+ "protocol/sdp[sdplib]")
1645+ if project.IsDefined("HELIX_FEATURE_PLAYBACK_NET"):
1646+ project.AddModuleLibraries("client/netwksvc[netsvclib]",
1647+ "common/netio[netiolib]",
1648+ "client/common/netio[netioclntlib]",
1649+ "protocol/transport/common/system[systranlib]",
1650+ "protocol/transport/rtp[rtptranlib]",
1651+ "protocol/common/util[protutillib]",
1652+ "protocol/rtsp[rtsplib]")
1653+ if project.IsDefined("HELIX_FEATURE_RDT"):
1654+ project.AddLibraries(GetSDKPath("prtclrdt_lib"))
1655+ project.AddModuleLibraries("protocol/transport/rdt[rdttranlib]")
1656+ if project.IsDefined("HELIX_FEATURE_PNA"):
1657+ project.AddLibraries(GetSDKPath("prtclpna_lib"))
1658+ if project.IsDefined("HELIX_FEATURE_XMLPARSER"):
1659+ project.AddModuleLibraries("common/lang/xml[xmllib]")
1660+ ## Add RAM file format and renderer
1661+ if project.IsDefined("HELIX_FEATURE_META"):
1662+ static_plugin_list[-1:-1] = ["ramfformat", "ramrender"]
1663+ project.AddModuleLibraries("datatype/ram/renderer[ramrendrlib]")
1664+ ## Add local file system
1665+ if project.IsDefined("HELIX_FEATURE_PLAYBACK_LOCAL"):
1666+ static_plugin_list[-1:-1] = ["smplfsys"]
1667+ project.AddModuleLibraries("common/fileio[fileiolib]")
1668+ ## Add http file system
1669+ if project.IsDefined("HELIX_FEATURE_PLAYBACK_NET"):
1670+ static_plugin_list[-1:-1] = ["hxsdp", "httpfsys"]
1671+ project.AddModuleLibraries("protocol/http[httplib]",
1672+ "protocol/common/util[protutillib]",
1673+ "protocol/sdp[sdplib]",
1674+ "filesystem/data[datafsys]",
1675+ "common/fileio[fileiolib]",
1676+ "common/import/zlib[zlib]")
1677+ ## Add realmedia file format
1678+ if project.IsDefined("HELIX_FEATURE_PLAYBACK_LOCAL") and \
1679+ (project.IsDefined("HELIX_FEATURE_AUDIO_REAL") or \
1680+ project.IsDefined("HELIX_FEATURE_VIDEO_REAL")):
1681+ static_plugin_list[-1:-1] = ["rmfformat"]
1682+ project.AddModuleLibraries("datatype/common/util[dtutillib]",
1683+ "datatype/common/container[dtcomcontlib]")
1684+ project.AddLibraries(GetSDKPath("rmcom_lib"),
1685+ GetSDKPath("rmacom_lib"),
1686+ GetSDKPath("rmff_lib"),
1687+ GetSDKPath("rmvidpyld_lib"))
1688+
1689+ ## Add realmedia renderer
1690+ if project.IsDefined("HELIX_FEATURE_AUDIO_REAL"):
1691+ static_plugin_list[-1:-1] = ["rarender"]
1692+ project.AddModuleLibraries("datatype/rm/audio/payload[rapayld]")
1693+ project.AddLibraries(GetSDKPath("rmarend_lib"),
1694+ GetSDKPath("rmacom_lib"))
1695+ ## Add mp3 file format and renderer
1696+ if project.IsDefined("HELIX_FEATURE_AUDIO_MPA_LAYER3") or \
1697+ project.IsDefined("HELIX_FEATURE_AUDIO_MPA_LAYER2") or \
1698+ project.IsDefined("HELIX_FEATURE_AUDIO_MPA_LAYER1"):
1699+ static_plugin_list[-1:-1] = ["mp3render"]
1700+ project.AddModuleLibraries("datatype/mp3/codec/fltpt[mp3codecfltpt]",
1701+ "datatype/mp3/common[mp3lib]",
1702+ "datatype/mp3/payload[mp3payld]",
1703+ "datatype/common/util[dtutillib]")
1704+ if project.IsDefined("HELIX_FEATURE_PLAYBACK_LOCAL"):
1705+ static_plugin_list[-1:-1] = ["mp3fformat"]
1706+ project.AddModuleLibraries("datatype/mp3/common[mp3lib]")
1707+ ## Add gecko realmedia codec
1708+ if project.IsDefined("HELIX_FEATURE_AUDIO_CODEC_GECKO"):
1709+ static_plugin_list[-1:-1] = ["cook"]
1710+ if not project.IsDefined("HELIX_CONFIG_FIXEDPOINT"):
1711+ project.AddLibraries(GetSDKPath("ra8lbrdec_flt_lib"))
1712+ else:
1713+ project.AddLibraries(GetSDKPath("ra8lbrdec_fix_lib"))
1714+ project.AddModuleLibraries("datatype/rm/audio/codec/common[racompat]")
1715+ ## Add RAAC codec
1716+ if project.IsDefined("HELIX_FEATURE_AUDIO_CODEC_RAAC"):
1717+ static_plugin_list[-1:-1] = ["raac"]
1718+ project.AddModuleLibraries("datatype/mp4/common[mp4comlib]",
1719+ "datatype/aac/codec/fixpt/decoder/hxwrap[aacdeclib]")
1720+ ## Add sipro realmedia codec
1721+ ## (Right now this only works for floating-point platforms)
1722+ if project.IsDefined("HELIX_FEATURE_AUDIO_CODEC_SIPRO"):
1723+ static_plugin_list[-1:-1] = ["sipr"]
1724+ project.AddLibraries(GetSDKPath("sipro_flt_backend_lib"))
1725+ ## Add tokyo realmedia codec
1726+ if project.IsDefined("HELIX_FEATURE_AUDIO_CODEC_TOKYO"):
1727+ static_plugin_list[-1:-1] = ["atrc"]
1728+ project.AddLibraries(GetSDKPath("ra8hbr_lib"))
1729+ ##
1730+ if project.IsDefined("HELIX_FEATURE_VIDEO"):
1731+ static_plugin_list[-1:-1] = ["vidsite"]
1732+ static_plugin_list[-1:-1] = ["hxltcolor"]
1733+ project.AddModuleLibraries("datatype/common/vidrend[vidrend]",
1734+ "video/sitelib[sitelib]",
1735+ "video/site[vidsite]",
1736+ "video/colconverter[hxltcolor]",
1737+ "datatype/rm/common[rmcomlib]",
1738+ "video/vidutil[vidutillib]")
1739+
1740+ if (project.IsDefined('HELIX_FEATURE_ALTERNATE_SITE_CREATE_LIB')):
1741+ project.AddLibraries(GetSDKPath("sitecreate_lib"))
1742+ else:
1743+ project.AddModuleLibraries('video/sitelib[sitecreatelib]')
1744+
1745+ ## Add realvideo renderer
1746+ if project.IsDefined("HELIX_FEATURE_VIDEO_REAL"):
1747+ project.AddModuleLibraries("datatype/rm/video/renderer[rvxrendlib]")
1748+ project.AddLibraries(GetSDKPath("rmvidcom_lib"),
1749+ GetSDKPath("rmvidpyld_lib"),
1750+ GetSDKPath("rvcodcom_lib"))
1751+ project.AddModuleLibraries("datatype/common/util[dtutillib]")
1752+ static_plugin_list[-1:-1] = ["rvrender"]
1753+
1754+ ## Add mpeg4 file format
1755+ if project.IsDefined("HELIX_FEATURE_PLAYBACK_LOCAL")and \
1756+ (project.IsDefined("HELIX_FEATURE_VIDEO_H263") or \
1757+ project.IsDefined("HELIX_FEATURE_VIDEO_MPEG4") or \
1758+ project.IsDefined("HELIX_FEATURE_AUDIO_MPEG4")):
1759+ static_plugin_list[-1:-1] = ["mp4fformat"]
1760+ project.AddModuleLibraries("datatype/common/util[dtutillib]",
1761+ "datatype/common/audrend",
1762+ "datatype/mp4/common[mp4comlib]",
1763+ "datatype/mp4/payload[mp4pyldlib]",
1764+ "datatype/mp4/fileformat[mp4fformatlib]")
1765+ if not project.IsDefined("HELIX_FEATURE_MP4_FILEFORMAT_M4A_ONLY"):
1766+ project.AddModuleLibraries("protocol/sdp[sdplib]",
1767+ "protocol/rtsp[rtsplib]",
1768+ "protocol/common/util[protutillib]",
1769+ "datatype/rm/common[rmcomlib]",
1770+ "datatype/amr/common[amrcomlib]")
1771+ ## Add h.263 renderer
1772+ if project.IsDefined("HELIX_FEATURE_VIDEO_H263"):
1773+ project.AddModuleLibraries("datatype/h263/payload[h263pyldlib]")
1774+ static_plugin_list[-1:-1] = ["h263render"]
1775+ ## Add MPEG4 renderer
1776+# if project.IsDefined("HELIX_FEATURE_VIDEO_MPEG4"):
1777+# static_plugin_list[-1:-1] = ["mp4xrender"]
1778+ ## Add mpeg 4 audio renderer
1779+ if project.IsDefined("HELIX_FEATURE_AUDIO_MPEG4"):
1780+ static_plugin_list[-1:-1] = ["mp4arender"]
1781+ project.AddModuleLibraries("datatype/mp4/audio/renderer[mp4arenderlib]")
1782+ if not project.IsDefined("HELIX_FEATURE_MP4_FILEFORMAT_M4A_ONLY"):
1783+ project.AddModuleLibraries("datatype/amr/common[amrcomlib]")
1784+ ## Add RV10 codec
1785+ if project.IsDefined("HELIX_FEATURE_VIDEO_CODEC_RV10"):
1786+ project.AddLibraries(GetSDKPath("rv1dec_libs")+"[rv10lib]",
1787+ GetSDKPath("rv1dec_libs")+"[drv1lib]")
1788+ static_plugin_list[-1:-1] = ["rv10", "drv1"]
1789+ ## Add RV20 codec
1790+ if project.IsDefined("HELIX_FEATURE_VIDEO_CODEC_RV20"):
1791+ project.AddLibraries(GetSDKPath("rvg2dec_libs")+"[rv20lib]",
1792+ GetSDKPath("rvg2dec_libs")+"[drv2lib]")
1793+ static_plugin_list[-1:-1] = ["rv20", "drv2"]
1794+
1795+ if project.IsDefined("HELIX_FEATURE_VIDEO_CODEC_RV30") or \
1796+ project.IsDefined("HELIX_FEATURE_VIDEO_CODEC_RV40"):
1797+ static_plugin_list[-1:-1] = ["drvc"]
1798+ if project.IsDefined("HELIX_FEATURE_ANSIC_RV89COMBO"):
1799+ project.AddLibraries(GetSDKPath("rv89combo_c_libs")+"[drvc]")
1800+ else:
1801+ project.AddLibraries(GetSDKPath("rv89combo_libs")+"[drvclib]")
1802+
1803+ if project.IsDefined("HELIX_FEATURE_VIDEO_CODEC_RV30"):
1804+ static_plugin_list[-1:-1] = ["rv30"]
1805+ project.AddLibraries(GetSDKPath("rv89combo_libs")+"[rv3xlib]")
1806+ project.AddModuleLibraries("datatype/rm/video/codec/rv89combo[rv30]")
1807+
1808+ if project.IsDefined("HELIX_FEATURE_VIDEO_CODEC_RV40"):
1809+ static_plugin_list[-1:-1] = ["rv40"]
1810+ project.AddLibraries(GetSDKPath("rv89combo_libs")+"[rv4xlib]")
1811+ project.AddModuleLibraries("datatype/rm/video/codec/rv89combo[rv40]")
1812+
1813+# if project.IsDefined("HELIX_FEATURE_AUDIO_CODEC_AAC"):
1814+# static_plugin_list[-1:-1] = ["aac4"]
1815+
1816+ CreateStaticPluginTable(static_plugin_list)
1817+
1818+project.ExportFunction("init_main", "void")
1819+project.ExportFunction("deinit_main", "void")
1820+project.ExportFunction("get_player", "void **ppPlayer",
1821+ "on_buffering_cb_t on_buffering_cb",
1822+ "on_pos_length_cb_t on_pos_length_cb")
1823+project.ExportFunction("player_openurl", "void *pPlayerHandle",
1824+ "char *pszRawURL")
1825+project.ExportFunction("put_player", "void *pPlayerHandle")
1826+project.ExportFunction("player_geturl", "void *pPlayerHandle", "char **pszURL")
1827+project.ExportFunction("player_begin", "void *pPlayerHandle")
1828+project.ExportFunction("player_stop", "void *pPlayerHandle")
1829+project.ExportFunction("player_pause", "void *pPlayerHandle")
1830+project.ExportFunction("player_seek", "void *pPlayerHandle", "int pos")
1831+project.ExportFunction("get_curr_playtime", "void *pPlayerHandle")
1832+project.ExportFunction("player_getvolume", "void *pPlayerHandle")
1833+project.ExportFunction("player_canseek", "void *pPlayerHandle")
1834+project.ExportFunction("player_setvolume", "void *pPlayerHandle", "unsigned short volumn")
1835+
1836+
1837+
1838+DLLTarget('libhelix-player')
1839+
1840+DependTarget()
1841+
1842Index: helix-libs/clientapps/clutter/exabd.cpp
1843===================================================================
1844--- /dev/null 1970-01-01 00:00:00.000000000 +0000
1845+++ helix-libs/clientapps/clutter/exabd.cpp 2008-10-13 06:05:49.000000000 -0700
1846@@ -0,0 +1,245 @@
1847+/* ***** BEGIN LICENSE BLOCK *****
1848+ * Version: RCSL 1.0/RPSL 1.0
1849+ *
1850+ * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
1851+ *
1852+ * The contents of this file, and the files included with this file, are
1853+ * subject to the current version of the RealNetworks Public Source License
1854+ * Version 1.0 (the "RPSL") available at
1855+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
1856+ * the file under the RealNetworks Community Source License Version 1.0
1857+ * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
1858+ * in which case the RCSL will apply. You may also obtain the license terms
1859+ * directly from RealNetworks. You may not use this file except in
1860+ * compliance with the RPSL or, if you have a valid RCSL with RealNetworks
1861+ * applicable to this file, the RCSL. Please see the applicable RPSL or
1862+ * RCSL for the rights, obligations and limitations governing use of the
1863+ * contents of the file.
1864+ *
1865+ * This file is part of the Helix DNA Technology. RealNetworks is the
1866+ * developer of the Original Code and owns the copyrights in the portions
1867+ * it created.
1868+ *
1869+ * This file, and the files included with this file, is distributed and made
1870+ * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
1871+ * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
1872+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
1873+ * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
1874+ *
1875+ * Technology Compatibility Kit Test Suite(s) Location:
1876+ * http://www.helixcommunity.org/content/tck
1877+ *
1878+ * Contributor(s):
1879+ *
1880+ * ***** END LICENSE BLOCK ***** */
1881+
1882+#include <stdio.h>
1883+
1884+#include "hxtypes.h"
1885+
1886+#include "hxcom.h"
1887+#include "hxcomm.h"
1888+#include "hxmon.h"
1889+#include "hxcore.h"
1890+#include "hxengin.h"
1891+#include "chxpckts.h"
1892+#include "hxclsnk.h"
1893+#include "hxstrutl.h"
1894+#include "exabd.h"
1895+
1896+#include "print.h"
1897+
1898+#include "globals.h"
1899+
1900+struct _stGlobals*& GetGlobal(); //in main.cpp
1901+
1902+ExampleABD::ExampleABD(IUnknown* pUnknown)
1903+ : m_lRefCount (0)
1904+ , m_pUnknown (NULL)
1905+ , m_ulABDStartTime(0)
1906+ , m_ulABDResult(0)
1907+ , m_bABDDone(FALSE)
1908+{
1909+ if (pUnknown)
1910+ {
1911+ m_pUnknown = pUnknown;
1912+ m_pUnknown->AddRef();
1913+ }
1914+}
1915+
1916+ExampleABD::~ExampleABD(void)
1917+{
1918+ HX_RELEASE(m_pUnknown);
1919+}
1920+
1921+
1922+// *** IUnknown methods ***
1923+
1924+/////////////////////////////////////////////////////////////////////////
1925+// Method:
1926+// IUnknown::QueryInterface
1927+// Purpose:
1928+// Implement this to export the interfaces supported by your
1929+// object.
1930+//
1931+STDMETHODIMP ExampleABD::QueryInterface(REFIID riid, void** ppvObj)
1932+{
1933+ if (IsEqualIID(riid, IID_IUnknown))
1934+ {
1935+ AddRef();
1936+ *ppvObj = (IUnknown*)(IHXAutoBWCalibrationAdviseSink*)this;
1937+ return HXR_OK;
1938+ }
1939+ else if (IsEqualIID(riid, IID_IHXAutoBWCalibrationAdviseSink))
1940+ {
1941+ AddRef();
1942+ *ppvObj = (IHXAutoBWCalibrationAdviseSink*)this;
1943+ return HXR_OK;
1944+ }
1945+
1946+ *ppvObj = NULL;
1947+ return HXR_NOINTERFACE;
1948+}
1949+
1950+/////////////////////////////////////////////////////////////////////////
1951+// Method:
1952+// IUnknown::AddRef
1953+// Purpose:
1954+// Everyone usually implements this the same... feel free to use
1955+// this implementation.
1956+//
1957+STDMETHODIMP_(ULONG32) ExampleABD::AddRef()
1958+{
1959+ return InterlockedIncrement(&m_lRefCount);
1960+}
1961+
1962+/////////////////////////////////////////////////////////////////////////
1963+// Method:
1964+// IUnknown::Release
1965+// Purpose:
1966+// Everyone usually implements this the same... feel free to use
1967+// this implementation.
1968+//
1969+STDMETHODIMP_(ULONG32) ExampleABD::Release()
1970+{
1971+ if (InterlockedDecrement(&m_lRefCount) > 0)
1972+ {
1973+ return m_lRefCount;
1974+ }
1975+
1976+ delete this;
1977+ return 0;
1978+}
1979+
1980+/*
1981+ * IHXAutoBWCalibrationAdviseSink methods
1982+ */
1983+STDMETHODIMP
1984+ExampleABD::AutoBWCalibrationStarted (const char* pszServer)
1985+{
1986+ if (pszServer)
1987+ {
1988+ STDOUT("ABD: contacting %s\n", pszServer);
1989+ }
1990+
1991+ return HXR_OK;
1992+}
1993+
1994+STDMETHODIMP
1995+ExampleABD::AutoBWCalibrationDone(HX_RESULT status,
1996+ UINT32 ulBW)
1997+{
1998+ m_bABDDone = TRUE;
1999+
2000+ if (HXR_OK == status)
2001+ {
2002+ m_ulABDResult = ulBW;
2003+ STDOUT("ABD: %lu(Kbps) %lu(ms)\n", ulBW, GetTickCount() - m_ulABDStartTime);
2004+ }
2005+ else
2006+ {
2007+ STDOUT("ABD failed: %lu\n", status);
2008+ }
2009+
2010+ return HXR_OK;
2011+}
2012+
2013+HX_RESULT
2014+ExampleABD::DoABD(const char* pszServer,
2015+ UINT32 mode,
2016+ UINT32 packetSize,
2017+ UINT32 packetNum)
2018+{
2019+ HX_RESULT rc = HXR_OK;
2020+ UINT32 length = 0;
2021+ IHXAutoBWCalibration* pABD = NULL;
2022+ IHXValues* pValues = NULL;
2023+ IHXBuffer* pBuffer = NULL;
2024+
2025+ m_ulABDStartTime = GetTickCount();
2026+ m_ulABDResult = 0;
2027+ m_bABDDone = FALSE;
2028+
2029+ if (m_pUnknown &&
2030+ HXR_OK == m_pUnknown->QueryInterface(IID_IHXAutoBWCalibration, (void**)&pABD))
2031+ {
2032+ pValues = (IHXValues*) new CHXHeader();
2033+ pValues->AddRef();
2034+
2035+ pBuffer = (IHXBuffer*) new CHXBuffer();
2036+ pBuffer->AddRef();
2037+
2038+ pBuffer->Set((UCHAR*)pszServer, strlen(pszServer)+1);
2039+ pValues->SetPropertyCString("ABDServers", pBuffer);
2040+
2041+ pValues->SetPropertyULONG32("AutoBWDetectionMode", mode);
2042+ pValues->SetPropertyULONG32("AutoBWDetectionPacketSize", packetSize);
2043+ pValues->SetPropertyULONG32("AutoBWDetectionPackets", packetNum);
2044+
2045+ pABD->AddAutoBWCalibrationSink((IHXAutoBWCalibrationAdviseSink*)this);
2046+ pABD->InitAutoBWCalibration(pValues);
2047+
2048+ pABD->StartAutoBWCalibration();
2049+
2050+ while (!m_bABDDone)
2051+ {
2052+ MSG msg;
2053+ DWORD starttime, endtime, i;
2054+ BOOL sleep = TRUE;
2055+ static const int checkinterval = 10;
2056+
2057+ starttime = GetTickCount();
2058+ endtime = starttime + (20);
2059+ i = 0;
2060+ while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
2061+ {
2062+ DispatchMessage(&msg);
2063+ if ((i % checkinterval) == 0)
2064+ {
2065+ if (GetTickCount() > endtime)
2066+ break;
2067+ ++i;
2068+ }
2069+ sleep = FALSE;
2070+ }
2071+
2072+ if (sleep)
2073+ Sleep(10);
2074+ }
2075+ }
2076+
2077+cleanup:
2078+
2079+ if (pABD)
2080+ {
2081+ pABD->RemoveAutoBWCalibrationSink((IHXAutoBWCalibrationAdviseSink*)this);
2082+ }
2083+
2084+ HX_RELEASE(pBuffer);
2085+ HX_RELEASE(pValues);
2086+ HX_RELEASE(pABD);
2087+
2088+ return rc;
2089+}
2090+
2091+
2092Index: helix-libs/clientapps/clutter/exabd.h
2093===================================================================
2094--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2095+++ helix-libs/clientapps/clutter/exabd.h 2008-10-13 06:05:49.000000000 -0700
2096@@ -0,0 +1,85 @@
2097+/* ***** BEGIN LICENSE BLOCK *****
2098+ * Version: RCSL 1.0/RPSL 1.0
2099+ *
2100+ * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
2101+ *
2102+ * The contents of this file, and the files included with this file, are
2103+ * subject to the current version of the RealNetworks Public Source License
2104+ * Version 1.0 (the "RPSL") available at
2105+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
2106+ * the file under the RealNetworks Community Source License Version 1.0
2107+ * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
2108+ * in which case the RCSL will apply. You may also obtain the license terms
2109+ * directly from RealNetworks. You may not use this file except in
2110+ * compliance with the RPSL or, if you have a valid RCSL with RealNetworks
2111+ * applicable to this file, the RCSL. Please see the applicable RPSL or
2112+ * RCSL for the rights, obligations and limitations governing use of the
2113+ * contents of the file.
2114+ *
2115+ * This file is part of the Helix DNA Technology. RealNetworks is the
2116+ * developer of the Original Code and owns the copyrights in the portions
2117+ * it created.
2118+ *
2119+ * This file, and the files included with this file, is distributed and made
2120+ * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
2121+ * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
2122+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
2123+ * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
2124+ *
2125+ * Technology Compatibility Kit Test Suite(s) Location:
2126+ * http://www.helixcommunity.org/content/tck
2127+ *
2128+ * Contributor(s):
2129+ *
2130+ * ***** END LICENSE BLOCK ***** */
2131+
2132+#ifndef _EXAMPLEABD_
2133+#define _EXAMPLEABD_
2134+
2135+struct IHXAutoBWCalibrationAdviseSink;
2136+struct IUnknown;
2137+
2138+class ExampleABD : public IHXAutoBWCalibrationAdviseSink
2139+{
2140+ private:
2141+ LONG32 m_lRefCount;
2142+ IUnknown* m_pUnknown;
2143+ UINT32 m_ulABDStartTime;
2144+ UINT32 m_ulABDResult;
2145+ BOOL m_bABDDone;
2146+
2147+ ~ExampleABD();
2148+
2149+ public:
2150+
2151+ ExampleABD(IUnknown* /*IN*/ pUnknown);
2152+
2153+ /*
2154+ * IUnknown methods
2155+ */
2156+ STDMETHOD(QueryInterface) (THIS_
2157+ REFIID riid,
2158+ void** ppvObj);
2159+
2160+ STDMETHOD_(ULONG32,AddRef) (THIS);
2161+
2162+ STDMETHOD_(ULONG32,Release) (THIS);
2163+
2164+ /*
2165+ * IHXAutoBWCalibrationAdviseSink methods
2166+ */
2167+ STDMETHOD(AutoBWCalibrationStarted) (THIS_
2168+ const char* pszServer);
2169+ STDMETHOD(AutoBWCalibrationDone) (THIS_
2170+ HX_RESULT status,
2171+ UINT32 ulBW);
2172+
2173+ HX_RESULT DoABD(const char* pszServer,
2174+ UINT32 mode,
2175+ UINT32 packetSize,
2176+ UINT32 packetNum);
2177+
2178+ UINT32 GetABD(void) { return m_ulABDResult; };
2179+};
2180+
2181+#endif /* _EXAMPLEABDSNK_ */
2182Index: helix-libs/clientapps/clutter/exadvsnk.cpp
2183===================================================================
2184--- /dev/null 1970-01-01 00:00:00.000000000 +0000
2185+++ helix-libs/clientapps/clutter/exadvsnk.cpp 2008-10-13 06:05:49.000000000 -0700
2186@@ -0,0 +1,1116 @@
2187+/* ***** BEGIN LICENSE BLOCK *****
2188+ * Version: RCSL 1.0/RPSL 1.0
2189+ *
2190+ * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
2191+ *
2192+ * The contents of this file, and the files included with this file, are
2193+ * subject to the current version of the RealNetworks Public Source License
2194+ * Version 1.0 (the "RPSL") available at
2195+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
2196+ * the file under the RealNetworks Community Source License Version 1.0
2197+ * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
2198+ * in which case the RCSL will apply. You may also obtain the license terms
2199+ * directly from RealNetworks. You may not use this file except in
2200+ * compliance with the RPSL or, if you have a valid RCSL with RealNetworks
2201+ * applicable to this file, the RCSL. Please see the applicable RPSL or
2202+ * RCSL for the rights, obligations and limitations governing use of the
2203+ * contents of the file.
2204+ *
2205+ * This file is part of the Helix DNA Technology. RealNetworks is the
2206+ * developer of the Original Code and owns the copyrights in the portions
2207+ * it created.
2208+ *
2209+ * This file, and the files included with this file, is distributed and made
2210+ * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
2211+ * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
2212+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
2213+ * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
2214+ *
2215+ * Technology Compatibility Kit Test Suite(s) Location:
2216+ * http://www.helixcommunity.org/content/tck
2217+ *
2218+ * Contributor(s):
2219+ *
2220+ * ***** END LICENSE BLOCK ***** */
2221+
2222+#include <stdio.h>
2223+
2224+#include "hxtypes.h"
2225+
2226+#include "hxcom.h"
2227+#include "hxcomm.h"
2228+#include "hxmon.h"
2229+#include "hxcore.h"
2230+#include "hxengin.h"
2231+#include "hxclsnk.h"
2232+#include "hxgroup.h"
2233+#include "hxstrutl.h"
2234+#include "exadvsnk.h"
2235+#include "hxstring.h"
2236+#include "hxprefs.h"
2237+#include "excontxt.h"
2238+
2239+#include "print.h"
2240+
2241+#include "globals.h"
2242+#include "player.h"
2243+
2244+struct _stGlobals*& GetGlobal(); //in main.cpp
2245+
2246+#ifdef __TCS__
2247+extern unsigned long gStreamTime;
2248+
2249+static int iOpened = 0;
2250+
2251+
2252+#if defined(__cplusplus)
2253+extern "C" {
2254+#endif /* defined(__cplusplus) */
2255+
2256+typedef enum hookBuffering {
2257+ eContacting = 0,
2258+ eConnecting = 1,
2259+ eBuffering = 2,
2260+ ePlaying = 3
2261+}hookBuffering;
2262+
2263+void hookRealAudio_Buffering(hookBuffering connectState, int pct);
2264+
2265+void hookRealAudio_PlayPosition(unsigned long current,unsigned long duration);
2266+
2267+typedef enum hookState {
2268+ ePlay = 0,
2269+ ePause = 1,
2270+ eStop = 2,
2271+ eResume = 3,
2272+ eComplete // Clip is done playing
2273+}hookState;
2274+void hookRealAudio_State(hookState newState);
2275+
2276+
2277+#if defined(__cplusplus)
2278+}
2279+#endif /* defined(__cplusplus) */
2280+
2281+#endif // __TCS__
2282+
2283+void PrintBuffer(const char* pszName,const unsigned char* pbBuf, unsigned int dwBytes);
2284+
2285+ExampleClientAdviceSink::ExampleClientAdviceSink(IUnknown* pUnknown, LONG32 lClientIndex, on_buffering_cb_t on_buffering_cb, on_pos_length_cb_t on_pos_length_cb, void *context)
2286+ : m_lRefCount (0)
2287+ , m_lClientIndex (lClientIndex)
2288+ , m_pUnknown (NULL)
2289+ , m_pRegistry (NULL)
2290+ , m_pScheduler (NULL)
2291+ , m_lCurrentBandwidth(0)
2292+ , m_lAverageBandwidth(0)
2293+ , m_bOnStop(0)
2294+ , m_pPlayer(0)
2295+ , m_bWaitForTrackStart(0)
2296+ , m_on_buffering_cb(on_buffering_cb)
2297+ , m_on_pos_length_cb(on_pos_length_cb)
2298+ , m_context(context)
2299+{
2300+ if (pUnknown)
2301+ {
2302+ m_pUnknown = pUnknown;
2303+ m_pUnknown->AddRef();
2304+
2305+ if (HXR_OK != m_pUnknown->QueryInterface(IID_IHXRegistry, (void**)&m_pRegistry))
2306+ {
2307+ m_pRegistry = NULL;
2308+ }
2309+
2310+ if (HXR_OK != m_pUnknown->QueryInterface(IID_IHXScheduler, (void**)&m_pScheduler))
2311+ {
2312+ m_pScheduler = NULL;
2313+ }
2314+
2315+ IHXPlayer* pPlayer;
2316+ if(HXR_OK == m_pUnknown->QueryInterface(IID_IHXPlayer,
2317+ (void**)&pPlayer))
2318+ {
2319+ m_pPlayer = pPlayer;
2320+
2321+ IHXGroupManager* pGroupMgr = NULL;
2322+ if(HXR_OK == m_pPlayer->QueryInterface(IID_IHXGroupManager,
2323+ (void**)&pGroupMgr))
2324+ {
2325+ pGroupMgr->AddSink((IHXGroupSink*)this);
2326+ pGroupMgr->Release();
2327+ }
2328+
2329+ pPlayer->AddAdviseSink(this);
2330+
2331+ }
2332+ }
2333+
2334+#ifdef __TCS__
2335+ bEnableAdviceSink = TRUE;
2336+ iOpened = 0;
2337+#endif
2338+}
2339+
2340+ExampleClientAdviceSink::~ExampleClientAdviceSink(void)
2341+{
2342+ if (m_pScheduler)
2343+ {
2344+ m_pScheduler->Release();
2345+ m_pScheduler = NULL;
2346+ }
2347+
2348+ if (m_pRegistry)
2349+ {
2350+ m_pRegistry->Release();
2351+ m_pRegistry = NULL;
2352+ }
2353+
2354+ if (m_pPlayer)
2355+ {
2356+ m_pPlayer->Release();
2357+ m_pPlayer = NULL;
2358+ }
2359+ if (m_pUnknown)
2360+ {
2361+ m_pUnknown->Release();
2362+ m_pUnknown = NULL;
2363+ }
2364+}
2365+
2366+
2367+// *** IUnknown methods ***
2368+
2369+/////////////////////////////////////////////////////////////////////////
2370+// Method:
2371+// IUnknown::QueryInterface
2372+// Purpose:
2373+// Implement this to export the interfaces supported by your
2374+// object.
2375+//
2376+STDMETHODIMP ExampleClientAdviceSink::QueryInterface(REFIID riid, void** ppvObj)
2377+{
2378+ if (IsEqualIID(riid, IID_IUnknown))
2379+ {
2380+ AddRef();
2381+ *ppvObj = (IUnknown*)(IHXClientAdviseSink*)this;
2382+ return HXR_OK;
2383+ }
2384+ else if (IsEqualIID(riid, IID_IHXClientAdviseSink))
2385+ {
2386+ AddRef();
2387+ *ppvObj = (IHXClientAdviseSink*)this;
2388+ return HXR_OK;
2389+ }
2390+ else if (IsEqualIID(riid, IID_IHXGroupSink))
2391+ {
2392+ AddRef();
2393+ *ppvObj = (IHXGroupSink*)this;
2394+ return HXR_OK;
2395+ }
2396+
2397+ *ppvObj = NULL;
2398+ return HXR_NOINTERFACE;
2399+}
2400+
2401+/////////////////////////////////////////////////////////////////////////
2402+// Method:
2403+// IUnknown::AddRef
2404+// Purpose:
2405+// Everyone usually implements this the same... feel free to use
2406+// this implementation.
2407+//
2408+STDMETHODIMP_(ULONG32) ExampleClientAdviceSink::AddRef()
2409+{
2410+ return InterlockedIncrement(&m_lRefCount);
2411+}
2412+
2413+/////////////////////////////////////////////////////////////////////////
2414+// Method:
2415+// IUnknown::Release
2416+// Purpose:
2417+// Everyone usually implements this the same... feel free to use
2418+// this implementation.
2419+//
2420+STDMETHODIMP_(ULONG32) ExampleClientAdviceSink::Release()
2421+{
2422+ if (InterlockedDecrement(&m_lRefCount) > 0)
2423+ {
2424+ return m_lRefCount;
2425+ }
2426+
2427+ delete this;
2428+ return 0;
2429+}
2430+
2431+/*
2432+ * IHXClientAdviseSink methods
2433+ */
2434+
2435+/************************************************************************
2436+ * Method:
2437+ * IHXClientAdviseSink::OnPosLength
2438+ * Purpose:
2439+ * Called to advise the client that the position or length of the
2440+ * current playback context has changed.
2441+ */
2442+
2443+#ifdef __TCS__
2444+static long lastPosition = -1;
2445+#endif
2446+
2447+STDMETHODIMP
2448+ExampleClientAdviceSink::OnPosLength(UINT32 ulPosition,
2449+ UINT32 ulLength)
2450+{
2451+ // Are we doing a multi-seek?
2452+ if (GetGlobal()->g_bMultiSeek)
2453+ {
2454+ // Have we run out of seek times?
2455+ if (GetGlobal()->g_ulMultiSeekIndex < GetGlobal()->g_ulNumMultiSeeks)
2456+ {
2457+ STDOUT("Multi-seeking the first player to %lu\n",
2458+ GetGlobal()->g_ulMultiSeekTime[GetGlobal()->g_ulMultiSeekIndex]);
2459+ GetGlobal()->g_Players[0]->Seek(GetGlobal()->g_ulMultiSeekTime[GetGlobal()->g_ulMultiSeekIndex++]);
2460+ }
2461+ else
2462+ {
2463+ // We've run out - stop the multi-seek
2464+ GetGlobal()->g_bMultiSeek = FALSE;
2465+ GetGlobal()->g_ulNumMultiSeeks = 0;
2466+ GetGlobal()->g_ulMultiSeekIndex = 0;
2467+ }
2468+ }
2469+
2470+ if (m_on_pos_length_cb)
2471+ m_on_pos_length_cb(ulPosition, ulLength, m_context);
2472+
2473+ return HXR_OK;
2474+}
2475+
2476+/************************************************************************
2477+ * Method:
2478+ * IHXClientAdviseSink::OnPresentationOpened
2479+ * Purpose:
2480+ * Called to advise the client a presentation has been opened.
2481+ */
2482+STDMETHODIMP ExampleClientAdviceSink::OnPresentationOpened()
2483+{
2484+#ifdef __TCS__
2485+ iOpened = 1;
2486+ lastPosition = -1;
2487+#else
2488+ if (GetGlobal()->bEnableAdviceSink)
2489+ {
2490+ STDOUT("OnPresentationOpened()\n");
2491+ }
2492+#if defined(HELIX_FEATURE_PLAYBACK_VELOCITY)
2493+ // Try to get the IHXPlaybackVelocity interface
2494+ // from the first player
2495+ if (GetGlobal()->g_nPlayers > 0 && GetGlobal()->g_Players[0])
2496+ {
2497+ IHXPlaybackVelocity* pVel = NULL;
2498+ HX_RESULT rv = GetGlobal()->g_Players[0]->QueryInterface(IID_IHXPlaybackVelocity, (void**) &pVel);
2499+ if (SUCCEEDED(rv))
2500+ {
2501+ // Get the capabilities object from the player
2502+ rv = pVel->QueryVelocityCaps(GetGlobal()->g_pVelocityCaps);
2503+ if (SUCCEEDED(rv) && GetGlobal()->bEnableAdviceSink)
2504+ {
2505+ STDOUT("Available Velocity Ranges:");
2506+ UINT32 ulNumRanges = GetGlobal()->g_pVelocityCaps->GetNumRanges();
2507+ for (UINT32 i = 0; i < ulNumRanges && SUCCEEDED(rv); i++)
2508+ {
2509+ INT32 lMin = 0;
2510+ INT32 lMax = 0;
2511+ rv = GetGlobal()->g_pVelocityCaps->GetRange(i, lMin, lMax);
2512+ if (SUCCEEDED(rv))
2513+ {
2514+ STDOUT(" [%ld,%ld]", lMin, lMax);
2515+ }
2516+ }
2517+ STDOUT("\n");
2518+ }
2519+ }
2520+ HX_RELEASE(pVel);
2521+ }
2522+#endif /* #if defined(HELIX_FEATURE_PLAYBACK_VELOCITY) */
2523+#endif
2524+
2525+ UINT32 sourceCount = m_pPlayer->GetSourceCount();
2526+ for (UINT32 sourceID = 0; sourceID < sourceCount; sourceID ++)
2527+ {
2528+ // get HXSource
2529+ IUnknown* pUnkSource = NULL;
2530+ IHXStreamSource* pStreamSrc = NULL;
2531+
2532+ if (HXR_OK != m_pPlayer->GetSource (sourceID, pUnkSource))
2533+ {
2534+ continue;
2535+ }
2536+
2537+ pUnkSource->QueryInterface(IID_IHXStreamSource, (void **)&pStreamSrc);
2538+
2539+ HX_RELEASE(pUnkSource);
2540+
2541+ if (!pStreamSrc)
2542+ {
2543+ continue;
2544+ }
2545+
2546+ UINT32 num_streams = pStreamSrc->GetStreamCount();
2547+
2548+ // get information from Streams
2549+ for (UINT32 streamID = 0; streamID < num_streams ; streamID++)
2550+ {
2551+ IUnknown* pUnkStream = NULL;
2552+
2553+ if (HXR_OK == pStreamSrc->GetStream(streamID, pUnkStream))
2554+ {
2555+ IHXStream* pStream = NULL;
2556+
2557+ if (HXR_OK == pUnkStream->QueryInterface(IID_IHXStream,
2558+ (void**)&pStream))
2559+ {
2560+ const char* pMimeType = pStream->GetStreamType();
2561+ if( 0 == strcmp(pMimeType, "application/ram"))
2562+ {
2563+ m_bWaitForTrackStart = TRUE;
2564+ }
2565+ else
2566+ {
2567+ m_bWaitForTrackStart = FALSE;
2568+ }
2569+ }
2570+ HX_RELEASE(pStream);
2571+ }
2572+ HX_RELEASE(pUnkStream);
2573+ if (!m_bWaitForTrackStart)
2574+ {
2575+ break;
2576+ }
2577+ }
2578+
2579+ if (!m_bWaitForTrackStart)
2580+ {
2581+ break;
2582+ }
2583+ HX_RELEASE(pStreamSrc);
2584+ }
2585+
2586+ if (!m_bWaitForTrackStart)
2587+ {
2588+ STDOUT("----------------clip info--------------------\n");
2589+ if(m_pScheduler) {
2590+ m_hCallback = m_pScheduler->RelativeEnter(this,50);
2591+ }
2592+ }
2593+ return HXR_OK;
2594+}
2595+
2596+
2597+/************************************************************************
2598+ * Method:
2599+ * IHXClientAdviseSink::OnPresentationClosed
2600+ * Purpose:
2601+ * Called to advise the client a presentation has been closed.
2602+ */
2603+STDMETHODIMP ExampleClientAdviceSink::OnPresentationClosed()
2604+{
2605+#ifdef __TCS__
2606+ iOpened = 0;
2607+ lastPosition = -1;
2608+#else
2609+ if (GetGlobal()->bEnableAdviceSink)
2610+ {
2611+ STDOUT("OnPresentationClosed()\n");
2612+ }
2613+#endif
2614+
2615+ return HXR_OK;
2616+}
2617+
2618+void ExampleClientAdviceSink::GetStatistics (char* pszRegistryKey)
2619+{
2620+ char szRegistryValue[MAX_DISPLAY_NAME] = {0}; /* Flawfinder: ignore */
2621+ INT32 lValue = 0;
2622+ INT32 i = 0;
2623+ INT32 lStatistics = 8;
2624+ UINT32 *plValue;
2625+
2626+#ifdef __TCS__
2627+ return; // DISABLED FOR NOW
2628+#endif
2629+
2630+ // collect statistic
2631+ for (i = 0; i < lStatistics; i++)
2632+ {
2633+ plValue = NULL;
2634+ switch (i)
2635+ {
2636+ case 0:
2637+ SafeSprintf(szRegistryValue, MAX_DISPLAY_NAME, "%s.Normal", pszRegistryKey);
2638+ break;
2639+ case 1:
2640+ SafeSprintf(szRegistryValue, MAX_DISPLAY_NAME, "%s.Recovered", pszRegistryKey);
2641+ break;
2642+ case 2:
2643+ SafeSprintf(szRegistryValue, MAX_DISPLAY_NAME, "%s.Received", pszRegistryKey);
2644+ break;
2645+ case 3:
2646+ SafeSprintf(szRegistryValue, MAX_DISPLAY_NAME, "%s.Lost", pszRegistryKey);
2647+ break;
2648+ case 4:
2649+ SafeSprintf(szRegistryValue, MAX_DISPLAY_NAME, "%s.Late", pszRegistryKey);
2650+ break;
2651+ case 5:
2652+ SafeSprintf(szRegistryValue, MAX_DISPLAY_NAME, "%s.ClipBandwidth", pszRegistryKey);
2653+ break;
2654+ case 6:
2655+ SafeSprintf(szRegistryValue, MAX_DISPLAY_NAME, "%s.AverageBandwidth", pszRegistryKey);
2656+ plValue = &m_lAverageBandwidth;
2657+ break;
2658+ case 7:
2659+ SafeSprintf(szRegistryValue, MAX_DISPLAY_NAME, "%s.CurrentBandwidth", pszRegistryKey);
2660+ plValue = &m_lCurrentBandwidth;
2661+ break;
2662+ default:
2663+ break;
2664+ }
2665+
2666+ m_pRegistry->GetIntByName(szRegistryValue, lValue);
2667+ if (plValue)
2668+ {
2669+ if (m_bOnStop || lValue == 0)
2670+ {
2671+ lValue = *plValue;
2672+ }
2673+ else
2674+ {
2675+ *plValue = lValue;
2676+ }
2677+ }
2678+ if (GetGlobal()->bEnableAdviceSink || (GetGlobal()->bEnableVerboseMode && m_bOnStop))
2679+ {
2680+ STDOUT("%s = %ld\n", szRegistryValue, lValue);
2681+ }
2682+ }
2683+}
2684+
2685+void ExampleClientAdviceSink::GetAllStatistics(void)
2686+{
2687+ UINT32 unPlayerIndex = 0;
2688+ UINT32 unSourceIndex = 0;
2689+ UINT32 unStreamIndex = 0;
2690+
2691+ char* pszRegistryPrefix = "Statistics";
2692+ char szRegistryName[MAX_DISPLAY_NAME] = {0}; /* Flawfinder: ignore */
2693+
2694+#ifdef __TCS__
2695+ return; // DISABLED FOR NOW
2696+#endif
2697+
2698+ // display the content of whole statistic registry
2699+ if (m_pRegistry)
2700+ {
2701+ // ok, let's start from the top (player)
2702+ SafeSprintf(szRegistryName, MAX_DISPLAY_NAME, "%s.Player%ld", pszRegistryPrefix, m_lClientIndex);
2703+ if (PT_COMPOSITE == m_pRegistry->GetTypeByName(szRegistryName))
2704+ {
2705+ // display player statistic
2706+ GetStatistics(szRegistryName);
2707+
2708+ SafeSprintf(szRegistryName, MAX_DISPLAY_NAME, "%s.Source%ld", szRegistryName, unSourceIndex);
2709+ while (PT_COMPOSITE == m_pRegistry->GetTypeByName(szRegistryName))
2710+ {
2711+ // display source statistic
2712+ GetStatistics(szRegistryName);
2713+
2714+ SafeSprintf(szRegistryName, MAX_DISPLAY_NAME, "%s.Stream%ld", szRegistryName, unStreamIndex);
2715+ while (PT_COMPOSITE == m_pRegistry->GetTypeByName(szRegistryName))
2716+ {
2717+ // display stream statistic
2718+ GetStatistics(szRegistryName);
2719+
2720+ unStreamIndex++;
2721+
2722+ SafeSprintf(szRegistryName, MAX_DISPLAY_NAME, "%s.Player%ld.Source%ld.Stream%ld",
2723+ pszRegistryPrefix, unPlayerIndex, unSourceIndex, unStreamIndex);
2724+ }
2725+
2726+ unSourceIndex++;
2727+
2728+ SafeSprintf(szRegistryName, MAX_DISPLAY_NAME, "%s.Player%ld.Source%ld",
2729+ pszRegistryPrefix, unPlayerIndex, unSourceIndex);
2730+ }
2731+
2732+ unPlayerIndex++;
2733+
2734+ SafeSprintf(szRegistryName, MAX_DISPLAY_NAME, "%s.Player%ld", pszRegistryPrefix, unPlayerIndex);
2735+ }
2736+ }
2737+}
2738+
2739+/************************************************************************
2740+ * Method:
2741+ * IHXClientAdviseSink::OnStatisticsChanged
2742+ * Purpose:
2743+ * Called to advise the client that the presentation statistics
2744+ * have changed.
2745+ */
2746+STDMETHODIMP ExampleClientAdviceSink::OnStatisticsChanged(void)
2747+{
2748+ char szBuff[1024]; /* Flawfinder: ignore */
2749+ HX_RESULT res = HXR_OK;
2750+ UINT16 uPlayer = 0;
2751+
2752+#ifdef __TCS__
2753+ return HXR_OK; // DISABLED FOR NOW
2754+#endif
2755+
2756+ if(GetGlobal()->bEnableAdviceSink)
2757+ {
2758+ STDOUT("OnStatisticsChanged():\n");
2759+
2760+ SafeSprintf(szBuff, 1024, "Statistics");
2761+ res = DumpRegTree( szBuff );
2762+ }
2763+
2764+ return HXR_OK;
2765+}
2766+
2767+HX_RESULT ExampleClientAdviceSink::DumpRegTree(const char* pszTreeName )
2768+{
2769+ const char* pszName = NULL;
2770+ ULONG32 ulRegID = 0;
2771+ HX_RESULT res = HXR_OK;
2772+ INT32 nVal = 0;
2773+ IHXBuffer* pBuff = NULL;
2774+ IHXValues* pValues = NULL;
2775+
2776+ //See if the name exists in the reg tree.
2777+ res = m_pRegistry->GetPropListByName( pszTreeName, pValues);
2778+ if( HXR_OK!=res || !pValues )
2779+ return HXR_FAIL;
2780+
2781+ //make sure this is a PT_COMPOSITE type reg entry.
2782+ if( PT_COMPOSITE != m_pRegistry->GetTypeByName(pszTreeName))
2783+ return HXR_FAIL;
2784+
2785+ //Print out the value of each member of this tree.
2786+ res = pValues->GetFirstPropertyULONG32( pszName, ulRegID );
2787+ while( HXR_OK == res )
2788+ {
2789+ //We have at least one entry. See what type it is.
2790+ HXPropType pt = m_pRegistry->GetTypeById(ulRegID);
2791+ switch(pt)
2792+ {
2793+ case PT_COMPOSITE:
2794+ DumpRegTree(pszName);
2795+ break;
2796+ case PT_INTEGER :
2797+ nVal = 0;
2798+ m_pRegistry->GetIntById( ulRegID, nVal );
2799+ STDOUT("%s : %d\n", pszName, nVal );
2800+ break;
2801+ case PT_INTREF :
2802+ nVal = 0;
2803+ m_pRegistry->GetIntById( ulRegID, nVal );
2804+ STDOUT("%s : %d\n", pszName, nVal );
2805+ break;
2806+ case PT_STRING :
2807+ pBuff = NULL;
2808+ m_pRegistry->GetStrById( ulRegID, pBuff );
2809+ STDOUT("%s : \"", pszName );
2810+ if( pBuff )
2811+ STDOUT("%s", (const char *)(pBuff->GetBuffer()) );
2812+ STDOUT("\"\n" );
2813+ HX_RELEASE(pBuff);
2814+ break;
2815+ case PT_BUFFER :
2816+ STDOUT("%s : BUFFER TYPE NOT SHOWN\n",
2817+ pszName, nVal );
2818+ break;
2819+ case PT_UNKNOWN:
2820+ STDOUT("%s Unkown registry type entry\n", pszName );
2821+ break;
2822+ default:
2823+ STDOUT("%s Unkown registry type entry\n", pszName );
2824+ break;
2825+ }
2826+ res = pValues->GetNextPropertyULONG32( pszName, ulRegID);
2827+ }
2828+
2829+ HX_RELEASE( pValues );
2830+
2831+ return HXR_OK;
2832+}
2833+
2834+
2835+/************************************************************************
2836+ * Method:
2837+ * IHXClientAdviseSink::OnPreSeek
2838+ * Purpose:
2839+ * Called by client engine to inform the client that a seek is
2840+ * about to occur. The render is informed the last time for the
2841+ * stream's time line before the seek, as well as the first new
2842+ * time for the stream's time line after the seek will be completed.
2843+ *
2844+ */
2845+STDMETHODIMP ExampleClientAdviceSink::OnPreSeek( ULONG32 ulOldTime,
2846+ ULONG32 ulNewTime)
2847+{
2848+#if !defined(__TCS__)
2849+ if (GetGlobal()->bEnableAdviceSink)
2850+ {
2851+ STDOUT("OnPreSeek(%ld, %ld)\n", ulOldTime, ulNewTime);
2852+ }
2853+#endif
2854+
2855+ return HXR_OK;
2856+}
2857+
2858+
2859+/************************************************************************
2860+ * Method:
2861+ * IHXClientAdviseSink::OnPostSeek
2862+ * Purpose:
2863+ * Called by client engine to inform the client that a seek has
2864+ * just occured. The render is informed the last time for the
2865+ * stream's time line before the seek, as well as the first new
2866+ * time for the stream's time line after the seek.
2867+ *
2868+ */
2869+STDMETHODIMP ExampleClientAdviceSink::OnPostSeek( ULONG32 ulOldTime,
2870+ ULONG32 ulNewTime)
2871+{
2872+#ifdef __TCS__
2873+ lastPosition = -1;
2874+#else
2875+ if (GetGlobal()->bEnableAdviceSink)
2876+ {
2877+ STDOUT("OnPostSeek(%ld, %ld)\n", ulOldTime, ulNewTime);
2878+ }
2879+#endif
2880+
2881+ return HXR_OK;
2882+}
2883+
2884+
2885+/************************************************************************
2886+ * Method:
2887+ * IHXClientAdviseSink::OnStop
2888+ * Purpose:
2889+ * Called by client engine to inform the client that a stop has
2890+ * just occured.
2891+ *
2892+ */
2893+STDMETHODIMP ExampleClientAdviceSink::OnStop(void)
2894+{
2895+ HXTimeval now;
2896+
2897+#ifdef __TCS__
2898+ hookRealAudio_State(eStop);
2899+#else
2900+ if (GetGlobal()->bEnableAdviceSink)
2901+ {
2902+ STDOUT("OnStop()\n");
2903+ }
2904+
2905+ if (GetGlobal()->bEnableVerboseMode)
2906+ {
2907+ STDOUT("Player %ld stopped.\n", m_lClientIndex);
2908+ m_bOnStop = TRUE;
2909+ GetAllStatistics();
2910+ }
2911+#endif
2912+
2913+ // Find out the current time and subtract the beginning time to
2914+ // figure out how many seconds we played
2915+ now = m_pScheduler->GetCurrentSchedulerTime();
2916+ m_ulStopTime = now.tv_sec;
2917+
2918+ GetGlobal()->g_ulNumSecondsPlayed = m_ulStopTime - m_ulStartTime;
2919+
2920+ return HXR_OK;
2921+}
2922+
2923+/************************************************************************
2924+ * Method:
2925+ * IHXClientAdviseSink::OnPause
2926+ * Purpose:
2927+ * Called by client engine to inform the client that a pause has
2928+ * just occured. The render is informed the last time for the
2929+ * stream's time line before the pause.
2930+ *
2931+ */
2932+STDMETHODIMP ExampleClientAdviceSink::OnPause(ULONG32 ulTime)
2933+{
2934+#ifdef __TCS__
2935+ hookRealAudio_State(ePause);
2936+#else
2937+ if (GetGlobal()->bEnableAdviceSink)
2938+ {
2939+ STDOUT("OnPause(%ld)\n", ulTime);
2940+ }
2941+#endif
2942+
2943+ return HXR_OK;
2944+}
2945+
2946+
2947+/************************************************************************
2948+ * Method:
2949+ * IHXClientAdviseSink::OnBegin
2950+ * Purpose:
2951+ * Called by client engine to inform the client that a begin or
2952+ * resume has just occured. The render is informed the first time
2953+ * for the stream's time line after the resume.
2954+ *
2955+ */
2956+STDMETHODIMP ExampleClientAdviceSink::OnBegin(ULONG32 ulTime)
2957+{
2958+ HXTimeval now;
2959+
2960+#if !defined(__TCS__)
2961+ if (GetGlobal()->bEnableAdviceSink)
2962+ {
2963+ STDOUT("OnBegin(%ld)\n", ulTime);
2964+ }
2965+
2966+ if (GetGlobal()->bEnableVerboseMode)
2967+ {
2968+ STDOUT("Player %ld beginning playback...\n", m_lClientIndex);
2969+ }
2970+#endif
2971+
2972+ GetGlobal()->g_bOnBeginOccurred = TRUE;
2973+
2974+ // Record the current time, so we can figure out many seconds we played
2975+ now = m_pScheduler->GetCurrentSchedulerTime();
2976+ m_ulStartTime = now.tv_sec;
2977+
2978+ return HXR_OK;
2979+}
2980+
2981+
2982+/************************************************************************
2983+ * Method:
2984+ * IHXClientAdviseSink::OnBuffering
2985+ * Purpose:
2986+ * Called by client engine to inform the client that buffering
2987+ * of data is occuring. The render is informed of the reason for
2988+ * the buffering (start-up of stream, seek has occured, network
2989+ * congestion, etc.), as well as percentage complete of the
2990+ * buffering process.
2991+ *
2992+ */
2993+STDMETHODIMP ExampleClientAdviceSink::OnBuffering(ULONG32 ulFlags,
2994+ UINT16 unPercentComplete)
2995+{
2996+#ifdef __TCS__
2997+static UINT16 lastPct = 0;
2998+ if (unPercentComplete > 0)
2999+ {
3000+ UINT16 nextPct = lastPct + 10;
3001+ if (unPercentComplete < lastPct)
3002+ {
3003+ lastPct = 0;
3004+ nextPct = lastPct + 10;
3005+ }
3006+ if (unPercentComplete >= nextPct)
3007+ {
3008+ lastPct = (unPercentComplete / 10) * 10;
3009+ nextPct = lastPct + 10;
3010+ hookRealAudio_Buffering(eBuffering,lastPct);
3011+ }
3012+ }
3013+#else
3014+ if (GetGlobal()->bEnableAdviceSink)
3015+ {
3016+ STDOUT("OnBuffering(%ld, %d)\n", ulFlags, unPercentComplete);
3017+ }
3018+#endif
3019+ if (m_on_buffering_cb)
3020+ m_on_buffering_cb(ulFlags, unPercentComplete, m_context);
3021+
3022+ return HXR_OK;
3023+}
3024+
3025+
3026+/************************************************************************
3027+ * Method:
3028+ * IHXClientAdviseSink::OnContacting
3029+ * Purpose:
3030+ * Called by client engine to inform the client is contacting
3031+ * hosts(s).
3032+ *
3033+ */
3034+STDMETHODIMP ExampleClientAdviceSink::OnContacting(const char* pHostName)
3035+{
3036+#ifdef __TCS__
3037+ printf("Contacting\n");
3038+ hookRealAudio_Buffering(eContacting,0);
3039+#else
3040+ if (GetGlobal()->bEnableAdviceSink)
3041+ {
3042+ STDOUT("OnContacting(\"%s\")\n", pHostName);
3043+ }
3044+#endif
3045+
3046+ return HXR_OK;
3047+}
3048+
3049+void ExampleClientAdviceSink::PrintPropName( IHXValues* pHeader )
3050+{
3051+ if ( pHeader == NULL )
3052+ {
3053+ return ;
3054+ }
3055+
3056+ const char *pChar;
3057+ ULONG32 pValue;
3058+ if(HXR_OK == pHeader->GetFirstPropertyULONG32(pChar, pValue))
3059+ {
3060+ do
3061+ {
3062+ STDOUT("%s %d\n", pChar, pValue);
3063+ }
3064+ while(HXR_OK == pHeader->GetNextPropertyULONG32(pChar, pValue));
3065+ }
3066+
3067+ IHXBuffer *pBuffer;
3068+
3069+ if(HXR_OK == pHeader->GetFirstPropertyBuffer(pChar, pBuffer))
3070+ {
3071+ do
3072+ {
3073+ STDOUT("%s %s\n", pChar, (const char *) ( pBuffer->GetBuffer() ));
3074+ PrintBuffer(pChar, pBuffer->GetBuffer() ,pBuffer->GetSize());
3075+ HX_RELEASE(pBuffer);
3076+ } while(HXR_OK == pHeader->GetNextPropertyBuffer(pChar, pBuffer ));
3077+ }
3078+
3079+ if(HXR_OK == pHeader->GetFirstPropertyCString(pChar, pBuffer))
3080+ {
3081+ do
3082+ {
3083+ STDERR("%s %s\n", pChar, (const char *) ( pBuffer->GetBuffer() ));
3084+ HX_RELEASE(pBuffer);
3085+ } while(HXR_OK == pHeader->GetNextPropertyCString(pChar, pBuffer ));
3086+ }
3087+
3088+ fflush(stdout);
3089+}
3090+
3091+
3092+void ExampleClientAdviceSink::SetClipInfo( IHXPlayer* m_pRMAPlayer)
3093+{
3094+ bool bSendOnClipInfo = false;
3095+
3096+ // Get HXSource and try to get clip infor.
3097+ UINT32 sourceCount = m_pRMAPlayer->GetSourceCount();
3098+ for (UINT32 sourceID = 0; sourceID < sourceCount; sourceID ++)
3099+ {
3100+ // get HXSource
3101+ STDOUT("========Source %d========\n",sourceID);
3102+ IUnknown* pUnkSource = NULL;
3103+ IHXStreamSource* pStreamSrc = NULL;
3104+
3105+ if (HXR_OK != m_pRMAPlayer->GetSource (sourceID, pUnkSource))
3106+ {
3107+ continue;
3108+ }
3109+
3110+ pUnkSource->QueryInterface(IID_IHXStreamSource, (void **)&pStreamSrc);
3111+
3112+ HX_RELEASE(pUnkSource);
3113+
3114+ if (!pStreamSrc)
3115+ {
3116+ continue;
3117+ }
3118+
3119+ UINT32 num_streams = pStreamSrc->GetStreamCount();
3120+
3121+ STDOUT("====File Header====\n");
3122+
3123+ IHXValues* pFileHdr = NULL;
3124+ pStreamSrc->QueryInterface(IID_IHXValues, (void**)&pFileHdr);
3125+
3126+ if ( pFileHdr)
3127+ {
3128+ PrintPropName(pFileHdr);
3129+ }
3130+ HX_RELEASE(pFileHdr);
3131+
3132+ // get information from Streams
3133+ for (UINT32 streamID = 0; streamID < num_streams ; streamID++)
3134+ {
3135+ STDOUT("====Stream %d====\n",streamID);
3136+ IUnknown* pUnkStream = NULL;
3137+
3138+ if (HXR_OK == pStreamSrc->GetStream(streamID, pUnkStream))
3139+ {
3140+ IHXStream* pStream = NULL;
3141+
3142+ if (HXR_OK == pUnkStream->QueryInterface(IID_IHXStream,
3143+ (void**)&pStream))
3144+ {
3145+ IHXValues* pStreamHdr = pStream->GetHeader();
3146+ if (pStreamHdr)
3147+ {
3148+ PrintPropName(pStreamHdr);
3149+ }
3150+ HX_RELEASE(pStreamHdr);
3151+ }
3152+ HX_RELEASE(pStream);
3153+ }
3154+ HX_RELEASE(pUnkStream);
3155+ }
3156+ STDOUT("---------------------------------------------\n");
3157+
3158+ HX_RELEASE(pStreamSrc);
3159+ }
3160+}
3161+
3162+
3163+STDMETHODIMP ExampleClientAdviceSink::Func()
3164+{
3165+ m_hCallback = 0;
3166+
3167+ // set clip info
3168+ if(m_pPlayer)
3169+ SetClipInfo(m_pPlayer);
3170+
3171+ return HXR_OK;
3172+}
3173+
3174+void PrintBuffer(const char* pszName,const unsigned char* pbBuf, unsigned int dwBytes)
3175+{
3176+ if(pszName == NULL || pbBuf == NULL)
3177+ return;
3178+
3179+ STDOUT(" ");
3180+ for(unsigned int i= 0; i<dwBytes; i++) {
3181+ STDOUT("0x%02x ",*pbBuf++);
3182+ if(i % 15 == 0 && i!=0)
3183+ STDOUT("\n ");
3184+ }
3185+ STDOUT("\n");
3186+ return;
3187+}
3188+
3189+/*
3190+ * IHXGroupSink methods
3191+ */
3192+/************************************************************************
3193+ * Method:
3194+ * IHXGroupSink::GroupAdded
3195+ * Purpose:
3196+ * Notification of a new group being added to the presentation.
3197+ */
3198+STDMETHODIMP ExampleClientAdviceSink::GroupAdded( UINT16 /*IN*/ uGroupIndex,
3199+ IHXGroup* /*IN*/ pGroup)
3200+{
3201+ return HXR_OK;
3202+}
3203+
3204+/************************************************************************
3205+ * Method:
3206+ * IHXGroupSink::GroupRemoved
3207+ * Purpose:
3208+ * Notification of a group being removed from the presentation.
3209+ */
3210+STDMETHODIMP ExampleClientAdviceSink::GroupRemoved( UINT16 /*IN*/ uGroupIndex,
3211+ IHXGroup* /*IN*/ pGroup)
3212+{
3213+ return HXR_OK;
3214+}
3215+
3216+/************************************************************************
3217+ * Method:
3218+ * IHXGroupSink::AllGroupsRemoved
3219+ * Purpose:
3220+ * Notification that all groups have been removed from the
3221+ * current presentation.
3222+ */
3223+STDMETHODIMP ExampleClientAdviceSink::AllGroupsRemoved()
3224+{
3225+ return HXR_OK;
3226+}
3227+
3228+/************************************************************************
3229+ * Method:
3230+ * IHXGroupSink::TrackAdded
3231+ * Purpose:
3232+ * Notification of a new track being added to a group.
3233+ */
3234+STDMETHODIMP ExampleClientAdviceSink::TrackAdded( UINT16 /*IN*/ uGroupIndex,
3235+ UINT16 /*IN*/ uTrackIndex,
3236+ IHXValues* /*IN*/ pTrack)
3237+{
3238+ return HXR_OK;
3239+}
3240+
3241+/************************************************************************
3242+ * Method:
3243+ * IHXGroupSink::TrackRemoved
3244+ * Purpose:
3245+ * Notification of a track being removed from a group.
3246+ */
3247+STDMETHODIMP ExampleClientAdviceSink::TrackRemoved( UINT16 /*IN*/ uGroupIndex,
3248+ UINT16 /*IN*/ uTrackIndex,
3249+ IHXValues* /*IN*/ pTrack)
3250+{
3251+ return HXR_OK;
3252+}
3253+
3254+/************************************************************************
3255+ * Method:
3256+ * IHXGroupSink::TrackStarted
3257+ * Purpose:
3258+ * Notification of a track being started (to get duration, for
3259+ * instance...)
3260+ */
3261+STDMETHODIMP ExampleClientAdviceSink::TrackStarted( UINT16 /*IN*/ uGroupIndex,
3262+ UINT16 /*IN*/ uTrackIndex,
3263+ IHXValues* /*IN*/ pTrack)
3264+{
3265+ if ( m_bWaitForTrackStart )
3266+ {
3267+ STDOUT("----------------clip info--------------------\n");
3268+ if(m_pScheduler)
3269+ {
3270+ m_hCallback = m_pScheduler->RelativeEnter(this,50);
3271+ }
3272+ m_bWaitForTrackStart = FALSE;
3273+ }
3274+ return HXR_OK;
3275+}
3276+
3277+/************************************************************************
3278+ * Method:
3279+ * IHXGroupSink::TrackStopped
3280+ * Purpose:
3281+ * Notification of a track being stopped
3282+ *
3283+ */
3284+STDMETHODIMP ExampleClientAdviceSink::TrackStopped( UINT16 /*IN*/ uGroupIndex,
3285+ UINT16 /*IN*/ uTrackIndex,
3286+ IHXValues* /*IN*/ pTrack)
3287+{
3288+ return HXR_OK;
3289+}
3290+
3291+/************************************************************************
3292+ * Method:
3293+ * IHXGroupSink::CurrentGroupSet
3294+ * Purpose:
3295+ * This group is being currently played in the presentation.
3296+ */
3297+STDMETHODIMP ExampleClientAdviceSink::CurrentGroupSet( UINT16 /*IN*/ uGroupIndex,
3298+ IHXGroup* /*IN*/ pGroup)
3299+{
3300+ return HXR_OK;
3301+}
3302+
3303Index: helix-libs/clientapps/clutter/exadvsnk.h
3304===================================================================
3305--- /dev/null 1970-01-01 00:00:00.000000000 +0000
3306+++ helix-libs/clientapps/clutter/exadvsnk.h 2008-10-13 06:05:49.000000000 -0700
3307@@ -0,0 +1,324 @@
3308+/* ***** BEGIN LICENSE BLOCK *****
3309+ * Version: RCSL 1.0/RPSL 1.0
3310+ *
3311+ * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
3312+ *
3313+ * The contents of this file, and the files included with this file, are
3314+ * subject to the current version of the RealNetworks Public Source License
3315+ * Version 1.0 (the "RPSL") available at
3316+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
3317+ * the file under the RealNetworks Community Source License Version 1.0
3318+ * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
3319+ * in which case the RCSL will apply. You may also obtain the license terms
3320+ * directly from RealNetworks. You may not use this file except in
3321+ * compliance with the RPSL or, if you have a valid RCSL with RealNetworks
3322+ * applicable to this file, the RCSL. Please see the applicable RPSL or
3323+ * RCSL for the rights, obligations and limitations governing use of the
3324+ * contents of the file.
3325+ *
3326+ * This file is part of the Helix DNA Technology. RealNetworks is the
3327+ * developer of the Original Code and owns the copyrights in the portions
3328+ * it created.
3329+ *
3330+ * This file, and the files included with this file, is distributed and made
3331+ * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
3332+ * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
3333+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
3334+ * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
3335+ *
3336+ * Technology Compatibility Kit Test Suite(s) Location:
3337+ * http://www.helixcommunity.org/content/tck
3338+ *
3339+ * Contributor(s):
3340+ *
3341+ * ***** END LICENSE BLOCK ***** */
3342+
3343+#ifndef _EXAMPLECLSNK_
3344+#define _EXAMPLECLSNK_
3345+
3346+#include "player.h"
3347+
3348+struct IHXClientAdviseSink;
3349+struct IHXGroupSink;
3350+struct IUnknown;
3351+struct IHXRegistry;
3352+struct IHXScheduler;
3353+struct IHXCallback;
3354+struct IHXPlayer;
3355+struct IHXGroup;
3356+
3357+class ExampleClientAdviceSink : public IHXClientAdviseSink,
3358+ public IHXGroupSink,
3359+ public IHXCallback
3360+{
3361+ private:
3362+ LONG32 m_lRefCount;
3363+ LONG32 m_lClientIndex;
3364+
3365+ IUnknown* m_pUnknown;
3366+ IHXRegistry* m_pRegistry;
3367+ IHXScheduler* m_pScheduler;
3368+
3369+ UINT32 m_ulStartTime;
3370+ UINT32 m_ulStopTime;
3371+
3372+ UINT32 m_lCurrentBandwidth;
3373+ UINT32 m_lAverageBandwidth;
3374+ HXBOOL m_bOnStop;
3375+
3376+ HXBOOL m_bWaitForTrackStart;
3377+
3378+ on_buffering_cb_t m_on_buffering_cb;
3379+ on_pos_length_cb_t m_on_pos_length_cb;
3380+ void *m_context; /* a argument passed by texture-helix lib */
3381+
3382+ // IHXCallback
3383+ IHXPlayer* m_pPlayer;
3384+ ULONG32 m_hCallback;
3385+ ~ExampleClientAdviceSink();
3386+ HX_RESULT DumpRegTree(const char* pszTreeName );
3387+
3388+
3389+ void GetStatistics (char* /*IN*/ pszRegistryKey);
3390+ void GetAllStatistics (void);
3391+ void SetClipInfo( IHXPlayer* m_pRMAPlayer);
3392+ void PrintPropName( IHXValues* pHeader );
3393+
3394+ public:
3395+
3396+ ExampleClientAdviceSink(IUnknown* /*IN*/ pUnknown, LONG32 /*IN*/ lClientIndex, on_buffering_cb_t on_buffer_cb, on_pos_length_cb_t on_pos_length_cb, void *context);
3397+
3398+ /*
3399+ * IUnknown methods
3400+ */
3401+ STDMETHOD(QueryInterface) (THIS_
3402+ REFIID riid,
3403+ void** ppvObj);
3404+
3405+ STDMETHOD_(ULONG32,AddRef) (THIS);
3406+
3407+ STDMETHOD_(ULONG32,Release) (THIS);
3408+
3409+ /*
3410+ * IHXClientAdviseSink methods
3411+ */
3412+
3413+ /************************************************************************
3414+ * Method:
3415+ * IHXClientAdviseSink::OnPosLength
3416+ * Purpose:
3417+ * Called to advise the client that the position or length of the
3418+ * current playback context has changed.
3419+ */
3420+ STDMETHOD(OnPosLength) (THIS_
3421+ UINT32 ulPosition,
3422+ UINT32 ulLength);
3423+
3424+ /************************************************************************
3425+ * Method:
3426+ * IHXClientAdviseSink::OnPresentationOpened
3427+ * Purpose:
3428+ * Called to advise the client a presentation has been opened.
3429+ */
3430+ STDMETHOD(OnPresentationOpened) (THIS);
3431+
3432+ /************************************************************************
3433+ * Method:
3434+ * IHXClientAdviseSink::OnPresentationClosed
3435+ * Purpose:
3436+ * Called to advise the client a presentation has been closed.
3437+ */
3438+ STDMETHOD(OnPresentationClosed) (THIS);
3439+
3440+ /************************************************************************
3441+ * Method:
3442+ * IHXClientAdviseSink::OnStatisticsChanged
3443+ * Purpose:
3444+ * Called to advise the client that the presentation statistics
3445+ * have changed.
3446+ */
3447+ STDMETHOD(OnStatisticsChanged) (THIS);
3448+
3449+ /************************************************************************
3450+ * Method:
3451+ * IHXClientAdviseSink::OnPreSeek
3452+ * Purpose:
3453+ * Called by client engine to inform the client that a seek is
3454+ * about to occur. The render is informed the last time for the
3455+ * stream's time line before the seek, as well as the first new
3456+ * time for the stream's time line after the seek will be completed.
3457+ *
3458+ */
3459+ STDMETHOD (OnPreSeek) (THIS_
3460+ ULONG32 ulOldTime,
3461+ ULONG32 ulNewTime);
3462+
3463+ /************************************************************************
3464+ * Method:
3465+ * IHXClientAdviseSink::OnPostSeek
3466+ * Purpose:
3467+ * Called by client engine to inform the client that a seek has
3468+ * just occured. The render is informed the last time for the
3469+ * stream's time line before the seek, as well as the first new
3470+ * time for the stream's time line after the seek.
3471+ *
3472+ */
3473+ STDMETHOD (OnPostSeek) (THIS_
3474+ ULONG32 ulOldTime,
3475+ ULONG32 ulNewTime);
3476+
3477+ /************************************************************************
3478+ * Method:
3479+ * IHXClientAdviseSink::OnStop
3480+ * Purpose:
3481+ * Called by client engine to inform the client that a stop has
3482+ * just occured.
3483+ *
3484+ */
3485+ STDMETHOD (OnStop) (THIS);
3486+
3487+ /************************************************************************
3488+ * Method:
3489+ * IHXClientAdviseSink::OnPause
3490+ * Purpose:
3491+ * Called by client engine to inform the client that a pause has
3492+ * just occured. The render is informed the last time for the
3493+ * stream's time line before the pause.
3494+ *
3495+ */
3496+ STDMETHOD (OnPause) (THIS_
3497+ ULONG32 ulTime);
3498+
3499+ /************************************************************************
3500+ * Method:
3501+ * IHXClientAdviseSink::OnBegin
3502+ * Purpose:
3503+ * Called by client engine to inform the client that a begin or
3504+ * resume has just occured. The render is informed the first time
3505+ * for the stream's time line after the resume.
3506+ *
3507+ */
3508+ STDMETHOD (OnBegin) (THIS_
3509+ ULONG32 ulTime);
3510+
3511+ /************************************************************************
3512+ * Method:
3513+ * IHXClientAdviseSink::OnBuffering
3514+ * Purpose:
3515+ * Called by client engine to inform the client that buffering
3516+ * of data is occuring. The render is informed of the reason for
3517+ * the buffering (start-up of stream, seek has occured, network
3518+ * congestion, etc.), as well as percentage complete of the
3519+ * buffering process.
3520+ *
3521+ */
3522+ STDMETHOD (OnBuffering) (THIS_
3523+ ULONG32 ulFlags,
3524+ UINT16 unPercentComplete);
3525+
3526+
3527+ /************************************************************************
3528+ * Method:
3529+ * IHXClientAdviseSink::OnContacting
3530+ * Purpose:
3531+ * Called by client engine to inform the client is contacting
3532+ * hosts(s).
3533+ *
3534+ */
3535+ STDMETHOD (OnContacting) (THIS_
3536+ const char* pHostName);
3537+
3538+ // IHXCallback
3539+ STDMETHOD(Func) (THIS);
3540+
3541+ /*
3542+ * IHXGroupSink methods
3543+ */
3544+ /************************************************************************
3545+ * Method:
3546+ * IHXGroupSink::GroupAdded
3547+ * Purpose:
3548+ * Notification of a new group being added to the presentation.
3549+ */
3550+ STDMETHOD(GroupAdded) (THIS_
3551+ UINT16 /*IN*/ uGroupIndex,
3552+ IHXGroup* /*IN*/ pGroup);
3553+
3554+ /************************************************************************
3555+ * Method:
3556+ * IHXGroupSink::GroupRemoved
3557+ * Purpose:
3558+ * Notification of a group being removed from the presentation.
3559+ */
3560+ STDMETHOD(GroupRemoved) (THIS_
3561+ UINT16 /*IN*/ uGroupIndex,
3562+ IHXGroup* /*IN*/ pGroup);
3563+
3564+ /************************************************************************
3565+ * Method:
3566+ * IHXGroupSink::AllGroupsRemoved
3567+ * Purpose:
3568+ * Notification that all groups have been removed from the
3569+ * current presentation.
3570+ */
3571+ STDMETHOD(AllGroupsRemoved) (THIS);
3572+
3573+ /************************************************************************
3574+ * Method:
3575+ * IHXGroupSink::TrackAdded
3576+ * Purpose:
3577+ * Notification of a new track being added to a group.
3578+ */
3579+ STDMETHOD(TrackAdded) (THIS_
3580+ UINT16 /*IN*/ uGroupIndex,
3581+ UINT16 /*IN*/ uTrackIndex,
3582+ IHXValues* /*IN*/ pTrack);
3583+
3584+ /************************************************************************
3585+ * Method:
3586+ * IHXGroupSink::TrackRemoved
3587+ * Purpose:
3588+ * Notification of a track being removed from a group.
3589+ */
3590+ STDMETHOD(TrackRemoved) (THIS_
3591+ UINT16 /*IN*/ uGroupIndex,
3592+ UINT16 /*IN*/ uTrackIndex,
3593+ IHXValues* /*IN*/ pTrack);
3594+
3595+ /************************************************************************
3596+ * Method:
3597+ * IHXGroupSink::TrackStarted
3598+ * Purpose:
3599+ * Notification of a track being started (to get duration, for
3600+ * instance...)
3601+ */
3602+ STDMETHOD (TrackStarted) (THIS_
3603+ UINT16 /*IN*/ uGroupIndex,
3604+ UINT16 /*IN*/ uTrackIndex,
3605+ IHXValues* /*IN*/ pTrack) ;
3606+
3607+ /************************************************************************
3608+ * Method:
3609+ * IHXGroupSink::TrackStopped
3610+ * Purpose:
3611+ * Notification of a track being stopped
3612+ *
3613+ */
3614+ STDMETHOD(TrackStopped) (THIS_
3615+ UINT16 /*IN*/ uGroupIndex,
3616+ UINT16 /*IN*/ uTrackIndex,
3617+ IHXValues* /*IN*/ pTrack);
3618+
3619+ /************************************************************************
3620+ * Method:
3621+ * IHXGroupSink::CurrentGroupSet
3622+ * Purpose:
3623+ * This group is being currently played in the presentation.
3624+ */
3625+ STDMETHOD(CurrentGroupSet) (THIS_
3626+ UINT16 /*IN*/ uGroupIndex,
3627+ IHXGroup* /*IN*/ pGroup);
3628+
3629+};
3630+
3631+#endif /* _EXAMPLECLSNK_ */
3632Index: helix-libs/clientapps/clutter/exaumgr.cpp
3633===================================================================
3634--- /dev/null 1970-01-01 00:00:00.000000000 +0000
3635+++ helix-libs/clientapps/clutter/exaumgr.cpp 2008-10-13 06:05:49.000000000 -0700
3636@@ -0,0 +1,137 @@
3637+/* ***** BEGIN LICENSE BLOCK *****
3638+ * Version: RCSL 1.0/RPSL 1.0
3639+ *
3640+ * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
3641+ *
3642+ * The contents of this file, and the files included with this file, are
3643+ * subject to the current version of the RealNetworks Public Source License
3644+ * Version 1.0 (the "RPSL") available at
3645+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
3646+ * the file under the RealNetworks Community Source License Version 1.0
3647+ * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
3648+ * in which case the RCSL will apply. You may also obtain the license terms
3649+ * directly from RealNetworks. You may not use this file except in
3650+ * compliance with the RPSL or, if you have a valid RCSL with RealNetworks
3651+ * applicable to this file, the RCSL. Please see the applicable RPSL or
3652+ * RCSL for the rights, obligations and limitations governing use of the
3653+ * contents of the file.
3654+ *
3655+ * This file is part of the Helix DNA Technology. RealNetworks is the
3656+ * developer of the Original Code and owns the copyrights in the portions
3657+ * it created.
3658+ *
3659+ * This file, and the files included with this file, is distributed and made
3660+ * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
3661+ * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
3662+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
3663+ * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
3664+ *
3665+ * Technology Compatibility Kit Test Suite(s) Location:
3666+ * http://www.helixcommunity.org/content/tck
3667+ *
3668+ * Contributor(s):
3669+ *
3670+ * ***** END LICENSE BLOCK ***** */
3671+
3672+#include <stdio.h>
3673+#include "hxtypes.h"
3674+#include "hxcom.h"
3675+#include "hxauth.h"
3676+#include "hxstrutl.h"
3677+#include "exaumgr.h"
3678+#include <ctype.h>
3679+#include "print.h"
3680+
3681+
3682+#include "globals.h"
3683+struct _stGlobals*& GetGlobal(); //in main.cpp
3684+
3685+
3686+
3687+ExampleAuthenticationManager::ExampleAuthenticationManager() :
3688+ m_lRefCount(0),
3689+ m_bSentPassword(FALSE)
3690+{
3691+}
3692+
3693+ExampleAuthenticationManager::~ExampleAuthenticationManager()
3694+{
3695+}
3696+
3697+STDMETHODIMP
3698+ExampleAuthenticationManager::QueryInterface(REFIID riid, void**ppvObj)
3699+{
3700+ if(IsEqualIID(riid, IID_IUnknown))
3701+ {
3702+ AddRef();
3703+ *ppvObj = (IUnknown*)(IHXAuthenticationManager*)this;
3704+ return HXR_OK;
3705+ }
3706+ else if(IsEqualIID(riid, IID_IHXAuthenticationManager))
3707+ {
3708+ AddRef();
3709+ *ppvObj = (IHXAuthenticationManager*)this;
3710+ return HXR_OK;
3711+ }
3712+ *ppvObj = NULL;
3713+ return HXR_NOINTERFACE;
3714+}
3715+
3716+STDMETHODIMP_(UINT32)
3717+ExampleAuthenticationManager::AddRef()
3718+{
3719+ return InterlockedIncrement(&m_lRefCount);
3720+}
3721+
3722+STDMETHODIMP_(UINT32)
3723+ExampleAuthenticationManager::Release()
3724+{
3725+ if (InterlockedDecrement(&m_lRefCount) > 0)
3726+ {
3727+ return m_lRefCount;
3728+ }
3729+
3730+ delete this;
3731+ return 0;
3732+}
3733+
3734+STDMETHODIMP
3735+ExampleAuthenticationManager::HandleAuthenticationRequest(IHXAuthenticationManagerResponse* pResponse)
3736+{
3737+ char username[1024] = ""; /* Flawfinder: ignore */
3738+ char password[1024] = ""; /* Flawfinder: ignore */
3739+ HX_RESULT res = HXR_FAIL;
3740+
3741+ if( !m_bSentPassword )
3742+ {
3743+ res = HXR_OK;
3744+ if (GetGlobal()->bEnableVerboseMode)
3745+ STDOUT("\nSending Username and Password...\n");
3746+
3747+ SafeStrCpy(username, GetGlobal()->g_pszUsername, 1024);
3748+ SafeStrCpy(password, GetGlobal()->g_pszPassword, 1024);
3749+
3750+ //strip trailing whitespace
3751+ char* c;
3752+ for(c = username + strlen(username) - 1;
3753+ c > username && isspace(*c);
3754+ c--)
3755+ ;
3756+ *(c+1) = 0;
3757+
3758+ for(c = password + strlen(password) - 1;
3759+ c > password && isspace(*c);
3760+ c--)
3761+ ;
3762+ *(c+1) = 0;
3763+
3764+ m_bSentPassword = TRUE;
3765+ }
3766+
3767+ if (GetGlobal()->bEnableVerboseMode && FAILED(res) )
3768+ STDOUT("\nInvalid Username and/or Password.\n");
3769+
3770+ pResponse->AuthenticationRequestDone(res, username, password);
3771+ return res;
3772+}
3773+
3774Index: helix-libs/clientapps/clutter/exaumgr.h
3775===================================================================
3776--- /dev/null 1970-01-01 00:00:00.000000000 +0000
3777+++ helix-libs/clientapps/clutter/exaumgr.h 2008-10-13 06:05:49.000000000 -0700
3778@@ -0,0 +1,56 @@
3779+/* ***** BEGIN LICENSE BLOCK *****
3780+ * Version: RCSL 1.0/RPSL 1.0
3781+ *
3782+ * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
3783+ *
3784+ * The contents of this file, and the files included with this file, are
3785+ * subject to the current version of the RealNetworks Public Source License
3786+ * Version 1.0 (the "RPSL") available at
3787+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
3788+ * the file under the RealNetworks Community Source License Version 1.0
3789+ * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
3790+ * in which case the RCSL will apply. You may also obtain the license terms
3791+ * directly from RealNetworks. You may not use this file except in
3792+ * compliance with the RPSL or, if you have a valid RCSL with RealNetworks
3793+ * applicable to this file, the RCSL. Please see the applicable RPSL or
3794+ * RCSL for the rights, obligations and limitations governing use of the
3795+ * contents of the file.
3796+ *
3797+ * This file is part of the Helix DNA Technology. RealNetworks is the
3798+ * developer of the Original Code and owns the copyrights in the portions
3799+ * it created.
3800+ *
3801+ * This file, and the files included with this file, is distributed and made
3802+ * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
3803+ * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
3804+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
3805+ * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
3806+ *
3807+ * Technology Compatibility Kit Test Suite(s) Location:
3808+ * http://www.helixcommunity.org/content/tck
3809+ *
3810+ * Contributor(s):
3811+ *
3812+ * ***** END LICENSE BLOCK ***** */
3813+
3814+#ifndef _EXAUMGR_H_
3815+#define _EXAUMGR_H_
3816+
3817+#include "hxauth.h"
3818+
3819+class ExampleAuthenticationManager : public IHXAuthenticationManager
3820+{
3821+private:
3822+ INT32 m_lRefCount;
3823+ HXBOOL m_bSentPassword;
3824+ ~ExampleAuthenticationManager();
3825+
3826+public:
3827+ ExampleAuthenticationManager();
3828+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, void** ppvObj);
3829+ STDMETHOD_(UINT32,AddRef) (THIS);
3830+ STDMETHOD_(UINT32,Release) (THIS);
3831+
3832+ STDMETHOD(HandleAuthenticationRequest) (IHXAuthenticationManagerResponse* pResponse);
3833+};
3834+#endif
3835Index: helix-libs/clientapps/clutter/excallback.cpp
3836===================================================================
3837--- /dev/null 1970-01-01 00:00:00.000000000 +0000
3838+++ helix-libs/clientapps/clutter/excallback.cpp 2008-10-13 06:05:49.000000000 -0700
3839@@ -0,0 +1,38 @@
3840+#include "excallback.h"
3841+
3842+STDMETHODIMP ExCallback::QueryInterface(REFIID riid, void** ppvObj)
3843+{
3844+ if (IsEqualIID(riid, IID_IHXCallback))
3845+ {
3846+ AddRef();
3847+ *ppvObj = (IHXCallback*)this;
3848+ return HXR_OK;
3849+ }
3850+ else if (IsEqualIID(riid, IID_IUnknown))
3851+ {
3852+ AddRef();
3853+ *ppvObj = this;
3854+ return HXR_OK;
3855+ }
3856+
3857+ *ppvObj = NULL;
3858+ return HXR_NOINTERFACE;
3859+}
3860+
3861+STDMETHODIMP_(ULONG32) ExCallback::AddRef()
3862+{
3863+ return HXR_OK;
3864+}
3865+
3866+STDMETHODIMP_(ULONG32) ExCallback::Release()
3867+{
3868+ return HXR_OK;
3869+}
3870+
3871+STDMETHODIMP ExCallback::Func(void)
3872+{
3873+ UINT32 sleepTime = 0;
3874+ m_pKicker->Kick(HXGetCurrentThreadID, &sleepTime);
3875+ printf("Get called, sleeptime:%d\n", sleepTime);
3876+ m_pScheduler->RelativeEnter(this, sleepTime/1000);
3877+}
3878Index: helix-libs/clientapps/clutter/excallback.h
3879===================================================================
3880--- /dev/null 1970-01-01 00:00:00.000000000 +0000
3881+++ helix-libs/clientapps/clutter/excallback.h 2008-10-13 06:05:49.000000000 -0700
3882@@ -0,0 +1,32 @@
3883+#ifndef _EX_CALLBACK_H_
3884+#define _EX_CALLBACK_H_
3885+
3886+#include "hxcom.h"
3887+#include "hxengin.h"
3888+#include "ihxmedpltfm.h"
3889+#include "thrdutil.h"
3890+
3891+class ExCallback : public IHXCallback
3892+{
3893+ public:
3894+ ExCallback(IHXScheduler *pIHXScheduler, IHXMediaPlatformKicker *pKicker) : m_pScheduler(pIHXScheduler), m_pKicker(pKicker){};
3895+
3896+ /*
3897+ * * IUnknown methods
3898+ * */
3899+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, void** ppvObj);
3900+ STDMETHOD_(ULONG32,AddRef) (THIS);
3901+ STDMETHOD_(ULONG32,Release) (THIS);
3902+
3903+ /*
3904+ * * IHXCallback methods
3905+ * */
3906+ STDMETHOD(Func) (THIS);
3907+ private:
3908+ IHXScheduler *m_pScheduler;
3909+ IHXMediaPlatformKicker* m_pKicker;
3910+
3911+};
3912+
3913+
3914+#endif
3915Index: helix-libs/clientapps/clutter/excontxt.cpp
3916===================================================================
3917--- /dev/null 1970-01-01 00:00:00.000000000 +0000
3918+++ helix-libs/clientapps/clutter/excontxt.cpp 2008-10-13 06:05:49.000000000 -0700
3919@@ -0,0 +1,315 @@
3920+/* ***** BEGIN LICENSE BLOCK *****
3921+ * Version: RCSL 1.0/RPSL 1.0
3922+ *
3923+ * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
3924+ *
3925+ * The contents of this file, and the files included with this file, are
3926+ * subject to the current version of the RealNetworks Public Source License
3927+ * Version 1.0 (the "RPSL") available at
3928+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
3929+ * the file under the RealNetworks Community Source License Version 1.0
3930+ * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
3931+ * in which case the RCSL will apply. You may also obtain the license terms
3932+ * directly from RealNetworks. You may not use this file except in
3933+ * compliance with the RPSL or, if you have a valid RCSL with RealNetworks
3934+ * applicable to this file, the RCSL. Please see the applicable RPSL or
3935+ * RCSL for the rights, obligations and limitations governing use of the
3936+ * contents of the file.
3937+ *
3938+ * This file is part of the Helix DNA Technology. RealNetworks is the
3939+ * developer of the Original Code and owns the copyrights in the portions
3940+ * it created.
3941+ *
3942+ * This file, and the files included with this file, is distributed and made
3943+ * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
3944+ * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
3945+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
3946+ * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
3947+ *
3948+ * Technology Compatibility Kit Test Suite(s) Location:
3949+ * http://www.helixcommunity.org/content/tck
3950+ *
3951+ * Contributor(s):
3952+ *
3953+ * ***** END LICENSE BLOCK ***** */
3954+
3955+#include "hxtypes.h"
3956+
3957+#include "hxwintyp.h"
3958+#include "hxcom.h"
3959+#include "hxcomm.h"
3960+#include "hxwin.h"
3961+#include "fivemmap.h"
3962+
3963+#include "hxbuffer.h"
3964+#include "hxmangle.h"
3965+
3966+#include "hxclsnk.h"
3967+#include "hxgroup.h"
3968+#include "hxerror.h"
3969+#include "hxprefs.h"
3970+#include "hxstrutl.h"
3971+
3972+#include "exadvsnk.h"
3973+#include "exstateadvsnk.h"
3974+#include "exerror.h"
3975+#include "exsitsup.h"
3976+#include "exaumgr.h"
3977+#include "hxprdnld.h"
3978+#include "exprdnld.h"
3979+
3980+#include "excontxt.h"
3981+
3982+extern HXBOOL bEnableAdviceSink;
3983+
3984+
3985+ExampleClientContext::ExampleClientContext(LONG32 lClientIndex)
3986+ : m_lRefCount(0)
3987+ , m_lClientIndex(lClientIndex)
3988+ , m_pClientSink(NULL)
3989+ , m_pClientStateSink(NULL)
3990+ , m_pErrorSink(NULL)
3991+ , m_pAuthMgr(NULL)
3992+ , m_pSiteSupplier(NULL)
3993+ , m_pDefaultPrefs(NULL)
3994+#if defined(HELIX_FEATURE_PROGRESSIVE_DOWNLD_STATUS)
3995+ , m_pPrgDnldStatusObserver(NULL)
3996+#endif // /HELIX_FEATURE_PROGRESSIVE_DOWNLD_STATUS.
3997+{
3998+}
3999+
4000+
4001+ExampleClientContext::~ExampleClientContext()
4002+{
4003+ Close();
4004+};
4005+
4006+void ExampleClientContext::Init(IUnknown* /*IN*/ pUnknown,
4007+ IHXPreferences* /*IN*/ pPreferences,
4008+ char* /*IN*/ pszGUID,
4009+ on_buffering_cb_t on_buffering_cb,
4010+ on_pos_length_cb_t on_pos_length_cb,
4011+ on_state_change_cb_t on_state_change_cb,
4012+ on_new_frame_cb_t on_new_frame_cb,
4013+ void *context)
4014+{
4015+ char* pszCipher = NULL;
4016+
4017+
4018+ m_pClientSink = new ExampleClientAdviceSink(pUnknown, m_lClientIndex, on_buffering_cb, on_pos_length_cb, context);
4019+
4020+ m_pClientStateSink = new ExampleClientStateAdviceSink(pUnknown, m_lClientIndex, on_state_change_cb, context);
4021+ m_pErrorSink = new ExampleErrorSink(pUnknown);
4022+#if defined(HELIX_FEATURE_AUTHENTICATION)
4023+ m_pAuthMgr = new ExampleAuthenticationManager();
4024+ if(m_pAuthMgr)
4025+ {
4026+ m_pAuthMgr->AddRef();
4027+ }
4028+
4029+#endif /* #if defined(HELIX_FEATURE_AUTHENTICATION) */
4030+#if defined(HELIX_FEATURE_VIDEO)
4031+ m_pSiteSupplier = new ExampleSiteSupplier(pUnknown, on_new_frame_cb, context);
4032+#endif
4033+
4034+#if defined(HELIX_FEATURE_PROGRESSIVE_DOWNLD_STATUS)
4035+ m_pPrgDnldStatusObserver = new ExamplePDStatusObserver(pUnknown);
4036+#endif // /HELIX_FEATURE_PROGRESSIVE_DOWNLD_STATUS.
4037+
4038+ if (m_pClientSink)
4039+ {
4040+ m_pClientSink->AddRef();
4041+ }
4042+
4043+ if (m_pErrorSink)
4044+ {
4045+ m_pErrorSink->AddRef();
4046+ }
4047+
4048+ if (m_pClientStateSink)
4049+ m_pClientStateSink->AddRef();
4050+
4051+ if(m_pSiteSupplier)
4052+ {
4053+ m_pSiteSupplier->AddRef();
4054+ }
4055+
4056+ if (pPreferences)
4057+ {
4058+ m_pDefaultPrefs = pPreferences;
4059+ m_pDefaultPrefs->AddRef();
4060+ }
4061+
4062+ if (pszGUID && *pszGUID)
4063+ {
4064+ // Encode GUID
4065+ pszCipher = Cipher(pszGUID);
4066+ SafeStrCpy(m_pszGUID, pszCipher, 256);
4067+ }
4068+ else
4069+ {
4070+ m_pszGUID[0] = '\0';
4071+ }
4072+}
4073+
4074+void ExampleClientContext::Close()
4075+{
4076+ HX_RELEASE(m_pClientSink);
4077+ HX_RELEASE(m_pClientStateSink);
4078+ HX_RELEASE(m_pErrorSink);
4079+#if defined(HELIX_FEATURE_AUTHENTICATION)
4080+ HX_RELEASE(m_pAuthMgr);
4081+#endif /* #if defined(HELIX_FEATURE_AUTHENTICATION) */
4082+ HX_RELEASE(m_pSiteSupplier);
4083+ HX_RELEASE(m_pDefaultPrefs);
4084+#if defined(HELIX_FEATURE_PROGRESSIVE_DOWNLD_STATUS)
4085+ HX_RELEASE(m_pPrgDnldStatusObserver);
4086+#endif // /HELIX_FEATURE_PROGRESSIVE_DOWNLD_STATUS.
4087+}
4088+
4089+
4090+
4091+// *** IUnknown methods ***
4092+
4093+/////////////////////////////////////////////////////////////////////////
4094+// Method:
4095+// IUnknown::QueryInterface
4096+// Purpose:
4097+// Implement this to export the interfaces supported by your
4098+// object.
4099+//
4100+STDMETHODIMP ExampleClientContext::QueryInterface(REFIID riid, void** ppvObj)
4101+{
4102+ if (IsEqualIID(riid, IID_IUnknown))
4103+ {
4104+ AddRef();
4105+ *ppvObj = this;
4106+ return HXR_OK;
4107+ }
4108+ else if (IsEqualIID(riid, IID_IHXPreferences))
4109+ {
4110+ AddRef();
4111+ *ppvObj = (IHXPreferences*)this;
4112+ return HXR_OK;
4113+ }
4114+ else if (m_pClientSink &&
4115+ m_pClientSink->QueryInterface(riid, ppvObj) == HXR_OK)
4116+ {
4117+ return HXR_OK;
4118+ }
4119+ else if (m_pErrorSink &&
4120+ m_pErrorSink->QueryInterface(riid, ppvObj) == HXR_OK)
4121+ {
4122+ return HXR_OK;
4123+ }
4124+ else if (m_pClientStateSink &&
4125+ m_pClientStateSink->QueryInterface(riid, ppvObj) == HXR_OK)
4126+ {
4127+ return HXR_OK;
4128+ }
4129+#if defined(HELIX_FEATURE_AUTHENTICATION)
4130+ else if(m_pAuthMgr &&
4131+ m_pAuthMgr->QueryInterface(riid, ppvObj) == HXR_OK)
4132+ {
4133+ return HXR_OK;
4134+ }
4135+#endif /* #if defined(HELIX_FEATURE_AUTHENTICATION) */
4136+ else if(m_pSiteSupplier &&
4137+ m_pSiteSupplier->QueryInterface(riid, ppvObj) == HXR_OK)
4138+ {
4139+ return HXR_OK;
4140+ }
4141+ *ppvObj = NULL;
4142+ return HXR_NOINTERFACE;
4143+}
4144+
4145+/////////////////////////////////////////////////////////////////////////
4146+// Method:
4147+// IUnknown::AddRef
4148+// Purpose:
4149+// Everyone usually implements this the same... feel free to use
4150+// this implementation.
4151+//
4152+STDMETHODIMP_(ULONG32) ExampleClientContext::AddRef()
4153+{
4154+ return InterlockedIncrement(&m_lRefCount);
4155+}
4156+
4157+/////////////////////////////////////////////////////////////////////////
4158+// Method:
4159+// IUnknown::Release
4160+// Purpose:
4161+// Everyone usually implements this the same... feel free to use
4162+// this implementation.
4163+//
4164+STDMETHODIMP_(ULONG32) ExampleClientContext::Release()
4165+{
4166+ if (InterlockedDecrement(&m_lRefCount) > 0)
4167+ {
4168+ return m_lRefCount;
4169+ }
4170+
4171+ delete this;
4172+ return 0;
4173+}
4174+
4175+
4176+// *** IUnknown methods ***
4177+
4178+/////////////////////////////////////////////////////////////////////////
4179+// Method:
4180+// IHXPreferences::ReadPref
4181+// Purpose:
4182+// Read a Preference from the registry.
4183+//
4184+STDMETHODIMP
4185+ExampleClientContext::ReadPref(const char* pref_key, IHXBuffer*& buffer)
4186+{
4187+ HX_RESULT hResult = HXR_OK;
4188+ char* pszCipher = NULL;
4189+
4190+ if ((stricmp(pref_key, CLIENT_GUID_REGNAME) == 0) &&
4191+ (*m_pszGUID))
4192+ {
4193+ // Create a Buffer
4194+ buffer = new CHXBuffer();
4195+ buffer->AddRef();
4196+
4197+ // Copy the encoded GUID into the buffer
4198+ buffer->Set((UCHAR*)m_pszGUID, strlen(m_pszGUID) + 1);
4199+ }
4200+ else if (m_pDefaultPrefs)
4201+ {
4202+ hResult = m_pDefaultPrefs->ReadPref(pref_key, buffer);
4203+ }
4204+ else
4205+ {
4206+ hResult = HXR_NOTIMPL;
4207+ }
4208+
4209+ return hResult;
4210+}
4211+
4212+/////////////////////////////////////////////////////////////////////////
4213+// Method:
4214+// IHXPreferences::WritePref
4215+// Purpose:
4216+// Write a Preference to the registry.
4217+//
4218+STDMETHODIMP
4219+ExampleClientContext::WritePref(const char* pref_key, IHXBuffer* buffer)
4220+{
4221+ if (m_pDefaultPrefs)
4222+ {
4223+ return m_pDefaultPrefs->WritePref(pref_key, buffer);
4224+ }
4225+ else
4226+ {
4227+ return HXR_OK;
4228+ }
4229+}
4230+
4231+EHXClientState ExampleClientContext::GetState()
4232+{
4233+ return m_pClientStateSink->GetState();
4234+};
4235Index: helix-libs/clientapps/clutter/excontxt.h
4236===================================================================
4237--- /dev/null 1970-01-01 00:00:00.000000000 +0000
4238+++ helix-libs/clientapps/clutter/excontxt.h 2008-10-13 06:05:49.000000000 -0700
4239@@ -0,0 +1,106 @@
4240+/* ***** BEGIN LICENSE BLOCK *****
4241+ * Version: RCSL 1.0/RPSL 1.0
4242+ *
4243+ * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
4244+ *
4245+ * The contents of this file, and the files included with this file, are
4246+ * subject to the current version of the RealNetworks Public Source License
4247+ * Version 1.0 (the "RPSL") available at
4248+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
4249+ * the file under the RealNetworks Community Source License Version 1.0
4250+ * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
4251+ * in which case the RCSL will apply. You may also obtain the license terms
4252+ * directly from RealNetworks. You may not use this file except in
4253+ * compliance with the RPSL or, if you have a valid RCSL with RealNetworks
4254+ * applicable to this file, the RCSL. Please see the applicable RPSL or
4255+ * RCSL for the rights, obligations and limitations governing use of the
4256+ * contents of the file.
4257+ *
4258+ * This file is part of the Helix DNA Technology. RealNetworks is the
4259+ * developer of the Original Code and owns the copyrights in the portions
4260+ * it created.
4261+ *
4262+ * This file, and the files included with this file, is distributed and made
4263+ * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
4264+ * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
4265+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
4266+ * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
4267+ *
4268+ * Technology Compatibility Kit Test Suite(s) Location:
4269+ * http://www.helixcommunity.org/content/tck
4270+ *
4271+ * Contributor(s):
4272+ *
4273+ * ***** END LICENSE BLOCK ***** */
4274+#ifndef _EXCONTXT_H_
4275+#define _EXCONTXT_H_
4276+
4277+#include "exerror.h"
4278+#include "exsitsup.h"
4279+#include "hxprefs.h"
4280+#include "player.h"
4281+#include "hxclsnk.h"
4282+
4283+struct IUnknown;
4284+struct IHXPreferences;
4285+class ExampleClientAdviceSink;
4286+class ExampleClientStateAdviceSink;
4287+class ExampleErrorMessages;
4288+class ExampleAuthenticationManager;
4289+class ExamplePDStatusObserver;
4290+
4291+
4292+class ExampleClientContext : public IHXPreferences
4293+{
4294+private:
4295+ LONG32 m_lRefCount;
4296+ LONG32 m_lClientIndex;
4297+
4298+ ExampleClientAdviceSink* m_pClientSink;
4299+ ExampleClientStateAdviceSink* m_pClientStateSink;
4300+ ExampleErrorSink* m_pErrorSink;
4301+ ExampleAuthenticationManager* m_pAuthMgr;
4302+
4303+ ExampleSiteSupplier* m_pSiteSupplier;
4304+ ExamplePDStatusObserver* m_pPrgDnldStatusObserver;
4305+ IHXPreferences* m_pDefaultPrefs;
4306+ char m_pszGUID[256]; /* Flawfinder: ignore */
4307+
4308+
4309+public:
4310+
4311+ ExampleClientContext(LONG32 /*IN*/ lClientIndex);
4312+ ~ExampleClientContext();
4313+
4314+ void Init(IUnknown* /*IN*/ pUnknown,
4315+ IHXPreferences* /*IN*/ pPreferences,
4316+ char* /*IN*/ pszGUID,
4317+ on_buffering_cb_t on_buffering_cb = NULL,
4318+ on_pos_length_cb_t on_pos_length_cb = NULL,
4319+ on_state_change_cb_t on_state_change_cb = NULL,
4320+ on_new_frame_cb_t on_new_frame_cb = NULL,
4321+ void *context = NULL);
4322+ void Close();
4323+
4324+ EHXClientState GetState();
4325+
4326+ /*
4327+ * IUnknown methods
4328+ */
4329+ STDMETHOD(QueryInterface) (THIS_
4330+ REFIID riid,
4331+ void** ppvObj);
4332+
4333+ STDMETHOD_(ULONG32,AddRef) (THIS);
4334+ STDMETHOD_(ULONG32,Release) (THIS);
4335+
4336+ /*
4337+ * IHXPreferences methods
4338+ */
4339+ STDMETHOD(ReadPref) (THIS_ const char* pref_key,
4340+ IHXBuffer*& buffer);
4341+ STDMETHOD(WritePref) (THIS_ const char* pref_key,
4342+ IHXBuffer* buffer);
4343+};
4344+
4345+#endif
4346Index: helix-libs/clientapps/clutter/exerror.cpp
4347===================================================================
4348--- /dev/null 1970-01-01 00:00:00.000000000 +0000
4349+++ helix-libs/clientapps/clutter/exerror.cpp 2008-10-13 06:05:49.000000000 -0700
4350@@ -0,0 +1,230 @@
4351+/* ***** BEGIN LICENSE BLOCK *****
4352+ * Version: RCSL 1.0/RPSL 1.0
4353+ *
4354+ * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
4355+ *
4356+ * The contents of this file, and the files included with this file, are
4357+ * subject to the current version of the RealNetworks Public Source License
4358+ * Version 1.0 (the "RPSL") available at
4359+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
4360+ * the file under the RealNetworks Community Source License Version 1.0
4361+ * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
4362+ * in which case the RCSL will apply. You may also obtain the license terms
4363+ * directly from RealNetworks. You may not use this file except in
4364+ * compliance with the RPSL or, if you have a valid RCSL with RealNetworks
4365+ * applicable to this file, the RCSL. Please see the applicable RPSL or
4366+ * RCSL for the rights, obligations and limitations governing use of the
4367+ * contents of the file.
4368+ *
4369+ * This file is part of the Helix DNA Technology. RealNetworks is the
4370+ * developer of the Original Code and owns the copyrights in the portions
4371+ * it created.
4372+ *
4373+ * This file, and the files included with this file, is distributed and made
4374+ * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
4375+ * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
4376+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
4377+ * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
4378+ *
4379+ * Technology Compatibility Kit Test Suite(s) Location:
4380+ * http://www.helixcommunity.org/content/tck
4381+ *
4382+ * Contributor(s):
4383+ *
4384+ * ***** END LICENSE BLOCK ***** */
4385+
4386+#include "hxtypes.h"
4387+
4388+#include "hxcom.h"
4389+#include "hxcomm.h"
4390+#include "hxerror.h"
4391+#include "hxstrutl.h"
4392+#include "hxcore.h"
4393+#include "hxassert.h"
4394+#include "hxbuffer.h"
4395+
4396+#ifdef __TCS__
4397+#include "hxresult.h"
4398+#endif
4399+
4400+#if !defined(HELIX_CONFIG_MINIMIZE_SIZE)
4401+#include "HXErrorCodeStrings.h"
4402+#endif
4403+
4404+#include "exerror.h"
4405+
4406+#include <stdio.h>
4407+#include "print.h"
4408+
4409+#include "globals.h"
4410+struct _stGlobals*& GetGlobal(); //in main.cpp
4411+
4412+#ifdef __TCS__
4413+#if defined(__cplusplus)
4414+extern "C" {
4415+#endif
4416+
4417+void hookRealAudio_ReportError(int err, long errVal);
4418+
4419+#ifdef __cplusplus
4420+}
4421+#endif
4422+#endif
4423+
4424+ExampleErrorSink::ExampleErrorSink(IUnknown* pUnknown)
4425+ : m_lRefCount(0),
4426+ m_pPlayer(NULL)
4427+{
4428+ IHXClientEngine* pEngine = NULL;
4429+ pUnknown->QueryInterface(IID_IHXClientEngine, (void**)&pEngine );
4430+ if( pEngine )
4431+ {
4432+ IUnknown* pTmp = NULL;
4433+ pEngine->GetPlayer(0, pTmp);
4434+ m_pPlayer = (IHXPlayer*)pTmp;
4435+ }
4436+
4437+ HX_RELEASE( pEngine );
4438+ HX_ASSERT(m_pPlayer);
4439+}
4440+
4441+ExampleErrorSink::~ExampleErrorSink()
4442+{
4443+ HX_RELEASE(m_pPlayer);
4444+}
4445+
4446+// *** IUnknown methods ***
4447+
4448+/////////////////////////////////////////////////////////////////////////
4449+// Method:
4450+// IUnknown::QueryInterface
4451+// Purpose:
4452+// Implement this to export the interfaces supported by your
4453+// object.
4454+//
4455+STDMETHODIMP ExampleErrorSink::QueryInterface(REFIID riid, void** ppvObj)
4456+{
4457+ if (IsEqualIID(riid, IID_IUnknown))
4458+ {
4459+ AddRef();
4460+ *ppvObj = (IUnknown*)(IHXErrorSink*)this;
4461+ return HXR_OK;
4462+ }
4463+ else if (IsEqualIID(riid, IID_IHXErrorSink))
4464+ {
4465+ AddRef();
4466+ *ppvObj = (IHXErrorSink*) this;
4467+ return HXR_OK;
4468+ }
4469+
4470+ *ppvObj = NULL;
4471+ return HXR_NOINTERFACE;
4472+}
4473+
4474+/////////////////////////////////////////////////////////////////////////
4475+// Method:
4476+// IUnknown::AddRef
4477+// Purpose:
4478+// Everyone usually implements this the same... feel free to use
4479+// this implementation.
4480+//
4481+STDMETHODIMP_(ULONG32) ExampleErrorSink::AddRef()
4482+{
4483+ return InterlockedIncrement(&m_lRefCount);
4484+}
4485+
4486+/////////////////////////////////////////////////////////////////////////
4487+// Method:
4488+// IUnknown::Release
4489+// Purpose:
4490+// Everyone usually implements this the same... feel free to use
4491+// this implementation.
4492+//
4493+STDMETHODIMP_(ULONG32) ExampleErrorSink::Release()
4494+{
4495+ if (InterlockedDecrement(&m_lRefCount) > 0)
4496+ {
4497+ return m_lRefCount;
4498+ }
4499+
4500+ delete this;
4501+ return 0;
4502+}
4503+
4504+/*
4505+ * IHXErrorSink methods
4506+ */
4507+
4508+STDMETHODIMP
4509+ExampleErrorSink::ErrorOccurred(const UINT8 unSeverity,
4510+ const ULONG32 ulHXCode,
4511+ const ULONG32 ulUserCode,
4512+ const char* pUserString,
4513+ const char* pMoreInfoURL
4514+ )
4515+{
4516+ char HXDefine[256]; /* Flawfinder: ignore */
4517+
4518+ // Store the code, so we can return it from main()
4519+ GetGlobal()->g_Error = ulHXCode;
4520+
4521+ ConvertErrorToString(ulHXCode, HXDefine, 256);
4522+
4523+#ifdef __TCS__
4524+ hookRealAudio_ReportError(ulHXCode,ulUserCode);
4525+#else
4526+ STDOUT("Report(%d, %ld, \"%s\", %ld, \"%s\", \"%s\")\n",
4527+ unSeverity,
4528+ ulHXCode,
4529+ (pUserString && *pUserString) ? pUserString : "(NULL)",
4530+ ulUserCode,
4531+ (pMoreInfoURL && *pMoreInfoURL) ? pMoreInfoURL : "(NULL)",
4532+ HXDefine);
4533+#endif
4534+
4535+ return HXR_OK;
4536+}
4537+
4538+void
4539+ExampleErrorSink::ConvertErrorToString(const ULONG32 ulHXCode, char* pszBuffer, UINT32 ulBufLen)
4540+{
4541+ IHXErrorMessages* pErrMsg = NULL;
4542+
4543+ if( !pszBuffer)
4544+ return;
4545+
4546+ pszBuffer[0]='\0';
4547+
4548+ HX_ASSERT(m_pPlayer);
4549+ if( m_pPlayer)
4550+ {
4551+ m_pPlayer->QueryInterface(IID_IHXErrorMessages, (void**)&pErrMsg);
4552+ if( pErrMsg )
4553+ {
4554+ IHXBuffer* pMessage = pErrMsg->GetErrorText(ulHXCode);
4555+ if( pMessage )
4556+ {
4557+ SafeStrCpy( pszBuffer, (const char*)pMessage->GetBuffer(), ulBufLen);
4558+ pMessage->Release();
4559+ }
4560+ }
4561+ HX_RELEASE(pErrMsg);
4562+ }
4563+
4564+ if( strlen(pszBuffer)==0 )
4565+ {
4566+#if !defined(HELIX_CONFIG_MINIMIZE_SIZE)
4567+ const char* pszHXCodeString = HXErrorCodeToString(ulHXCode);
4568+ if (pszHXCodeString)
4569+ {
4570+ SafeSprintf( pszBuffer, ulBufLen, "%s", pszHXCodeString);
4571+ }
4572+ else
4573+#endif
4574+ {
4575+ HX_ASSERT(FALSE);
4576+ SafeSprintf( pszBuffer, ulBufLen, "Can't convert error code %p - make sure it's defined in common/util/HXErrorCodeStrings.c", ulHXCode );
4577+ }
4578+ }
4579+}
4580+
4581Index: helix-libs/clientapps/clutter/exerror.h
4582===================================================================
4583--- /dev/null 1970-01-01 00:00:00.000000000 +0000
4584+++ helix-libs/clientapps/clutter/exerror.h 2008-10-13 06:05:49.000000000 -0700
4585@@ -0,0 +1,92 @@
4586+/* ***** BEGIN LICENSE BLOCK *****
4587+ * Version: RCSL 1.0/RPSL 1.0
4588+ *
4589+ * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
4590+ *
4591+ * The contents of this file, and the files included with this file, are
4592+ * subject to the current version of the RealNetworks Public Source License
4593+ * Version 1.0 (the "RPSL") available at
4594+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
4595+ * the file under the RealNetworks Community Source License Version 1.0
4596+ * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
4597+ * in which case the RCSL will apply. You may also obtain the license terms
4598+ * directly from RealNetworks. You may not use this file except in
4599+ * compliance with the RPSL or, if you have a valid RCSL with RealNetworks
4600+ * applicable to this file, the RCSL. Please see the applicable RPSL or
4601+ * RCSL for the rights, obligations and limitations governing use of the
4602+ * contents of the file.
4603+ *
4604+ * This file is part of the Helix DNA Technology. RealNetworks is the
4605+ * developer of the Original Code and owns the copyrights in the portions
4606+ * it created.
4607+ *
4608+ * This file, and the files included with this file, is distributed and made
4609+ * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
4610+ * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
4611+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
4612+ * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
4613+ *
4614+ * Technology Compatibility Kit Test Suite(s) Location:
4615+ * http://www.helixcommunity.org/content/tck
4616+ *
4617+ * Contributor(s):
4618+ *
4619+ * ***** END LICENSE BLOCK ***** */
4620+
4621+#ifndef _EXAMPLEERRORMESSAGES_
4622+#define _EXAMPLEERRORMESSAGES_
4623+
4624+#include "hxerror.h"
4625+
4626+struct IUnknown;
4627+struct IHXErrorMessages;
4628+struct IHXPlayer;
4629+
4630+class ExampleErrorSink : public IHXErrorSink
4631+{
4632+public:
4633+
4634+ ExampleErrorSink(IUnknown* pUnknown);
4635+ ~ExampleErrorSink();
4636+
4637+ /*
4638+ * IUnknown methods
4639+ */
4640+ STDMETHOD(QueryInterface) (THIS_
4641+ REFIID riid,
4642+ void** ppvObj);
4643+
4644+ STDMETHOD_(ULONG32,AddRef) (THIS);
4645+
4646+ STDMETHOD_(ULONG32,Release) (THIS);
4647+
4648+ /*
4649+ * IHXErrorSink methods
4650+ */
4651+
4652+ /************************************************************************
4653+ * Method:
4654+ * IHXErrorSink::ErrorOccurred
4655+ * Purpose:
4656+ * After you have registered your error sink with an IHXErrorSinkControl
4657+ * (either in the server or player core) this method will be called to
4658+ * report an error, event, or status message.
4659+ *
4660+ * The meaning of the arguments is exactly as described in
4661+ * hxerror.h
4662+ */
4663+ STDMETHOD(ErrorOccurred) (THIS_
4664+ const UINT8 unSeverity,
4665+ const ULONG32 ulHXCode,
4666+ const ULONG32 ulUserCode,
4667+ const char* pUserString,
4668+ const char* pMoreInfoURL
4669+ );
4670+
4671+protected:
4672+ LONG32 m_lRefCount;
4673+ IHXPlayer* m_pPlayer;
4674+
4675+ void ConvertErrorToString (const ULONG32 ulHXCode, char* pszBuffer, UINT32 ulBufLen);
4676+};
4677+#endif /*_EXAMPLEERRORMESSAGES_*/
4678Index: helix-libs/clientapps/clutter/exprdnld.cpp
4679===================================================================
4680--- /dev/null 1970-01-01 00:00:00.000000000 +0000
4681+++ helix-libs/clientapps/clutter/exprdnld.cpp 2008-10-13 06:05:49.000000000 -0700
4682@@ -0,0 +1,468 @@
4683+/* ***** BEGIN LICENSE BLOCK *****
4684+ * Version: RCSL 1.0/RPSL 1.0
4685+ *
4686+ * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
4687+ *
4688+ * The contents of this file, and the files included with this file, are
4689+ * subject to the current version of the RealNetworks Public Source License
4690+ * Version 1.0 (the "RPSL") available at
4691+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
4692+ * the file under the RealNetworks Community Source License Version 1.0
4693+ * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
4694+ * in which case the RCSL will apply. You may also obtain the license terms
4695+ * directly from RealNetworks. You may not use this file except in
4696+ * compliance with the RPSL or, if you have a valid RCSL with RealNetworks
4697+ * applicable to this file, the RCSL. Please see the applicable RPSL or
4698+ * RCSL for the rights, obligations and limitations governing use of the
4699+ * contents of the file.
4700+ *
4701+ * This file is part of the Helix DNA Technology. RealNetworks is the
4702+ * developer of the Original Code and owns the copyrights in the portions
4703+ * it created.
4704+ *
4705+ * This file, and the files included with this file, is distributed and made
4706+ * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
4707+ * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
4708+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
4709+ * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
4710+ *
4711+ * Technology Compatibility Kit Test Suite(s) Location:
4712+ * http://www.helixcommunity.org/content/tck
4713+ *
4714+ * Contributor(s):
4715+ *
4716+ * ***** END LICENSE BLOCK ***** */
4717+
4718+#include "hxcom.h"
4719+#include "hxtypes.h"
4720+#include "hxcore.h"
4721+#include "hxprdnld.h"
4722+#include "exprdnld.h"
4723+#include "print.h"
4724+
4725+#include "globals.h"
4726+struct _stGlobals*& GetGlobal();
4727+
4728+UINT32 GetTime(); // /In main.cpp.
4729+
4730+// /#if defined(HELIX_FEATURE_PROGRESSIVE_DOWNLD_STATUS)
4731+/************************************************************************
4732+ * Method:
4733+ * Constructor
4734+ */
4735+ExamplePDStatusObserver::ExamplePDStatusObserver(IUnknown* pUnkPlayer)
4736+ : m_lRefCount(0)
4737+ , m_pPrgDnldStatusMgr(NULL)
4738+ , m_pUnkPlayer(pUnkPlayer)
4739+ , m_pHXPlayer(NULL)
4740+ , m_bPlayerIsPausedByThis(FALSE)
4741+ , m_bFirstPDStatusMessage(TRUE)
4742+ , m_ulTotalDurReported(HX_PROGDOWNLD_UNKNOWN_DURATION)
4743+ , m_ulDurSoFar(HX_PROGDOWNLD_UNKNOWN_DURATION)
4744+ , m_ulCurStatusUpdateGranularity(
4745+ HX_PROGDOWNLD_DEFAULT_STATUSREPORT_INTERVAL_MSEC)
4746+ , m_bInitialPrerollUpateGranularitySet(FALSE)
4747+ , m_bDownloadIsComplete(FALSE)
4748+{
4749+ if (m_pUnkPlayer)
4750+ {
4751+ m_pUnkPlayer->QueryInterface(IID_IHXPlayer,
4752+ (void**)&m_pHXPlayer);
4753+
4754+ m_pUnkPlayer->QueryInterface(IID_IHXPDStatusMgr,
4755+ (void**)&m_pPrgDnldStatusMgr);
4756+
4757+ if (m_pPrgDnldStatusMgr)
4758+ {
4759+ // /Add ourselves as an observer of progressive download playback:
4760+ m_pPrgDnldStatusMgr->AddObserver(this);
4761+ // /Set granularity of status reports to 10 per second until we
4762+ // know enough about the situation to go back to getting reports
4763+ // at the default interval (every 5 seconds). Do that as soon
4764+ // as we receive the first progress report:
4765+ m_ulCurStatusUpdateGranularity = 100;
4766+ }
4767+
4768+ m_pUnkPlayer->AddRef();
4769+ }
4770+};
4771+
4772+/************************************************************************
4773+ * Method:
4774+ * Destructor
4775+ */
4776+ExamplePDStatusObserver::~ExamplePDStatusObserver()
4777+{
4778+ if (m_pPrgDnldStatusMgr)
4779+ {
4780+ m_pPrgDnldStatusMgr->RemoveObserver(this);
4781+ }
4782+ HX_RELEASE(m_pPrgDnldStatusMgr);
4783+ HX_RELEASE(m_pHXPlayer);
4784+ HX_RELEASE(m_pUnkPlayer);
4785+}
4786+
4787+/************************************************************************
4788+ * Method:
4789+ * IUnknown::QueryInterface
4790+ */
4791+STDMETHODIMP
4792+ExamplePDStatusObserver::QueryInterface(REFIID riid, void** ppvObj)
4793+{
4794+ if (IsEqualIID(riid, IID_IUnknown))
4795+ {
4796+ AddRef();
4797+ *ppvObj = (IUnknown*)(IHXPDStatusObserver*)this;
4798+ return HXR_OK;
4799+ }
4800+ else if (IsEqualIID(riid, IID_IHXPDStatusObserver))
4801+ {
4802+ AddRef();
4803+ *ppvObj = (IHXPDStatusObserver*)this;
4804+ return HXR_OK;
4805+ }
4806+
4807+ *ppvObj = NULL;
4808+ return HXR_NOINTERFACE;
4809+}
4810+
4811+/************************************************************************
4812+ * Method:
4813+ * IUnknown::AddRef
4814+ */
4815+STDMETHODIMP_(ULONG32)
4816+ExamplePDStatusObserver::AddRef()
4817+{
4818+ return InterlockedIncrement(&m_lRefCount);
4819+}
4820+
4821+/************************************************************************
4822+ * Method:
4823+ * IUnknown::Release
4824+ */
4825+STDMETHODIMP_(ULONG32)
4826+ExamplePDStatusObserver::Release()
4827+{
4828+ if (InterlockedDecrement(&m_lRefCount) > 0)
4829+ {
4830+ return m_lRefCount;
4831+ }
4832+
4833+ delete this;
4834+ return 0;
4835+}
4836+
4837+
4838+/*
4839+ * IHXPDStatusObserver methods
4840+ */
4841+
4842+/************************************************************************
4843+ * Method:
4844+ * IHXPDStatusObserver::OnDownloadProgress
4845+ *
4846+ * Purpose:
4847+ * Notification from IHXPDStatusMgr of download progress when
4848+ * file size changes.
4849+ *
4850+ * lTimeSurplus:
4851+ * - When negative, the absolute value of it is the estimated number
4852+ * of milliseconds of wall-clock time that need to pass while
4853+ * downloading continues before reaching the point at which playback
4854+ * can resume and play the remainder of the stream without having to
4855+ * buffer, assuming that playback is paused and remains so during
4856+ * that period.
4857+ * - When positive, it is the estimated number of milliseconds of
4858+ * wall-clock time between when the download should complete and when
4859+ * the natural content play-out duration will be reached, assuming
4860+ * playback is currently progressing and that no pause will occur.
4861+ *
4862+ * Note: ulNewDurSoFar can be HX_PROGDOWNLD_UNKNOWN_DURATION if the
4863+ * IHXMediaBytesToMediaDur was not available to, or was unable to
4864+ * convert the bytes to a duration for the IHXPDStatusMgr calling this:
4865+ */
4866+STDMETHODIMP
4867+ExamplePDStatusObserver::OnDownloadProgress(
4868+ IHXStreamSource* /*IN*/ /*NULL is valid value*/ pStreamSource,
4869+ UINT32 /*IN*/ ulNewDurSoFar,
4870+ UINT32 /*IN*/ ulNewBytesSoFar,
4871+ INT32 /*IN*/ lTimeSurplus)
4872+{
4873+ m_ulDurSoFar = ulNewDurSoFar;
4874+
4875+ if (m_ulCurStatusUpdateGranularity <
4876+ HX_PROGDOWNLD_DEFAULT_STATUSREPORT_INTERVAL_MSEC)
4877+ {
4878+ if (m_bInitialPrerollUpateGranularitySet)
4879+ {
4880+ if (HX_PROGDOWNLD_UNKNOWN_DURATION != ulNewDurSoFar &&
4881+ // /Preroll is done, so reset update interval back to default:
4882+ GetGlobal()->g_bOnBeginOccurred)
4883+ {
4884+ m_ulCurStatusUpdateGranularity =
4885+ HX_PROGDOWNLD_DEFAULT_STATUSREPORT_INTERVAL_MSEC;
4886+ m_pPrgDnldStatusMgr->SetStatusUpdateGranularityMsec(
4887+ m_ulCurStatusUpdateGranularity);
4888+ }
4889+ }
4890+ else if (!GetGlobal()->g_bOnBeginOccurred)
4891+ {
4892+ if (HXR_OK == m_pPrgDnldStatusMgr->SetStatusUpdateGranularityMsec(
4893+ m_ulCurStatusUpdateGranularity))
4894+ {
4895+ m_bInitialPrerollUpateGranularitySet = TRUE;
4896+ }
4897+ }
4898+ }
4899+
4900+ UINT32 ulCurPlayTime = 0;
4901+
4902+ HXBOOL bPauseWasAttempted = FALSE;
4903+ HXBOOL bPauseOccurred = FALSE;
4904+ HXBOOL bResumeWasAttempted = FALSE;
4905+ HXBOOL bResumeOccurred = FALSE;
4906+
4907+
4908+ if (m_pHXPlayer)
4909+ {
4910+ ulCurPlayTime = m_pHXPlayer->GetCurrentPlayTime();
4911+
4912+ if (GetGlobal()->g_bEnableSlowStart &&
4913+ lTimeSurplus != HX_PROGDOWNLD_UNKNOWN_TIME_SURPLUS)
4914+ {
4915+ // /"slow start" is enabled so if we have run dry of data,
4916+ // pause and wait for more data:
4917+ if (!m_bPlayerIsPausedByThis)
4918+ {
4919+ if (!m_bDownloadIsComplete && lTimeSurplus<0)
4920+ {
4921+ // /Use a 1000-millisecond allowance for variation:
4922+ if (lTimeSurplus < -1000)
4923+ {
4924+ bPauseWasAttempted = TRUE;
4925+ bPauseOccurred = m_bPlayerIsPausedByThis =
4926+ (HXR_OK == m_pHXPlayer->Pause());
4927+ }
4928+ }
4929+ }
4930+ else // /paused; see if we can resume yet:
4931+ {
4932+ if (lTimeSurplus > 0)
4933+ {
4934+ // /Use a 1000-millisecond allowance for variation:
4935+ if (lTimeSurplus > 1000)
4936+ {
4937+ bResumeWasAttempted = TRUE;
4938+ bResumeOccurred = (HXR_OK == m_pHXPlayer->Begin());
4939+ m_bPlayerIsPausedByThis = !bResumeOccurred;
4940+ }
4941+ }
4942+ }
4943+ }
4944+ }
4945+
4946+ if (GetGlobal()->bEnableVerboseMode && !m_bDownloadIsComplete)
4947+ {
4948+ STDOUT("\nDownload progress: (play time=%lu,",
4949+ ulCurPlayTime);
4950+ if (HX_PROGDOWNLD_UNKNOWN_TIME_SURPLUS == lTimeSurplus)
4951+ {
4952+ STDOUT(" UNKNOWN surplus|deficit)");
4953+ }
4954+ else if (HX_PROGDOWNLD_MIN_TIME_SURPLUS == lTimeSurplus)
4955+ {
4956+ STDOUT(" deficit exceeds maximum");
4957+ }
4958+ else if (HX_PROGDOWNLD_MAX_TIME_SURPLUS == lTimeSurplus)
4959+ {
4960+ STDOUT(" surplus exceeds maximum)");
4961+ }
4962+ else
4963+ {
4964+ STDOUT(" surplus=%ld milliseconds)", lTimeSurplus);
4965+ }
4966+ if (HX_PROGDOWNLD_UNKNOWN_DURATION == ulNewDurSoFar)
4967+ {
4968+ STDOUT("\n\thave UNKNOWN");
4969+ }
4970+ else
4971+ {
4972+ STDOUT("\n\thave %lu", ulNewDurSoFar);
4973+ }
4974+
4975+ if (HX_PROGDOWNLD_UNKNOWN_DURATION != m_ulTotalDurReported)
4976+ {
4977+ STDOUT(" of %lu msec", m_ulTotalDurReported);
4978+ }
4979+ else
4980+ {
4981+ STDOUT(" of UNKNOWN msec of media");
4982+ }
4983+ if (HX_PROGDOWNLD_UNKNOWN_FILE_SIZE != ulNewBytesSoFar)
4984+ {
4985+ STDOUT(" (%lu", ulNewBytesSoFar);
4986+ }
4987+ else
4988+ {
4989+ STDOUT(" (UNKNOWN");
4990+ }
4991+ STDOUT(" bytes downloaded so far)\n", ulNewBytesSoFar);
4992+
4993+ if (bPauseOccurred || bPauseWasAttempted)
4994+ {
4995+ STDOUT("# Waiting for more data: %splayback.\n "
4996+ " Should take %ld milliseconds before playback resumes.\n",
4997+ bPauseOccurred? "Pausing " :
4998+ (bPauseWasAttempted? "Failed attempting to pause "
4999+ : " "), -lTimeSurplus);
5000+ }
5001+ if (bResumeOccurred || bResumeWasAttempted)
5002+ {
5003+ STDOUT("# Data available: %splayback\n "
5004+ " Time surplus is now %ld",
5005+ bResumeOccurred? "Resuming " :
5006+ (bResumeWasAttempted? "Failed attempting to resume "
5007+ : " "), lTimeSurplus);
5008+ }
5009+ }
5010+
5011+ m_bFirstPDStatusMessage = FALSE;
5012+
5013+ return HXR_OK;
5014+}
5015+
5016+/************************************************************************
5017+ * Method:
5018+ * IHXPDStatusObserver::OnTotalDurChanged
5019+ * Purpose:
5020+ * This is a notification if the total file duration becomes known
5021+ * or becomes better-known during download/playback
5022+ *
5023+ * Note: pStreamSource can be NULL. This will be true when
5024+ * IHXPDStatusMgr calling this is upstream of the IHXStreamSource
5025+ * object.
5026+ */
5027+STDMETHODIMP
5028+ExamplePDStatusObserver::OnTotalDurChanged(
5029+ IHXStreamSource* /*IN*/ /*NULL is valid value*/ pStreamSource,
5030+ UINT32 ulNewTotalDur)
5031+{
5032+ m_ulTotalDurReported = ulNewTotalDur;
5033+
5034+ if (GetGlobal()->bEnableVerboseMode)
5035+ {
5036+ STDOUT("\nOnTotalDurChanged(): to %lu milliseconds\n", ulNewTotalDur);
5037+ }
5038+
5039+ return HXR_OK;
5040+}
5041+
5042+/************************************************************************
5043+ * Method:
5044+ * IHXPDStatusObserver::OnDownloadComplete
5045+ *
5046+ * Purpose:
5047+ * Notification that the entire file has been downloaded.
5048+ *
5049+ * Note: pStreamSource can be NULL. This will be true when
5050+ * IHXPDStatusMgr calling this is upstream of the IHXStreamSource
5051+ * object.
5052+ *
5053+ */
5054+STDMETHODIMP
5055+ExamplePDStatusObserver::OnDownloadComplete(
5056+ IHXStreamSource* /*IN*/ /*NULL is valid value*/ pStreamSource)
5057+{
5058+ m_bDownloadIsComplete = TRUE;
5059+
5060+ HXBOOL bResumeWasAttempted = FALSE;
5061+ HXBOOL bResumeOccurred = FALSE;
5062+
5063+ // /In case we're paused, resume now that there is no more data to get:
5064+ if (m_pHXPlayer && m_bPlayerIsPausedByThis)
5065+ {
5066+ bResumeWasAttempted = TRUE;
5067+ bResumeOccurred = (HXR_OK == m_pHXPlayer->Begin());
5068+ m_bPlayerIsPausedByThis = !bResumeOccurred;
5069+ }
5070+
5071+ if (GetGlobal()->bEnableVerboseMode)
5072+ {
5073+ STDOUT("\nOnDownloadComplete()\n");
5074+ if (bResumeOccurred || bResumeWasAttempted)
5075+ {
5076+ STDOUT("\n%splayback now that bytes are available for "
5077+ "uninterrupted playback\n",
5078+ bResumeOccurred? "Resuming " :
5079+ (bResumeWasAttempted? "Failed attempting to resume "
5080+ : " "));
5081+ }
5082+ }
5083+
5084+ return HXR_OK;
5085+}
5086+
5087+/************************************************************************
5088+ * Method:
5089+ * IHXPDStatusObserver::SrcClaimsSeekSupport ref: hxprdnld.h
5090+ * Purpose:
5091+ * Passes along notification from file sys that seek support
5092+ * is or is not claimed to be available (although sometimes HTTP
5093+ * server claims this when it doesn't actually support it).
5094+ */
5095+STDMETHODIMP
5096+ExamplePDStatusObserver::SrcClaimsSeekSupport(IHXStreamSource* pStreamSource,
5097+ HXBOOL bClaimsSupport)
5098+{
5099+ if (GetGlobal()->bEnableVerboseMode)
5100+ {
5101+ STDOUT("\nSrcClaimsSeekSupport(%sE)\n", bClaimsSupport?"TRU":"FALS");
5102+ }
5103+ return HXR_OK;
5104+}
5105+
5106+
5107+/************************************************************************
5108+ * Method:
5109+ * IHXPDStatusObserver::OnDownloadPause
5110+ * Purpose:
5111+ * Notification that the file-download process has purposefully
5112+ * and temporarily halted downloading of the file
5113+ *
5114+ * Note: pStreamSource can be NULL. This will be true when
5115+ * IHXPDStatusMgr calling this is upstream of the IHXStreamSource
5116+ * object.
5117+ */
5118+STDMETHODIMP
5119+ExamplePDStatusObserver::OnDownloadPause(
5120+ IHXStreamSource* /*IN*/ /*NULL is valid value*/ pStreamSource)
5121+{
5122+ if (GetGlobal()->bEnableVerboseMode)
5123+ {
5124+ STDOUT("\nOnDownloadPause()\n");
5125+ }
5126+ return HXR_OK;
5127+}
5128+
5129+/************************************************************************
5130+ * Method:
5131+ * IHXPDStatusObserver::OnDownloadResume
5132+ * Purpose:
5133+ * Notification that the file-download process has resumed
5134+ * the process of downloading the remainder of the file
5135+ *
5136+ * Note: pStreamSource can be NULL. This will be true when
5137+ * IHXPDStatusMgr calling this is upstream of the IHXStreamSource
5138+ * object.
5139+ */
5140+STDMETHODIMP
5141+ExamplePDStatusObserver::OnDownloadResume(
5142+ IHXStreamSource* /*IN*/ /*NULL is valid value*/ pStreamSource)
5143+{
5144+ if (GetGlobal()->bEnableVerboseMode)
5145+ {
5146+ STDOUT("\nOnDownloadResume()\n");
5147+ }
5148+ return HXR_OK;
5149+}
5150+// /#endif // /HELIX_FEATURE_PROGRESSIVE_DOWNLD_STATUS.
5151Index: helix-libs/clientapps/clutter/exprdnld.h
5152===================================================================
5153--- /dev/null 1970-01-01 00:00:00.000000000 +0000
5154+++ helix-libs/clientapps/clutter/exprdnld.h 2008-10-13 06:05:49.000000000 -0700
5155@@ -0,0 +1,196 @@
5156+/* ***** BEGIN LICENSE BLOCK *****
5157+ * Version: RCSL 1.0/RPSL 1.0
5158+ *
5159+ * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
5160+ *
5161+ * The contents of this file, and the files included with this file, are
5162+ * subject to the current version of the RealNetworks Public Source License
5163+ * Version 1.0 (the "RPSL") available at
5164+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
5165+ * the file under the RealNetworks Community Source License Version 1.0
5166+ * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
5167+ * in which case the RCSL will apply. You may also obtain the license terms
5168+ * directly from RealNetworks. You may not use this file except in
5169+ * compliance with the RPSL or, if you have a valid RCSL with RealNetworks
5170+ * applicable to this file, the RCSL. Please see the applicable RPSL or
5171+ * RCSL for the rights, obligations and limitations governing use of the
5172+ * contents of the file.
5173+ *
5174+ * This file is part of the Helix DNA Technology. RealNetworks is the
5175+ * developer of the Original Code and owns the copyrights in the portions
5176+ * it created.
5177+ *
5178+ * This file, and the files included with this file, is distributed and made
5179+ * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
5180+ * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
5181+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
5182+ * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
5183+ *
5184+ * Technology Compatibility Kit Test Suite(s) Location:
5185+ * http://www.helixcommunity.org/content/tck
5186+ *
5187+ * Contributor(s):
5188+ *
5189+ * ***** END LICENSE BLOCK ***** */
5190+
5191+#ifndef _EXPRDNLD_H_
5192+#define _EXPRDNLD_H_
5193+
5194+// /#if defined(HELIX_FEATURE_PROGRESSIVE_DOWNLD_STATUS)
5195+
5196+/****************************************************************************
5197+ *
5198+ * Class:
5199+ *
5200+ * ExamplePDStatusObserver
5201+ *
5202+ * Purpose:
5203+ *
5204+ * Implementation for IHXPDStatusObserver which receives progressive-
5205+ * download status reports:
5206+ *
5207+ */
5208+class ExamplePDStatusObserver :
5209+ public IHXPDStatusObserver
5210+{
5211+private:
5212+ INT32 m_lRefCount;
5213+ IHXPDStatusMgr* m_pPrgDnldStatusMgr;
5214+ IUnknown* m_pUnkPlayer;
5215+ IHXPlayer* m_pHXPlayer;
5216+ HXBOOL m_bPlayerIsPausedByThis;
5217+ HXBOOL m_bFirstPDStatusMessage;
5218+ UINT32 m_ulTotalDurReported;
5219+ UINT32 m_ulDurSoFar;
5220+ UINT32 m_ulCurStatusUpdateGranularity;
5221+ HXBOOL m_bInitialPrerollUpateGranularitySet;
5222+ HXBOOL m_bDownloadIsComplete;
5223+
5224+ ExamplePDStatusObserver();
5225+ ~ExamplePDStatusObserver();
5226+
5227+public:
5228+ ExamplePDStatusObserver(IUnknown* pUnkPlayer);
5229+
5230+ /*
5231+ * IUnknown methods
5232+ */
5233+ STDMETHOD(QueryInterface) (THIS_
5234+ REFIID riid,
5235+ void** ppvObj);
5236+
5237+ STDMETHOD_(ULONG32,AddRef) (THIS);
5238+
5239+ STDMETHOD_(ULONG32,Release) (THIS);
5240+
5241+ /*
5242+ * IHXPDStatusObserver methods
5243+ */
5244+
5245+ /************************************************************************
5246+ * Method:
5247+ * IHXPDStatusObserver::OnDownloadProgress
5248+ *
5249+ * Purpose:
5250+ * Notification from IHXPDStatusMgr of download progress when
5251+ * file size changes.
5252+ *
5253+ * lTimeSurplus:
5254+ * - When negative, the absolute value of it is the estimated number
5255+ * of milliseconds of wall-clock time that need to pass while
5256+ * downloading continues before reaching the point at which playback
5257+ * can resume and play the remainder of the stream without having to
5258+ * buffer, assuming that playback is paused and remains so during
5259+ * that period.
5260+ * - When positive, it is the estimated number of milliseconds of
5261+ * wall-clock time between when the download should complete and when
5262+ * the natural content play-out duration will be reached, assuming
5263+ * playback is currently progressing and that no pause will occur.
5264+ *
5265+ * Note: ulNewDurSoFar can be HX_PROGDOWNLD_UNKNOWN_DURATION if the
5266+ * IHXMediaBytesToMediaDurConverter was not available to, or was
5267+ * unable to convert the bytes to a duration for the IHXPDStatusMgr
5268+ * calling this:
5269+ */
5270+ STDMETHOD(OnDownloadProgress) (THIS_
5271+ IHXStreamSource* /*IN*/ /*NULL is valid value*/ pStreamSource,
5272+ UINT32 /*IN*/ ulNewDurSoFar,
5273+ UINT32 /*IN*/ ulNewBytesSoFar,
5274+ INT32 /*IN*/ lTimeSurplus);
5275+
5276+ /************************************************************************
5277+ * Method:
5278+ * IHXPDStatusObserver::OnTotalDurChanged
5279+ * Purpose:
5280+ * This is a notification if the total file duration becomes known
5281+ * or becomes better-known during download/playback
5282+ *
5283+ * Note: pStreamSource can be NULL. This will be true when
5284+ * IHXPDStatusMgr calling this is upstream of the IHXStreamSource
5285+ * object.
5286+ */
5287+ STDMETHOD(OnTotalDurChanged) (THIS_
5288+ IHXStreamSource* /*IN*/ /*NULL is valid value*/ pStreamSource,
5289+ UINT32 /*IN*/ ulNewDur);
5290+
5291+ /************************************************************************
5292+ * Method:
5293+ * IHXPDStatusObserver::OnDownloadComplete
5294+ *
5295+ * Purpose:
5296+ * Notification that the entire file has been downloaded.
5297+ *
5298+ * Note: pStreamSource can be NULL. This will be true when
5299+ * IHXPDStatusMgr calling this is upstream of the IHXStreamSource
5300+ * object.
5301+ *
5302+ */
5303+ STDMETHOD(OnDownloadComplete) (THIS_
5304+ IHXStreamSource* /*IN*/ /*NULL is valid value*/ pStreamSource);
5305+
5306+ /************************************************************************
5307+ * Method:
5308+ * IHXPDStatusObserver::SrcClaimsSeekSupport
5309+ *
5310+ * Purpose:
5311+ * Passes along notification from file sys that seek support
5312+ * is claimed to be available (although sometimes HTTP server
5313+ * claims this when it doesn't actually support it).
5314+ *
5315+ */
5316+ STDMETHOD(SrcClaimsSeekSupport) (THIS_
5317+ IHXStreamSource* pStreamSource,
5318+ HXBOOL /*IN*/ bSrcClaimsSeekSupport);
5319+
5320+ /************************************************************************
5321+ * Method:
5322+ * IHXPDStatusObserver::OnDownloadPause
5323+ * Purpose:
5324+ * Notification that the file-download process has purposefully
5325+ * and temporarily halted downloading of the file
5326+ *
5327+ * Note: pStreamSource can be NULL. This will be true when
5328+ * IHXPDStatusMgr calling this is upstream of the IHXStreamSource
5329+ * object.
5330+ */
5331+ STDMETHOD(OnDownloadPause) (THIS_
5332+ IHXStreamSource* /*IN*/ /*NULL is valid value*/ pStreamSource);
5333+
5334+ /************************************************************************
5335+ * Method:
5336+ * IHXPDStatusObserver::OnDownloadResume
5337+ * Purpose:
5338+ * Notification that the file-download process has resumed
5339+ * the process of downloading the remainder of the file
5340+ *
5341+ * Note: pStreamSource can be NULL. This will be true when
5342+ * IHXPDStatusMgr calling this is upstream of the IHXStreamSource
5343+ * object.
5344+ */
5345+ STDMETHOD(OnDownloadResume) (THIS_
5346+ IHXStreamSource* /*IN*/ /*NULL is valid value*/ pStreamSource);
5347+};
5348+// /#endif // /HELIX_FEATURE_PROGRESSIVE_DOWNLD_STATUS.
5349+
5350+#endif // _EXPRDNLD_H_
5351+
5352Index: helix-libs/clientapps/clutter/exroot.cpp
5353===================================================================
5354--- /dev/null 1970-01-01 00:00:00.000000000 +0000
5355+++ helix-libs/clientapps/clutter/exroot.cpp 2008-10-13 06:54:08.000000000 -0700
5356@@ -0,0 +1,672 @@
5357+/* ***** BEGIN LICENSE BLOCK *****
5358+ * Source last modified: $Id: unixroot.cpp,v 1.9 2007/07/06 20:54:01 jfinnecy Exp $
5359+ *
5360+ * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
5361+ *
5362+ * The contents of this file, and the files included with this file,
5363+ * are subject to the current version of the RealNetworks Public
5364+ * Source License (the "RPSL") available at
5365+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
5366+ * the file under the current version of the RealNetworks Community
5367+ * Source License (the "RCSL") available at
5368+ * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
5369+ * will apply. You may also obtain the license terms directly from
5370+ * RealNetworks. You may not use this file except in compliance with
5371+ * the RPSL or, if you have a valid RCSL with RealNetworks applicable
5372+ * to this file, the RCSL. Please see the applicable RPSL or RCSL for
5373+ * the rights, obligations and limitations governing use of the
5374+ * contents of the file.
5375+ *
5376+ * Alternatively, the contents of this file may be used under the
5377+ * terms of the GNU General Public License Version 2 (the
5378+ * "GPL") in which case the provisions of the GPL are applicable
5379+ * instead of those above. If you wish to allow use of your version of
5380+ * this file only under the terms of the GPL, and not to allow others
5381+ * to use your version of this file under the terms of either the RPSL
5382+ * or RCSL, indicate your decision by deleting the provisions above
5383+ * and replace them with the notice and other provisions required by
5384+ * the GPL. If you do not delete the provisions above, a recipient may
5385+ * use your version of this file under the terms of any one of the
5386+ * RPSL, the RCSL or the GPL.
5387+ *
5388+ * This file is part of the Helix DNA Technology. RealNetworks is the
5389+ * developer of the Original Code and owns the copyrights in the
5390+ * portions it created.
5391+ *
5392+ * This file, and the files included with this file, is distributed
5393+ * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
5394+ * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
5395+ * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
5396+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
5397+ * ENJOYMENT OR NON-INFRINGEMENT.
5398+ *
5399+ * Technology Compatibility Kit Test Suite(s) Location:
5400+ * http://www.helixcommunity.org/content/tck
5401+ *
5402+ * Contributor(s):
5403+ *
5404+ * ***** END LICENSE BLOCK ***** */
5405+
5406+// for shared memory
5407+#include <sys/types.h>
5408+#include <sys/ipc.h>
5409+#include <sys/shm.h>
5410+#include <sys/utsname.h>
5411+
5412+#include "hxcom.h"
5413+#include "hxwintyp.h"
5414+#include "hxvsurf.h"
5415+#include "hxslist.h"
5416+#include "colormap.h"
5417+#include "hxprefs.h"
5418+#include "hxtick.h"
5419+#include "hxthread.h"
5420+#include "basesite.h"
5421+#include "exroot.h"
5422+#include "exsite.h"
5423+#include "unixcmap.h"
5424+#include "shmhelp.h"
5425+
5426+// #ifdef _DEBUG
5427+// #include <X11/extensions/xf86vmode.h> //for debug video sync rates..
5428+// #endif
5429+
5430+//Work around AIX problem.
5431+#ifdef _AIX
5432+# define MAX_SHARED_REGIONS ((UINT32)1)
5433+#else
5434+# define MAX_SHARED_REGIONS ((UINT32)9999)
5435+#endif
5436+
5437+CExRootSurf::CExRootSurf(IUnknown* pContext, CHXBaseSite* pSite, on_new_frame_cb_t on_new_frame_cb, void *context )
5438+ : CBaseRootSurface(pContext, pSite)
5439+ , m_bUseShm(FALSE)
5440+ , m_nShmId(0)
5441+ , m_pDisplay(NULL)
5442+ , m_GC(0)
5443+ , m_nScreenNumber(0)
5444+ , m_pXImage(NULL)
5445+ , m_pVisual(NULL)
5446+ , m_unDepth(0)
5447+ , m_pScreen(NULL)
5448+ , m_pYUVScratchBits(NULL)
5449+ , m_nYUVScratchPitch(0)
5450+ , m_pScratchBits(NULL)
5451+ , m_nScratchPitch(0)
5452+ , m_nBitsPerPixel(0)
5453+ , m_nCompositionSize(0)
5454+ , m_on_new_frame_cb(on_new_frame_cb)
5455+ , m_context(context)
5456+{
5457+}
5458+
5459+HX_RESULT CExRootSurf::Init()
5460+{
5461+ //get window and display from main Site.
5462+ HXxWindow* pWindow = m_pSite->GetWindow();
5463+ HX_ASSERT(pWindow);
5464+
5465+ m_pDisplay = (Display*)pWindow->display;
5466+ m_window = (Window)pWindow->window;
5467+
5468+ HX_ASSERT( m_pDisplay );
5469+ HX_ASSERT( m_window );
5470+
5471+ //
5472+ // Now see if our X11 server supports the Shared Memory extension.
5473+ //
5474+ // ShmHelp::Init(m_pDisplay);
5475+ // m_bUseShm = ShmHelp::ShmAvailable();
5476+
5477+ //Create the graphics context
5478+ XGCValues values;
5479+
5480+ XLockDisplay(m_pDisplay);
5481+ m_GC = XCreateGC(m_pDisplay, m_window, 0, &values);
5482+
5483+ //Get X window attributes & visual
5484+ XWindowAttributes attr;
5485+ XGetWindowAttributes(m_pDisplay, m_window, &attr);
5486+ XUnlockDisplay(m_pDisplay);
5487+ m_pVisual = attr.visual;
5488+
5489+ // get visual info & depth
5490+ int nv=0;
5491+ XVisualInfo visInfo;
5492+ memset(&visInfo, 0, sizeof(XVisualInfo));
5493+ XLockDisplay(m_pDisplay);
5494+ visInfo.visualid = XVisualIDFromVisual(m_pVisual);
5495+ XVisualInfo* pVisualInfo = XGetVisualInfo (m_pDisplay, VisualIDMask, &visInfo, &nv);
5496+// m_unDepth = pVisualInfo->depth;
5497+ m_unDepth = 24;
5498+ m_nScreenNumber = DefaultScreen(m_pDisplay);
5499+ m_pScreen = XScreenOfDisplay(m_pDisplay, m_nScreenNumber);
5500+ XUnlockDisplay(m_pDisplay);
5501+ m_colormap = HXGetXColormap(m_pDisplay, m_window);
5502+
5503+ // get pixmap (blt) information for the best depth we can display
5504+ int i=0;
5505+ int nNum=0;
5506+ XLockDisplay(m_pDisplay);
5507+ XPixmapFormatValues *pixmap_formats = XListPixmapFormats(m_pDisplay, &nNum);
5508+ XUnlockDisplay(m_pDisplay);
5509+ if(pixmap_formats)
5510+ {
5511+ for (i=0 ; i<nNum; i++)
5512+ {
5513+ if (pixmap_formats[i].depth == m_unDepth)
5514+ {
5515+ m_nBitsPerPixel = pixmap_formats[i].bits_per_pixel;
5516+ }
5517+ }
5518+ XFree(pixmap_formats);
5519+ pixmap_formats = NULL;
5520+ }
5521+
5522+ memset(&m_bmiSave, 0, sizeof(HXBitmapInfo));
5523+#if 0
5524+ m_bmiSave.bmiHeader.biBitCount = m_nBitsPerPixel;
5525+ m_bmiSave.bmiHeader.biCompression = (m_unDepth==8 ? BI_RGB : BI_BITFIELDS);
5526+ m_bmiSave.un.dwBitMask[0] = pVisualInfo->red_mask;
5527+ m_bmiSave.un.dwBitMask[1] = pVisualInfo->green_mask;
5528+ m_bmiSave.un.dwBitMask[2] = pVisualInfo->blue_mask;
5529+#else
5530+ /* Fake a RGB24 */
5531+ m_nBitsPerPixel = 24;
5532+ m_bmiSave.bmiHeader.biBitCount = m_nBitsPerPixel;
5533+ m_bmiSave.bmiHeader.biCompression = BI_RGB;
5534+#endif
5535+ //Set primary surface CID.
5536+ m_nCompositionSurfaceCID = GetBitmapColor(&m_bmiSave);
5537+ XFree( pVisualInfo );
5538+
5539+// #ifdef _DEBUG
5540+// //Lets find out what Hsync and Vsync rates we have for this display.
5541+// //Ripped from xvidtune.c
5542+// XF86VidModeModeLine mode_line;
5543+// int scrn=0;
5544+// int dot_clock;
5545+// double vsync_hz, HSyncRate,HTotal, VTotal, PixelClock;
5546+// if(XF86VidModeGetModeLine(m_pDisplay, scrn, &dot_clock, &mode_line))
5547+// {
5548+// PixelClock=dot_clock;
5549+// HTotal = mode_line.htotal;
5550+// VTotal = mode_line.vtotal;
5551+// HSyncRate = PixelClock*1000.0/HTotal;
5552+// vsync_hz = HSyncRate/VTotal;
5553+// fprintf( stderr, "This Display's Hsync rate is: %f and Vsync: %f\n",
5554+// HSyncRate, vsync_hz );
5555+// }
5556+
5557+// #endif
5558+
5559+ return HXR_OK;
5560+}
5561+
5562+CExRootSurf::~CExRootSurf()
5563+{
5564+ _DestroyCompositionSurface();
5565+
5566+ if( m_GC )
5567+ {
5568+ XLockDisplay(m_pDisplay);
5569+ XFreeGC( m_pDisplay, m_GC );
5570+ XUnlockDisplay(m_pDisplay);
5571+ m_GC=0;
5572+ }
5573+ if (m_pVisual)
5574+ {
5575+ /* PJG: don't have to free visuals */
5576+ m_pVisual = NULL;
5577+ }
5578+
5579+ if(m_bUseShm)
5580+ {
5581+ if( m_pCompositionSurface != NULL )
5582+ ShmHelp::DetachSharedRegion(&m_pCompositionSurface, &m_shmInfo);
5583+ }
5584+ else
5585+ {
5586+ HX_DELETE(m_pCompositionSurface);
5587+ m_nCompositionSize=0;
5588+ m_bCompositionSurfaceCreated=FALSE;
5589+ }
5590+
5591+ //XXXgfw any more clean up for these two?
5592+ HX_VECTOR_DELETE( m_pScratchBits );
5593+ HX_VECTOR_DELETE( m_pYUVScratchBits );
5594+
5595+}
5596+
5597+HX_RESULT CExRootSurf::_ResizeVideoBuffer( INT32 nSize)
5598+{
5599+ HX_RESULT retVal=HXR_OK;
5600+
5601+ if(nSize <= m_nCompositionSize)
5602+ return retVal;
5603+
5604+ if(m_bUseShm)
5605+ {
5606+ if( m_pCompositionSurface != NULL )
5607+ retVal = ShmHelp::DetachSharedRegion(&m_pCompositionSurface, &m_shmInfo);
5608+ if( retVal==HXR_OK )
5609+ {
5610+ retVal = ShmHelp::CreateSharedRegion( nSize,
5611+ &m_pCompositionSurface,
5612+ &m_nShmId,
5613+ &m_shmInfo
5614+ );
5615+
5616+ }
5617+ if( retVal != HXR_OK )
5618+ {
5619+ m_bCompositionSurfaceCreated = FALSE;
5620+ m_nCompositionSize = 0;
5621+ m_bUseShm = FALSE;
5622+ }
5623+ else
5624+ {
5625+ //It all worked
5626+ m_nCompositionSize = nSize;
5627+ m_bCompositionSurfaceCreated = TRUE;
5628+ return retVal;
5629+ }
5630+
5631+ }
5632+
5633+ //We need to fall through here so that if the shared memory stuff
5634+ //above fails we can create it the old fashioned way.
5635+ if(m_pCompositionSurface == NULL)
5636+ {
5637+ m_pCompositionSurface = (UCHAR*) malloc(nSize);
5638+ }
5639+ else
5640+ {
5641+ m_pCompositionSurface = (UCHAR*) realloc(m_pCompositionSurface, nSize);
5642+ }
5643+ if( m_pCompositionSurface )
5644+ {
5645+ m_nCompositionSize = nSize;
5646+ }
5647+ else
5648+ {
5649+ HX_ASSERT("We can't alloc the composition surface." == NULL );
5650+ m_nCompositionSize = 0;
5651+ }
5652+
5653+ return retVal;
5654+}
5655+
5656+HX_RESULT CExRootSurf::_DebugBlt( UCHAR* pImageData, HXBitmapInfoHeader* pBitmapInfo,
5657+ HXxRect& rDestRect, HXxRect& rSrcRect)
5658+{
5659+ HX_ASSERT( m_window );
5660+ HX_ASSERT( m_pDisplay );
5661+ HX_ASSERT( m_GC );
5662+ XLockDisplay(m_pDisplay);
5663+ XSetForeground( m_pDisplay, m_GC, WhitePixel(m_pDisplay, 0 ));
5664+ XSetBackground( m_pDisplay, m_GC, BlackPixel(m_pDisplay, 0 ));
5665+ XSetLineAttributes(m_pDisplay, m_GC, 5, LineSolid, CapRound, JoinRound );
5666+ XSetForeground( m_pDisplay, m_GC, WhitePixel(m_pDisplay, 0) );
5667+ XFillRectangle( m_pDisplay, m_window, m_GC,
5668+ rDestRect.left, rDestRect.top,
5669+ rDestRect.right-rDestRect.left,
5670+ rDestRect.bottom-rDestRect.top
5671+ );
5672+ XDrawRectangle( m_pDisplay, m_window, m_GC,
5673+ rDestRect.left, rDestRect.top,
5674+ rDestRect.right-rDestRect.left,
5675+ rDestRect.bottom-rDestRect.top
5676+ );
5677+ XUnlockDisplay(m_pDisplay);
5678+ return HXR_OK;
5679+}
5680+
5681+void CExRootSurf::_GetYUVScratchWidthHeight(UINT32* pWidth, UINT32* pHeight)
5682+{
5683+ *pWidth = m_bmiYUVScratch.bmiHeader.biWidth;
5684+ *pHeight = m_bmiYUVScratch.bmiHeader.biHeight;
5685+}
5686+
5687+XImage* CExRootSurf::_GetCompositionSurfaceDrawable()
5688+{
5689+ return m_pXImage;
5690+}
5691+
5692+
5693+
5694+//Not used except for XING.....
5695+void CExRootSurf::_CreateYUVScratchSurface(UINT32 width, UINT32 height)
5696+{
5697+ //Remove old bits....
5698+ HX_DELETE(m_pYUVScratchBits);
5699+
5700+ //Clear BitmapInfo struct....
5701+ memset(&m_bmiYUVScratch, 0, sizeof(HXBitmapInfo));
5702+ int nResult = MakeBitmap( &m_bmiYUVScratch,
5703+ sizeof(m_bmiYUVScratch),
5704+ CID_YUY2,
5705+ width,
5706+ height,
5707+ NULL,
5708+ 0);
5709+ if( nResult )
5710+ {
5711+ m_pYUVScratchBits = new UCHAR[m_bmiYUVScratch.bmiHeader.biSizeImage];
5712+ m_nYUVScratchPitch = GetBitmapPitch(&m_bmiYUVScratch);
5713+ }
5714+}
5715+
5716+
5717+void CExRootSurf::_GetYUVScratchSurfacePointer(UCHAR** pYUVBits, INT32* YUVPitch)
5718+{
5719+ *pYUVBits = m_pYUVScratchBits;
5720+ *YUVPitch = m_nYUVScratchPitch;
5721+}
5722+
5723+HX_RESULT CExRootSurf::CreateScratchSurface( int nCompositionSurfaceCID, HXxSize* pSize)
5724+{
5725+ //Remove old bits....
5726+ HX_DELETE(m_pScratchBits);
5727+
5728+ //Clear BitmapInfo struct....
5729+ memset(&m_bmiScratch, 0, sizeof(HXBitmapInfo));
5730+ int nResult = MakeBitmap( &m_bmiScratch,
5731+ sizeof(m_bmiScratch),
5732+ nCompositionSurfaceCID,
5733+ pSize->cx,
5734+ pSize->cy,
5735+ NULL,
5736+ 0);
5737+ if( nResult )
5738+ {
5739+ m_pScratchBits = new UCHAR[m_bmiScratch.bmiHeader.biSizeImage];
5740+ m_nScratchPitch = GetBitmapPitch(&m_bmiScratch);
5741+ }
5742+
5743+ return nResult? HXR_OK : HXR_FAIL;
5744+}
5745+
5746+HX_RESULT CExRootSurf::ScratchLock(UCHAR** pBits, INT32* pPitch)
5747+{
5748+ *pBits = m_pScratchBits;
5749+ *pPitch = m_nScratchPitch;
5750+ return HXR_OK;
5751+}
5752+
5753+HX_RESULT CExRootSurf::ScratchUnlock(UCHAR* pBits)
5754+{
5755+ return HXR_OK;
5756+}
5757+
5758+HX_RESULT CExRootSurf::_MinimalUnlock(HXxWindow* pWindow)
5759+{
5760+// Window win = m_window;
5761+// HX_ASSERT(win);
5762+// HXxSize hxxSize;
5763+// m_pSite->GetSize(hxxSize);
5764+
5765+// if (m_bUseShm)
5766+// {
5767+// XShmPutImage(m_pDisplay,
5768+// win,
5769+// m_GC,
5770+// m_pXImage,
5771+// 0,
5772+// 0,
5773+// 0,
5774+// 0,
5775+// hxxSize.cx,
5776+// hxxSize.cy,
5777+// False
5778+// );
5779+// }
5780+// else
5781+// {
5782+// XPutImage(m_pDisplay,
5783+// win,
5784+// m_GC,
5785+// m_pXImage,
5786+// 0,
5787+// 0,
5788+// 0,
5789+// 0,
5790+// hxxSize.cx,
5791+// hxxSize.cy
5792+// );
5793+// }
5794+ return HXR_OK;
5795+}
5796+
5797+HX_RESULT CExRootSurf::_LockComposition(UCHAR** pBits, INT32* pPitch)
5798+{
5799+ HX_RESULT retVal = HXR_OK;
5800+ if( !m_bCompositionSurfaceCreated || m_pCompositionSurface==NULL )
5801+ {
5802+ retVal = _CreateCompositionSurface();
5803+ }
5804+ HX_ASSERT( m_pCompositionSurface );
5805+ *pBits = m_pCompositionSurface;
5806+ *pPitch = m_nCompositionPitch;
5807+ return HXR_OK;
5808+}
5809+
5810+
5811+void CExRootSurf::_BltFromScratchToComposition( HXxRect& rDestRect, HXxRect& rSrcRect)
5812+{
5813+ HX_ASSERT( "Not implemented on unix yet...."==NULL );
5814+}
5815+
5816+HX_RESULT CExRootSurf::_CreateCompositionSurface()
5817+{
5818+ HX_RESULT retVal = HXR_FAIL;
5819+
5820+ if(m_bCompositionSurfaceCreated)
5821+ {
5822+ return HXR_OK;
5823+ }
5824+
5825+ HX_ASSERT( !m_bCompositionSurfaceCreated );
5826+ HX_ASSERT( m_pSite );
5827+
5828+ //Create a BMI to describe the composition surface
5829+ HXxSize hxxSize;
5830+ m_pSite->GetSize(hxxSize);
5831+ memcpy(&m_compositionSize, &hxxSize, sizeof(HXxSize)); /* Flawfinder: ignore */
5832+
5833+ // find out how big we want to allocate.
5834+ if (m_pSite->IsFullScreen())
5835+ {
5836+ UINT16 unDummy=0;
5837+ UINT16 unHorzRes=0;
5838+ UINT16 unVertRes=0;
5839+ m_pSite->_GetDeviceCaps(NULL, unDummy, unHorzRes, unVertRes );
5840+ m_allocatedCompositionSize.cx = unHorzRes;
5841+ m_allocatedCompositionSize.cy = unVertRes;
5842+ }
5843+ else
5844+ {
5845+ // we use root surface for BASIC_BLT and it assumes the offset(position)
5846+ // of the root site it cooresponding to is (0, 0).
5847+ //
5848+ // this is not true for "windowless" mode where the root site can be given
5849+ // an offset, as a result, we fail to blt the video.
5850+ //
5851+ // to fix this, we'll take the m_positionOrg into consideration when
5852+ // creating the composition surface, this may not be optimal but good enough
5853+ // for now.
5854+ //
5855+ // similar logic is also added for other platforms, we need to move this
5856+ // common code to the base class when we have chance to clean it up
5857+ if (m_compositionSize.cx && m_compositionSize.cy)
5858+ {
5859+ m_compositionSize.cx += m_pSite->m_positionOrig.x;
5860+ m_compositionSize.cy += m_pSite->m_positionOrig.y;
5861+ }
5862+
5863+ m_allocatedCompositionSize.cx = m_compositionSize.cx;
5864+ m_allocatedCompositionSize.cy = m_compositionSize.cy;
5865+ }
5866+
5867+ //XXXgfw uhhhh, OK.
5868+ if( m_compositionSize.cx > m_allocatedCompositionSize.cx ||
5869+ m_compositionSize.cy > m_allocatedCompositionSize.cy )
5870+ {
5871+ m_allocatedCompositionSize.cx = m_compositionSize.cx;
5872+ m_allocatedCompositionSize.cy = m_compositionSize.cy;
5873+ }
5874+
5875+ //Make the bitmap header struct.
5876+ m_bmiComposition.bmiHeader.biBitCount = m_bmiSave.bmiHeader.biBitCount;
5877+ m_bmiComposition.bmiHeader.biCompression = m_bmiSave.bmiHeader.biCompression;
5878+ m_bmiComposition.un.dwBitMask[0] = m_bmiSave.un.dwBitMask[0];
5879+ m_bmiComposition.un.dwBitMask[1] = m_bmiSave.un.dwBitMask[1];
5880+ m_bmiComposition.un.dwBitMask[2] = m_bmiSave.un.dwBitMask[2];
5881+ int nResult = MakeBitmap( &m_bmiComposition,
5882+ sizeof(m_bmiComposition),
5883+ m_nCompositionSurfaceCID,
5884+ m_allocatedCompositionSize.cx,
5885+ m_allocatedCompositionSize.cy,
5886+ NULL,
5887+ 0
5888+ );
5889+ m_bmiComposition.bmiHeader.biBitCount = m_bmiSave.bmiHeader.biBitCount;
5890+ m_bmiComposition.bmiHeader.biCompression = m_bmiSave.bmiHeader.biCompression;
5891+ m_bmiComposition.un.dwBitMask[0] = m_bmiSave.un.dwBitMask[0];
5892+ m_bmiComposition.un.dwBitMask[1] = m_bmiSave.un.dwBitMask[1];
5893+ m_bmiComposition.un.dwBitMask[2] = m_bmiSave.un.dwBitMask[2];
5894+
5895+ //Now create the bits....
5896+ _ResizeVideoBuffer( m_bmiComposition.bmiHeader.biSizeImage );
5897+ m_nCompositionPitch = GetBitmapPitch( &m_bmiComposition );
5898+
5899+ if( m_pXImage )
5900+ {
5901+ XFree( m_pXImage );
5902+ }
5903+
5904+ if( m_bUseShm )
5905+ {
5906+ XLockDisplay(m_pDisplay);
5907+ m_pXImage = XShmCreateImage( m_pDisplay,
5908+ m_pVisual,
5909+ m_unDepth,
5910+ ZPixmap,
5911+ (char*)m_pCompositionSurface,
5912+ &m_shmInfo,
5913+ m_allocatedCompositionSize.cx,
5914+ m_allocatedCompositionSize.cy
5915+ );
5916+ XUnlockDisplay(m_pDisplay);
5917+ }
5918+ else
5919+ {
5920+ XLockDisplay(m_pDisplay);
5921+ m_pXImage = XCreateImage( m_pDisplay,
5922+ m_pVisual,
5923+ m_unDepth,
5924+ ZPixmap,
5925+ 0,
5926+ (char*)m_pCompositionSurface,
5927+ m_allocatedCompositionSize.cx,
5928+ m_allocatedCompositionSize.cy,
5929+ 32,
5930+ 0);
5931+ XUnlockDisplay(m_pDisplay);
5932+ }
5933+
5934+ if( m_pXImage )
5935+ {
5936+ m_bCompositionSurfaceCreated = TRUE;
5937+#ifdef _BIG_ENDIAN
5938+ m_pXImage->byte_order = MSBFirst;
5939+#else
5940+ m_pXImage->byte_order = LSBFirst;
5941+#endif
5942+ retVal = HXR_OK;
5943+ }
5944+ return retVal;
5945+}
5946+
5947+void CExRootSurf::_MinimalBlt(HXxRect& destRect)
5948+{
5949+ if (m_on_new_frame_cb)
5950+ {
5951+ PlayerImgInfo Info;
5952+ Info.Rect.left = destRect.left;
5953+ Info.Rect.right = destRect.right;
5954+ Info.Rect.top = destRect.top;
5955+ Info.Rect.bottom = destRect.bottom;
5956+ Info.cx = m_allocatedCompositionSize.cx;
5957+ Info.cy = m_allocatedCompositionSize.cy;
5958+ m_on_new_frame_cb(m_pCompositionSurface,
5959+ m_bmiComposition.bmiHeader.biSizeImage,
5960+ &Info,
5961+ m_context);
5962+ }
5963+}
5964+
5965+HX_RESULT CExRootSurf::_DestroyCompositionSurface()
5966+{
5967+ HX_RESULT retVal = HXR_OK;
5968+ if( m_bCompositionSurfaceCreated )
5969+ {
5970+ if( m_pXImage )
5971+ {
5972+ XFree(m_pXImage);
5973+ m_pXImage = NULL;
5974+ }
5975+ m_bCompositionSurfaceCreated = FALSE;
5976+ }
5977+
5978+ return retVal;
5979+}
5980+
5981+
5982+
5983+HX_RESULT CExRootSurf::BeginOptimizedBlt(HXBitmapInfoHeader* pBitmapInfo)
5984+{
5985+#ifdef _DEBUG
5986+ fprintf(stderr, "CExRootSurf::BeginOptimizedBlt Needs to be written\n" );
5987+#endif
5988+ return HXR_NOTIMPL;
5989+}
5990+
5991+HX_RESULT CExRootSurf::OptimizedBlt( UCHAR* pImageBits,
5992+ HXxRect& rDestRect,
5993+ HXxRect& rSrcRect)
5994+{
5995+#ifdef _DEBUG
5996+ fprintf(stderr, "CExRootSurf::OptimizedBlt Needs to be written\n" );
5997+#endif
5998+ return HXR_NOTIMPL;
5999+}
6000+
6001+HX_RESULT CExRootSurf::EndOptimizedBlt(void)
6002+{
6003+#ifdef _DEBUG
6004+ fprintf(stderr, "CExRootSurf::EndOptimizedBlt Needs to be written\n" );
6005+#endif
6006+ return HXR_NOTIMPL;
6007+}
6008+
6009+HX_RESULT CExRootSurf::GetOptimizedFormat(HX_COMPRESSION_TYPE& ulType)
6010+{
6011+#ifdef _DEBUG
6012+ fprintf(stderr, "CExRootSurf::GetOptimizedFormat Needs to be written\n" );
6013+#endif
6014+ return HXR_NOTIMPL;
6015+}
6016+
6017+HX_RESULT CExRootSurf::GetPreferredFormat(HX_COMPRESSION_TYPE& ulType)
6018+{
6019+#ifdef _DEBUG
6020+ fprintf(stderr, "CExRootSurf::GetPreferredFormat Needs to be written\n" );
6021+#endif
6022+ return HXR_NOTIMPL;
6023+}
6024+
6025+GC CExRootSurf::GetGC()
6026+{
6027+ return m_GC;
6028+}
6029Index: helix-libs/clientapps/clutter/exroot.h
6030===================================================================
6031--- /dev/null 1970-01-01 00:00:00.000000000 +0000
6032+++ helix-libs/clientapps/clutter/exroot.h 2008-10-13 06:05:49.000000000 -0700
6033@@ -0,0 +1,155 @@
6034+/* ***** BEGIN LICENSE BLOCK *****
6035+ * Source last modified: $Id: unixroot.h,v 1.8 2007/07/06 20:54:05 jfinnecy Exp $
6036+ *
6037+ * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
6038+ *
6039+ * The contents of this file, and the files included with this file,
6040+ * are subject to the current version of the RealNetworks Public
6041+ * Source License (the "RPSL") available at
6042+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
6043+ * the file under the current version of the RealNetworks Community
6044+ * Source License (the "RCSL") available at
6045+ * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
6046+ * will apply. You may also obtain the license terms directly from
6047+ * RealNetworks. You may not use this file except in compliance with
6048+ * the RPSL or, if you have a valid RCSL with RealNetworks applicable
6049+ * to this file, the RCSL. Please see the applicable RPSL or RCSL for
6050+ * the rights, obligations and limitations governing use of the
6051+ * contents of the file.
6052+ *
6053+ * Alternatively, the contents of this file may be used under the
6054+ * terms of the GNU General Public License Version 2 (the
6055+ * "GPL") in which case the provisions of the GPL are applicable
6056+ * instead of those above. If you wish to allow use of your version of
6057+ * this file only under the terms of the GPL, and not to allow others
6058+ * to use your version of this file under the terms of either the RPSL
6059+ * or RCSL, indicate your decision by deleting the provisions above
6060+ * and replace them with the notice and other provisions required by
6061+ * the GPL. If you do not delete the provisions above, a recipient may
6062+ * use your version of this file under the terms of any one of the
6063+ * RPSL, the RCSL or the GPL.
6064+ *
6065+ * This file is part of the Helix DNA Technology. RealNetworks is the
6066+ * developer of the Original Code and owns the copyrights in the
6067+ * portions it created.
6068+ *
6069+ * This file, and the files included with this file, is distributed
6070+ * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
6071+ * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
6072+ * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
6073+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
6074+ * ENJOYMENT OR NON-INFRINGEMENT.
6075+ *
6076+ * Technology Compatibility Kit Test Suite(s) Location:
6077+ * http://www.helixcommunity.org/content/tck
6078+ *
6079+ * Contributor(s):
6080+ *
6081+ * ***** END LICENSE BLOCK ***** */
6082+
6083+#ifndef _UNIXROOT_H
6084+#define _UNIXROOT_H
6085+
6086+#include "baseroot.h"
6087+#if defined(USE_XWINDOWS)
6088+#include <X11/Xatom.h>
6089+#include <X11/Xlib.h>
6090+#include <X11/Xutil.h>
6091+#include <X11/Xos.h>
6092+#include <X11/Intrinsic.h>
6093+#include <X11/extensions/XShm.h>
6094+#endif
6095+
6096+#include "player.h"
6097+
6098+class CExRootSurf : public CBaseRootSurface
6099+{
6100+public:
6101+ CExRootSurf(IUnknown* pContext, CHXBaseSite* pSite, on_new_frame_cb_t on_new_frame_cb = NULL, void *context = NULL);
6102+
6103+ //Helpers....
6104+ HX_RESULT Init();
6105+ GC GetGC();
6106+
6107+ //public inherited stuff
6108+ virtual HX_RESULT CreateScratchSurface(int nCompositionSurfaceCID,
6109+ HXxSize* pSize);
6110+ virtual HX_RESULT ScratchLock(UCHAR** pBits, INT32* pPitch);
6111+ virtual HX_RESULT ScratchUnlock(UCHAR* pBits);
6112+
6113+ virtual HX_RESULT BeginOptimizedBlt(HXBitmapInfoHeader* pBitmapInfo);
6114+ virtual HX_RESULT OptimizedBlt( UCHAR* pImageBits,
6115+ HXxRect& rDestRect,
6116+ HXxRect& rSrcRect);
6117+ virtual HX_RESULT EndOptimizedBlt(void);
6118+ virtual HX_RESULT GetOptimizedFormat(HX_COMPRESSION_TYPE& ulType);
6119+ virtual HX_RESULT GetPreferredFormat(HX_COMPRESSION_TYPE& ulType);
6120+
6121+ XImage* _GetCompositionSurfaceDrawable();
6122+
6123+ //Shared Memory helper func for the basesurf to use.
6124+// HX_RESULT _DetachSharedRegion();
6125+// HX_RESULT _CreateSharedRegion(INT32 nSize);
6126+
6127+protected:
6128+
6129+ //Smartly handle resizing of shm buffer.
6130+ HX_RESULT _ResizeVideoBuffer(INT32 nSize);
6131+
6132+ //Inherited from CBaseRootSurface....
6133+ virtual void _BltFromScratchToComposition(HXxRect& rDestRect,
6134+ HXxRect& rSrcRect);
6135+ virtual HX_RESULT _DebugBlt( UCHAR* pImageData,
6136+ HXBitmapInfoHeader* pBitmapInfo,
6137+ HXxRect& rDestRect,
6138+ HXxRect& rSrcRect);
6139+ virtual void _GetYUVScratchWidthHeight(UINT32* pWidth, UINT32* pHeight);
6140+ virtual void _CreateYUVScratchSurface(UINT32 width, UINT32 height);
6141+ virtual void _GetYUVScratchSurfacePointer(UCHAR** pYUVBits, INT32* YUVPitch);
6142+ virtual HX_RESULT _MinimalUnlock(HXxWindow* pWindow);
6143+ virtual HX_RESULT _LockComposition(UCHAR** pBits, INT32* pPitch);
6144+ virtual HX_RESULT _CreateCompositionSurface();
6145+ virtual HX_RESULT _DestroyCompositionSurface();
6146+ virtual void _MinimalBlt(HXxRect& dest);
6147+
6148+
6149+private:
6150+
6151+ virtual ~CExRootSurf();
6152+
6153+ //Protect unintentional copy and default ctors.
6154+ CExRootSurf();
6155+ CExRootSurf( const CExRootSurf& );
6156+ CExRootSurf& operator=( const CExRootSurf& it );
6157+
6158+ //Shared memory members.
6159+ HXBOOL m_bUseShm;
6160+ XShmSegmentInfo m_shmInfo;
6161+ int m_nShmId;
6162+
6163+ //General display and GC stuff.
6164+ Display* m_pDisplay;
6165+ GC m_GC;
6166+ int m_nScreenNumber;
6167+ XImage* m_pXImage;
6168+ Window m_window;
6169+ Visual* m_pVisual;
6170+ unsigned int m_unDepth;
6171+ Screen* m_pScreen;
6172+ Colormap m_colormap;
6173+ int m_nBitsPerPixel;
6174+
6175+ //Bitmap stuff.
6176+ UCHAR* m_pYUVScratchBits;
6177+ HXBitmapInfo m_bmiYUVScratch;
6178+ int m_nYUVScratchPitch;
6179+ UCHAR* m_pScratchBits;
6180+ HXBitmapInfo m_bmiScratch;
6181+ int m_nScratchPitch;
6182+ HXBitmapInfo m_bmiSave;
6183+ ULONG32 m_nCompositionSize;
6184+ on_new_frame_cb_t m_on_new_frame_cb;
6185+ void * m_context;
6186+};
6187+
6188+#endif
6189Index: helix-libs/clientapps/clutter/exsite.cpp
6190===================================================================
6191--- /dev/null 1970-01-01 00:00:00.000000000 +0000
6192+++ helix-libs/clientapps/clutter/exsite.cpp 2008-10-13 06:05:49.000000000 -0700
6193@@ -0,0 +1,2915 @@
6194+/* ***** BEGIN LICENSE BLOCK *****
6195+ * Source last modified: $Id: unixsite.cpp,v 1.18.2.6 2008/06/05 14:24:30 lovish Exp $
6196+ *
6197+ * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
6198+ *
6199+ * The contents of this file, and the files included with this file,
6200+ * are subject to the current version of the RealNetworks Public
6201+ * Source License (the "RPSL") available at
6202+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
6203+ * the file under the current version of the RealNetworks Community
6204+ * Source License (the "RCSL") available at
6205+ * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
6206+ * will apply. You may also obtain the license terms directly from
6207+ * RealNetworks. You may not use this file except in compliance with
6208+ * the RPSL or, if you have a valid RCSL with RealNetworks applicable
6209+ * to this file, the RCSL. Please see the applicable RPSL or RCSL for
6210+ * the rights, obligations and limitations governing use of the
6211+ * contents of the file.
6212+ *
6213+ * Alternatively, the contents of this file may be used under the
6214+ * terms of the GNU General Public License Version 2 (the
6215+ * "GPL") in which case the provisions of the GPL are applicable
6216+ * instead of those above. If you wish to allow use of your version of
6217+ * this file only under the terms of the GPL, and not to allow others
6218+ * to use your version of this file under the terms of either the RPSL
6219+ * or RCSL, indicate your decision by deleting the provisions above
6220+ * and replace them with the notice and other provisions required by
6221+ * the GPL. If you do not delete the provisions above, a recipient may
6222+ * use your version of this file under the terms of any one of the
6223+ * RPSL, the RCSL or the GPL.
6224+ *
6225+ * This file is part of the Helix DNA Technology. RealNetworks is the
6226+ * developer of the Original Code and owns the copyrights in the
6227+ * portions it created.
6228+ *
6229+ * This file, and the files included with this file, is distributed
6230+ * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
6231+ * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
6232+ * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
6233+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
6234+ * ENJOYMENT OR NON-INFRINGEMENT.
6235+ *
6236+ * Technology Compatibility Kit Test Suite(s) Location:
6237+ * http://www.helixcommunity.org/content/tck
6238+ *
6239+ * Contributor(s):
6240+ * Phil Dibowitz
6241+ *
6242+ * ***** END LICENSE BLOCK ***** */
6243+
6244+#ifndef _UNIX
6245+#error This is the UNIX platform specific implementation.
6246+#endif
6247+
6248+//
6249+// System includes...
6250+//
6251+#include <stdio.h>
6252+#include "hlxclib/string.h"
6253+#if defined(USE_XWINDOWS)
6254+#include <X11/Intrinsic.h>
6255+#include <X11/Shell.h>
6256+#include <X11/Xlib.h>
6257+#include <X11/Xutil.h>
6258+#include <X11/keysym.h>
6259+#include <X11/Xos.h>
6260+#include <X11/cursorfont.h>
6261+#include <X11/extensions/XShm.h>
6262+#endif
6263+
6264+
6265+//
6266+// RMA includes...
6267+//
6268+#include "hxcom.h"
6269+#include "hxcore.h"
6270+#include "hxevent.h"
6271+#include "hxwintyp.h"
6272+#include "hxwin.h"
6273+#include "hxsite2.h"
6274+#include "hxtypes.h"
6275+#include "exsite.h"
6276+#include "unixcmap.h"
6277+#include "visuals.h"
6278+#include "region.h"
6279+#include "basesurf.h"
6280+#include "exroot.h"
6281+#include "hxthread.h"
6282+#include "hxtick.h"
6283+#include "sitetext.h"
6284+
6285+#include "unixsurf.h"
6286+
6287+#include "hxprefs.h"
6288+
6289+//
6290+// Global & Static global/member data....
6291+//
6292+Display *CHXExSite::zm_display = NULL;
6293+static CHXMapPtrToPtr z_mapSiteToWindow;
6294+
6295+//
6296+// Scroll bar support
6297+//
6298+#define SCROLL_BAR_WIDTH 13 //Width of scroll bar.
6299+//#define _ARROWS_SIDE_BY_SIDE 1 //Regular or side by side arrows?
6300+
6301+
6302+
6303+
6304+//
6305+// CHXExSite only Methods...
6306+//
6307+CHXExSite::CHXExSite( IUnknown* pContext, IUnknown* pUnkOuter, INT32 lInitialZorder, on_new_frame_cb_t on_new_frame_cb, void *context)
6308+ : CHXBaseSite( pContext, pUnkOuter, lInitialZorder )
6309+ , m_pUnixEventHandler(NULL)
6310+ , m_ScrollHorizButtonL(0)
6311+ , m_ScrollHorizButtonR(0)
6312+ , m_ScrollVertButtonT(0)
6313+ , m_ScrollVertButtonB(0)
6314+ , m_winFullScreenWindow(0)
6315+ , m_winOldParent(0)
6316+ , m_bScrollingInProgress(FALSE)
6317+ , m_nScrollDir(0)
6318+ , m_bLastPointInSite(FALSE)
6319+ , m_bDamaged(FALSE)
6320+ , m_bIgnoreFocusOutInFS(FALSE)
6321+ , m_bReparent(FALSE)
6322+ , m_on_new_frame_cb(on_new_frame_cb)
6323+ , m_context(context)
6324+#if defined(HELIX_CONFIG_MOBLIN)
6325+ , m_pAttachWindowCallback(NULL)
6326+ , m_pForceRedrawCallback(NULL)
6327+#endif
6328+{
6329+ m_ptScrollVertPosT.x = m_ptScrollVertPosT.y = 0;
6330+ m_ptScrollVertPosB.x = m_ptScrollVertPosB.y = 0;
6331+ m_ptScrollHorizPosR.x = m_ptScrollHorizPosR.y = 0;
6332+ m_ptScrollHorizPosL.x = m_ptScrollHorizPosL.y = 0;
6333+ m_ptFullScreenOffset.x = m_ptFullScreenOffset.y = 0;
6334+ memset( &m_PreFullScreenSize, 0, sizeof( m_PreFullScreenSize ) );
6335+
6336+ HX_ASSERT( m_pContext );
6337+
6338+ /* Replace m_pVideoSurface with my own */
6339+/* HX_RELEASE(m_pVideoSurface);
6340+ m_pVideoSurface = new CUnixSurf(m_pContext, this);
6341+ HX_ASSERT( m_pVideoSurface );
6342+ m_pVideoSurface->InitSurface(m_pContext);
6343+ m_pVideoSurface->AddRef();
6344+*/
6345+ IHXPreferences* pPreferences = NULL;
6346+ if( m_pContext && HXR_OK == m_pContext->QueryInterface( IID_IHXPreferences, (void **) &pPreferences))
6347+ {
6348+ IHXBuffer *pBuffer = NULL;
6349+ pPreferences->ReadPref("IgnoreFocusOutInFS", pBuffer);
6350+ if(pBuffer)
6351+ {
6352+ m_bIgnoreFocusOutInFS = (::atoi((const char*)pBuffer->GetBuffer()) == 1);
6353+ HX_RELEASE(pBuffer);
6354+ }
6355+ }
6356+}
6357+
6358+CHXExSite::~CHXExSite()
6359+{
6360+#if defined(HELIX_CONFIG_MOBLIN)
6361+ RemovePendingCallback(m_pAttachWindowCallback);
6362+ HX_RELEASE(m_pAttachWindowCallback);
6363+
6364+ RemovePendingCallback(m_pForceRedrawCallback);
6365+ HX_RELEASE(m_pForceRedrawCallback);
6366+#endif
6367+ void* pDummy;
6368+ if (z_mapSiteToWindow.Lookup((void*)this, pDummy))
6369+ {
6370+ z_mapSiteToWindow.RemoveKey((void*)this);
6371+ }
6372+
6373+ if( m_pUnixEventHandler )
6374+ {
6375+ m_pUnixEventHandler->CancelCallback();
6376+ HX_RELEASE(m_pUnixEventHandler);
6377+ }
6378+}
6379+
6380+HX_RESULT CHXExSite::_OpenXDisplay(char* pszDisplayString)
6381+{
6382+ HX_RESULT retVal = HXR_OK;
6383+
6384+ //Is the connection open already?
6385+ if( NULL==zm_display )
6386+ {
6387+ zm_display = XOpenDisplay(pszDisplayString);
6388+
6389+ //If you can't open the display your done.
6390+ if(NULL == zm_display )
6391+ {
6392+ HX_ASSERT("Can't open X Display..."==NULL);
6393+ retVal = HXR_FAIL;
6394+ }
6395+ else
6396+ {
6397+ HX_ASSERT(m_pScheduler);
6398+ if( m_pScheduler )
6399+ {
6400+ //UnixEventHandler scheduls itself for init callback
6401+ //in the ctor.
6402+ m_pUnixEventHandler = new UnixEventHandler(this);
6403+ m_pUnixEventHandler->AddRef();
6404+ }
6405+ }
6406+ }
6407+ return retVal;
6408+}
6409+
6410+Window CHXExSite::CreateXWindow( Window win )
6411+{
6412+ Window parentWindow;
6413+ HXxWindow* pWindow = NULL;
6414+ //If parentWin is NULL then we belong to the root window.
6415+ if( win )
6416+ {
6417+ parentWindow = win;
6418+ }
6419+ else
6420+ {
6421+ HX_ASSERT(zm_display);
6422+ XLockDisplay(zm_display);
6423+ parentWindow = RootWindow(zm_display, DefaultScreen(zm_display));
6424+ XUnlockDisplay(zm_display);
6425+ }
6426+
6427+ //Find the best visual to use on this display.
6428+ Visual* visual = GetBestVisual(zm_display);
6429+
6430+ //Get the visual info.
6431+ int nNotUsed=0;
6432+ XVisualInfo stVisInfo;
6433+
6434+ memset(&stVisInfo, 0, sizeof(XVisualInfo));
6435+ stVisInfo.visualid = XVisualIDFromVisual(visual);
6436+ XLockDisplay(zm_display);
6437+ XVisualInfo* pVisual = XGetVisualInfo( zm_display,
6438+ VisualIDMask,
6439+ &stVisInfo,
6440+ &nNotUsed );
6441+ XUnlockDisplay(zm_display);
6442+
6443+ // Set up attributes of the window.
6444+ int attrMask = CWBackPixel | CWBorderPixel;
6445+ XSetWindowAttributes attr;
6446+
6447+ memset(&attr, 0, sizeof(XSetWindowAttributes));
6448+ XLockDisplay(zm_display);
6449+ attr.background_pixel = BlackPixel(zm_display, DefaultScreen(zm_display));
6450+ attr.border_pixel = BlackPixel(zm_display, DefaultScreen(zm_display));
6451+ XUnlockDisplay(zm_display);
6452+
6453+ //See if the default visaul of hte screen is the same one we Want
6454+ //to use. If not, create a new one and install it.
6455+ Colormap cmap;
6456+ XLockDisplay(zm_display);
6457+ Visual* defVisual = DefaultVisual(zm_display, DefaultScreen(zm_display));
6458+ XUnlockDisplay(zm_display);
6459+ if( defVisual->visualid != stVisInfo.visualid )
6460+ {
6461+ //XXXgfw Are we leaking this colormap????
6462+ XLockDisplay(zm_display);
6463+ cmap = XCreateColormap(zm_display, parentWindow, visual, AllocNone);
6464+ XUnlockDisplay(zm_display);
6465+ attr.colormap = cmap;
6466+ attrMask |= CWColormap;
6467+ }
6468+
6469+ // Set the size/position of the window before creating.
6470+ XSizeHints size_hints;
6471+
6472+ size_hints.flags = PPosition | PSize;
6473+ size_hints.x = m_position.x;
6474+ size_hints.y = m_position.y;
6475+ size_hints.width = 1;
6476+ size_hints.height = 1;
6477+
6478+ //Create it.
6479+ XLockDisplay(zm_display);
6480+ Window window = XCreateWindow(zm_display,
6481+ parentWindow,
6482+ size_hints.x,
6483+ size_hints.y,
6484+ size_hints.width,
6485+ size_hints.height,
6486+ 0,
6487+ pVisual->depth,
6488+ InputOutput,
6489+ visual,
6490+ attrMask,
6491+ &attr);
6492+ XUnlockDisplay(zm_display);
6493+ XFree(pVisual);
6494+
6495+ //Tell the WM about this window.
6496+#if 0
6497+ XSetStandardProperties( zm_display,
6498+ window,
6499+ "CHXExSite",
6500+ "CHXExSite",
6501+ None,
6502+ NULL, 0,
6503+ &size_hints
6504+ );
6505+#endif
6506+
6507+ //Select all input events on the window since the other platforms
6508+ //we work with have no concept of event masks
6509+ XLockDisplay(zm_display);
6510+#if 0
6511+ int result = XSelectInput( zm_display, window,
6512+ ButtonPressMask | ButtonReleaseMask | KeyPressMask |
6513+ KeyReleaseMask | EnterWindowMask | LeaveWindowMask |
6514+ PointerMotionMask | ButtonMotionMask | KeymapStateMask |
6515+ ExposureMask | StructureNotifyMask | FocusChangeMask
6516+ );
6517+#else
6518+ int result = XSelectInput( zm_display, window, 0 );
6519+
6520+
6521+#endif
6522+ XUnlockDisplay(zm_display);
6523+ if( BadWindow == result )
6524+ {
6525+#ifdef _DEBUG
6526+ fprintf( stderr, "Can select events.\n" );
6527+#endif
6528+ }
6529+
6530+ //Map the window.
6531+ XLockDisplay(zm_display);
6532+ /* XMapWindow(zm_display, window); */
6533+
6534+ //Flush event queue.
6535+ XFlush(zm_display);
6536+ XUnlockDisplay(zm_display);
6537+
6538+
6539+ return window;
6540+}
6541+
6542+void CHXExSite::_MapHorzScroll()
6543+{
6544+#if 0
6545+ if( GetWindow() && GetWindow()->display && m_ScrollHorizButtonL)
6546+ {
6547+ Display* pDis = (Display*)GetWindow()->display;
6548+ XLockDisplay(pDis);
6549+ XMapWindow( pDis, m_ScrollHorizButtonL );
6550+ XMapWindow( pDis, m_ScrollHorizButtonR );
6551+ XUnlockDisplay(pDis);
6552+ }
6553+ _DrawArrows();
6554+#endif
6555+}
6556+
6557+void CHXExSite::_MapVertScroll()
6558+{
6559+#if 0
6560+ if( GetWindow() && GetWindow()->display && m_ScrollVertButtonT)
6561+ {
6562+ Display* pDis = (Display*)GetWindow()->display;
6563+ XLockDisplay(pDis);
6564+ XMapWindow( pDis, m_ScrollVertButtonT );
6565+ XMapWindow( pDis, m_ScrollVertButtonB );
6566+ XUnlockDisplay(pDis);
6567+ }
6568+ _DrawArrows();
6569+#endif
6570+}
6571+
6572+void CHXExSite::_MapScrollButtons()
6573+{
6574+#if 0
6575+ _MapHorzScroll();
6576+ _MapVertScroll();
6577+#endif
6578+}
6579+
6580+void CHXExSite::_UnmapHorzScroll()
6581+{
6582+#if 0
6583+ HX_ASSERT( GetWindow() );
6584+ if( m_ScrollHorizButtonL && GetWindow()->display )
6585+ {
6586+ Display* pDis = (Display*)GetWindow()->display;
6587+ XLockDisplay(pDis);
6588+ XUnmapWindow( pDis, m_ScrollHorizButtonL );
6589+ XUnmapWindow( pDis, m_ScrollHorizButtonR );
6590+ XUnlockDisplay(pDis);
6591+ }
6592+#endif
6593+}
6594+void CHXExSite::_UnmapVertScroll()
6595+{
6596+#if 0
6597+ HX_ASSERT( GetWindow() );
6598+ if( m_ScrollVertButtonT && GetWindow()->display )
6599+ {
6600+ Display* pDis = (Display*)GetWindow()->display;
6601+ XLockDisplay(pDis);
6602+ XUnmapWindow( pDis, m_ScrollVertButtonT );
6603+ XUnmapWindow( pDis, m_ScrollVertButtonB );
6604+ XUnlockDisplay(pDis);
6605+ }
6606+#endif
6607+}
6608+
6609+void CHXExSite::_UnmapScrollButtons()
6610+{
6611+#if 0
6612+ if( GetWindow() )
6613+ {
6614+ _UnmapVertScroll();
6615+ _UnmapHorzScroll();
6616+ }
6617+#endif
6618+}
6619+
6620+void CHXExSite::_DestroyScrollButtons()
6621+{
6622+ HXxWindow* pWin = GetWindow();
6623+ Display* pDis = (Display*)(pWin?pWin->display:NULL);
6624+
6625+ if( m_ScrollHorizButtonL && pDis )
6626+ {
6627+ XLockDisplay(pDis);
6628+ XDestroyWindow( pDis, m_ScrollHorizButtonL );
6629+ m_ScrollHorizButtonL = 0;
6630+ XDestroyWindow( pDis, m_ScrollHorizButtonR );
6631+ XUnlockDisplay(pDis);
6632+ m_ScrollHorizButtonR = 0;
6633+ }
6634+
6635+ if( m_ScrollVertButtonT && pDis)
6636+ {
6637+ XLockDisplay(pDis);
6638+ XDestroyWindow( pDis, m_ScrollVertButtonT );
6639+ m_ScrollVertButtonT = 0;
6640+ XDestroyWindow( pDis, m_ScrollVertButtonB );
6641+ XUnlockDisplay(pDis);
6642+ m_ScrollVertButtonB = 0;
6643+ }
6644+ m_ptScrollVertPosT.x = m_ptScrollVertPosT.y = 0;
6645+ m_ptScrollVertPosB.x = m_ptScrollVertPosB.y = 0;
6646+ m_ptScrollHorizPosR.x = m_ptScrollHorizPosR.y = 0;
6647+ m_ptScrollHorizPosL.x = m_ptScrollHorizPosL.y = 0;
6648+}
6649+
6650+void CHXExSite::_DrawArrows()
6651+{
6652+#if 0 //Paul Debug
6653+ //only do the work if our site is visible.
6654+ if( !IsSiteVisible() )
6655+ return;
6656+
6657+ //Draw an arrow on this window.
6658+ XPoint points[4];
6659+ int offset = SCROLL_BAR_WIDTH/10;
6660+ GC tmpGC;
6661+ XGCValues values;
6662+ Display* dis = (Display*)GetWindow()->display;
6663+
6664+ if( m_ScrollVertButtonB )
6665+ {
6666+ XLockDisplay(dis);
6667+ tmpGC = XCreateGC( dis, m_ScrollVertButtonB, 0, &values );
6668+ XUnlockDisplay(dis);
6669+ }
6670+ else if( m_ScrollHorizButtonL )
6671+ {
6672+ XLockDisplay(dis);
6673+ tmpGC = XCreateGC( dis, m_ScrollHorizButtonL, 0, &values );
6674+ XUnlockDisplay(dis);
6675+ }
6676+ else
6677+ {
6678+ //We don't have any scroll bars to draw....
6679+ return;
6680+ }
6681+
6682+
6683+ XLockDisplay(dis);
6684+ XSetForeground( dis, tmpGC, WhitePixel(dis, 0 ));
6685+ XSetBackground( dis, tmpGC, BlackPixel(dis, 0 ));
6686+ XUnlockDisplay(dis);
6687+ Colormap cmap = HXGetXColormap((Display*)GetWindow()->display,
6688+ (Window)GetWindow()->window);
6689+ XColor color;
6690+
6691+ memset(&color, 0, sizeof(XColor));
6692+ XLockDisplay(dis);
6693+ XParseColor(dis, cmap, "blue", &color);
6694+ XUnlockDisplay(dis);
6695+ HXFindBestXColor(dis, cmap, &color);
6696+ XLockDisplay(dis);
6697+ XSetForeground( dis, tmpGC, color.pixel);
6698+ XSetLineAttributes(dis, tmpGC, 1, LineSolid, CapRound, JoinRound );
6699+ XUnlockDisplay(dis);
6700+
6701+
6702+ //Draw up Vertical arrow.
6703+ if( m_ScrollVertButtonT )
6704+ {
6705+ points[0].x = offset;
6706+ points[0].y = SCROLL_BAR_WIDTH-offset;
6707+ points[1].x = SCROLL_BAR_WIDTH/2;
6708+ points[1].y = offset;
6709+ points[2].x = SCROLL_BAR_WIDTH-offset;
6710+ points[2].y = SCROLL_BAR_WIDTH-offset;
6711+ points[3].x = points[0].x;
6712+ points[3].y = points[0].y;
6713+ XLockDisplay(dis);
6714+ XFillPolygon( dis, m_ScrollVertButtonT, tmpGC, points, 4, Convex, CoordModeOrigin);
6715+ XUnlockDisplay(dis);
6716+ }
6717+
6718+ //Draw down Vertical arrow.
6719+ if( m_ScrollVertButtonB )
6720+ {
6721+ points[0].x = offset;
6722+ points[0].y = offset;
6723+ points[1].x = SCROLL_BAR_WIDTH-offset;
6724+ points[1].y = offset;
6725+ points[2].x = SCROLL_BAR_WIDTH/2;
6726+ points[2].y = SCROLL_BAR_WIDTH-offset;
6727+ points[3].x = points[0].x;
6728+ points[3].y = points[0].y;
6729+ XLockDisplay(dis);
6730+ XFillPolygon( dis, m_ScrollVertButtonB, tmpGC, points, 4, Convex, CoordModeOrigin);
6731+ XUnlockDisplay(dis);
6732+ }
6733+
6734+ //Draw Left Horizontal arrow.
6735+ if( m_ScrollHorizButtonL )
6736+ {
6737+ points[0].x = SCROLL_BAR_WIDTH-offset;
6738+ points[0].y = offset;
6739+ points[1].x = SCROLL_BAR_WIDTH-offset;
6740+ points[1].y = SCROLL_BAR_WIDTH-offset;
6741+ points[2].x = offset;
6742+ points[2].y = SCROLL_BAR_WIDTH/2;
6743+ points[3].x = points[0].x;
6744+ points[3].y = points[0].y;
6745+ XLockDisplay(dis);
6746+ XFillPolygon( dis, m_ScrollHorizButtonL, tmpGC, points, 4, Convex, CoordModeOrigin);
6747+ XUnlockDisplay(dis);
6748+ }
6749+
6750+ //Draw Right Horizontal arrow.
6751+ if( m_ScrollHorizButtonR )
6752+ {
6753+ points[0].x = offset;
6754+ points[0].y = SCROLL_BAR_WIDTH-offset;
6755+ points[1].x = offset;
6756+ points[1].y = offset;
6757+ points[2].x = SCROLL_BAR_WIDTH-offset;
6758+ points[2].y = SCROLL_BAR_WIDTH/2;
6759+ points[3].x = points[0].x;
6760+ points[3].y = points[0].y;
6761+ XLockDisplay(dis);
6762+ XFillPolygon( dis, m_ScrollHorizButtonR, tmpGC, points, 4, Convex, CoordModeOrigin);
6763+ XUnlockDisplay(dis);
6764+ }
6765+
6766+ //Free the GC and go.
6767+ XLockDisplay(dis);
6768+ XFreeGC( dis, tmpGC );
6769+ XUnlockDisplay(dis);
6770+#endif
6771+}
6772+
6773+HXBOOL CHXExSite::_InButton( HXxPoint& pt, int x, int y )
6774+{
6775+ HXBOOL retVal =FALSE;
6776+ if( x>= pt.x && x< pt.x+SCROLL_BAR_WIDTH && y>=pt.y && y<pt.y+SCROLL_BAR_WIDTH )
6777+ retVal=TRUE;
6778+ else
6779+ retVal=FALSE;
6780+
6781+ return retVal;
6782+}
6783+
6784+void CHXExSite::_CreateHorizScrollBar()
6785+{
6786+ HX_ASSERT( m_ScrollHorizButtonL == 0 );
6787+ HX_ASSERT( m_ScrollHorizButtonR == 0 );
6788+
6789+ HXxSize mySize;
6790+
6791+ HXxWindow* pParentWindow = NULL;
6792+ if(GetParentSite())
6793+ {
6794+ pParentWindow = GetParentSite()->GetWindow();
6795+ }
6796+ if(pParentWindow)
6797+ {
6798+ GetParentSite()->GetSize(mySize);
6799+ }
6800+
6801+ HX_ASSERT( pParentWindow );
6802+ HX_ASSERT( pParentWindow->window != 0 );
6803+
6804+ if( m_ScrollVertButtonB )
6805+ {
6806+ // if the other bar already exists, don't overlap it!
6807+ mySize.cx -= SCROLL_BAR_WIDTH;
6808+ }
6809+
6810+ m_ptScrollHorizPosL.x = m_topleft.x;
6811+ m_ptScrollHorizPosL.y = m_topleft.y+mySize.cy-SCROLL_BAR_WIDTH;
6812+
6813+#ifndef _ARROWS_SIDE_BY_SIDE
6814+ m_ptScrollHorizPosR.x = m_topleft.x+mySize.cx-SCROLL_BAR_WIDTH;
6815+#else
6816+ m_ptScrollHorizPosR.x = m_topleft.x+SCROLL_BAR_WIDTH;
6817+#endif
6818+ m_ptScrollHorizPosR.y = m_topleft.y+mySize.cy-SCROLL_BAR_WIDTH;
6819+
6820+ Display* dis = (Display*)GetWindow()->display;
6821+ XLockDisplay(dis);
6822+ Pixel blackPixel = BlackPixel( dis, DefaultScreen(dis) );
6823+ XUnlockDisplay(dis);
6824+ Pixel greyPixel = blackPixel;
6825+
6826+ Colormap cmap = HXGetXColormap(dis, (Window)GetWindow()->window);
6827+ XColor color;
6828+
6829+ XLockDisplay(dis);
6830+ XParseColor(dis, cmap, "gray", &color);
6831+ XUnlockDisplay(dis);
6832+ HXFindBestXColor(dis, cmap, &color);
6833+ greyPixel = color.pixel;
6834+
6835+ XLockDisplay(dis);
6836+ m_ScrollHorizButtonL = XCreateSimpleWindow( dis,
6837+ (Window)pParentWindow->window,
6838+ m_ptScrollHorizPosL.x, m_ptScrollHorizPosL.y,
6839+ SCROLL_BAR_WIDTH, SCROLL_BAR_WIDTH,
6840+ 1,
6841+ blackPixel,
6842+ greyPixel
6843+ );
6844+ m_ScrollHorizButtonR = XCreateSimpleWindow( dis,
6845+ (Window)pParentWindow->window,
6846+ m_ptScrollHorizPosR.x, m_ptScrollHorizPosR.y,
6847+ SCROLL_BAR_WIDTH, SCROLL_BAR_WIDTH,
6848+ 1,
6849+ blackPixel,
6850+ greyPixel
6851+ );
6852+ XUnlockDisplay(dis);
6853+ HX_ASSERT( m_ScrollHorizButtonR && m_ScrollHorizButtonL );
6854+
6855+}
6856+
6857+void CHXExSite::_CreateVertScrollBar()
6858+{
6859+ HX_ASSERT( m_ScrollVertButtonB == 0 );
6860+ HX_ASSERT( m_ScrollVertButtonT == 0 );
6861+
6862+ HXxSize mySize;
6863+
6864+ HXxWindow* pParentWindow = NULL;
6865+ if(GetParentSite())
6866+ {
6867+ pParentWindow = GetParentSite()->GetWindow();
6868+ }
6869+ if(pParentWindow)
6870+ {
6871+ GetParentSite()->GetSize(mySize);
6872+ }
6873+
6874+ HX_ASSERT( pParentWindow );
6875+ HX_ASSERT( pParentWindow->window != 0 );
6876+
6877+ if( m_ScrollHorizButtonR )
6878+ {
6879+ // if the other bar already exists, don't overlap it!
6880+ mySize.cy -= SCROLL_BAR_WIDTH;
6881+ }
6882+
6883+
6884+ m_ptScrollVertPosT.x = m_topleft.x+mySize.cx-SCROLL_BAR_WIDTH;
6885+ m_ptScrollVertPosT.y = m_topleft.y;
6886+
6887+ m_ptScrollVertPosB.x = m_topleft.x+mySize.cx-SCROLL_BAR_WIDTH;
6888+#ifndef _ARROWS_SIDE_BY_SIDE
6889+ m_ptScrollVertPosB.y = m_topleft.y+mySize.cy-SCROLL_BAR_WIDTH;
6890+#else
6891+ m_ptScrollVertPosB.y = m_topleft.y+SCROLL_BAR_WIDTH;
6892+#endif
6893+
6894+ Display* dis = (Display*)GetWindow()->display;
6895+ XLockDisplay(dis);
6896+ Pixel blackPixel = BlackPixel( dis, DefaultScreen(dis) );
6897+ XUnlockDisplay(dis);
6898+ Pixel greyPixel = blackPixel;
6899+ Colormap cmap = HXGetXColormap((Display*)GetWindow()->display,
6900+ (Window)GetWindow()->window);
6901+ XColor color;
6902+ XLockDisplay(dis);
6903+ XParseColor(dis, cmap, "gray", &color);
6904+ XUnlockDisplay(dis);
6905+ HXFindBestXColor(dis, cmap, &color);
6906+ greyPixel = color.pixel;
6907+
6908+ HX_ASSERT( GetWindow() );
6909+ XLockDisplay(dis);
6910+ m_ScrollVertButtonT = XCreateSimpleWindow( dis,
6911+ (Window)pParentWindow->window,
6912+ m_ptScrollVertPosT.x, m_ptScrollVertPosT.y,
6913+ SCROLL_BAR_WIDTH, SCROLL_BAR_WIDTH,
6914+ 1,
6915+ blackPixel,
6916+ greyPixel
6917+ );
6918+ m_ScrollVertButtonB = XCreateSimpleWindow( dis,
6919+ (Window)pParentWindow->window,
6920+ m_ptScrollVertPosB.x, m_ptScrollVertPosB.y,
6921+ SCROLL_BAR_WIDTH, SCROLL_BAR_WIDTH,
6922+ 1,
6923+ blackPixel,
6924+ greyPixel
6925+ );
6926+ XUnlockDisplay(dis);
6927+
6928+ HX_ASSERT( m_ScrollVertButtonB && m_ScrollVertButtonT );
6929+
6930+}
6931+
6932+//
6933+// Inherited CHXBaseSite methods.
6934+//
6935+void CHXExSite::_NeedWindowedSite()
6936+{
6937+#ifdef _DEBUG
6938+ fprintf( stderr, "CHXExSite::_NeedWindowedSite do something here....\n" );
6939+#endif
6940+ //Nothing to do on unix....
6941+}
6942+
6943+void CHXExSite::_AttachWindow()
6944+{
6945+#if 1
6946+ void* pDummy=NULL;
6947+
6948+ if (m_pRootSurface)
6949+ { /* Replace CUnixRootSurf with my own CExRootSurf */
6950+ HX_RELEASE(m_pRootSurface);
6951+ m_pRootSurface = new CExRootSurf(m_pContext, this, m_on_new_frame_cb, m_context);
6952+ m_pRootSurface->AddRef();
6953+ }
6954+
6955+ if(!z_mapSiteToWindow.Lookup((void*)this, pDummy))
6956+ {
6957+ z_mapSiteToWindow.SetAt((void*)this, (void*)m_pWindow);
6958+ }
6959+
6960+ //Set the display variable.
6961+ if( m_pWindow->display == NULL )
6962+ {
6963+ HX_ASSERT(zm_display);
6964+ m_pWindow->display = zm_display;
6965+ }
6966+
6967+ //Now that we have a window be sure to init the CExRootSurf.
6968+ //this lets it set up the display, colormap, etc.
6969+ ((CExRootSurf*)m_pRootSurface)->Init();
6970+#endif
6971+}
6972+
6973+void CHXExSite::_DetachWindow()
6974+{
6975+#if 1
6976+ void* pDummy;
6977+
6978+ if (z_mapSiteToWindow.Lookup((void*)this, pDummy))
6979+ {
6980+ z_mapSiteToWindow.RemoveKey((void*)this);
6981+ }
6982+#endif
6983+}
6984+
6985+void* CHXExSite::_Create(void* pParentWindow, UINT32 style)
6986+{
6987+ HRESULT result = HXR_OK;
6988+ if( m_pWindow && m_pWindow->window )
6989+ {
6990+ HX_ASSERT( "We already have created a window"==NULL);
6991+ return NULL;
6992+ }
6993+
6994+ if (pParentWindow==NULL || style)
6995+ {
6996+ m_bIsChildWindow = FALSE;
6997+ }
6998+ else
6999+ {
7000+ m_bIsChildWindow = TRUE;
7001+ }
7002+
7003+ if( _OpenXDisplay(NULL) != HXR_OK )
7004+ {
7005+ return NULL;
7006+ }
7007+ return (void*)CreateXWindow((Window)pParentWindow);
7008+}
7009+
7010+
7011+void CHXExSite::_Destroy(HXxWindow* pWindow)
7012+{
7013+ _DestroySliders();
7014+ HXxWindow* pWin = GetWindow();
7015+ Display* pDis = (Display*)(pWin?pWin->display:NULL);
7016+ if( pDis )
7017+ {
7018+ XLockDisplay(pDis);
7019+ XDestroyWindow( pDis, (Window)pWindow->window );
7020+ XUnlockDisplay(pDis);
7021+ }
7022+}
7023+
7024+void CHXExSite::_SetSize(HXxSize size)
7025+{
7026+ HX_ASSERT( m_pWindow && m_pWindow->display && m_pWindow->window);
7027+ //The scroll bars get resized also...
7028+ _DestroySliders();
7029+ Display* pDis = (Display*)GetWindow()->display;
7030+ XLockDisplay(pDis);
7031+ XResizeWindow(pDis,
7032+ (Window) m_pWindow->window,
7033+ size.cx,
7034+ size.cy);
7035+ XUnlockDisplay(pDis);
7036+}
7037+
7038+void CHXExSite::_SetPosition(HXxPoint position)
7039+{
7040+ HX_ASSERT( m_pWindow && m_pWindow->display && m_pWindow->window);
7041+ _DestroyScrollButtons();
7042+ XLockDisplay((Display*) m_pWindow->display);
7043+ XMoveWindow((Display*)m_pWindow->display,
7044+ (Window)m_pWindow->window,
7045+ position.x,
7046+ position.y);
7047+ XUnlockDisplay((Display*) m_pWindow->display);
7048+}
7049+
7050+void CHXExSite::_DamageRect(HXxRect rect)
7051+{
7052+ if(GetWindow())
7053+ {
7054+ m_bDamaged = TRUE;
7055+ }
7056+ return;
7057+}
7058+
7059+void CHXExSite::_DamageRegion(HXxRegion rect)
7060+{
7061+ if(GetWindow())
7062+ {
7063+ m_bDamaged = TRUE;
7064+ }
7065+ return;
7066+}
7067+
7068+void CHXExSite::_SendOSUpdateMessage()
7069+{
7070+ //We need to redraw our window here, m_pWindow.
7071+}
7072+
7073+void CHXExSite::_ShowSite(HXBOOL bShow)
7074+{
7075+ if( bShow )
7076+ {
7077+ _MapScrollButtons();
7078+ }
7079+ else
7080+ {
7081+ _UnmapScrollButtons();
7082+ }
7083+ //do nothing....
7084+}
7085+
7086+HXBOOL CHXExSite::_AtSystemTime()
7087+{
7088+ return TRUE;
7089+}
7090+
7091+void CHXExSite::_GetDeviceCaps( void* hdc,
7092+ UINT16& uBitsPerPixel,
7093+ UINT16& uHorzRes,
7094+ UINT16& uVertRes )
7095+{
7096+ Screen* pScreen = NULL;
7097+ HXxWindow* pWin = GetWindow();
7098+ HX_ASSERT( pWin );
7099+ if( pWin )
7100+ {
7101+ Display* dis = (Display*)pWin->display;
7102+ HX_ASSERT( dis );
7103+ if( dis )
7104+ {
7105+ Display* pDisp = (Display*)GetWindow()->display;
7106+ XLockDisplay(pDisp);
7107+ pScreen = DefaultScreenOfDisplay(pDisp);
7108+ XUnlockDisplay(pDisp);
7109+
7110+ uBitsPerPixel = pScreen->root_depth;
7111+ uHorzRes = pScreen->width;
7112+ uVertRes = pScreen->height;
7113+ }
7114+ }
7115+}
7116+
7117+void CHXExSite::_GetWindowRect(HXxRect* destRect)
7118+{
7119+ HX_ASSERT( "Doesn't seem to be used anywhere"==NULL );
7120+}
7121+
7122+void CHXExSite::_DestroySliders()
7123+{
7124+ _DestroyScrollButtons();
7125+}
7126+
7127+void CHXExSite::_ForwardUpdateEvent(HXxEvent* pEvent)
7128+{
7129+ GC gc = NULL;
7130+ AddRef();
7131+
7132+ HX_ASSERT(GetWindow()->window);
7133+ HX_ASSERT(m_pUser);
7134+ if(m_bIsChildWindow)
7135+ {
7136+ //Create a clip region that excludes our higher z-order
7137+ //siblings and is clipped to our parent.
7138+ if( !m_bRegionIsValid )
7139+ {
7140+ RecomputeClip();
7141+ }
7142+
7143+ // The problem is that regions are locked to the origin so we
7144+ // will need to reverse shift the region before we set the
7145+ // origin of the graph port! get the GC from the video surface
7146+ gc = ((CExRootSurf*)m_pRootSurface)->GetGC();
7147+ HX_ASSERT( gc );
7148+
7149+ //Actually setup our clip region
7150+ Display* pDis = (Display*)GetWindow()->display;
7151+ XLockDisplay(pDis);
7152+ XSetRegion( pDis, gc, (Region) m_Region );
7153+ XUnlockDisplay(pDis);
7154+ }
7155+
7156+ XEvent* pXEvent = (XEvent*) pEvent->param2;
7157+ XExposeEvent* exposeEvent = (XExposeEvent*) pXEvent;
7158+
7159+ // get the rect for this site with respect to our parent
7160+ HXRECTANGLE exposedRect = { exposeEvent->x,
7161+ exposeEvent->y,
7162+ exposeEvent->width,
7163+ exposeEvent->height };
7164+ HXREGION* exposedRegion = HXCreateRegion();
7165+ HXUnionRectWithRegion(&exposedRect, exposedRegion, exposedRegion);
7166+
7167+ // does the site intersect the current clipping region?
7168+ HXREGION* resultRegion = HXCreateRegion();
7169+ HXIntersectRegion(exposedRegion, m_Region, resultRegion);
7170+ HXBOOL bSiteIntersectsExposed = (HXEmptyRegion(resultRegion)==FALSE);
7171+
7172+ HXDestroyRegion(resultRegion);
7173+ HXDestroyRegion(exposedRegion);
7174+
7175+ // if the exposed region intersects the sites clipping region
7176+ if(bSiteIntersectsExposed)
7177+ {
7178+ m_pUser->HandleEvent(pEvent);
7179+ }
7180+
7181+ //If the user doesn't handle the standard update event then send
7182+ //them the cross platform HX_SURFACE_UPDATE event don't damage the
7183+ //original event structure
7184+ if(!pEvent->handled && m_pUser )
7185+ {
7186+ HX_ASSERT(GetWindow());
7187+ HXxEvent event;
7188+ event.event = HX_SURFACE_UPDATE;
7189+ event.window = GetWindow()->window;
7190+ event.param1 = m_pVideoSurface;
7191+ event.param2 = GetWindow();
7192+ event.result = 0;
7193+ event.handled = FALSE;
7194+ m_pUser->HandleEvent(&event);
7195+ pEvent->handled = event.handled;
7196+ }
7197+
7198+
7199+ //reset the gc to use no region
7200+ if(m_bIsChildWindow && gc)
7201+ {
7202+ Display* pDisp = (Display*)GetWindow()->display;
7203+ XLockDisplay(pDisp);
7204+ XSetClipMask(pDisp, gc, None);
7205+ XUnlockDisplay(pDisp);
7206+ }
7207+
7208+ //Handle the drawing of our arrows...
7209+ _DrawArrows();
7210+
7211+ //Now do all our children....
7212+ CHXMapPtrToPtr::Iterator i = m_ChildrenMap.Begin();
7213+ for(;i!=m_ChildrenMap.End();++i)
7214+ {
7215+ CHXExSite* pSite = (CHXExSite*) *i;
7216+ pSite->_ForwardUpdateEvent(pEvent);
7217+ }
7218+
7219+ Release();
7220+}
7221+
7222+UINT32 CHXExSite::_MapKeySymToHXVK(KeySym sym, UINT32& uFlags )
7223+{
7224+ //XXXgfw if we add the extended flag in the HX_KEYBOARD event
7225+ //structure then we can modify the flags here to show that these
7226+ //keys are 'extended' in the windows sense.
7227+ UINT32 ulRet = 0;
7228+ switch( sym )
7229+ {
7230+ case XK_Shift_R:
7231+ ulRet = XK_Shift_L;
7232+ break;
7233+ case XK_Alt_R:
7234+ ulRet = XK_Alt_L;
7235+ break;
7236+ case XK_KP_Home:
7237+ ulRet = XK_Home;
7238+ break;
7239+ case XK_KP_Next:
7240+ ulRet = XK_Next;
7241+ break;
7242+ case XK_KP_Prior:
7243+ ulRet = XK_Prior;
7244+ break;
7245+ case XK_KP_Enter:
7246+ ulRet = XK_Return;
7247+ break;
7248+ case XK_KP_End:
7249+ ulRet = XK_End;
7250+ break;
7251+ case XK_KP_Begin:
7252+ ulRet = XK_Begin;
7253+ break;
7254+ case XK_KP_Left:
7255+ ulRet = XK_Left;
7256+ break;
7257+ case XK_KP_Up:
7258+ ulRet = XK_Up;
7259+ break;
7260+ case XK_Control_R:
7261+ ulRet = XK_Control_L;
7262+ break;
7263+ case XK_KP_Right:
7264+ ulRet = XK_Right;
7265+ break;
7266+ case XK_KP_Down:
7267+ ulRet = XK_Down;
7268+ break;
7269+ case XK_KP_Insert:
7270+ ulRet = XK_Insert;
7271+ break;
7272+ case XK_KP_Delete:
7273+ ulRet = XK_Delete;
7274+ break;
7275+ default:
7276+ ulRet = sym;
7277+ break;
7278+ }
7279+ if( ulRet != sym )
7280+ {
7281+ //We have mapped a key from Right hand side, keypad, arrows
7282+ //or other parts of an extended keyboard. Set the flag.
7283+ uFlags |= HX_EXTENDED_KEY_MASK;
7284+ }
7285+ return ulRet;
7286+}
7287+
7288+
7289+HXBOOL CHXExSite::_ConvertToHXEvent(HXxEvent* pEvent )
7290+{
7291+ // get original events info from pEvent
7292+ XEvent* pXEvent = (XEvent*) pEvent->param2;
7293+ XButtonEvent* buttonEvent = (XButtonEvent*) pXEvent;
7294+
7295+
7296+ //===============================================================
7297+ // Convert all other event to RMA generic events and pass back.
7298+ //===============================================================
7299+ if( ((pEvent->event == ButtonPress) ||
7300+ (pEvent->event == ButtonRelease) ||
7301+ (pEvent->event == MotionNotify ) ||
7302+ (pEvent->event == EnterNotify) ||
7303+ (pEvent->event == FocusIn) ||
7304+ (pEvent->event == FocusOut) ||
7305+ (pEvent->event == KeyPress) ||
7306+ (pEvent->event == KeyRelease) ||
7307+ (pEvent->event == LeaveNotify))
7308+ )
7309+ {
7310+ // set modifier flags for all events....
7311+ UINT32 flags = 0;
7312+
7313+ // create new HXxEvent
7314+ HXxEvent theEvent;
7315+
7316+ //XXXgfw ouch....
7317+ static HXxPoint realPt = {0,0};
7318+
7319+ //Init certain members.
7320+ memset(&theEvent, 0, sizeof(HXxEvent));
7321+ theEvent.window = pEvent->window;
7322+ theEvent.handled = FALSE;
7323+
7324+ //
7325+ // NOTE:
7326+ //
7327+ // theEvent must be filled in by *ALL* event types.
7328+ // theEvent will be memcopied into the pEvent passed
7329+ // back to the basesite at the end of the method.
7330+ //
7331+
7332+ //==================================================
7333+ // LEAVE NOTIFY EVENT
7334+ //==================================================
7335+ if( pEvent->event==LeaveNotify)
7336+ {
7337+ if( m_pTopLevelSite->m_pMouseInSite )
7338+ {
7339+ HXxPoint oobPoint;
7340+ oobPoint.x = -1;
7341+ oobPoint.y = -1;
7342+ HXxEvent Outevent = { HX_MOUSE_LEAVE,
7343+ m_pWindow->window,
7344+ (void*)&oobPoint,
7345+ 0, 0,
7346+ FALSE };
7347+ m_pTopLevelSite->m_pMouseInSite->EventOccurred(&Outevent);
7348+ m_pTopLevelSite->m_pMouseInSite = NULL;
7349+ }
7350+ pEvent->handled=TRUE;
7351+ return TRUE;
7352+ }
7353+
7354+ //==================================================
7355+ // ENTER NOTIFY EVENT
7356+ //==================================================
7357+ if( pEvent->event==EnterNotify)
7358+ {
7359+ pEvent->handled=TRUE;
7360+ return TRUE;
7361+ }
7362+
7363+ //==================================================
7364+ // KEY PRESS/RELEASE EVENT
7365+ //==================================================
7366+ if ( pEvent->event == KeyPress || pEvent->event==KeyRelease )
7367+ {
7368+ XKeyEvent* pKeyEvent = (XKeyEvent*)pEvent->param2;
7369+
7370+ //
7371+ //Set the event type
7372+ //
7373+ theEvent.event = pEvent->event==KeyPress?HX_KEY_DOWN:HX_KEY_UP;
7374+
7375+ //
7376+ // Fill in the scan/key code.
7377+ //
7378+ flags = pKeyEvent->keycode;
7379+ flags &= 0x000000ff; //the scan code only gets bits 0-7
7380+
7381+ //
7382+ // build key modifier list...
7383+ //
7384+ if( pKeyEvent->state & ShiftMask )
7385+ flags |= HX_SHIFT_MASK;
7386+
7387+ if( pKeyEvent->state & ControlMask )
7388+ flags |= HX_CTRL_MASK;
7389+
7390+ if( pKeyEvent->state & LockMask )
7391+ flags |= HX_CAPS_LOCK_MASK;
7392+
7393+ if( pKeyEvent->state & Mod1Mask)
7394+ flags |= HX_ALT_MASK;
7395+
7396+ if( pKeyEvent->state & Mod2Mask)
7397+ flags |= HX_NUM_LOCK_MASK;
7398+
7399+ if( pKeyEvent->state & Mod5Mask)
7400+ flags |= HX_SCROLL_LOCK_MASK;
7401+
7402+ //
7403+ //Store the char pressed.
7404+ //
7405+ KeySym sym;
7406+ char szBuf[10]; /* Flawfinder: ignore */
7407+ int nNum;
7408+
7409+ //Save the state of the keys...
7410+ unsigned int unSave = pKeyEvent->state;
7411+ pKeyEvent->state=0;
7412+
7413+ //Lookup the key without any state.
7414+ nNum = XLookupString( pKeyEvent, szBuf, 10, &sym, NULL );
7415+ if( nNum > 0 )
7416+ {
7417+ theEvent.param1 = (void*)*szBuf;
7418+ }
7419+ else
7420+ {
7421+ theEvent.param1 = (void*)_MapKeySymToHXVK(sym, flags);
7422+ flags |= HX_VIRTUAL_KEY_MASK;
7423+ }
7424+ //restore the state of the event
7425+ pKeyEvent->state = unSave;
7426+
7427+ //Set the flags...
7428+ theEvent.param2 = (void*)flags;
7429+
7430+ //Check for HX_CHAR needed or not.
7431+ if( theEvent.event == HX_KEY_DOWN )
7432+ {
7433+ //We have to send an extra HX_CHAR event
7434+ HXxEvent extraEvent;
7435+ memcpy( &extraEvent, &theEvent, sizeof( extraEvent ) ); /* Flawfinder: ignore */
7436+
7437+ //Change the type.
7438+ extraEvent.event = HX_CHAR;
7439+
7440+ //
7441+ //Change the keycode to an translated ascii char.
7442+ //
7443+ KeySym sym;
7444+ char szBuf[10]; /* Flawfinder: ignore */
7445+ int nNum;
7446+
7447+ nNum = XLookupString( pKeyEvent, szBuf, 10, &sym, NULL );
7448+
7449+ if( nNum > 0 )
7450+ {
7451+ extraEvent.param1 = (void*)*szBuf;
7452+ }
7453+ else
7454+ {
7455+ extraEvent.param1 = (void*)_MapKeySymToHXVK(sym, flags);
7456+ flags |= HX_VIRTUAL_KEY_MASK;
7457+ }
7458+ extraEvent.param2 = (void*)flags;
7459+
7460+ //
7461+ // Now send the extra event....
7462+ //
7463+ CHXBaseSite::EventOccurred(&extraEvent);
7464+ }
7465+ }
7466+
7467+ //==================================================
7468+ // FOCUS OUT EVENT
7469+ //==================================================
7470+ if ( pEvent->event == FocusOut )
7471+ {
7472+ theEvent.event = HX_LOSE_FOCUS;
7473+ }
7474+
7475+ if ( pEvent->event == FocusIn )
7476+ {
7477+ theEvent.event = HX_SET_FOCUS;
7478+ }
7479+
7480+ //==================================================
7481+ // MOUSE MOVE EVENT
7482+ //==================================================
7483+ if( pEvent->event == MotionNotify )
7484+ {
7485+ XMotionEvent* pp = (XMotionEvent*)pEvent->param2;
7486+ theEvent.event = HX_MOUSE_MOVE;
7487+
7488+ if( pp->state&Button1Mask )
7489+ flags |= HX_PRIMARY_BUTTON;
7490+
7491+ if( pp->state&Button2Mask )
7492+ flags |= HX_CONTEXT_BUTTON;
7493+
7494+ if( pp->state&Button3Mask )
7495+ flags |= HX_THIRD_BUTTON;
7496+
7497+ if(pp->state & ShiftMask)
7498+ flags |= HX_SHIFT_KEY;
7499+
7500+ if(pp->state & ControlMask)
7501+ flags |= HX_CTRL_KEY;
7502+
7503+ if(pp->state & Mod1Mask)
7504+ flags |= HX_ALT_COMMAND_KEY;
7505+
7506+ theEvent.param2 = (void*) flags;
7507+
7508+ //Grab the X and Y.
7509+ theEvent.param1 = (void*) &realPt;
7510+ realPt.x = pp->x;
7511+ realPt.y = pp->y;
7512+ }
7513+
7514+ //==================================================
7515+ // BUTTON PRESS/RELEASE EVENT
7516+ //==================================================
7517+ if((pEvent->event == ButtonPress) || (pEvent->event == ButtonRelease))
7518+ {
7519+ // remap event
7520+ if (pEvent->event == ButtonPress)
7521+ {
7522+ if (buttonEvent->button == Button3)
7523+ theEvent.event = HX_CONTEXT_BUTTON_DOWN;
7524+ else
7525+ theEvent.event = HX_PRIMARY_BUTTON_DOWN;
7526+ }
7527+ else if (pEvent->event == ButtonRelease)
7528+ {
7529+ if (buttonEvent->button == Button3)
7530+ theEvent.event = HX_CONTEXT_BUTTON_UP;
7531+ else
7532+ theEvent.event = HX_PRIMARY_BUTTON_UP;
7533+ }
7534+
7535+ if(buttonEvent->state & ShiftMask)
7536+ flags |= HX_SHIFT_KEY;
7537+
7538+ if(buttonEvent->state & ControlMask)
7539+ flags |= HX_CTRL_KEY;
7540+
7541+ theEvent.param2 = (void*) flags;
7542+
7543+ //Grab the X and Y.
7544+ theEvent.param1 = (void*) &realPt;
7545+ realPt.x = buttonEvent->x;
7546+ realPt.y = buttonEvent->y;
7547+ }
7548+
7549+ //Copy the new event back into the passed in one for
7550+ //all events that fall through here...
7551+ memcpy( pEvent, &theEvent, sizeof(HXxEvent) ); /* Flawfinder: ignore */
7552+
7553+#if defined(_DEBUG)
7554+ //If the users presses control-primary button
7555+ //dump info on all sites. If shift-context, then
7556+ //just this site.
7557+ if( (buttonEvent->state&ControlMask)&&
7558+ (theEvent.event==HX_PRIMARY_BUTTON_DOWN))
7559+ {
7560+ DisplayAllSiteData();
7561+ }
7562+ if( (buttonEvent->state&ShiftMask)&&
7563+ (theEvent.event==HX_PRIMARY_BUTTON_DOWN))
7564+ {
7565+ DisplaySiteData("");
7566+ }
7567+#endif
7568+ }
7569+ return pEvent->handled;
7570+}
7571+
7572+
7573+void CHXExSite::CheckColorSettings()
7574+{
7575+#if !defined(HELIX_FEATURE_HARDWARE_COLOR_CONTROLS)
7576+ CHXBaseSite::CheckColorSettings();
7577+#else
7578+ CUnixSurf* pSurf = (CUnixSurf*)m_pVideoSurface;
7579+ if( !pSurf->HasHWColorConrols() )
7580+ {
7581+ CHXBaseSite::CheckColorSettings();
7582+ }
7583+ else
7584+ {
7585+ pSurf->SetHWColorControls();
7586+
7587+ //We do all color stuff except sharpmess in hardware.
7588+ float fCurrentSharpness;
7589+ INT16 bInterpolate;
7590+ zm_pColorAcc->GetSharpnessAdjustments(&fCurrentSharpness, &bInterpolate);
7591+
7592+ if (fCurrentSharpness != m_fSharpness)
7593+ {
7594+ zm_pColorAcc->SetSharpnessAdjustments(m_fSharpness, FALSE);
7595+ }
7596+ }
7597+#endif
7598+}
7599+
7600+//
7601+// OK, here it is. Take care of any OS specific duties, like scrollbar
7602+// stuff and expose events. Then, if the event isn't handled, convert
7603+// to an RMA event and return.
7604+HXBOOL CHXExSite::_HandleOSEvents(HXxEvent* pEvent)
7605+{
7606+ HXxPoint position = {0, 0};
7607+ HXxPoint point;
7608+
7609+ if( NULL==pEvent )
7610+ {
7611+ return FALSE;
7612+ }
7613+
7614+ return TRUE;
7615+
7616+#if defined(_DEBUG) && 0
7617+// fprintf( stderr, "this: %p m_pUser: %p ", this, m_pUser );
7618+ switch( pEvent->event )
7619+ {
7620+ case HX_MOUSE_LEAVE:
7621+ fprintf( stderr, "HX_MOUSE_LEAVE\n" );
7622+ break;
7623+// case HX_MOUSE_MOVE:
7624+// point.x = ((HXxPoint*)pEvent->param1)->x;
7625+// point.y = ((HXxPoint*)pEvent->param1)->y;
7626+// fprintf( stderr, "HX_MOUSE_MOVE: %d %d\n", point.x, point.y );
7627+// break;
7628+ case HX_MOUSE_ENTER:
7629+ fprintf( stderr, "HX_MOUSE_ENTER\n" );
7630+ break;
7631+// case MotionNotify:
7632+// point.x = ((XMotionEvent*)pEvent->param2)->x;
7633+// point.y = ((XMotionEvent*)pEvent->param2)->y;
7634+// fprintf( stderr, "MotionNotify: %d %d\n", point.x, point.y );
7635+// break;
7636+ case Expose:
7637+ fprintf( stderr, "Expose\n" );
7638+ break;
7639+ case EnterNotify :
7640+ fprintf( stderr, "EnterNotify\n" );
7641+ break;
7642+ case LeaveNotify:
7643+ fprintf( stderr, "LeaveNotify\n" );
7644+ break;
7645+ case KeyPress:
7646+ fprintf( stderr, "this: %p m_pUser: %p ", this, m_pUser );
7647+ fprintf( stderr, "Keypress\n\n" );
7648+ break;
7649+ case KeyRelease:
7650+ fprintf( stderr, "this: %p m_pUser: %p ", this, m_pUser );
7651+ fprintf( stderr, "KeyRelease\n" );
7652+ break;
7653+ default:
7654+ fprintf( stderr, "Other\n" );
7655+ break;
7656+ }
7657+#endif
7658+
7659+ //Find the ConfigureNotify events so we can drop to RGB from
7660+ //overlay while we move....
7661+// if( pEvent->event == ConfigureNotify && this==m_pTopLevelSite )
7662+// {
7663+// XConfigureEvent* pev = (XConfigureEvent*)pEvent->param2;
7664+// if( m_pWindow && pev->window == (Window)m_pWindow->window )
7665+// {
7666+// HXxPoint p;
7667+// _GetPositionRelativeToActualWindow( p );
7668+// // fprintf( stderr, "wint %p -- x,y width, height: %d %d %d %d \n",
7669+// // pev->window,
7670+// // pev->x, pev->y, pev->width, pev->height);
7671+// // fprintf( stderr, "size of site: %d %d\n", m_size.cx, m_size.cy);
7672+// // fprintf( stderr, "pos of site: %d %d\n", m_topleft.x, m_topleft.y);
7673+// m_pTopLevelSite->m_pMutex->Lock();
7674+// m_pTopLevelSite->SiteMoving(0, 0);
7675+// m_pTopLevelSite->m_nLastMoveTime = HX_GET_TICKCOUNT();
7676+// m_pTopLevelSite->ScheduleCallback(MOUSE, 100);
7677+// m_pTopLevelSite->m_pMutex->Unlock();
7678+// }
7679+// }
7680+
7681+ //See if we should drop out of full screen
7682+ if( pEvent->event == FocusOut && IsFullScreen() && !m_bIgnoreFocusOutInFS )
7683+ {
7684+// fprintf( stderr, "_HandleOSEvents: focus out: " );
7685+// XEvent* pXEvent = (XEvent*) pEvent->param2;
7686+// XFocusChangeEvent* event = (XFocusChangeEvent*) pXEvent;
7687+// switch( event->mode )
7688+// {
7689+// case NotifyAncestor:
7690+// fprintf( stderr, "NotifyAncestor\n" );
7691+// break;
7692+// case NotifyVirtual:
7693+// fprintf( stderr, "NotifyVirtual\n" );
7694+// break;
7695+// case NotifyInferior:
7696+// fprintf( stderr, "NotifyInferior\n" );
7697+// break;
7698+// case NotifyNonlinear:
7699+// fprintf( stderr, "NotifyNonlinear\n" );
7700+// break;
7701+// case NotifyNonlinearVirtual:
7702+// fprintf( stderr, "NotifyNonlinearVirtual\n" );
7703+// break;
7704+// case NotifyPointer:
7705+// fprintf( stderr, "NotifyPointer\n" );
7706+// break;
7707+// case NotifyPointerRoot:
7708+// fprintf( stderr, "NotifyPointerRoot\n" );
7709+// break;
7710+// case NotifyDetailNone:
7711+// fprintf( stderr, "NotifyDetailNone\n" );
7712+// break;
7713+// default:
7714+// fprintf( stderr, "screwed.....\n" );
7715+// }
7716+ ExitFullScreen();
7717+ }
7718+
7719+
7720+#if defined(_DEBUG) && defined(TEST_FULL_SCREEN)
7721+ if( pEvent->event == KeyPress )
7722+ {
7723+ KeySym sym;
7724+ char szBuf[10]; /* Flawfinder: ignore */
7725+ int nNum;
7726+
7727+ //Lookup the key without any state.
7728+ nNum = XLookupString( (XKeyEvent*)(pEvent->param2), szBuf, 10, &sym, NULL );
7729+ if( nNum > 0 )
7730+ {
7731+ if( 'f' == szBuf[0] && IsFullScreen() )
7732+ {
7733+ //Exit full screen if 'f' is pressed.....
7734+ m_pTopLevelSite->ExitFullScreen();
7735+ }
7736+ else if( 'f' == szBuf[0] && !IsFullScreen() )
7737+ {
7738+ //Enter full screen if 'f' is pressed.....
7739+ m_pTopLevelSite->EnterFullScreen();
7740+ }
7741+
7742+ }
7743+
7744+ }
7745+#endif
7746+
7747+#if defined(_DEBUG) && defined(_TEST_COLOR_CONTROLS)
7748+ if( pEvent->event == KeyPress )
7749+ {
7750+ KeySym sym;
7751+ char szBuf[10]; /* Flawfinder: ignore */
7752+ int nNum;
7753+
7754+ //Lookup the key without any state.
7755+ nNum = XLookupString( (XKeyEvent*)(pEvent->param2), szBuf, 10, &sym, NULL );
7756+ if( nNum > 0 )
7757+ {
7758+ if( 'b' == szBuf[0] )
7759+ {
7760+ SetBrightness( GetBrightness()-.05);
7761+ }
7762+ if( 'B' == szBuf[0] )
7763+ {
7764+ SetBrightness( GetBrightness()+.05);
7765+ }
7766+
7767+ if( 'c' == szBuf[0] )
7768+ {
7769+ SetContrast( GetContrast()-.05);
7770+ }
7771+ if( 'C' == szBuf[0] )
7772+ {
7773+ SetContrast( GetContrast()+.05);
7774+ }
7775+
7776+ if( 'h' == szBuf[0] )
7777+ {
7778+ SetHue( GetHue()-.05);
7779+ }
7780+ if( 'H' == szBuf[0] )
7781+ {
7782+ SetHue( GetHue()+.05 );
7783+ }
7784+
7785+ if( 's' == szBuf[0] )
7786+ {
7787+ SetSaturation( GetSaturation()-.05);
7788+ }
7789+ if( 'S' == szBuf[0] )
7790+ {
7791+ SetSaturation( GetSaturation()+.05);
7792+ }
7793+ fprintf( stderr, "colors %f %f %f %f\n",
7794+ GetBrightness(),
7795+ GetContrast(),
7796+ GetSaturation(),
7797+ GetHue());
7798+ }
7799+
7800+ }
7801+#endif
7802+
7803+ //Exit full screen on ESC pressed......
7804+ if( pEvent->event == KeyPress )
7805+ {
7806+ KeySym sym;
7807+ char szBuf[10]; /* Flawfinder: ignore */
7808+ int nNum;
7809+
7810+ //Lookup the key without any state.
7811+ nNum = XLookupString( (XKeyEvent*)(pEvent->param2), szBuf, 10, &sym, NULL );
7812+ if( nNum > 0 )
7813+ {
7814+ if( 27 == (int)szBuf[0] && IsFullScreen() )
7815+ {
7816+ //Exit full screen if esc is pressed.....
7817+ m_pTopLevelSite->ExitFullScreen();
7818+ }
7819+ }
7820+ }
7821+
7822+ //Find out if this is an event we are interested in. Make sure we
7823+ //are visible, it isn't a button, expose or FocusIn event and also
7824+ //make sure it is headed for our window.
7825+ if (!_ShouldProcess(pEvent))
7826+ {
7827+ return FALSE;
7828+ }
7829+
7830+
7831+ if(m_pUser && GetWindow() && GetWindow()->window)
7832+ {
7833+ //Do not send an update event to a hidden site.
7834+ if( pEvent->event == Expose ||
7835+ pEvent->event == FocusIn ||
7836+ pEvent->event == HX_SURFACE_UPDATE )
7837+ {
7838+ if( (m_ScrollVertButtonT || m_ScrollHorizButtonR) && IsSiteVisible() )
7839+ {
7840+ _DrawArrows();
7841+ }
7842+ _ForwardUpdateEvent(pEvent);
7843+ return TRUE;
7844+ }
7845+ else
7846+ {
7847+ // get original events info from pEvent
7848+ XEvent* pXEvent = (XEvent*) pEvent->param2;
7849+ XButtonEvent* buttonEvent = (XButtonEvent*) pXEvent;
7850+
7851+
7852+ //XXXgfw all this code sucks! It really need to be written
7853+ //for just native events or RMA events. With the change to a
7854+ //common site it is all screwed up. I am leaving it for now
7855+ //so we can get on with transparancy but get back to it!
7856+
7857+ //If the user clicks MB1 on a scroll button, handle it here and
7858+ //don't pass it up or let the user handle the event.
7859+ //Hit detection here.
7860+
7861+ ////////////////////////////////////////////////////////
7862+ // BEGIN SCROLLING GARBAGE
7863+ ////////////////////////////////////////////////////////
7864+ if(
7865+ ((pEvent->event==ButtonPress || pEvent->event==ButtonRelease) &&
7866+ buttonEvent->button==Button1) &&
7867+ (m_ScrollHorizButtonL || m_ScrollVertButtonB )
7868+ )
7869+ {
7870+ int buttonX=0;
7871+ int buttonY=0;
7872+
7873+ if( pEvent->event==ButtonRelease )
7874+ {
7875+ if( m_bScrollingInProgress )
7876+ {
7877+ m_bScrollingInProgress = FALSE;
7878+ m_nScrollDir = 0;
7879+ return TRUE ;
7880+ }
7881+ }
7882+ else
7883+ {
7884+ buttonX = buttonEvent->x;
7885+ buttonY = buttonEvent->y;
7886+
7887+ HXBOOL bPointInSite = FALSE;
7888+ if( m_Region )
7889+ bPointInSite = HXPointInRegion(m_Region, buttonX, buttonY);
7890+
7891+ if( bPointInSite )
7892+ {
7893+ if( m_ScrollHorizButtonL )
7894+ {
7895+ if( _InButton( m_ptScrollHorizPosL, buttonX, buttonY ))
7896+ {
7897+ m_bScrollingInProgress = TRUE;
7898+ m_nScrollDir = 1;
7899+ }
7900+ if( _InButton( m_ptScrollHorizPosR, buttonX, buttonY ))
7901+ {
7902+ m_bScrollingInProgress = TRUE;
7903+ m_nScrollDir = 2;
7904+ }
7905+ }
7906+ if( m_ScrollVertButtonT )
7907+ {
7908+ if( _InButton( m_ptScrollVertPosT, buttonX, buttonY ))
7909+ {
7910+ m_bScrollingInProgress = TRUE;
7911+ m_nScrollDir = 3;
7912+ }
7913+ if( _InButton( m_ptScrollVertPosB, buttonX, buttonY ))
7914+ {
7915+ m_bScrollingInProgress = TRUE;
7916+ m_nScrollDir = 4;
7917+ }
7918+ }
7919+ }
7920+ }
7921+
7922+ if( (m_ScrollHorizButtonL||m_ScrollVertButtonT) && m_bScrollingInProgress)
7923+ {
7924+ int xx=0;
7925+ int yy=0;
7926+ HXxWindow* pParentWindow = GetParentSite()->GetWindow();
7927+ //Make it scroll 10% of the parent window each click.
7928+ HXxSize sizeTmp;
7929+ GetParentSite()->GetSize(sizeTmp);
7930+
7931+ //Set it to a percentage of the slider range.
7932+ int incX = sizeTmp.cx/10;
7933+ int incY = sizeTmp.cy/10;
7934+
7935+ HX_ASSERT( pParentWindow );
7936+
7937+ xx = m_XSliderPos;
7938+ yy = m_YSliderPos;
7939+
7940+ if( m_nScrollDir == 1 )
7941+ xx-=incX;
7942+ if( m_nScrollDir == 2 )
7943+ xx+=incX;
7944+ if( m_nScrollDir == 3 )
7945+ yy-=incY;
7946+ if( m_nScrollDir == 4 )
7947+ yy+=incY;
7948+
7949+ if( xx > m_size.cx-sizeTmp.cx )
7950+ xx = m_size.cx-sizeTmp.cx;
7951+ if( yy > m_size.cy-sizeTmp.cy)
7952+ yy = m_size.cy-sizeTmp.cy;
7953+
7954+ if( xx < 0 )
7955+ xx = 0;
7956+ if( yy < 0 )
7957+ yy = 0;
7958+
7959+ m_XSliderPos = xx;
7960+ m_YSliderPos = yy;
7961+
7962+ HXxRect rect;
7963+ DamageRect(rect);
7964+
7965+ InternalForceRedraw();
7966+ }
7967+ //Only throw away the event if it had something to do with
7968+ //scolling.
7969+ if( m_bScrollingInProgress )
7970+ {
7971+ m_bScrollingInProgress = FALSE;
7972+ m_nScrollDir = 0;
7973+ return TRUE;
7974+ }
7975+ }
7976+ ////////////////////////////////////////////////////////
7977+ // END SCROLLING GARBAGE
7978+ ////////////////////////////////////////////////////////
7979+ point.x = -1;
7980+ point.y = -1;
7981+
7982+ if( pEvent->event == MotionNotify)
7983+ {
7984+ point.x = ((XMotionEvent*)pXEvent)->x;
7985+ point.y = ((XMotionEvent*)pXEvent)->y;
7986+ }
7987+ else if( pEvent->event == ButtonPress )
7988+ {
7989+ point.x = ((XMotionEvent*)pXEvent)->x;
7990+ point.y = ((XMotionEvent*)pXEvent)->y;
7991+ }
7992+
7993+ //
7994+ //Give the user a chance at the native event.
7995+ //
7996+ if( m_RegionWithoutChildren && HXPointInRegion(m_RegionWithoutChildren, point.x, point.y ))
7997+ {
7998+ if( m_Region && HXPointInRegion(m_Region, point.x, point.y) )
7999+ {
8000+ if (m_pUser)
8001+ m_pUser->HandleEvent(pEvent);
8002+ }
8003+ else
8004+ {
8005+ INT32 handledCount = 0;
8006+ INT32 mapCount = 0;
8007+
8008+ //try send this to all of our children
8009+ _unixsitecpp1:
8010+ mapCount = m_ChildrenMap.GetCount();
8011+ CHXMapPtrToPtr::Iterator i;
8012+ for(i=m_ChildrenMap.Begin() ; i!=m_ChildrenMap.End() ; ++i)
8013+ {
8014+ CHXBaseSite* pSite = (CHXBaseSite*) *i;
8015+ pSite->_HandleOSEvents(pEvent);
8016+ if (pEvent->handled)
8017+ {
8018+ break;
8019+ }
8020+ handledCount+=pEvent->handled;
8021+ pEvent->handled=0;
8022+
8023+ if (m_ChildrenMap.GetCount() != mapCount)
8024+ {
8025+ goto _unixsitecpp1;
8026+ }
8027+ }
8028+ if (handledCount)
8029+ {
8030+ pEvent->handled = 1;
8031+ }
8032+ HX_ASSERT(handledCount<2);
8033+ }
8034+ }
8035+ pEvent->handled=FALSE;
8036+ }
8037+ }
8038+
8039+ return FALSE;
8040+}
8041+
8042+void CHXExSite::_GenerateOSEvent(HXxEvent* pEvent, HXxEvent* pEvent2)
8043+{
8044+ //XXXgfw Not needed on UNIX I guess???
8045+}
8046+
8047+void CHXExSite::_GenerateSetCursorEvent()
8048+{
8049+#ifdef _DEBUG
8050+ fprintf( stderr, "CHXExSite::_GenerateSetCursorEvent\n" );
8051+#endif
8052+ //XXXgfw do we need this??
8053+}
8054+
8055+void CHXExSite::_TryCreateXSlider()
8056+{
8057+#if 0
8058+ if( !m_ScrollHorizButtonL && IsSiteVisible() )
8059+ _CreateHorizScrollBar();
8060+#endif
8061+}
8062+
8063+void CHXExSite::_SetXSliderValues(INT32 range, INT32 pageSize)
8064+{
8065+ //XXXgfw this is a do nothing as long as we only have
8066+ //scroll buttons on unix and not real scroll bars.
8067+}
8068+
8069+void CHXExSite::_TryCreateYSlider()
8070+{
8071+#if 0
8072+ if( !m_ScrollVertButtonT && IsSiteVisible() )
8073+ _CreateVertScrollBar();
8074+#endif
8075+}
8076+
8077+void CHXExSite::_SetYSliderValues(INT32 range, INT32 pageSize)
8078+{
8079+ //XXXgfw this is a do nothing as long as we only have
8080+ //scroll buttons on unix and not real scroll bars.
8081+}
8082+
8083+void CHXExSite::_GetSystemSizeOfSliders(INT32* pWidth, INT32* pHeight)
8084+{
8085+#if 0
8086+ *pWidth = *pHeight = SCROLL_BAR_WIDTH;
8087+#endif
8088+}
8089+
8090+HXBOOL CHXExSite::_IsWindowVisible()
8091+{
8092+#if 0
8093+ HX_RESULT retVal = FALSE;
8094+ //XXXgfw do this for now...
8095+ retVal = IsSiteVisible();
8096+ return retVal;
8097+#else
8098+ return FALSE;
8099+#endif
8100+
8101+}
8102+
8103+void CHXExSite::_ShowXSlider(HXBOOL bShow)
8104+{
8105+#if 0
8106+ if( GetWindow() )
8107+ {
8108+ if( bShow )
8109+ _MapHorzScroll();
8110+ else
8111+ _UnmapHorzScroll();
8112+ }
8113+#endif
8114+}
8115+
8116+void CHXExSite::_MoveXSlider( INT32 left,
8117+ INT32 top,
8118+ INT32 right,
8119+ INT32 bottom,
8120+ HXBOOL bRedraw )
8121+{
8122+ //Do nothing right now....
8123+}
8124+
8125+void CHXExSite::_ShowYSlider(HXBOOL bShow)
8126+{
8127+#if 0
8128+ if( GetWindow() )
8129+ {
8130+ if( bShow )
8131+ _MapVertScroll();
8132+ else
8133+ _UnmapVertScroll();
8134+ }
8135+#endif
8136+}
8137+
8138+void CHXExSite::_MoveYSlider( INT32 left,
8139+ INT32 top,
8140+ INT32 right,
8141+ INT32 bottom,
8142+ HXBOOL bRedraw)
8143+{
8144+ //do nothing right now...
8145+}
8146+
8147+HXBOOL CHXExSite::_DoesXSliderExist()
8148+{
8149+ return FALSE;
8150+// return (m_ScrollHorizButtonL!=0);
8151+}
8152+
8153+void* CHXExSite::_GetContainingWindow()
8154+{
8155+ //XXXgfw Do we need this???
8156+ return NULL;
8157+}
8158+
8159+void CHXExSite::_GetCursorPos(HXxPoint* pPoint)
8160+{
8161+ //Return the cursor pos in screen coords.
8162+ Window rootWin;
8163+ Window childWin;
8164+ int rootX=0;
8165+ int rootY=0;
8166+ int childX=0;
8167+ int childY=0;
8168+ unsigned int mask=0;
8169+ Bool ret=FALSE;
8170+
8171+ HX_ASSERT(GetWindow());
8172+ Display* pDis = (Display*)GetWindow()->display;
8173+ XLockDisplay(pDis);
8174+ ret = XQueryPointer(pDis,
8175+ (Window)GetWindow()->window,
8176+ &rootWin,
8177+ &childWin,
8178+ &rootX, &rootY,
8179+ &childX, &childY,
8180+ &mask);
8181+ XUnlockDisplay(pDis);
8182+
8183+ if(ret)
8184+ {
8185+ pPoint->x = rootX;
8186+ pPoint->y = rootY;
8187+ }
8188+}
8189+void* CHXExSite::_GetWindowWithCursor()
8190+{
8191+#if 0
8192+ //Return the cursor pos in screen coords.
8193+ void* pRet = NULL;
8194+ int rootX = 0;
8195+ int rootY = 0;
8196+ int childX= 0;
8197+ int childY= 0;
8198+ unsigned int mask = 0;
8199+ Bool ret = FALSE;
8200+ Window rootWin;
8201+ Window childWin;
8202+
8203+ HX_ASSERT(GetWindow());
8204+ Display* pDis = (Display*)GetWindow()->display;
8205+ XLockDisplay(pDis);
8206+ ret = XQueryPointer(pDis,
8207+ (Window)GetWindow()->window,
8208+ &rootWin,
8209+ &childWin,
8210+ &rootX, &rootY,
8211+ &childX, &childY,
8212+ &mask);
8213+ XUnlockDisplay(pDis);
8214+
8215+ if(ret)
8216+ {
8217+ pRet = (void*)childWin;
8218+ }
8219+ return pRet;
8220+#else
8221+ HX_ASSERT( "Not implemented..." == NULL );
8222+ return NULL;
8223+#endif
8224+}
8225+
8226+void CHXExSite::_MapPointToOSWindow(HXxPoint* pPt, void** pWindowHandle)
8227+{
8228+ //XXXgfw we could query the window tree and traverse down but that
8229+ //is really slow and this isn't used right now.
8230+ HX_ASSERT( "Not implemented..." == NULL );
8231+}
8232+
8233+void CHXExSite::_ReInitPrimarySurface()
8234+{
8235+ //Nothing to do in unix here right?
8236+}
8237+
8238+HXBOOL CHXExSite::_MoveWindow( void* win,
8239+ INT32 X,
8240+ INT32 Y,
8241+ INT32 nWidth,
8242+ INT32 nHeight,
8243+ HXBOOL bRepaint)
8244+{
8245+#if 0
8246+ //XXXgfw we still have to do bRepaint....
8247+ HX_ASSERT( m_pWindow && m_pWindow->window && m_pWindow->display);
8248+ _DestroyScrollButtons();
8249+ XLockDisplay((Display*) m_pWindow->display);
8250+ XMoveResizeWindow( (Display*)m_pWindow->display,
8251+ (Window)m_pWindow->window,
8252+ X,
8253+ Y,
8254+ nWidth,
8255+ nHeight
8256+ );
8257+ XUnlockDisplay((Display*) m_pWindow->display);
8258+#else
8259+ HX_ASSERT( "Not implemented..." == NULL );
8260+#endif
8261+ return TRUE;
8262+}
8263+
8264+HXBOOL CHXExSite::_UpdateWindow(void* hWnd)
8265+{
8266+ //We need to generate a repaint here of the window....
8267+ return TRUE;
8268+}
8269+
8270+HXBOOL CHXExSite::_ShowWindow(void* hWnd, INT32 nCmdShow)
8271+{
8272+#if 0
8273+ HX_ASSERT( nCmdShow==HX_SHOW_WINDOW || nCmdShow==HX_HIDE_WINDOW);
8274+ if( !m_pWindow || !m_pWindow->window || !m_pWindow->display )
8275+ return FALSE;
8276+
8277+ if( nCmdShow == HX_SHOW_WINDOW )
8278+ {
8279+ _MapScrollButtons();
8280+ XLockDisplay((Display*) m_pWindow->display);
8281+ XMapWindow( (Display*)m_pWindow->display, (Window)m_pWindow->window );
8282+ XUnlockDisplay((Display*) m_pWindow->display);
8283+ }
8284+ else
8285+ {
8286+ _UnmapScrollButtons();
8287+ XLockDisplay((Display*) m_pWindow->display);
8288+ XUnmapWindow( (Display*)m_pWindow->display, (Window)m_pWindow->window );
8289+ XUnlockDisplay((Display*) m_pWindow->display);
8290+ }
8291+#endif
8292+ return TRUE;
8293+}
8294+
8295+HXBOOL CHXExSite::_SetWindowPos(void* hWnd,
8296+ void* hWndInsertAfter,
8297+ INT32 X,
8298+ INT32 Y,
8299+ INT32 cx,
8300+ INT32 cy,
8301+ INT32 uFlags)
8302+{
8303+#ifdef _DEBUG
8304+ fprintf( stderr, "Now what on earth is this suppose to do??\n" );
8305+#endif
8306+ return TRUE;
8307+}
8308+
8309+HXBOOL CHXExSite::_SetWindowRgn(void* hWnd, HXREGION* hRgn, HXBOOL bRedraw)
8310+{
8311+#if 0
8312+ HX_ASSERT( GetWindow() );
8313+ Display* pDis = (Display*)GetWindow()->display;
8314+ XLockDisplay(pDis);
8315+ XSetRegion( pDis,
8316+ (GC)m_pVideoSurface->_GetDC(NULL),
8317+ (Region)hRgn
8318+ );
8319+ XUnlockDisplay(pDis);
8320+ if( bRedraw )
8321+ {
8322+ HX_ASSERT("Redraw asked for here"==NULL );
8323+ }
8324+#endif
8325+ return TRUE;
8326+}
8327+
8328+void CHXExSite::_SetFocus(void* pWindow)
8329+{
8330+#if 0
8331+ XWindowAttributes attr;
8332+ HXxWindow* pWin = GetWindow();
8333+
8334+ HX_ASSERT(pWin);
8335+ HX_ASSERT(pWindow);
8336+
8337+ XLockDisplay((Display*) pWin->display);
8338+ XGetWindowAttributes((Display*)pWin->display, (Window)pWindow, &attr);
8339+ XUnlockDisplay((Display*) pWin->display);
8340+ if( attr.map_state == IsViewable )
8341+ {
8342+ XLockDisplay((Display*) pWin->display);
8343+ XSetInputFocus( (Display*)pWin->display,
8344+ (Window)pWindow,
8345+ RevertToParent,
8346+ CurrentTime
8347+ );
8348+ XUnlockDisplay((Display*) pWin->display);
8349+ }
8350+
8351+ return;
8352+#endif
8353+}
8354+
8355+HX_RESULT CHXExSite::_EnterFullScreen(HXxWindow* pWindow)
8356+{
8357+#if 0
8358+ HXxWindow* pWin = GetWindow();
8359+ HX_ASSERT( pWin && pWin->display && pWin->display);
8360+ HX_ASSERT( this == m_pTopLevelSite );
8361+
8362+ if( 0 != m_winFullScreenWindow || IsFullScreen() )
8363+ {
8364+ //We are already in full screen
8365+ return HXR_FAIL;
8366+ }
8367+
8368+ //Create a override redirect window to fill the root.
8369+ XSizeHints size_hints;
8370+ XLockDisplay((Display*) pWin->display);
8371+ Screen* pScreen = XDefaultScreenOfDisplay((Display*)pWin->display);
8372+ XUnlockDisplay((Display*) pWin->display);
8373+ UINT16 uHorzRes = WidthOfScreen(pScreen);
8374+ UINT16 uVertRes = HeightOfScreen(pScreen);
8375+ int attrMask = 0;
8376+ XSetWindowAttributes attr;
8377+
8378+ memset(&attr, 0, sizeof(XSetWindowAttributes));
8379+ attrMask = CWOverrideRedirect | CWBorderPixel |
8380+ CWBackPixel | CWCursor;
8381+ attr.cursor = None;
8382+ attr.override_redirect = True;
8383+ XLockDisplay((Display*)pWin->display);
8384+ attr.background_pixel = BlackPixel((Display*)pWin->display,
8385+ DefaultScreen((Display*)pWin->display));
8386+ attr.border_pixel = BlackPixel((Display*)pWin->display,
8387+ DefaultScreen((Display*)pWin->display));
8388+ XUnlockDisplay((Display*)pWin->display);
8389+
8390+ size_hints.flags = PPosition | PSize;
8391+ size_hints.x = 0;
8392+ size_hints.y = 0;
8393+ size_hints.width = uHorzRes;
8394+ size_hints.height = uVertRes;
8395+
8396+ //Create it.
8397+ XLockDisplay((Display*) pWin->display);
8398+ Window window = XCreateWindow((Display*)pWin->display,
8399+ DefaultRootWindow((Display*)pWin->display),
8400+ size_hints.x,
8401+ size_hints.y,
8402+ size_hints.width,
8403+ size_hints.height,
8404+ 0,
8405+ CopyFromParent,
8406+ InputOutput,
8407+ CopyFromParent,
8408+ attrMask,
8409+ &attr);
8410+
8411+ //Tell the WM about this window.
8412+ XSetStandardProperties( (Display*)pWin->display,
8413+ window,
8414+ "unixfullscreen",
8415+ "unixfullscreen",
8416+ None,
8417+ NULL, 0,
8418+ &size_hints
8419+ );
8420+
8421+ int result = XSelectInput( zm_display, window,
8422+ ButtonPressMask | ButtonReleaseMask | KeyPressMask |
8423+ KeyReleaseMask | EnterWindowMask | LeaveWindowMask |
8424+ PointerMotionMask | ButtonMotionMask | KeymapStateMask |
8425+ ExposureMask | StructureNotifyMask | FocusChangeMask
8426+ );
8427+
8428+ //Map the window.
8429+ XMapWindow((Display*)pWin->display, window);
8430+ XUnlockDisplay((Display*) pWin->display);
8431+
8432+
8433+ //Get ready to resize the presentation....
8434+ if(m_pTopLevelSite)
8435+ {
8436+ m_pTopLevelSite->m_bDisableForceRedraw = TRUE;
8437+ }
8438+
8439+ //Maintain aspect ratio and Scale it.
8440+ float fXScale = (float)uHorzRes/(float)(m_size.cx);
8441+ float fYScale = (float)uVertRes/(float)(m_size.cy);
8442+ float fScale = (fXScale<fYScale) ? fXScale : fYScale;
8443+ int nWidth = (int)(fScale*m_size.cx+.5);
8444+ int nHeight = (int)(fScale*m_size.cy+.5);
8445+
8446+ //Center the presentation and save the old size
8447+ memcpy( &m_PreFullScreenSize, &m_size, sizeof( HXxSize) ); /* Flawfinder: ignore */
8448+ HXxSize size = {nWidth, nHeight};
8449+
8450+ if( nWidth<uHorzRes )
8451+ m_ptFullScreenOffset.x = (uHorzRes-nWidth)/2;
8452+
8453+ if( nHeight<uVertRes )
8454+ m_ptFullScreenOffset.y = (uVertRes-nHeight)/2;
8455+
8456+ //Reparent our main window.......
8457+ Window winRootParent = 0;
8458+ Window winParent = 0;
8459+ Window* pwinChildren = NULL;
8460+ unsigned int nNumChildren = 0;
8461+ XLockDisplay((Display*) pWin->display);
8462+ XQueryTree( (Display*)pWin->display,
8463+ (Window)pWin->window,
8464+ &winRootParent,
8465+ &winParent,
8466+ &pwinChildren,
8467+ &nNumChildren
8468+ );
8469+ //Free unused children list.
8470+ XFree( pwinChildren );
8471+ XUnlockDisplay((Display*) pWin->display);
8472+
8473+ HX_ASSERT( winParent );
8474+ m_winOldParent = winParent;
8475+ XLockDisplay((Display*) pWin->display);
8476+ XReparentWindow( (Display*)pWin->display,
8477+ (Window)pWin->window,
8478+ window,
8479+ m_ptFullScreenOffset.x,
8480+ m_ptFullScreenOffset.y
8481+ );
8482+
8483+ //Flush event queue.
8484+ XSync((Display*)pWin->display, False);
8485+ XUnlockDisplay((Display*) pWin->display);
8486+
8487+ //Save it
8488+ m_winFullScreenWindow = window;
8489+ m_bInFullScreen = TRUE;
8490+
8491+ //Now resize it...
8492+ SetSize(m_size);
8493+ //Redraw the presentation....
8494+ m_pTopLevelSite->m_bDisableForceRedraw = FALSE;
8495+ _ForceRedrawAll();
8496+
8497+ //Give it focus....
8498+ _SetFocus( (void*)pWin->window );
8499+
8500+ // now eat all the focusouts that came as a result of this reparent...
8501+ XEvent event;
8502+ XLockDisplay((Display*) pWin->display);
8503+ HXBOOL status = XCheckTypedWindowEvent((Display*)pWin->display, (Window)pWin->window,
8504+ FocusOut, &event);
8505+ XUnlockDisplay((Display*) pWin->display);
8506+ while (m_bWindowCreatedByCreate && status)
8507+ {
8508+ // just discarding these
8509+ XLockDisplay((Display*) pWin->display);
8510+ status = XCheckTypedWindowEvent((Display*)pWin->display, (Window)pWin->window,
8511+ FocusOut, &event);
8512+ XUnlockDisplay((Display*) pWin->display);
8513+ }
8514+
8515+ //Update the status text...
8516+ if(m_pStatusText)
8517+ {
8518+ m_pStatusText->ParentChangedSize();
8519+ m_pStatusText->Show();
8520+ }
8521+
8522+#else
8523+ HX_ASSERT( "Not implemented..." == NULL );
8524+#endif
8525+ return HXR_OK;
8526+}
8527+
8528+HX_RESULT CHXExSite::_ExitFullScreen()
8529+{
8530+#if 0
8531+ HX_ASSERT( this == m_pTopLevelSite );
8532+
8533+ HXxWindow* pWin = GetWindow();
8534+
8535+ HX_ASSERT( pWin && pWin->display && pWin->window );
8536+
8537+ //Give the window back to the TLC.
8538+
8539+ XLockDisplay((Display*) pWin->display);
8540+ XReparentWindow( (Display*)pWin->display,
8541+ (Window)pWin->window,
8542+ m_winOldParent,
8543+ m_position.x, m_position.y
8544+ );
8545+ XUnlockDisplay((Display*) pWin->display);
8546+
8547+ //Just kill our window and take us out of full screen....
8548+ if( 0 != m_winFullScreenWindow )
8549+ {
8550+ XLockDisplay((Display*) pWin->display);
8551+ XDestroyWindow( (Display*)pWin->display, m_winFullScreenWindow );
8552+ XUnlockDisplay((Display*) pWin->display);
8553+ m_winFullScreenWindow = 0;
8554+ }
8555+
8556+ m_bDisableForceRedraw = TRUE;
8557+
8558+ m_bInFullScreen = FALSE;
8559+ HXxSize size = {0,0};
8560+ memcpy( &size, &m_PreFullScreenSize, sizeof(HXxSize) ); /* Flawfinder: ignore */
8561+ m_PreFullScreenSize.cx = m_PreFullScreenSize.cy = 0;
8562+
8563+ SetSize(size);
8564+ _SetFocus( (void*)pWin->window );
8565+ m_ptFullScreenOffset.x = 0;
8566+ m_ptFullScreenOffset.y = 0;
8567+
8568+
8569+ m_bDisableForceRedraw = FALSE;
8570+ _ForceRedrawAll();
8571+
8572+ if(m_pStatusText)
8573+ {
8574+ m_pStatusText->ParentChangedSize();
8575+ m_pStatusText->Hide();
8576+ }
8577+
8578+ //move the site back to where it was.
8579+ if( m_pTopLevelSite )
8580+ {
8581+ m_pTopLevelSite->_SetPosition(m_CreateWindowPos);
8582+ }
8583+
8584+ return HXR_OK;
8585+#else
8586+ HX_ASSERT( "Not implemented..." == NULL );
8587+#endif
8588+}
8589+
8590+HX_RESULT CHXExSite::_EnterFullScreenNoNewWindow()
8591+{
8592+#if 0
8593+ HXxWindow* pWin = GetWindow();
8594+
8595+ HX_ASSERT( pWin && pWin->display && pWin->display);
8596+ HX_ASSERT( this == m_pTopLevelSite );
8597+
8598+ if(IsFullScreen() || !pWin)
8599+ {
8600+ //We are already in full screen
8601+ return HXR_FAIL;
8602+ }
8603+
8604+ //Get the screen size.
8605+ XLockDisplay((Display*) pWin->display);
8606+ Screen* pScreen = XDefaultScreenOfDisplay((Display*)pWin->display);
8607+ UINT16 uHorzRes = WidthOfScreen(pScreen);
8608+ UINT16 uVertRes = HeightOfScreen(pScreen);
8609+ XUnlockDisplay((Display*)pWin->display);
8610+
8611+ //Get ready to resize the presentation....
8612+ if( m_pTopLevelSite )
8613+ {
8614+ m_pTopLevelSite->m_bDisableForceRedraw = TRUE;
8615+ }
8616+
8617+ //Maintain aspect ratio and Scale it.
8618+ float fXScale = (float)uHorzRes/(float)(m_size.cx);
8619+ float fYScale = (float)uVertRes/(float)(m_size.cy);
8620+ float fScale = (fXScale<fYScale) ? fXScale : fYScale;
8621+ int nWidth = (int)(fScale*m_size.cx+.5);
8622+ int nHeight = (int)(fScale*m_size.cy+.5);
8623+
8624+ //Center the presentation and save the old size
8625+ memcpy( &m_PreFullScreenSize, &m_size, sizeof( HXxSize) ); /* Flawfinder: ignore */
8626+
8627+ HXxSize size = {nWidth, nHeight};
8628+
8629+ if( nWidth < uHorzRes )
8630+ {
8631+ m_ptFullScreenOffset.x = (uHorzRes - nWidth)/2;
8632+ }
8633+
8634+ if( nHeight < uVertRes )
8635+ {
8636+ m_ptFullScreenOffset.y = (uVertRes - nHeight)/2;
8637+ }
8638+
8639+ //Reparent our main window.......
8640+ Window winRootParent = 0;
8641+ Window winParent = 0;
8642+ Window* pwinChildren = NULL;
8643+ unsigned int nNumChildren = 0;
8644+ XLockDisplay((Display*) pWin->display);
8645+ XQueryTree( (Display*)pWin->display,
8646+ (Window)pWin->window,
8647+ &winRootParent,
8648+ &winParent,
8649+ &pwinChildren,
8650+ &nNumChildren
8651+ );
8652+
8653+ //Free unused children list.
8654+ XFree( pwinChildren );
8655+ XUnlockDisplay((Display*) pWin->display);
8656+
8657+ HX_ASSERT( winParent );
8658+ m_winOldParent = winParent;
8659+
8660+ m_bInFullScreen = TRUE;
8661+
8662+ //Now resize it...
8663+ SetSize(m_size);
8664+
8665+ //Redraw the presentation....
8666+ if( m_pTopLevelSite )
8667+ {
8668+ m_pTopLevelSite->m_bDisableForceRedraw = FALSE;
8669+ }
8670+
8671+ _ForceRedrawAll();
8672+
8673+ //Give it focus....
8674+ _SetFocus( (void*)pWin->window );
8675+
8676+ // now eat all the focusouts that came as a result of this reparent...
8677+ XEvent event;
8678+ XLockDisplay((Display*) pWin->display);
8679+ HXBOOL status = XCheckTypedWindowEvent((Display*)pWin->display, (Window)pWin->window,
8680+ FocusOut, &event);
8681+ XUnlockDisplay((Display*) pWin->display);
8682+ while (m_bWindowCreatedByCreate && status)
8683+ {
8684+ // just discarding these
8685+ XLockDisplay((Display*) pWin->display);
8686+ status = XCheckTypedWindowEvent((Display*)pWin->display, (Window)pWin->window,
8687+ FocusOut, &event);
8688+ XUnlockDisplay((Display*) pWin->display);
8689+ }
8690+
8691+ //Update the status text...
8692+ if(m_pStatusText)
8693+ {
8694+ m_pStatusText->ParentChangedSize();
8695+ m_pStatusText->Show();
8696+ }
8697+#if defined(HELIX_CONFIG_MOBLIN)
8698+ if(!m_pAttachWindowCallback)
8699+ {
8700+ m_pAttachWindowCallback = new CHXGenericCallback((void*)this, (fGenericCBFunc)AttachWindowCallback);
8701+ m_pAttachWindowCallback->AddRef();
8702+ }
8703+ if(!m_pForceRedrawCallback)
8704+ {
8705+ m_pForceRedrawCallback = new CHXGenericCallback((void*)this, (fGenericCBFunc)ForceRedrawCallback);
8706+ m_pForceRedrawCallback->AddRef();
8707+ }
8708+
8709+ // schedule callback for Attaching Window
8710+ if(m_pAttachWindowCallback)
8711+ {
8712+ m_pAttachWindowCallback->CallbackScheduled(m_pScheduler->RelativeEnter(m_pAttachWindowCallback, 100));
8713+ }
8714+ if(m_pForceRedrawCallback)
8715+ {
8716+ m_pForceRedrawCallback->CallbackScheduled(m_pScheduler->RelativeEnter(m_pForceRedrawCallback, 500));
8717+ }
8718+
8719+#endif
8720+#else
8721+ HX_ASSERT( "Not implemented..." == NULL );
8722+#endif
8723+ return HXR_OK;
8724+}
8725+
8726+#if defined(HELIX_CONFIG_MOBLIN)
8727+void CHXExSite::AttachWindowCallback(void* pParam)
8728+{
8729+ CHXExSite* pObj = (CHXExSite*)pParam;
8730+ if (pObj)
8731+ {
8732+ pObj->_AttachWindow();
8733+ }
8734+}
8735+
8736+
8737+void CHXExSite::ForceRedrawCallback(void* pParam)
8738+{
8739+ CHXExSite* pObj = (CHXExSite*)pParam;
8740+
8741+ if (pObj)
8742+ {
8743+ UINT32 ulNumOfChildren = pObj->GetNumberOfChildSites();
8744+ if(pObj->m_pTopLevelSite)
8745+ {
8746+ pObj->m_pTopLevelSite->m_bDisableForceRedraw = FALSE;
8747+ }
8748+ for ( UINT32 i = 0; i < ulNumOfChildren; ++i )
8749+ {
8750+ SPIHXSite spChildSite;
8751+ if ( SUCCEEDED( pObj->GetNthChildSite( i, *spChildSite.AsInOutParam() ) )
8752+ && spChildSite.IsValid() )
8753+ {
8754+ spChildSite->DamageRegion( NULL );
8755+ spChildSite->ForceRedraw();
8756+ }
8757+
8758+ }
8759+ }
8760+}
8761+
8762+void CHXExSite::RemovePendingCallback(CHXGenericCallback* pCB)
8763+{
8764+ if (pCB &&
8765+ pCB->GetPendingCallback() &&
8766+ m_pScheduler)
8767+ {
8768+ m_pScheduler->Remove(pCB->GetPendingCallback());
8769+ pCB->CallbackCanceled();
8770+ }
8771+}
8772+#endif
8773+
8774+HX_RESULT CHXExSite::_EnterFullScreenExt(HXxWindow* pWindow, IHXValues* pValues)
8775+{
8776+#if 0
8777+ m_bReparent = FALSE;
8778+ HX_RESULT res = HXR_OK;
8779+ UINT32 ulReparent = 0;
8780+
8781+ if (pValues)
8782+ {
8783+ pValues->GetPropertyULONG32("Reparent", ulReparent);
8784+ }
8785+
8786+ m_bReparent = (HXBOOL)ulReparent;
8787+
8788+ if (m_bReparent)
8789+ {
8790+ res = _EnterFullScreen(pWindow);
8791+ }
8792+ else
8793+ {
8794+ res = _EnterFullScreenNoNewWindow();
8795+ }
8796+
8797+ CHXBaseSite::FullScreenEntered(res);
8798+ return res;
8799+#else
8800+ HX_ASSERT( "Not implemented..." == NULL );
8801+ return HXR_OK; /* this makes compiler happy */
8802+#endif
8803+}
8804+
8805+HX_RESULT CHXExSite::_ExitFullScreenExt()
8806+{
8807+#if 0
8808+ HX_RESULT res = _ExitFullScreen();
8809+#if defined(HELIX_CONFIG_MOBLIN)
8810+ // schedule callback for attaching window
8811+ if(m_pAttachWindowCallback)
8812+ {
8813+ m_pAttachWindowCallback->CallbackScheduled(m_pScheduler->RelativeEnter(m_pAttachWindowCallback, 100));
8814+ }
8815+ // schedule callback for Force Redraw the window
8816+ if(m_pForceRedrawCallback)
8817+ {
8818+ m_pForceRedrawCallback->CallbackScheduled(m_pScheduler->RelativeEnter(m_pForceRedrawCallback, 500));
8819+ }
8820+#endif
8821+ CHXBaseSite::FullScreenExited(res);
8822+
8823+ return res;
8824+#else
8825+ HX_ASSERT( "Not implemented..." == NULL );
8826+ return HXR_OK; /* this makes compiler happy */
8827+#endif
8828+
8829+}
8830+
8831+HX_RESULT CHXExSite::_EventOccurred(HXxEvent* pEvent)
8832+{
8833+ return HXR_OK;
8834+}
8835+
8836+HX_RESULT CHXExSite::_TestFullScreen( void* hTestBitmap,
8837+ const char* pszStatusText )
8838+{
8839+#ifdef _DEBUG
8840+ fprintf( stderr, "Going to test full screen....\n" );
8841+#endif
8842+ return HXR_OK;
8843+}
8844+
8845+void CHXExSite::ProcessEvent(HXxEvent* pEvent)
8846+{
8847+ if(pEvent)
8848+ {
8849+ //Expose event compression. Combine all outstanding expose events
8850+ //into one big region.
8851+ if(Expose==pEvent->event)
8852+ {
8853+ _CollapseExposeEvents((XEvent*)pEvent->param2);
8854+ }
8855+ }
8856+
8857+ //Send the event to each registered UnixSite.
8858+ void* pSite = NULL;
8859+ void* pWindow = NULL;
8860+ POSITION pos = z_mapSiteToWindow.GetStartPosition();
8861+ while( pos )
8862+ {
8863+ z_mapSiteToWindow.GetNextAssoc(pos, pSite, pWindow);
8864+ CHXExSite* pSiteWindowed = (CHXExSite*)pSite;
8865+ CHXExSite* pTopLevel = NULL;
8866+ HX_ASSERT(pSiteWindowed);
8867+ pSiteWindowed->AddRef();
8868+ pTopLevel = (CHXExSite*)pSiteWindowed->GetTopLevelSite();
8869+
8870+ if(pEvent)
8871+ {
8872+ //Call back into the basesite's event loop.
8873+ pTopLevel->EventOccurred(pEvent);
8874+ }
8875+
8876+ //XXXgfw As a workaround for the overlay not moving while the
8877+ //player is paused, we will check it here and update it if needed.
8878+
8879+ //XXXRGG We might be able to use X's ConfigureNotify messages instead
8880+ //of doing a refresh every 50 ms.
8881+ pTopLevel->_UpdateOverlayIfNeeded();
8882+
8883+ pSiteWindowed->Release();
8884+ }
8885+}
8886+
8887+void CHXExSite::_CollapseExposeEvents(XEvent* xevent)
8888+{
8889+ Display* display = xevent->xany.display;
8890+ Window window = xevent->xany.window;
8891+ XExposeEvent* expose_event = (XExposeEvent*)xevent;
8892+ XEvent new_event;
8893+ XExposeEvent* new_expose_event = (XExposeEvent*)&new_event;
8894+ ushort x1;
8895+ ushort y1;
8896+ ushort x2;
8897+ ushort y2;
8898+ ushort x3;
8899+ ushort y3;
8900+
8901+ x1 = expose_event->x;
8902+ y1 = expose_event->y;
8903+ x2 = x1 + expose_event->width;
8904+ y2 = y1 + expose_event->height;
8905+ XLockDisplay(display);
8906+ HXBOOL status = XCheckWindowEvent(display, window, ExposureMask, &new_event);
8907+ XUnlockDisplay(display);
8908+ while( status)
8909+ {
8910+ if (new_expose_event->x < x1)
8911+ x1 = new_expose_event->x;
8912+
8913+ if (new_expose_event->y < y1)
8914+ y1 = new_expose_event->y;
8915+
8916+ x3 = new_expose_event->x + new_expose_event->width;
8917+ if (x3 > x2)
8918+ x2 = x3;
8919+
8920+ y3 = new_expose_event->y + new_expose_event->height;
8921+ if (y3 > y2)
8922+ y2 = y3;
8923+ XLockDisplay(display);
8924+ status = XCheckWindowEvent(display, window, ExposureMask, &new_event);
8925+ XUnlockDisplay(display);
8926+
8927+ }
8928+
8929+ expose_event->x = x1;
8930+ expose_event->y = y1;
8931+ expose_event->width = x2 - x1;
8932+ expose_event->height = y2 - y1;
8933+ expose_event->count = new_expose_event->count;
8934+}
8935+
8936+
8937+HXBOOL CHXExSite::_ShouldProcess(HXxEvent* pEvent)
8938+{
8939+ HXBOOL bShouldProcessThisEvent = TRUE;
8940+
8941+
8942+ if( !IsSiteVisible() )
8943+ {
8944+ switch (pEvent->event)
8945+ {
8946+ case ButtonPress:
8947+ case ButtonRelease:
8948+ case Expose:
8949+ case FocusIn:
8950+ bShouldProcessThisEvent = FALSE;
8951+ break;
8952+ default:
8953+ break;
8954+ }
8955+ }
8956+
8957+ if(m_pWindow && m_pWindow->window!=pEvent->window)
8958+ {
8959+ bShouldProcessThisEvent = FALSE;
8960+ }
8961+ return bShouldProcessThisEvent;
8962+}
8963+
8964+
8965+///////////////////////////////////////////////////////
8966+//
8967+// UnixEventHandler methods...
8968+//
8969+CHXExSite::UnixEventHandler::UnixEventHandler(CHXExSite* pParent)
8970+ : m_pParent(pParent),
8971+ m_lRefCount(0),
8972+ m_cbHandle(0)
8973+{
8974+ HX_ASSERT(m_pParent);
8975+ HX_ASSERT(m_pParent->m_pScheduler);
8976+ m_cbHandle = m_pParent->m_pScheduler->RelativeEnter((IHXCallback*)this, 30);
8977+}
8978+
8979+CHXExSite::UnixEventHandler::~UnixEventHandler()
8980+{
8981+ CancelCallback();
8982+}
8983+
8984+void
8985+CHXExSite::UnixEventHandler::CancelCallback()
8986+{
8987+ if( m_cbHandle && m_pParent && m_pParent->m_pScheduler )
8988+ {
8989+ UINT32 tempHandle = m_cbHandle;
8990+ m_cbHandle = 0;
8991+ m_pParent->m_pScheduler->Remove(tempHandle);
8992+ }
8993+}
8994+
8995+HX_RESULT CHXExSite::UnixEventHandler::QueryInterface(REFIID riid, void** ppvObj)
8996+{
8997+ if (IsEqualIID(riid, IID_IHXCallback))
8998+ {
8999+ AddRef();
9000+ *ppvObj = (IHXCallback*)this;
9001+ return HXR_OK;
9002+ }
9003+ else if (IsEqualIID(riid, IID_IUnknown))
9004+ {
9005+ AddRef();
9006+ *ppvObj = this;
9007+ return HXR_OK;
9008+ }
9009+
9010+ *ppvObj = NULL;
9011+ return HXR_NOINTERFACE;
9012+}
9013+
9014+ULONG32 CHXExSite::UnixEventHandler::AddRef()
9015+{
9016+ return InterlockedIncrement(&m_lRefCount);
9017+}
9018+
9019+ULONG32 CHXExSite::UnixEventHandler::Release()
9020+{
9021+ HX_ASSERT(m_lRefCount>0);
9022+ if( InterlockedDecrement(&m_lRefCount)>0 )
9023+ {
9024+ return m_lRefCount;
9025+ }
9026+ delete this;
9027+ return 0;
9028+}
9029+
9030+//IHXCallback methods
9031+HX_RESULT CHXExSite::UnixEventHandler::Func()
9032+{
9033+ XEvent xevent;
9034+ static HXxEvent pnevent;
9035+
9036+ m_cbHandle = 0;
9037+ XLockDisplay(m_pParent->zm_display);
9038+ int status = XPending(m_pParent->zm_display);
9039+ XUnlockDisplay(m_pParent->zm_display);
9040+ while(status)
9041+ {
9042+ XLockDisplay(m_pParent->zm_display);
9043+ XNextEvent(m_pParent->zm_display, &xevent);
9044+ XUnlockDisplay(m_pParent->zm_display);
9045+
9046+ // package native event in HXxEvent and send to dispatcher
9047+ pnevent.event = xevent.type;
9048+ pnevent.window = (void *)xevent.xany.window;
9049+ pnevent.param1 = xevent.xany.display;
9050+ pnevent.param2 = &xevent;
9051+
9052+ m_pParent->ProcessEvent(&pnevent);
9053+ XLockDisplay(m_pParent->zm_display);
9054+ status = XPending(m_pParent->zm_display);
9055+ XUnlockDisplay(m_pParent->zm_display);
9056+ }
9057+
9058+ if (m_pParent && m_pParent->m_pScheduler)
9059+ {
9060+ m_cbHandle = m_pParent->m_pScheduler->RelativeEnter((IHXCallback*)this, 30);
9061+ }
9062+ return HXR_OK;
9063+}
9064+
9065+void CHXExSite::_UpdateOverlayIfNeeded()
9066+{
9067+ if( m_pVideoSurface )
9068+ {
9069+ if( m_pVideoSurface->m_nBltMode == HX_OVERLAY_BLT )
9070+ {
9071+ ULONG32 ulNow = HX_GET_BETTERTICKCOUNT();
9072+ CUnixSurf* pSurf = (CUnixSurf*)m_pVideoSurface;
9073+ if( ulNow- pSurf->m_ulLastOverlayUpdateTime > 50 )
9074+ {
9075+ SiteMoving(0,0);
9076+ }
9077+ }
9078+ }
9079+ LISTPOSITION pos = m_ChildrenInZOrder.GetHeadPosition();
9080+ while(pos)
9081+ {
9082+ CHXExSite* pSite = (CHXExSite*)m_ChildrenInZOrder.GetNext(pos);
9083+ pSite->_UpdateOverlayIfNeeded();
9084+ }
9085+}
9086+
9087+
9088+HXBOOL CHXExSite::_ShouldEnterForceRedraw()
9089+{
9090+ if( !m_bDamaged || !m_pUser || !IsSiteVisible() )
9091+ {
9092+ return FALSE;
9093+ }
9094+
9095+ if(InterlockedIncrement(&m_lBltEntryCount)>1)
9096+ {
9097+ InterlockedDecrement(&m_lBltEntryCount);
9098+ return FALSE;
9099+ }
9100+
9101+ return TRUE;
9102+}
9103+
9104+void CHXExSite::_ExitForceRedraw()
9105+{
9106+ InterlockedDecrement(&m_lBltEntryCount);
9107+}
9108+
9109Index: helix-libs/clientapps/clutter/exsite.h
9110===================================================================
9111--- /dev/null 1970-01-01 00:00:00.000000000 +0000
9112+++ helix-libs/clientapps/clutter/exsite.h 2008-10-13 06:05:49.000000000 -0700
9113@@ -0,0 +1,272 @@
9114+/* ***** BEGIN LICENSE BLOCK *****
9115+ * Source last modified: $Id: unixsite.h,v 1.10.2.3 2008/06/05 14:24:30 lovish Exp $
9116+ *
9117+ * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
9118+ *
9119+ * The contents of this file, and the files included with this file,
9120+ * are subject to the current version of the RealNetworks Public
9121+ * Source License (the "RPSL") available at
9122+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
9123+ * the file under the current version of the RealNetworks Community
9124+ * Source License (the "RCSL") available at
9125+ * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
9126+ * will apply. You may also obtain the license terms directly from
9127+ * RealNetworks. You may not use this file except in compliance with
9128+ * the RPSL or, if you have a valid RCSL with RealNetworks applicable
9129+ * to this file, the RCSL. Please see the applicable RPSL or RCSL for
9130+ * the rights, obligations and limitations governing use of the
9131+ * contents of the file.
9132+ *
9133+ * Alternatively, the contents of this file may be used under the
9134+ * terms of the GNU General Public License Version 2 (the
9135+ * "GPL") in which case the provisions of the GPL are applicable
9136+ * instead of those above. If you wish to allow use of your version of
9137+ * this file only under the terms of the GPL, and not to allow others
9138+ * to use your version of this file under the terms of either the RPSL
9139+ * or RCSL, indicate your decision by deleting the provisions above
9140+ * and replace them with the notice and other provisions required by
9141+ * the GPL. If you do not delete the provisions above, a recipient may
9142+ * use your version of this file under the terms of any one of the
9143+ * RPSL, the RCSL or the GPL.
9144+ *
9145+ * This file is part of the Helix DNA Technology. RealNetworks is the
9146+ * developer of the Original Code and owns the copyrights in the
9147+ * portions it created.
9148+ *
9149+ * This file, and the files included with this file, is distributed
9150+ * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
9151+ * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
9152+ * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
9153+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
9154+ * ENJOYMENT OR NON-INFRINGEMENT.
9155+ *
9156+ * Technology Compatibility Kit Test Suite(s) Location:
9157+ * http://www.helixcommunity.org/content/tck
9158+ *
9159+ * Contributor(s):
9160+ * Phil Dibowitz (jaymzh)
9161+ *
9162+ * ***** END LICENSE BLOCK ***** */
9163+
9164+#ifndef _UNIXSITE_H
9165+#define _UNIXSITE_H
9166+
9167+#if defined(USE_XWINDOWS)
9168+#include <X11/Xatom.h>
9169+#include <X11/Xlib.h>
9170+#include <X11/Xutil.h>
9171+#include <X11/Xos.h>
9172+#include <X11/Intrinsic.h>
9173+#include <X11/extensions/XShm.h>
9174+#endif
9175+
9176+#include "basesite.h"
9177+#include "hxcbobj.h"
9178+#include "player.h"
9179+
9180+class CHXExSite : public CHXBaseSite
9181+{
9182+public:
9183+
9184+ friend class CExSurf;
9185+ friend class CExRootSurf;
9186+
9187+ CHXExSite( IUnknown* pContext,
9188+ IUnknown* pUnkOuter,
9189+ INT32 lInitialZorder,
9190+ on_new_frame_cb_t on_new_frame_cb = NULL,
9191+ void *context = NULL);
9192+
9193+ static void ProcessEvent(HXxEvent* pEvent);
9194+ Window CreateXWindow( Window win );
9195+
9196+ void _ForwardUpdateEvent(HXxEvent* pEvent);
9197+
9198+ //static member vars.
9199+ static Display* zm_display;
9200+ void _UpdateOverlayIfNeeded();
9201+ HXBOOL m_bIgnoreFocusOutInFS;
9202+
9203+ //We override this.
9204+ void CheckColorSettings();
9205+
9206+protected:
9207+
9208+ virtual ~CHXExSite();
9209+
9210+ //
9211+ // CHXExSite only methods....
9212+ //
9213+ HX_RESULT _OpenXDisplay(char* DiplayString);
9214+ static void _CollapseExposeEvents(XEvent* xevent);
9215+ HXBOOL _ShouldProcess(HXxEvent* pEvent);
9216+ void _DrawArrows();
9217+ void _CreateHorizScrollBar(void);
9218+ void _CreateVertScrollBar(void);
9219+ HXBOOL _InButton(HXxPoint& pt, int x, int y );
9220+ void _DestroyScrollButtons();
9221+ void _MapScrollButtons();
9222+ void _MapHorzScroll();
9223+ void _MapVertScroll();
9224+ void _UnmapHorzScroll();
9225+ void _UnmapVertScroll();
9226+ void _UnmapScrollButtons();
9227+ void _BuildClipRegion();
9228+ void _ReleaseClippingRegion();
9229+
9230+ //
9231+ // Seperate object for our callbacks to keep the events flowing.
9232+ //
9233+ class UnixEventHandler : public IHXCallback
9234+ {
9235+ public:
9236+ UnixEventHandler(CHXExSite* pParent);
9237+
9238+ //IUnknown methods
9239+ virtual HX_RESULT QueryInterface(REFIID riid, void** ppvObj);
9240+ virtual ULONG32 AddRef();
9241+ virtual ULONG32 Release();
9242+
9243+ //IHXCallback methods
9244+ virtual HX_RESULT Func();
9245+ void CancelCallback();
9246+
9247+ private:
9248+ virtual ~UnixEventHandler();
9249+
9250+ UnixEventHandler();
9251+ UnixEventHandler(const UnixEventHandler&);
9252+ UnixEventHandler& operator=(const UnixEventHandler& it );
9253+
9254+ CHXExSite* m_pParent;
9255+ LONG32 m_lRefCount;
9256+ CallbackHandle m_cbHandle;
9257+
9258+ IUnknown* m_pUnkPlayer;
9259+ };
9260+
9261+
9262+ //
9263+ // CHXBaseSite inherited methods
9264+ //
9265+ virtual void _NeedWindowedSite();
9266+ virtual void _AttachWindow();
9267+ virtual void _DetachWindow();
9268+ virtual void* _Create(void* ParentWindow, UINT32 style);
9269+ virtual void _Destroy(HXxWindow* pWindow);
9270+ virtual void _SetSize(HXxSize size);
9271+ virtual void _SetPosition(HXxPoint position);
9272+ virtual void _DamageRect(HXxRect rect);
9273+ virtual void _DamageRegion(HXxRegion rect);
9274+ virtual HXBOOL _ShouldEnterForceRedraw();
9275+ virtual void _ExitForceRedraw();
9276+ virtual void _SendOSUpdateMessage();
9277+ virtual void _ShowSite(HXBOOL bShow);
9278+ virtual HXBOOL _AtSystemTime();
9279+ virtual void _GetDeviceCaps( void* hdc,
9280+ UINT16& uBitesPerPixel,
9281+ UINT16& uHorzRes,
9282+ UINT16& uVertRes );
9283+ virtual void _GetWindowRect(HXxRect* destRect);
9284+ virtual void _DestroySliders();
9285+ virtual HXBOOL _HandleOSEvents(HXxEvent* pEvent);
9286+ virtual HXBOOL _ConvertToHXEvent(HXxEvent* pEvent);
9287+ virtual void _GenerateOSEvent(HXxEvent* pEvent, HXxEvent* pEvent2);
9288+ virtual void _GenerateSetCursorEvent();
9289+ virtual void _TryCreateXSlider();
9290+ virtual void _SetXSliderValues(INT32 range, INT32 pageSize);
9291+ virtual void _TryCreateYSlider();
9292+ virtual void _SetYSliderValues(INT32 range, INT32 pageSize);
9293+ virtual void _GetSystemSizeOfSliders(INT32* pWidth, INT32* pHeight);
9294+ virtual HXBOOL _IsWindowVisible();
9295+ virtual void _ShowXSlider(HXBOOL bShow);
9296+ virtual void _MoveXSlider( INT32 left,
9297+ INT32 top,
9298+ INT32 right,
9299+ INT32 bottom,
9300+ HXBOOL bRedraw );
9301+ virtual void _ShowYSlider(HXBOOL bShow);
9302+ virtual void _MoveYSlider( INT32 left,
9303+ INT32 top,
9304+ INT32 right,
9305+ INT32 bottom,
9306+ HXBOOL bRedraw);
9307+ virtual HXBOOL _DoesXSliderExist();
9308+ virtual void* _GetContainingWindow();
9309+ virtual void _GetCursorPos(HXxPoint* pPoint);
9310+ virtual void _MapPointToOSWindow(HXxPoint* pPt, void** pWindowHandle);
9311+ virtual void* _GetWindowWithCursor();
9312+ virtual void _ReInitPrimarySurface();
9313+ virtual HXBOOL _MoveWindow( void* ,
9314+ INT32 X,
9315+ INT32 Y,
9316+ INT32 nWidth,
9317+ INT32 nHeight,
9318+ HXBOOL bRepaint);
9319+ virtual HXBOOL _UpdateWindow(void* hWnd);
9320+ virtual HXBOOL _ShowWindow(void* hWnd, INT32 nCmdShow);
9321+ virtual HXBOOL _SetWindowPos(void* hWnd,
9322+ void* hWndInsertAfter,
9323+ INT32 X,
9324+ INT32 Y,
9325+ INT32 cx,
9326+ INT32 cy,
9327+ INT32 uFlags);
9328+ virtual HXBOOL _SetWindowRgn(void* hWnd, HXREGION* hRgn, HXBOOL bRedraw);
9329+ virtual void _SetFocus(void* pWindow);
9330+
9331+ virtual HX_RESULT _EnterFullScreen(HXxWindow* pWindow = NULL);
9332+ virtual HX_RESULT _EventOccurred(HXxEvent* pEvent);
9333+ virtual HX_RESULT _ExitFullScreen();
9334+ virtual HX_RESULT _TestFullScreen( void* hTestBitmap,
9335+ const char* pszStatusText );
9336+ virtual HX_RESULT _EnterFullScreenExt(HXxWindow* pWindow, IHXValues* pValues);
9337+ virtual HX_RESULT _ExitFullScreenExt();
9338+#if defined(HELIX_CONFIG_MOBLIN)
9339+ static void AttachWindowCallback(void *pParam);
9340+ static void ForceRedrawCallback(void *pParam);
9341+ void RemovePendingCallback(CHXGenericCallback* pCB);
9342+
9343+ CHXGenericCallback* m_pAttachWindowCallback;
9344+ CHXGenericCallback* m_pForceRedrawCallback;
9345+#endif
9346+ HXBOOL m_bReparent;
9347+
9348+private:
9349+
9350+ //Protect unintentional copy and default ctors.
9351+ CHXExSite();
9352+ CHXExSite( const CHXExSite& );
9353+ CHXExSite& operator=( const CHXExSite& it );
9354+ HX_RESULT _EnterFullScreenNoNewWindow();
9355+
9356+ //member vars.
9357+ UnixEventHandler* m_pUnixEventHandler;
9358+ static Cursor zm_GrabCursor;
9359+ Window m_ScrollHorizButtonL;
9360+ Window m_ScrollHorizButtonR;
9361+ Window m_ScrollVertButtonT;
9362+ Window m_ScrollVertButtonB;
9363+ Window m_winFullScreenWindow;
9364+ Window m_winOldParent;
9365+ HXxPoint m_ptScrollHorizPosL;
9366+ HXxPoint m_ptScrollHorizPosR;
9367+ HXxPoint m_ptScrollVertPosT;
9368+ HXxPoint m_ptScrollVertPosB;
9369+ HXxPoint m_ptFullScreenOffset;
9370+ HXxSize m_PreFullScreenSize;
9371+ HXBOOL m_bScrollingInProgress;
9372+ int m_nScrollDir;
9373+ HXBOOL m_bLastPointInSite;
9374+ HXBOOL m_bDamaged;
9375+ //
9376+ //Private helpers...
9377+ //
9378+
9379+ //returns the HX_VK associated with this keysym....
9380+ UINT32 _MapKeySymToHXVK(KeySym tmpSym, UINT32& uFlags);
9381+ on_new_frame_cb_t m_on_new_frame_cb;
9382+ void *m_context;
9383+};
9384+
9385+#endif //_UNIXSITE_H
9386Index: helix-libs/clientapps/clutter/exsitsup.cpp
9387===================================================================
9388--- /dev/null 1970-01-01 00:00:00.000000000 +0000
9389+++ helix-libs/clientapps/clutter/exsitsup.cpp 2008-10-13 06:05:49.000000000 -0700
9390@@ -0,0 +1,455 @@
9391+/* ***** BEGIN LICENSE BLOCK *****
9392+ * Version: RCSL 1.0/RPSL 1.0
9393+ *
9394+ * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
9395+ *
9396+ * The contents of this file, and the files included with this file, are
9397+ * subject to the current version of the RealNetworks Public Source License
9398+ * Version 1.0 (the "RPSL") available at
9399+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
9400+ * the file under the RealNetworks Community Source License Version 1.0
9401+ * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
9402+ * in which case the RCSL will apply. You may also obtain the license terms
9403+ * directly from RealNetworks. You may not use this file except in
9404+ * compliance with the RPSL or, if you have a valid RCSL with RealNetworks
9405+ * applicable to this file, the RCSL. Please see the applicable RPSL or
9406+ * RCSL for the rights, obligations and limitations governing use of the
9407+ * contents of the file.
9408+ *
9409+ * This file is part of the Helix DNA Technology. RealNetworks is the
9410+ * developer of the Original Code and owns the copyrights in the portions
9411+ * it created.
9412+ *
9413+ * This file, and the files included with this file, is distributed and made
9414+ * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
9415+ * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
9416+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
9417+ * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
9418+ *
9419+ * Technology Compatibility Kit Test Suite(s) Location:
9420+ * http://www.helixcommunity.org/content/tck
9421+ *
9422+ * Contributor(s):
9423+ *
9424+ * ***** END LICENSE BLOCK ***** */
9425+
9426+#ifdef _WIN16
9427+#include <windows.h>
9428+#endif
9429+
9430+#include "hxcom.h"
9431+#include "hxtypes.h"
9432+#include "hxwintyp.h"
9433+#include "hxwin.h"
9434+#include "ihxpckts.h"
9435+#include "hxcomm.h"
9436+#include "fivemmap.h"
9437+#include "hxstring.h" // CHXString
9438+#include "exsite.h"
9439+#include "exsitsup.h"
9440+#include "pckunpck.h" // CreateBufferCCF
9441+#include "ciddefs.h" // CID_RGB32
9442+#if defined(HELIX_FEATURE_PNG)
9443+#include "pxpngenc.h" // PXPNGEncode::EncodeToPNGBuffer
9444+#endif // HELIX_FEATURE_PNG
9445+#include "print.h"
9446+
9447+
9448+#include "globals.h"
9449+struct _stGlobals*& GetGlobal();
9450+
9451+/************************************************************************
9452+ * Method:
9453+ * Constructor
9454+ */
9455+ ExampleSiteSupplier::ExampleSiteSupplier(IUnknown* pUnkPlayer, on_new_frame_cb_t on_new_frame_cb = NULL, void *context = NULL)
9456+ : m_lRefCount(0)
9457+ , m_pSiteManager(NULL)
9458+ , m_pSite(NULL)
9459+ , m_pSiteCapture(NULL)
9460+ , m_pCaptureBuffer(NULL)
9461+ , m_pCCF(NULL)
9462+ , m_pUnkPlayer(pUnkPlayer)
9463+ , m_on_new_frame_cb(on_new_frame_cb)
9464+ , m_context(context)
9465+{
9466+ if (m_pUnkPlayer)
9467+ {
9468+ m_pUnkPlayer->QueryInterface(IID_IHXSiteManager,
9469+ (void**)&m_pSiteManager);
9470+
9471+ //printf("pauldebug:m_pUnkplayer->QueryInterface for m_pCCF calling\n");
9472+ m_pUnkPlayer->QueryInterface(IID_IHXCommonClassFactory,
9473+ (void**)&m_pCCF);
9474+ //printf("pauldebug:m_pUnkplayer->QueryInterface for m_pCCF called\n");
9475+
9476+ m_pUnkPlayer->AddRef();
9477+ }
9478+};
9479+
9480+/************************************************************************
9481+ * Method:
9482+ * Destructor
9483+ */
9484+ExampleSiteSupplier::~ExampleSiteSupplier()
9485+{
9486+ HX_RELEASE(m_pSiteManager);
9487+ HX_RELEASE(m_pSite);
9488+ HX_RELEASE(m_pSiteCapture);
9489+ HX_RELEASE(m_pCaptureBuffer);
9490+ HX_RELEASE(m_pCCF);
9491+ HX_RELEASE(m_pUnkPlayer);
9492+}
9493+
9494+/************************************************************************
9495+ * Method:
9496+ * IUnknown::QueryInterface
9497+ */
9498+ STDMETHODIMP
9499+ExampleSiteSupplier::QueryInterface(REFIID riid, void** ppvObj)
9500+{
9501+ if (IsEqualIID(riid, IID_IUnknown))
9502+ {
9503+ AddRef();
9504+ *ppvObj = (IUnknown*)(IHXSiteSupplier*)this;
9505+ return HXR_OK;
9506+ }
9507+ else if (IsEqualIID(riid, IID_IHXSiteSupplier))
9508+ {
9509+ AddRef();
9510+ *ppvObj = (IHXSiteSupplier*)this;
9511+ return HXR_OK;
9512+ }
9513+
9514+ *ppvObj = NULL;
9515+ return HXR_NOINTERFACE;
9516+}
9517+
9518+/************************************************************************
9519+ * Method:
9520+ * IUnknown::AddRef
9521+ */
9522+ STDMETHODIMP_(ULONG32)
9523+ExampleSiteSupplier::AddRef()
9524+{
9525+ return InterlockedIncrement(&m_lRefCount);
9526+}
9527+
9528+/************************************************************************
9529+ * Method:
9530+ * IUnknown::Release
9531+ */
9532+ STDMETHODIMP_(ULONG32)
9533+ExampleSiteSupplier::Release()
9534+{
9535+ if (InterlockedDecrement(&m_lRefCount) > 0)
9536+ {
9537+ return m_lRefCount;
9538+ }
9539+
9540+ delete this;
9541+ return 0;
9542+}
9543+
9544+/************************************************************************
9545+ * Method:
9546+ * IHXSiteSupplier::SitesNeeded
9547+ * Purpose:
9548+ * Called to inform the site supplier that a site with a particular
9549+ * set of characteristics is needed. If the site supplier can
9550+ * fulfill the request it should call the site manager and add one
9551+ * or more new sites.
9552+ * Note that the request for sites is associated with a Request ID
9553+ * the client core will inform the site supplier when this requested
9554+ * site is no longer needed.
9555+ */
9556+STDMETHODIMP
9557+ExampleSiteSupplier::SitesNeeded
9558+(
9559+ UINT32 uRequestID,
9560+ IHXValues* pProps
9561+ )
9562+{
9563+ /*
9564+ * Don't create a site if the -NULL_RENDER command line option
9565+ * was given. - jfarr
9566+ */
9567+ if (GetGlobal()->g_bNullRender)
9568+ {
9569+ return (HXR_OK);
9570+ }
9571+
9572+ /*
9573+ * If there are no properties, then we can't really create a
9574+ * site, because we have no idea what type of site is desired!
9575+ */
9576+ if (!pProps)
9577+ {
9578+ return HXR_INVALID_PARAMETER;
9579+ }
9580+
9581+ HRESULT hres = HXR_OK;
9582+ IHXValues* pSiteProps = NULL;
9583+ IHXSiteWindowed* pSiteWindowed = NULL;
9584+ IHXBuffer* pValue = NULL;
9585+ UINT32 style = 0;
9586+ IHXSite* pSite = NULL;
9587+
9588+#if 0
9589+ // Just let the RMA client core create a windowed site for us.
9590+ hres = m_pCCF->CreateInstance(CLSID_IHXSiteWindowed,(void**)&pSiteWindowed);
9591+ if (HXR_OK != hres)
9592+ {
9593+ goto exit;
9594+ }
9595+#else
9596+ {
9597+ *(void **)&pSiteWindowed = (IUnknown*)(IHXSiteWindowed*)(new CHXExSite(GetGlobal()->pMediaPlatform, NULL, 0, m_on_new_frame_cb, m_context));
9598+ hres = ((IUnknown*)*(void **)&pSiteWindowed)->QueryInterface(IID_IHXSiteWindowed, (void**)&pSiteWindowed);
9599+ if (HXR_OK != hres)
9600+ {
9601+ goto exit;
9602+ }
9603+ }
9604+#endif
9605+
9606+ hres = pSiteWindowed->QueryInterface(IID_IHXSite,(void**)&pSite);
9607+ if (HXR_OK != hres)
9608+ {
9609+ goto exit;
9610+ }
9611+
9612+ if( !m_pSite )
9613+ {
9614+ m_pSite = pSite;
9615+ m_pSite->AddRef();
9616+ }
9617+
9618+
9619+ hres = pSiteWindowed->QueryInterface(IID_IHXValues,(void**)&pSiteProps);
9620+ if (HXR_OK != hres)
9621+ {
9622+ goto exit;
9623+ }
9624+
9625+ /*
9626+ * We need to figure out what type of site we are supposed to
9627+ * to create. We need to "switch" between site user and site
9628+ * properties. So look for the well known site user properties
9629+ * that are mapped onto sites...
9630+ */
9631+ hres = pProps->GetPropertyCString("playto",pValue);
9632+ if (HXR_OK == hres)
9633+ {
9634+ pSiteProps->SetPropertyCString("channel",pValue);
9635+ HX_RELEASE(pValue);
9636+ }
9637+ else
9638+ {
9639+ hres = pProps->GetPropertyCString("name",pValue);
9640+ if (HXR_OK == hres)
9641+ {
9642+ pSiteProps->SetPropertyCString("LayoutGroup",pValue);
9643+ HX_RELEASE(pValue);
9644+ }
9645+ }
9646+
9647+#ifdef _WINDOWS
9648+ style = WS_OVERLAPPED | WS_VISIBLE | WS_CLIPCHILDREN;
9649+#endif
9650+
9651+ hres = pSiteWindowed->Create(NULL, style);
9652+ if (HXR_OK != hres)
9653+ {
9654+ goto exit;
9655+ }
9656+
9657+ /*
9658+ * We need to wait until we have set all the properties before
9659+ * we add the site.
9660+ */
9661+ hres = m_pSiteManager->AddSite(pSite);
9662+ if (HXR_OK != hres)
9663+ {
9664+ goto exit;
9665+ }
9666+#ifdef _WINDOWS
9667+ {
9668+ HXxWindow* pWindow = pSiteWindowed->GetWindow();
9669+ if (pWindow && pWindow->window) ::SetForegroundWindow( (HWND)(pWindow->window) );
9670+ }
9671+#endif
9672+ m_CreatedSites.SetAt((void*)uRequestID,pSite);
9673+ pSite->AddRef();
9674+
9675+exit:
9676+
9677+ HX_RELEASE(pSiteProps);
9678+ HX_RELEASE(pSiteWindowed);
9679+ HX_RELEASE(pSite);
9680+
9681+ return hres;
9682+}
9683+
9684+/************************************************************************
9685+ * Method:
9686+ * IHXSiteSupplier::SitesNotNeeded
9687+ * Purpose:
9688+ * Called to inform the site supplier that all sites from a previos
9689+ * site request are no longer needed. If the site supplier had
9690+ * previously created non-persistant sites (like popup windows)
9691+ * to fulfill a request for sites it should call the site manager
9692+ * and remove those sites.
9693+ */
9694+STDMETHODIMP
9695+ExampleSiteSupplier::SitesNotNeeded(UINT32 uRequestID)
9696+{
9697+ IHXSite* pSite = NULL;
9698+ IHXSiteWindowed* pSiteWindowed = NULL;
9699+ void* pVoid = NULL;
9700+
9701+ if (!m_CreatedSites.Lookup((void*)uRequestID,pVoid))
9702+ {
9703+ return HXR_INVALID_PARAMETER;
9704+ }
9705+ pSite = (IHXSite*)pVoid;
9706+
9707+ m_pSiteManager->RemoveSite(pSite);
9708+
9709+ // Need to actually do the work on destroying the window
9710+ // and all that jazz.
9711+ pSite->QueryInterface(IID_IHXSiteWindowed,(void**)&pSiteWindowed);
9712+
9713+ pSiteWindowed->Destroy();
9714+
9715+ // ref count = 2
9716+ pSiteWindowed->Release();
9717+
9718+ // ref count = 1; deleted from this object's view!
9719+ pSite->Release();
9720+
9721+ m_CreatedSites.RemoveKey((void*)uRequestID);
9722+
9723+ return HXR_OK;
9724+}
9725+
9726+/************************************************************************
9727+ * Method:
9728+ * IHXSiteSupplier::BeginChangeLayout
9729+ * Purpose:
9730+ * Called to inform the site supplier a layout change has beginning
9731+ * it can expect to recieve SitesNeeded() and SitesNotNeeded() calls
9732+ * while a layout change is in progress,
9733+ */
9734+STDMETHODIMP
9735+ExampleSiteSupplier::BeginChangeLayout()
9736+{
9737+ return HXR_OK;
9738+}
9739+
9740+/************************************************************************
9741+ * Method:
9742+ * IHXSiteSupplier::DoneChangeLayout
9743+ * Purpose:
9744+ * Called to inform the site supplier the layout change has been
9745+ * completed.
9746+ */
9747+STDMETHODIMP
9748+ExampleSiteSupplier::DoneChangeLayout()
9749+{
9750+ return HXR_OK;
9751+}
9752+
9753+HX_RESULT
9754+ExampleSiteSupplier::CaptureImage(CHXString pszFileName, INT32 dWidth, INT32 dHeight)
9755+{
9756+ HX_RESULT res=HXR_FAIL;
9757+
9758+ // Get the IHXSiteCapture object from the site
9759+ if (m_pSiteCapture == NULL)
9760+ {
9761+ if (m_pSite && m_pSite->QueryInterface(IID_IHXSiteCapture, (void**)&m_pSiteCapture) == HXR_OK)
9762+ {
9763+ m_pSiteCapture->AddRef();
9764+ }
9765+ }
9766+
9767+ // Create the buffer that will receive the image data
9768+ if (m_pCaptureBuffer == NULL)
9769+ {
9770+ CreateBufferCCF(m_pCaptureBuffer, m_pCCF);
9771+ if (!m_pCaptureBuffer)
9772+ {
9773+ return HXR_OUTOFMEMORY;
9774+ }
9775+ }
9776+
9777+ HXBOOL bCanCapture = FALSE;
9778+
9779+ // Check if the site is available to capture an image
9780+ if (m_pSiteCapture && (res = m_pSiteCapture->CanCapture(bCanCapture)) == HXR_OK && bCanCapture)
9781+ {
9782+ HX_RESULT res;
9783+ HXxSize outputSize;
9784+ outputSize.cx = dWidth;
9785+ outputSize.cy = dHeight;
9786+ m_strFileName = pszFileName;
9787+
9788+ // Asynchronous call. CaptureDone() will be called with result.
9789+ res = m_pSiteCapture->Capture((IHXSiteCaptureResponse*)this, m_pCaptureBuffer, &outputSize, CID_RGB32);
9790+ }
9791+
9792+ return res;
9793+
9794+}
9795+
9796+//
9797+// IHXSiteCaptureResponse::CaptureDone
9798+//
9799+// Called when the site has captured the next frame.
9800+// bmiOutputFormat points to image format description which
9801+// is valid until the completion of CaptureDone.
9802+// bmiOutputFormat can be different for every capture.
9803+// pCaptureBuffer holds the image if supplied in
9804+// Capture() method. pCaptureBuffer is automatically
9805+// resized if it has insufficient size to hold the image
9806+// data.
9807+//
9808+// status may be:
9809+// HXR_FAIL -- No capture was done. General Error. All data is invalid.
9810+// HXR_OK -- Capture was done. Both variables are valid.
9811+STDMETHODIMP
9812+ExampleSiteSupplier::CaptureDone(REF(HX_RESULT) status,
9813+ REF(HXBitmapInfoHeader) bmiOutputFormat,
9814+ REF(IHXBuffer*) pCaptureBuffer)
9815+{
9816+ if (status == HXR_OK)
9817+ {
9818+#if defined(HELIX_FEATURE_PNG)
9819+ // Convert capture buffer into PNG
9820+ IHXBuffer* pConvertedBuffer=NULL;
9821+ HX_RESULT res = HXR_OK;
9822+ res = PXPNGEncode::EncodeToPNGBuffer(pCaptureBuffer, &bmiOutputFormat, m_pCCF, pConvertedBuffer);
9823+ if (res == HXR_OK && !m_strFileName.IsEmpty())
9824+ {
9825+ CHXString strTail = m_strFileName.Right(4);
9826+ if (strTail.CompareNoCase(".png") != 0)
9827+ {
9828+ m_strFileName += ".png";
9829+ }
9830+
9831+ FILE* fp = fopen(m_strFileName, "wb");
9832+ if (fp)
9833+ {
9834+ fwrite(pConvertedBuffer->GetBuffer(), 1, pConvertedBuffer->GetSize(), fp);
9835+ fclose(fp);
9836+ STDOUT("Captured image to PNG file: %s\n", (const char*)m_strFileName);
9837+ STDOUT("File size: %ld\n", pConvertedBuffer->GetSize());
9838+ }
9839+ HX_RELEASE(pConvertedBuffer);
9840+ }
9841+#endif // HELIX_FEATURE_PNG
9842+ }
9843+
9844+ return status;
9845+}
9846Index: helix-libs/clientapps/clutter/exsitsup.h
9847===================================================================
9848--- /dev/null 1970-01-01 00:00:00.000000000 +0000
9849+++ helix-libs/clientapps/clutter/exsitsup.h 2008-10-13 06:05:49.000000000 -0700
9850@@ -0,0 +1,154 @@
9851+/* ***** BEGIN LICENSE BLOCK *****
9852+ * Version: RCSL 1.0/RPSL 1.0
9853+ *
9854+ * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
9855+ *
9856+ * The contents of this file, and the files included with this file, are
9857+ * subject to the current version of the RealNetworks Public Source License
9858+ * Version 1.0 (the "RPSL") available at
9859+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
9860+ * the file under the RealNetworks Community Source License Version 1.0
9861+ * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
9862+ * in which case the RCSL will apply. You may also obtain the license terms
9863+ * directly from RealNetworks. You may not use this file except in
9864+ * compliance with the RPSL or, if you have a valid RCSL with RealNetworks
9865+ * applicable to this file, the RCSL. Please see the applicable RPSL or
9866+ * RCSL for the rights, obligations and limitations governing use of the
9867+ * contents of the file.
9868+ *
9869+ * This file is part of the Helix DNA Technology. RealNetworks is the
9870+ * developer of the Original Code and owns the copyrights in the portions
9871+ * it created.
9872+ *
9873+ * This file, and the files included with this file, is distributed and made
9874+ * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
9875+ * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
9876+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
9877+ * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
9878+ *
9879+ * Technology Compatibility Kit Test Suite(s) Location:
9880+ * http://www.helixcommunity.org/content/tck
9881+ *
9882+ * Contributor(s):
9883+ *
9884+ * ***** END LICENSE BLOCK ***** */
9885+
9886+#ifndef _EXSITSUP_H_
9887+#define _EXSITSUP_H_
9888+
9889+#include "fivemmap.h"
9890+#include "player.h"
9891+
9892+/****************************************************************************
9893+ *
9894+ * Class:
9895+ *
9896+ * ExampleSiteSupplier
9897+ *
9898+ * Purpose:
9899+ *
9900+ * Implementation for ragui's IHXSiteSupplier
9901+ *
9902+ */
9903+class ExampleSiteSupplier :
9904+ public IHXSiteSupplier
9905+ , public IHXSiteCaptureResponse
9906+{
9907+private:
9908+ LONG32 m_lRefCount;
9909+ IHXSiteManager* m_pSiteManager;
9910+ IHXSite* m_pSite;
9911+ IHXSiteCapture* m_pSiteCapture;
9912+ IHXBuffer* m_pCaptureBuffer;
9913+ IHXCommonClassFactory* m_pCCF;
9914+ IUnknown* m_pUnkPlayer;
9915+ FiveMinuteMap m_CreatedSites;
9916+ CHXString m_strFileName;
9917+ on_new_frame_cb_t m_on_new_frame_cb;
9918+ void * m_context;
9919+
9920+ ~ExampleSiteSupplier();
9921+
9922+public:
9923+ ExampleSiteSupplier(IUnknown* pUnkPlayer, on_new_frame_cb_t new_frame_cb = NULL, void *context = NULL);
9924+
9925+ /*
9926+ * IUnknown methods
9927+ */
9928+ STDMETHOD(QueryInterface) (THIS_
9929+ REFIID riid,
9930+ void** ppvObj);
9931+
9932+ STDMETHOD_(ULONG32,AddRef) (THIS);
9933+
9934+ STDMETHOD_(ULONG32,Release) (THIS);
9935+
9936+ /*
9937+ * IHXSiteSupplier methods
9938+ */
9939+
9940+ /************************************************************************
9941+ * Method:
9942+ * IHXSiteSupplier::SitesNeeded
9943+ * Purpose:
9944+ * Called to inform the site supplier that a site with a particular
9945+ * set of characteristics is needed. If the site supplier can
9946+ * fulfill the request it should call the site manager and add one
9947+ * or more new sites.
9948+ * Note that the request for sites is associated with a Request ID
9949+ * the client core will inform the site supplier when this requested
9950+ * site is no longer needed.
9951+ */
9952+ STDMETHOD(SitesNeeded) (THIS_
9953+ UINT32 uRequestID,
9954+ IHXValues* pSiteProps);
9955+
9956+ /************************************************************************
9957+ * Method:
9958+ * IHXSiteSupplier::SitesNotNeeded
9959+ * Purpose:
9960+ * Called to inform the site supplier that all sites from a previos
9961+ * site request are no longer needed. If the site supplier had
9962+ * previously created non-persistant sites (like popup windows)
9963+ * to fulfill a request for sites it should call the site manager
9964+ * and remove those sites.
9965+ */
9966+ STDMETHOD(SitesNotNeeded)
9967+ (THIS_
9968+ UINT32 uRequestID);
9969+
9970+
9971+ /************************************************************************
9972+ * Method:
9973+ * IHXSiteSupplier::BeginChangeLayout
9974+ * Purpose:
9975+ * Called to inform the site supplier a layout change has beginning
9976+ * it can expect to recieve SitesNeeded() and SitesNotNeeded() calls
9977+ * while a layout change is in progress,
9978+ */
9979+ STDMETHOD(BeginChangeLayout) (THIS);
9980+
9981+ /************************************************************************
9982+ * Method:
9983+ * IHXSiteSupplier::DoneChangeLayout
9984+ * Purpose:
9985+ * Called to inform the site supplier the layout change has been
9986+ * completed.
9987+ */
9988+ STDMETHOD(DoneChangeLayout) (THIS);
9989+
9990+ /*
9991+ * IHXSiteCaptureResponse
9992+ */
9993+ STDMETHOD(CaptureDone) (THIS_
9994+ REF(HX_RESULT) status,
9995+ REF(HXBitmapInfoHeader) bmiOutputFormat,
9996+ REF(IHXBuffer*) pImageDataBuffer
9997+ );
9998+
9999+ HX_RESULT CaptureImage(CHXString pFileName, INT32 dWidth, INT32 dHeight);
10000+
10001+};
10002+
10003+#endif // _EXSITSUP_H_
10004+
10005Index: helix-libs/clientapps/clutter/exstateadvsnk.cpp
10006===================================================================
10007--- /dev/null 1970-01-01 00:00:00.000000000 +0000
10008+++ helix-libs/clientapps/clutter/exstateadvsnk.cpp 2008-10-13 06:05:49.000000000 -0700
10009@@ -0,0 +1,229 @@
10010+/* ***** BEGIN LICENSE BLOCK *****
10011+ * Version: RCSL 1.0/RPSL 1.0
10012+ *
10013+ * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
10014+ *
10015+ * The contents of this file, and the files included with this file, are
10016+ * subject to the current version of the RealNetworks Public Source License
10017+ * Version 1.0 (the "RPSL") available at
10018+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
10019+ * the file under the RealNetworks Community Source License Version 1.0
10020+ * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
10021+ * in which case the RCSL will apply. You may also obtain the license terms
10022+ * directly from RealNetworks. You may not use this file except in
10023+ * compliance with the RPSL or, if you have a valid RCSL with RealNetworks
10024+ * applicable to this file, the RCSL. Please see the applicable RPSL or
10025+ * RCSL for the rights, obligations and limitations governing use of the
10026+ * contents of the file.
10027+ *
10028+ * This file is part of the Helix DNA Technology. RealNetworks is the
10029+ * developer of the Original Code and owns the copyrights in the portions
10030+ * it created.
10031+ *
10032+ * This file, and the files included with this file, is distributed and made
10033+ * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
10034+ * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
10035+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
10036+ * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
10037+ *
10038+ * Technology Compatibility Kit Test Suite(s) Location:
10039+ * http://www.helixcommunity.org/content/tck
10040+ *
10041+ * Contributor(s):
10042+ *
10043+ * ***** END LICENSE BLOCK ***** */
10044+
10045+#include <stdio.h>
10046+
10047+#include "hxtypes.h"
10048+
10049+#include "hxcom.h"
10050+#include "hxcomm.h"
10051+#include "hxmon.h"
10052+#include "hxcore.h"
10053+#include "hxengin.h"
10054+#include "hxclsnk.h"
10055+#include "hxgroup.h"
10056+#include "hxstrutl.h"
10057+#include "exstateadvsnk.h"
10058+#include "hxstring.h"
10059+#include "hxprefs.h"
10060+#include "excontxt.h"
10061+
10062+#include "print.h"
10063+
10064+#include "globals.h"
10065+#include "player.h"
10066+
10067+struct _stGlobals*& GetGlobal(); //in main.cpp
10068+
10069+#ifdef __TCS__
10070+extern unsigned long gStreamTime;
10071+
10072+static int iOpened = 0;
10073+
10074+
10075+#if defined(__cplusplus)
10076+extern "C" {
10077+#endif /* defined(__cplusplus) */
10078+
10079+typedef enum hookBuffering {
10080+ eContacting = 0,
10081+ eConnecting = 1,
10082+ eBuffering = 2,
10083+ ePlaying = 3
10084+}hookBuffering;
10085+
10086+void hookRealAudio_Buffering(hookBuffering connectState, int pct);
10087+
10088+void hookRealAudio_PlayPosition(unsigned long current,unsigned long duration);
10089+
10090+typedef enum hookState {
10091+ ePlay = 0,
10092+ ePause = 1,
10093+ eStop = 2,
10094+ eResume = 3,
10095+ eComplete // Clip is done playing
10096+}hookState;
10097+void hookRealAudio_State(hookState newState);
10098+
10099+
10100+#if defined(__cplusplus)
10101+}
10102+#endif /* defined(__cplusplus) */
10103+
10104+#endif // __TCS__
10105+
10106+void PrintBuffer(const char* pszName,const unsigned char* pbBuf, unsigned int dwBytes);
10107+
10108+ExampleClientStateAdviceSink::ExampleClientStateAdviceSink(IUnknown* pUnknown, LONG32 lClientIndex, on_state_change_cb_t on_state_change_cb, void *context)
10109+ : m_lRefCount (0)
10110+ , m_lClientIndex (lClientIndex)
10111+ , m_pUnknown (NULL)
10112+ , m_State (HX_CLIENT_STATE_READY)
10113+ , m_state_change_cb(on_state_change_cb)
10114+ , m_context(context)
10115+{
10116+ if (pUnknown)
10117+ {
10118+ m_pUnknown = pUnknown;
10119+ m_pUnknown->AddRef();
10120+
10121+ IHXPlayer* pPlayer;
10122+ IHXClientStateAdviseSinkControl *pStateControl;
10123+ if(HXR_OK == m_pUnknown->QueryInterface(IID_IHXPlayer,
10124+ (void**)&pPlayer))
10125+ {
10126+ m_pPlayer = pPlayer;
10127+
10128+
10129+ }
10130+
10131+ if (HXR_OK == m_pUnknown->QueryInterface(IID_IHXClientStateAdviseSinkControl, (void **)&pStateControl))
10132+ {
10133+ pStateControl->AddClientStateAdviseSink(this);
10134+ }
10135+ }
10136+
10137+#ifdef __TCS__
10138+ bEnableAdviceSink = TRUE;
10139+ iOpened = 0;
10140+#endif
10141+}
10142+
10143+ExampleClientStateAdviceSink::~ExampleClientStateAdviceSink(void)
10144+{
10145+
10146+ if (m_pPlayer)
10147+ {
10148+ m_pPlayer->Release();
10149+ m_pPlayer = NULL;
10150+ }
10151+ if (m_pUnknown)
10152+ {
10153+ m_pUnknown->Release();
10154+ m_pUnknown = NULL;
10155+ }
10156+}
10157+
10158+
10159+// *** IUnknown methods ***
10160+
10161+/////////////////////////////////////////////////////////////////////////
10162+// Method:
10163+// IUnknown::QueryInterface
10164+// Purpose:
10165+// Implement this to export the interfaces supported by your
10166+// object.
10167+//
10168+STDMETHODIMP ExampleClientStateAdviceSink::QueryInterface(REFIID riid, void** ppvObj)
10169+{
10170+ if (IsEqualIID(riid, IID_IUnknown))
10171+ {
10172+ AddRef();
10173+ *ppvObj = (IUnknown*)(IHXClientStateAdviseSink *)this;
10174+ return HXR_OK;
10175+ }
10176+ else if (IsEqualIID(riid, IID_IHXClientStateAdviseSink))
10177+ {
10178+ AddRef();
10179+ *ppvObj = (IHXClientStateAdviseSink*)this;
10180+ return HXR_OK;
10181+ }
10182+
10183+ *ppvObj = NULL;
10184+ return HXR_NOINTERFACE;
10185+}
10186+
10187+/////////////////////////////////////////////////////////////////////////
10188+// Method:
10189+// IUnknown::AddRef
10190+// Purpose:
10191+// Everyone usually implements this the same... feel free to use
10192+// this implementation.
10193+//
10194+STDMETHODIMP_(ULONG32) ExampleClientStateAdviceSink::AddRef()
10195+{
10196+ return InterlockedIncrement(&m_lRefCount);
10197+}
10198+
10199+/////////////////////////////////////////////////////////////////////////
10200+// Method:
10201+// IUnknown::Release
10202+// Purpose:
10203+// Everyone usually implements this the same... feel free to use
10204+// this implementation.
10205+//
10206+STDMETHODIMP_(ULONG32) ExampleClientStateAdviceSink::Release()
10207+{
10208+ if (InterlockedDecrement(&m_lRefCount) > 0)
10209+ {
10210+ return m_lRefCount;
10211+ }
10212+
10213+ delete this;
10214+ return 0;
10215+}
10216+
10217+
10218+/************************************************************************
10219+ * Method:
10220+ * IHXClientStateAdviseSink::OnStateChange
10221+ * Purpose:
10222+ * Called to advise the client state has changed state
10223+ */
10224+STDMETHODIMP ExampleClientStateAdviceSink::OnStateChange(UINT16 uOldState, UINT16 uNewState)
10225+{
10226+ if (m_state_change_cb)
10227+ m_state_change_cb(uOldState, uNewState, m_context);
10228+
10229+ m_State = uNewState;
10230+ return HXR_OK;
10231+}
10232+
10233+EHXClientState ExampleClientStateAdviceSink::GetState()
10234+{
10235+ return m_State;
10236+}
10237+
10238+
10239Index: helix-libs/clientapps/clutter/exstateadvsnk.h
10240===================================================================
10241--- /dev/null 1970-01-01 00:00:00.000000000 +0000
10242+++ helix-libs/clientapps/clutter/exstateadvsnk.h 2008-10-13 06:05:49.000000000 -0700
10243@@ -0,0 +1,108 @@
10244+/* ***** BEGIN LICENSE BLOCK *****
10245+ * Version: RCSL 1.0/RPSL 1.0
10246+ *
10247+ * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
10248+ *
10249+ * The contents of this file, and the files included with this file, are
10250+ * subject to the current version of the RealNetworks Public Source License
10251+ * Version 1.0 (the "RPSL") available at
10252+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
10253+ * the file under the RealNetworks Community Source License Version 1.0
10254+ * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
10255+ * in which case the RCSL will apply. You may also obtain the license terms
10256+ * directly from RealNetworks. You may not use this file except in
10257+ * compliance with the RPSL or, if you have a valid RCSL with RealNetworks
10258+ * applicable to this file, the RCSL. Please see the applicable RPSL or
10259+ * RCSL for the rights, obligations and limitations governing use of the
10260+ * contents of the file.
10261+ *
10262+ * This file is part of the Helix DNA Technology. RealNetworks is the
10263+ * developer of the Original Code and owns the copyrights in the portions
10264+ * it created.
10265+ *
10266+ * This file, and the files included with this file, is distributed and made
10267+ * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
10268+ * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
10269+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
10270+ * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
10271+ *
10272+ * Technology Compatibility Kit Test Suite(s) Location:
10273+ * http://www.helixcommunity.org/content/tck
10274+ *
10275+ * Contributor(s):
10276+ *
10277+ * ***** END LICENSE BLOCK ***** */
10278+
10279+#ifndef _EXAMPLE_CLIENT_STATE_ADVISE_SNK_H_
10280+#define _EXAMPLE_CLIENT_STATE_ADVISE_SNK_H_
10281+
10282+#include "player.h"
10283+
10284+struct IHXClientStateAdviseSink;
10285+struct IHXGroupSink;
10286+struct IUnknown;
10287+struct IHXRegistry;
10288+struct IHXScheduler;
10289+struct IHXCallback;
10290+struct IHXPlayer;
10291+struct IHXGroup;
10292+
10293+class ExampleClientStateAdviceSink : public IHXClientStateAdviseSink
10294+{
10295+ private:
10296+ LONG32 m_lRefCount;
10297+ LONG32 m_lClientIndex;
10298+
10299+ IUnknown* m_pUnknown;
10300+
10301+ UINT32 m_ulStartTime;
10302+ UINT32 m_ulStopTime;
10303+
10304+ UINT32 m_lCurrentBandwidth;
10305+ UINT32 m_lAverageBandwidth;
10306+ HXBOOL m_bOnStop;
10307+
10308+ HXBOOL m_bWaitForTrackStart;
10309+
10310+ on_state_change_cb_t m_state_change_cb;
10311+ void *m_context;
10312+ EHXClientState m_State;
10313+
10314+ // IHXCallback
10315+ IHXPlayer* m_pPlayer;
10316+ ULONG32 m_hCallback;
10317+ ~ExampleClientStateAdviceSink();
10318+
10319+
10320+ public:
10321+
10322+ ExampleClientStateAdviceSink(IUnknown* /*IN*/ pUnknown, LONG32 /*IN*/ lClientIndex, on_state_change_cb_t on_state_change_cb = NULL, void *context = NULL);
10323+
10324+ /*
10325+ * IUnknown methods
10326+ */
10327+ STDMETHOD(QueryInterface) (THIS_
10328+ REFIID riid,
10329+ void** ppvObj);
10330+
10331+ STDMETHOD_(ULONG32,AddRef) (THIS);
10332+
10333+ STDMETHOD_(ULONG32,Release) (THIS);
10334+
10335+ /***********************************************************************
10336+ * Method:
10337+ * IHXClientStateAdviseSink::OnStateChange
10338+ * Purpose:
10339+ * Called by client engine to inform the client that the state has changed.
10340+ * States are defined in the enum EHXClientState, defined in this file.
10341+ *
10342+ */
10343+ STDMETHOD(OnStateChange) (THIS_
10344+ UINT16 uOldState,
10345+ UINT16 uNewState
10346+ ) ;
10347+
10348+ EHXClientState GetState();
10349+};
10350+
10351+#endif /* _EXAMPLECLSNK_ */
10352Index: helix-libs/clientapps/clutter/fivemmap.cpp
10353===================================================================
10354--- /dev/null 1970-01-01 00:00:00.000000000 +0000
10355+++ helix-libs/clientapps/clutter/fivemmap.cpp 2008-10-13 06:05:49.000000000 -0700
10356@@ -0,0 +1,175 @@
10357+/* ***** BEGIN LICENSE BLOCK *****
10358+ * Version: RCSL 1.0/RPSL 1.0
10359+ *
10360+ * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
10361+ *
10362+ * The contents of this file, and the files included with this file, are
10363+ * subject to the current version of the RealNetworks Public Source License
10364+ * Version 1.0 (the "RPSL") available at
10365+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
10366+ * the file under the RealNetworks Community Source License Version 1.0
10367+ * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
10368+ * in which case the RCSL will apply. You may also obtain the license terms
10369+ * directly from RealNetworks. You may not use this file except in
10370+ * compliance with the RPSL or, if you have a valid RCSL with RealNetworks
10371+ * applicable to this file, the RCSL. Please see the applicable RPSL or
10372+ * RCSL for the rights, obligations and limitations governing use of the
10373+ * contents of the file.
10374+ *
10375+ * This file is part of the Helix DNA Technology. RealNetworks is the
10376+ * developer of the Original Code and owns the copyrights in the portions
10377+ * it created.
10378+ *
10379+ * This file, and the files included with this file, is distributed and made
10380+ * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
10381+ * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
10382+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
10383+ * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
10384+ *
10385+ * Technology Compatibility Kit Test Suite(s) Location:
10386+ * http://www.helixcommunity.org/content/tck
10387+ *
10388+ * Contributor(s):
10389+ *
10390+ * ***** END LICENSE BLOCK ***** */
10391+
10392+#include <string.h>
10393+#include "hxtypes.h"
10394+#include "fivemmap.h"
10395+
10396+void* FiveMinuteMap::GetFirstValue()
10397+{
10398+ m_nCursor = 0;
10399+
10400+ if (m_nMapSize)
10401+ {
10402+ return m_pValueArray[m_nCursor];
10403+ }
10404+ else
10405+ {
10406+ return NULL;
10407+ }
10408+}
10409+
10410+void* FiveMinuteMap::GetNextValue()
10411+{
10412+ m_nCursor++;
10413+
10414+ if (m_nCursor < m_nMapSize)
10415+ {
10416+ return m_pValueArray[m_nCursor];
10417+ }
10418+ else
10419+ {
10420+ return NULL;
10421+ }
10422+}
10423+
10424+HXBOOL FiveMinuteMap::Lookup(void* Key, void*& Value) const
10425+{
10426+ HXBOOL bFound = FALSE;
10427+ int nIndex = 0;
10428+
10429+ // If Key is alrady in the list, replace value
10430+ for (; nIndex < m_nMapSize; nIndex++)
10431+ {
10432+ if (m_pKeyArray[nIndex] == Key)
10433+ {
10434+ Value = m_pValueArray[nIndex];
10435+ bFound = TRUE;
10436+ goto exit;
10437+ }
10438+ }
10439+
10440+exit:
10441+ return bFound;
10442+}
10443+
10444+void FiveMinuteMap::RemoveKey(void* Key)
10445+{
10446+ HXBOOL bFound = FALSE;
10447+ int nIndex = 0;
10448+
10449+ // If Key is alrady in the list, replace value
10450+ for (; nIndex < m_nMapSize; nIndex++)
10451+ {
10452+ if (m_pKeyArray[nIndex] == Key)
10453+ {
10454+ if (nIndex < (m_nMapSize-1))
10455+ {
10456+ memmove(&(m_pKeyArray[nIndex]),&(m_pKeyArray[nIndex+1]),sizeof(void*)*(m_nMapSize-(nIndex+1)));
10457+ memmove(&(m_pValueArray[nIndex]),&(m_pValueArray[nIndex+1]),sizeof(void*)*(m_nMapSize-(nIndex+1)));
10458+ }
10459+ m_nMapSize--;
10460+ goto exit;
10461+ }
10462+ }
10463+
10464+exit:
10465+ (NULL); // We're done!
10466+}
10467+
10468+void FiveMinuteMap::RemoveValue(void* Value)
10469+{
10470+ HXBOOL bFound = FALSE;
10471+ int nIndex = 0;
10472+
10473+ // If Value is alrady in the list, replace value
10474+ for (; nIndex < m_nMapSize; nIndex++)
10475+ {
10476+ if (m_pValueArray[nIndex] == Value)
10477+ {
10478+ if (nIndex < (m_nMapSize-1))
10479+ {
10480+ memmove(&(m_pKeyArray[nIndex]),&(m_pKeyArray[nIndex+1]),sizeof(void*)*(m_nMapSize-(nIndex+1)));
10481+ memmove(&(m_pValueArray[nIndex]),&(m_pValueArray[nIndex+1]),sizeof(void*)*(m_nMapSize-(nIndex+1)));
10482+ }
10483+ m_nMapSize--;
10484+ goto exit;
10485+ }
10486+ }
10487+
10488+exit:
10489+ (NULL); // We're done!
10490+}
10491+
10492+
10493+void FiveMinuteMap::SetAt(void* Key, void* Value)
10494+{
10495+ int nIndex = 0;
10496+
10497+ // If Key is alrady in the list, replace value
10498+ for (; nIndex < m_nMapSize; nIndex++)
10499+ {
10500+ if (m_pKeyArray[nIndex] == Key)
10501+ {
10502+ m_pValueArray[nIndex] = Value;
10503+ goto exit;
10504+ }
10505+ }
10506+
10507+ // If we have room, add it to the end!
10508+ if (m_nAllocSize == m_nMapSize)
10509+ {
10510+ m_nAllocSize += AllocationSize;
10511+ void** pNewKeys = new void*[m_nAllocSize];
10512+ void** pNewValues = new void*[m_nAllocSize];
10513+
10514+ memcpy(pNewKeys,m_pKeyArray,sizeof(void*)*m_nMapSize); /* Flawfinder: ignore */
10515+ memcpy(pNewValues,m_pValueArray,sizeof(void*)*m_nMapSize); /* Flawfinder: ignore */
10516+
10517+ delete [] m_pKeyArray;
10518+ delete [] m_pValueArray;
10519+
10520+ m_pKeyArray = pNewKeys;
10521+ m_pValueArray = pNewValues;
10522+ }
10523+
10524+ m_pKeyArray[m_nMapSize] = Key;
10525+ m_pValueArray[m_nMapSize] = Value;
10526+ m_nMapSize++;
10527+
10528+exit:
10529+ (NULL); // We're done!
10530+}
10531+
10532Index: helix-libs/clientapps/clutter/fivemmap.h
10533===================================================================
10534--- /dev/null 1970-01-01 00:00:00.000000000 +0000
10535+++ helix-libs/clientapps/clutter/fivemmap.h 2008-10-13 06:05:49.000000000 -0700
10536@@ -0,0 +1,79 @@
10537+/* ***** BEGIN LICENSE BLOCK *****
10538+ * Version: RCSL 1.0/RPSL 1.0
10539+ *
10540+ * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
10541+ *
10542+ * The contents of this file, and the files included with this file, are
10543+ * subject to the current version of the RealNetworks Public Source License
10544+ * Version 1.0 (the "RPSL") available at
10545+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
10546+ * the file under the RealNetworks Community Source License Version 1.0
10547+ * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
10548+ * in which case the RCSL will apply. You may also obtain the license terms
10549+ * directly from RealNetworks. You may not use this file except in
10550+ * compliance with the RPSL or, if you have a valid RCSL with RealNetworks
10551+ * applicable to this file, the RCSL. Please see the applicable RPSL or
10552+ * RCSL for the rights, obligations and limitations governing use of the
10553+ * contents of the file.
10554+ *
10555+ * This file is part of the Helix DNA Technology. RealNetworks is the
10556+ * developer of the Original Code and owns the copyrights in the portions
10557+ * it created.
10558+ *
10559+ * This file, and the files included with this file, is distributed and made
10560+ * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
10561+ * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
10562+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
10563+ * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
10564+ *
10565+ * Technology Compatibility Kit Test Suite(s) Location:
10566+ * http://www.helixcommunity.org/content/tck
10567+ *
10568+ * Contributor(s):
10569+ *
10570+ * ***** END LICENSE BLOCK ***** */
10571+
10572+#ifndef _FIVEMMAP_H_
10573+#define _FIVEMMAP_H_
10574+
10575+#ifndef _HXTYPES_H_
10576+#error FiveMinuteMap assumes pntypes.h.
10577+#endif
10578+
10579+class FiveMinuteMap
10580+{
10581+ const int AllocationSize;
10582+
10583+ void** m_pKeyArray;
10584+ void** m_pValueArray;
10585+ int m_nMapSize;
10586+ int m_nAllocSize;
10587+ int m_nCursor;
10588+public:
10589+ FiveMinuteMap()
10590+ : m_pKeyArray(NULL)
10591+ , m_pValueArray(NULL)
10592+ , m_nMapSize(0)
10593+ , m_nAllocSize(0)
10594+ , m_nCursor(0)
10595+ , AllocationSize(10)
10596+ {};
10597+
10598+ ~FiveMinuteMap()
10599+ {
10600+ delete [] m_pKeyArray;
10601+ delete [] m_pValueArray;
10602+ };
10603+
10604+ int GetCount() {return m_nMapSize;}
10605+
10606+ void* GetFirstValue();
10607+ void* GetNextValue();
10608+
10609+ HXBOOL Lookup(void* Key, void*& Value) const;
10610+ void RemoveKey(void* Key);
10611+ void RemoveValue(void* Value);
10612+ void SetAt(void* Key, void* Value);
10613+};
10614+
10615+#endif /* _FIVEMMAP_H_ */
10616Index: helix-libs/clientapps/clutter/globals.h
10617===================================================================
10618--- /dev/null 1970-01-01 00:00:00.000000000 +0000
10619+++ helix-libs/clientapps/clutter/globals.h 2008-10-13 06:05:49.000000000 -0700
10620@@ -0,0 +1,150 @@
10621+/* ***** BEGIN LICENSE BLOCK *****
10622+ * Version: RCSL 1.0/RPSL 1.0
10623+ *
10624+ * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
10625+ *
10626+ * The contents of this file, and the files included with this file, are
10627+ * subject to the current version of the RealNetworks Public Source License
10628+ * Version 1.0 (the "RPSL") available at
10629+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
10630+ * the file under the RealNetworks Community Source License Version 1.0
10631+ * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
10632+ * in which case the RCSL will apply. You may also obtain the license terms
10633+ * directly from RealNetworks. You may not use this file except in
10634+ * compliance with the RPSL or, if you have a valid RCSL with RealNetworks
10635+ * applicable to this file, the RCSL. Please see the applicable RPSL or
10636+ * RCSL for the rights, obligations and limitations governing use of the
10637+ * contents of the file.
10638+ *
10639+ * This file is part of the Helix DNA Technology. RealNetworks is the
10640+ * developer of the Original Code and owns the copyrights in the portions
10641+ * it created.
10642+ *
10643+ * This file, and the files included with this file, is distributed and made
10644+ * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
10645+ * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
10646+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
10647+ * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
10648+ *
10649+ * Technology Compatibility Kit Test Suite(s) Location:
10650+ * http://www.helixcommunity.org/content/tck
10651+ *
10652+ * Contributor(s):
10653+ *
10654+ * ***** END LICENSE BLOCK ***** */
10655+
10656+/****************************************************************************
10657+ *
10658+ * Test Client:
10659+ *
10660+ *
10661+ * This is an test client running on Windows, Mac, and Unix without a GUI.
10662+ *
10663+ */
10664+
10665+#ifndef _SPLAY_GLOBALS_H
10666+#define _SPLAY_GLOBALS_H
10667+
10668+#include "dllacces.h"
10669+#include "dllpath.h"
10670+#include "hxengin.h"
10671+#include "hxplayvelocity.h"
10672+#include "hxcore.h"
10673+#include "ihxmedpltfm.h"
10674+#include "excontxt.h"
10675+#include "preflist.h"
10676+
10677+#define HX_COMMAND_BUFFER_SIZE 256
10678+#define HX_MAX_NUM_MULTI_SEEKS 10
10679+struct _stGlobals
10680+{
10681+ _stGlobals()
10682+ : g_pDLLAccess(NULL),
10683+ g_nPlayers(0),
10684+ m_fpHXMediaPlatformOpen(NULL),
10685+ m_fpHXCreateMediaPlatform(NULL),
10686+ m_fpHXMediaPlatformClose(NULL),
10687+ m_fpCreateEngine(NULL),
10688+ m_fpCloseEngine(NULL),
10689+ m_fpSetDLLAccessPath(NULL),
10690+ bEnableAdviceSink(FALSE),
10691+ bEnableVerboseMode(FALSE),
10692+ g_bEnableSlowStart(TRUE),
10693+ g_bOnBeginOccurred(FALSE),
10694+ g_pszUsername( NULL),
10695+ g_pszPassword(NULL),
10696+ g_pszGUIDFile(NULL),
10697+ g_pszGUIDList(NULL),
10698+ g_Error(HXR_OK),
10699+ g_ulNumSecondsPlayed(0),
10700+ pMediaPlatform(NULL),
10701+ g_pIHXKicker(NULL),
10702+ bUseLegacyAPIs(FALSE),
10703+ pEngine(NULL),
10704+ g_pQuickSeek(NULL),
10705+ g_bNullRender(FALSE),
10706+ g_bUserStop(FALSE),
10707+ g_bInitVelocity(FALSE),
10708+ g_bABD(FALSE),
10709+ g_pVelocityCaps(NULL),
10710+ g_ulNumMultiSeeks(0),
10711+ g_ulMultiSeekIndex(0),
10712+ g_bMultiSeek(FALSE),
10713+ g_uThreadIDForKicker(-1)
10714+ {
10715+ memset(g_szCommandBuffer, 0, HX_COMMAND_BUFFER_SIZE);
10716+ memset(g_szPriorCommandBuffer, 0, HX_COMMAND_BUFFER_SIZE);
10717+ memset(g_Players, 0, sizeof(g_Players));
10718+ memset(g_pszURLs, 0, sizeof(g_pszURLs));
10719+ memset(g_pClientContexts, 0, sizeof(g_pClientContexts));
10720+ }
10721+
10722+ #define MAX_NUM_PLAYERS 256
10723+ IHXPlayer* g_Players[MAX_NUM_PLAYERS];
10724+ char *g_pszURLs[MAX_NUM_PLAYERS];
10725+ ExampleClientContext *g_pClientContexts[MAX_NUM_PLAYERS];
10726+ int g_nPlayers;
10727+ DLLAccessPath g_statclnt;
10728+ DLLAccess* g_pDLLAccess;
10729+ CHXPrefList g_prefList;
10730+
10731+ FPHXMEDIAPLATFORMOPEN m_fpHXMediaPlatformOpen;
10732+ FPHXCREATEMEDIAPLATFORM m_fpHXCreateMediaPlatform;
10733+ FPHXMEDIAPLATFORMCLOSE m_fpHXMediaPlatformClose;
10734+
10735+ FPRMCREATEENGINE m_fpCreateEngine;
10736+ FPRMCLOSEENGINE m_fpCloseEngine;
10737+ FPRMSETDLLACCESSPATH m_fpSetDLLAccessPath;
10738+
10739+ HXBOOL bEnableAdviceSink;
10740+ HXBOOL bEnableVerboseMode;
10741+ HXBOOL g_bEnableSlowStart;
10742+ HXBOOL g_bOnBeginOccurred;
10743+ char* g_pszUsername;
10744+ char* g_pszPassword;
10745+ char* g_pszGUIDFile;
10746+ char* g_pszGUIDList;
10747+ HX_RESULT g_Error;
10748+ UINT32 g_ulNumSecondsPlayed;
10749+ IHXMediaPlatform* pMediaPlatform;
10750+ IHXMediaPlatformKicker* g_pIHXKicker;
10751+ UINT32 g_uThreadIDForKicker;
10752+ pthread_t g_pThreadKickmanId;
10753+ HXBOOL bUseLegacyAPIs;
10754+ IHXClientEngine* pEngine;
10755+ IHXQuickSeek* g_pQuickSeek;
10756+ HXBOOL g_bNullRender;
10757+ HXBOOL g_bUserStop;
10758+ HXBOOL g_bInitVelocity;
10759+ HXBOOL g_bABD;
10760+ IHXPlaybackVelocityCaps* g_pVelocityCaps;
10761+ HXBOOL g_bMultiSeek;
10762+ UINT32 g_ulMultiSeekTime[HX_MAX_NUM_MULTI_SEEKS];
10763+ UINT32 g_ulNumMultiSeeks;
10764+ UINT32 g_ulMultiSeekIndex;
10765+ char g_szCommandBuffer[HX_COMMAND_BUFFER_SIZE];
10766+ char g_szPriorCommandBuffer[HX_COMMAND_BUFFER_SIZE];
10767+};
10768+
10769+
10770+#endif // _SPLAY_GLOBALS_H
10771Index: helix-libs/clientapps/clutter/iids.cpp
10772===================================================================
10773--- /dev/null 1970-01-01 00:00:00.000000000 +0000
10774+++ helix-libs/clientapps/clutter/iids.cpp 2008-10-13 06:05:49.000000000 -0700
10775@@ -0,0 +1,50 @@
10776+/* ***** BEGIN LICENSE BLOCK *****
10777+ * Version: RCSL 1.0/RPSL 1.0
10778+ *
10779+ * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
10780+ *
10781+ * The contents of this file, and the files included with this file, are
10782+ * subject to the current version of the RealNetworks Public Source License
10783+ * Version 1.0 (the "RPSL") available at
10784+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
10785+ * the file under the RealNetworks Community Source License Version 1.0
10786+ * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
10787+ * in which case the RCSL will apply. You may also obtain the license terms
10788+ * directly from RealNetworks. You may not use this file except in
10789+ * compliance with the RPSL or, if you have a valid RCSL with RealNetworks
10790+ * applicable to this file, the RCSL. Please see the applicable RPSL or
10791+ * RCSL for the rights, obligations and limitations governing use of the
10792+ * contents of the file.
10793+ *
10794+ * This file is part of the Helix DNA Technology. RealNetworks is the
10795+ * developer of the Original Code and owns the copyrights in the portions
10796+ * it created.
10797+ *
10798+ * This file, and the files included with this file, is distributed and made
10799+ * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
10800+ * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
10801+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
10802+ * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
10803+ *
10804+ * Technology Compatibility Kit Test Suite(s) Location:
10805+ * http://www.helixcommunity.org/content/tck
10806+ *
10807+ * Contributor(s):
10808+ *
10809+ * ***** END LICENSE BLOCK ***** */
10810+
10811+// define all guids here once...
10812+#define INITGUID
10813+#define NCIHACK
10814+#include "hxtypes.h"
10815+#include "hxcom.h"
10816+#include "hxiids.h"
10817+#include "hxpiids.h"
10818+#if defined _WINDOWS
10819+#if defined (HELIX_FEATURE_DIRECT_SOUND)
10820+#include "dsound.h"
10821+#endif /* HELIX_FEATURE_DIRECT_SOUND */
10822+#if defined (HELIX_FEATURE_VIDEO) && !defined(_WINCE)
10823+#include "ddraw.h"
10824+#endif /* HELIX_FEATURE_VIDEO */
10825+#endif
10826Index: helix-libs/clientapps/clutter/linux2.pcf
10827===================================================================
10828--- /dev/null 1970-01-01 00:00:00.000000000 +0000
10829+++ helix-libs/clientapps/clutter/linux2.pcf 2008-10-13 06:05:49.000000000 -0700
10830@@ -0,0 +1,42 @@
10831+#
10832+# ***** BEGIN LICENSE BLOCK *****
10833+# Version: RCSL 1.0/RPSL 1.0
10834+#
10835+# Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
10836+#
10837+# The contents of this file, and the files included with this file, are
10838+# subject to the current version of the RealNetworks Public Source License
10839+# Version 1.0 (the "RPSL") available at
10840+# http://www.helixcommunity.org/content/rpsl unless you have licensed
10841+# the file under the RealNetworks Community Source License Version 1.0
10842+# (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
10843+# in which case the RCSL will apply. You may also obtain the license terms
10844+# directly from RealNetworks. You may not use this file except in
10845+# compliance with the RPSL or, if you have a valid RCSL with RealNetworks
10846+# applicable to this file, the RCSL. Please see the applicable RPSL or
10847+# RCSL for the rights, obligations and limitations governing use of the
10848+# contents of the file.
10849+#
10850+# This file is part of the Helix DNA Technology. RealNetworks is the
10851+# developer of the Original Code and owns the copyrights in the portions
10852+# it created.
10853+#
10854+# This file, and the files included with this file, is distributed and made
10855+# available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
10856+# EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
10857+# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
10858+# FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
10859+#
10860+# Technology Compatibility Kit Test Suite(s) Location:
10861+# http://www.helixcommunity.org/content/tck
10862+#
10863+# Contributor(s):
10864+#
10865+# ***** END LICENSE BLOCK *****
10866+#
10867+
10868+project.AddSystemLibraries("dl", "m", "pthread")
10869+
10870+if (project.IsDefined("HELIX_FEATURE_VIDEO") and
10871+ project.IsDefined("USE_XWINDOWS")):
10872+ project.AddSystemLibraries("X11")
10873Index: helix-libs/clientapps/clutter/player.cpp
10874===================================================================
10875--- /dev/null 1970-01-01 00:00:00.000000000 +0000
10876+++ helix-libs/clientapps/clutter/player.cpp 2008-10-13 06:05:49.000000000 -0700
10877@@ -0,0 +1,1057 @@
10878+/* ***** BEGIN LICENSE BLOCK *****
10879+ * Version: RCSL 1.0/RPSL 1.0
10880+ *
10881+ * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
10882+ *
10883+ * The contents of this file, and the files included with this file, are
10884+ * subject to the current version of the RealNetworks Public Source License
10885+ * Version 1.0 (the "RPSL") available at
10886+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
10887+ * the file under the RealNetworks Community Source License Version 1.0
10888+ * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
10889+ * in which case the RCSL will apply. You may also obtain the license terms
10890+ * directly from RealNetworks. You may not use this file except in
10891+ * compliance with the RPSL or, if you have a valid RCSL with RealNetworks
10892+ * applicable to this file, the RCSL. Please see the applicable RPSL or
10893+ * RCSL for the rights, obligations and limitations governing use of the
10894+ * contents of the file.
10895+ *
10896+ * This file is part of the Helix DNA Technology. RealNetworks is the
10897+ * developer of the Original Code and owns the copyrights in the portions
10898+ * it created.
10899+ *
10900+ * This file, and the files included with this file, is distributed and made
10901+ * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
10902+ * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
10903+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
10904+ * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
10905+ *
10906+ * Technology Compatibility Kit Test Suite(s) Location:
10907+ * http://www.helixcommunity.org/content/tck
10908+ *
10909+ * Contributor(s):
10910+ *
10911+ * ***** END LICENSE BLOCK ***** */
10912+
10913+/****************************************************************************
10914+ *
10915+ * Test Client:
10916+ *
10917+ *
10918+ * This is an test client running on Windows, Mac, and Unix without a GUI.
10919+ *
10920+ */
10921+#include "hxtypes.h"
10922+
10923+#include <stdlib.h>
10924+
10925+#include "hlxclib/time.h"
10926+#include "ihxmedpltfm.h"
10927+#include "hxwintyp.h"
10928+#include "hxcom.h"
10929+#include "ihxpckts.h"
10930+#include "hxcomm.h"
10931+#include "hxmon.h"
10932+#include "hxfiles.h"
10933+#include "hxengin.h"
10934+#include "hxcore.h"
10935+#include "hxclsnk.h"
10936+#include "hxgroup.h"
10937+#include "hxerror.h"
10938+#include "hxauth.h"
10939+#include "hxwin.h"
10940+#include "hxprefs.h"
10941+#include "hxtbuf.h"
10942+#include "fivemmap.h"
10943+#include "dllacces.h"
10944+#include "hxausvc.h"
10945+#include "hxstrutl.h"
10946+#include "hxgroup.h"
10947+#include "hxwin.h"
10948+#include "hxtick.h"
10949+#include "hxbuffer.h"
10950+#include "hxplayvelocity.h"
10951+#include "pckunpck.h" // For CreateAndSetBufferCCF()
10952+#include "hxvctrl.h"
10953+#include "hxbsrc.h"
10954+#include "excallback.h"
10955+#include "pthread.h"
10956+
10957+#if defined(HELIX_FEATURE_PRESENTATION_FEATURE_SELECTION)
10958+#include "hxpfs.h"
10959+#endif // HELIX_FEATURE_PRESENTATION_FEATURE_SELECTION.
10960+
10961+#if defined(HELIX_FEATURE_PREFERENCES)
10962+#include "preflist.h"
10963+#endif /* #if defined(HELIX_FEATURE_PREFERENCES) */
10964+#include "exadvsnk.h"
10965+#include "exerror.h"
10966+#include "exsitsup.h"
10967+#include "exaumgr.h"
10968+#if defined(_WIN32)
10969+#include "exabd.h"
10970+#endif
10971+#include "excontxt.h"
10972+#include "print.h"
10973+#if defined(USE_XWINDOWS)
10974+#include <X11/Xlib.h>
10975+#endif
10976+#if defined (_UNIX)
10977+#include <stdio.h>
10978+#include <sys/time.h>
10979+#include <sys/types.h>
10980+#include <unistd.h>
10981+#include <termios.h>
10982+#endif
10983+#if defined(_WINDOWS)
10984+#include <conio.h>
10985+#endif
10986+
10987+#ifdef __TCS__
10988+#include <unistd.h>
10989+#if defined(__cplusplus)
10990+extern "C" {
10991+#endif /* defined(__cplusplus) */
10992+ extern unsigned long tmosTimSleep(unsigned long ticks);
10993+ unsigned long gForcePlayerToStop = 0;
10994+#if defined(__cplusplus)
10995+}
10996+#endif /* defined(__cplusplus) */
10997+#endif
10998+
10999+#if defined (_MACINTOSH) || defined (_MAC_UNIX)
11000+bool gMacPlayerIsDone = false;
11001+#endif
11002+
11003+
11004+#if defined _VXWORKS
11005+#include "sys/times.h"
11006+#include "string.h"
11007+#include "hxtime.h"
11008+#endif
11009+
11010+#if defined(_MACINTOSH)
11011+#ifndef _MAC_MACHO
11012+#include <sioux.h>
11013+#include <console.h>
11014+#endif
11015+#endif
11016+
11017+#include "dllpath.h"
11018+
11019+#ifdef _SYMBIAN
11020+#include <e32svr.h>
11021+#include "platform/symbian/symbian_event_hndlr.h"
11022+#endif
11023+
11024+ENABLE_DLLACCESS_PATHS(g_SPlayAccessPath);
11025+
11026+// typedef for SetDLLAccessPath
11027+
11028+
11029+#include "thrdutil.h"
11030+
11031+#if defined(_AIX)
11032+#include <strings.h>
11033+#endif
11034+
11035+#if defined _DEBUG || defined DEBUG
11036+#include "debug.h"
11037+#endif
11038+
11039+#ifndef MAX_PATH
11040+#define MAX_PATH 256
11041+#endif //!MAX_PATH
11042+
11043+#if defined(HELIX_CONFIG_NOSTATICS)
11044+# include "globals/hxglobals.h"
11045+#endif
11046+
11047+#define MAX_NUM_URLS 10
11048+
11049+#include "globals.h" //for global struct.
11050+
11051+#include "player.h"
11052+
11053+#if defined(_WINDOWS) && defined(_STATICALLY_LINKED)
11054+HINSTANCE g_hInstance = NULL;
11055+#endif
11056+
11057+struct _stGlobals*& GetGlobal()
11058+{
11059+#if defined(HELIX_CONFIG_NOSTATICS)
11060+ static const struct _stGlobals* const _g_pstGlobals = NULL;
11061+ struct _stGlobals*& g_pstGlobals = (struct _stGlobals*&)HXGlobalPtr::Get(&_g_pstGlobals);
11062+#else
11063+ static struct _stGlobals* g_pstGlobals = NULL;
11064+#endif
11065+ if( g_pstGlobals == NULL )
11066+ {
11067+ g_pstGlobals = new struct _stGlobals();
11068+ }
11069+ return g_pstGlobals;
11070+
11071+}
11072+
11073+
11074+// Constants
11075+const int DEFAULT_TIME_DELTA = 2000;
11076+const int DEFAULT_STOP_TIME = -1;
11077+const int SLEEP_TIME = 5;
11078+const int GUID_LEN = 64;
11079+
11080+// Function prototypes
11081+void PrintUsage(const char* pszAppName);
11082+HXBOOL AllPlayersDone(int nNumPlayers, IHXPlayer** ppPlayers);
11083+void StopAllPlayers(int nNumPlayers, IHXPlayer** ppPlayers);
11084+HXBOOL ReadGUIDFile();
11085+char* GetAppName(char* pszArgv0);
11086+
11087+#ifdef __TCS__
11088+#if defined(__cplusplus)
11089+extern "C" {
11090+#endif /* defined(__cplusplus) */
11091+
11092+ extern void _alloc_stats(int verbose);
11093+#if defined(__cplusplus)
11094+}
11095+#endif /* defined(__cplusplus) */
11096+
11097+static IHXPlayer** g_Players;
11098+static int g_nPlayers = 0;
11099+static long evtCount = 0;
11100+static long evtFullCount = 0;
11101+#endif
11102+
11103+
11104+
11105+#if defined(HELIX_FEATURE_PRESENTATION_FEATURE_SELECTION)
11106+HX_RESULT
11107+DumpPFdata(IHXPresentationFeatureManager* pPFMgr,
11108+ const char* pszPFName)
11109+{
11110+ HX_RESULT hxr = HXR_OK;
11111+
11112+ IHXBuffer* pFeatureCurrentSetting = NULL;
11113+ IHXValues* pFeatureOptions = NULL;
11114+
11115+ if (!pPFMgr || !pszPFName)
11116+ {
11117+ hxr = HXR_INVALID_PARAMETER;
11118+ }
11119+ else
11120+ {
11121+ // List all the options for this PF:
11122+ HX_RESULT hxr = pPFMgr->GetPresentationFeature(
11123+ pszPFName,
11124+ pFeatureCurrentSetting,
11125+ pFeatureOptions);
11126+
11127+ if (FAILED(hxr))
11128+ {
11129+ // PF doesn't exist!
11130+ STDOUT("\t%s - No such presentation feature\n\n", pszPFName);
11131+ }
11132+ else
11133+ {
11134+ // Now, go through pFeatureOptions and display
11135+ // them and their "is-selectable"-flag values:
11136+ const char* pszPFOptionName = NULL;
11137+ const char* pszPFCurSetting = pFeatureCurrentSetting?
11138+ (const char*)pFeatureCurrentSetting->GetBuffer() : NULL;
11139+ UINT32 bPFOptionIsSelectableFlag = FALSE;
11140+ IHXBuffer* pPFOptionIsSelectableFlag = NULL;
11141+
11142+ HX_ASSERT(pszPFCurSetting);
11143+ STDOUT("\t%s\t(Current setting == \"%s\")\n", pszPFName, pszPFCurSetting?
11144+ pszPFCurSetting : "<ERROR: THIS PF HAS NO CURRENT SETTING!>");
11145+
11146+ if (!pFeatureOptions) // NULL is OK; that means freeform (open-ended):
11147+ {
11148+ STDOUT("\t\t(%s's options are freeform, i.e., open-ended)\n",
11149+ pszPFName);
11150+ }
11151+ else // List all the options and their flags:
11152+ {
11153+ if (HXR_OK == pFeatureOptions->GetFirstPropertyCString(pszPFOptionName,
11154+ pPFOptionIsSelectableFlag) && *pszPFOptionName)
11155+ {
11156+ do
11157+ {
11158+ const UCHAR* pIsSelFlag = pPFOptionIsSelectableFlag->GetBuffer();
11159+ if (pIsSelFlag && *pIsSelFlag)
11160+ {
11161+ // Anything but '0' (zero) is treated as '1' (is selectable):
11162+ bPFOptionIsSelectableFlag = (HXBOOL)('0' != *pIsSelFlag &&
11163+ '\0' == *(pIsSelFlag+1));
11164+ }
11165+ else
11166+ {
11167+ // Set the error, but we'll go ahead and treat it as '0':
11168+ hxr = HXR_INVALID_PARAMETER;
11169+ bPFOptionIsSelectableFlag = FALSE;
11170+ }
11171+
11172+ STDOUT("\t\t%s\t\tIs selectable: %s\n",
11173+ pszPFOptionName, bPFOptionIsSelectableFlag? "yes":"no");
11174+ // Release it to get the next PF:
11175+ HX_RELEASE(pPFOptionIsSelectableFlag);
11176+ } while (HXR_OK == pFeatureOptions->GetNextPropertyCString(
11177+ pszPFOptionName, pPFOptionIsSelectableFlag));
11178+ }
11179+ }
11180+
11181+ HX_RELEASE(pPFOptionIsSelectableFlag);
11182+ }
11183+ }
11184+
11185+ HX_RELEASE(pFeatureCurrentSetting);
11186+ HX_RELEASE(pFeatureOptions);
11187+
11188+ return hxr;
11189+}
11190+#endif // HELIX_FEATURE_PRESENTATION_FEATURE_SELECTION.
11191+
11192+
11193+char* RemoveWrappingQuotes(char* str)
11194+{
11195+ int len = strlen(str);
11196+ if (len > 0)
11197+ {
11198+ if (str[len-1] == '"') str[--len] = 0;
11199+ if (str[0] == '"') { int i = 0; do { str[i++] = str[i+1]; } while(--len); }
11200+ }
11201+ return str;
11202+}
11203+
11204+void *kickman(void *dummy)
11205+{
11206+ while(1) {
11207+ UINT32 sleepTime = 0;
11208+ IHXMediaPlatformKicker* pKicker = GetGlobal()->g_pIHXKicker;
11209+ if( pKicker )
11210+ {
11211+ pKicker->Kick(GetGlobal()->g_uThreadIDForKicker, &sleepTime);
11212+ }
11213+ usleep(sleepTime);
11214+ }
11215+}
11216+
11217+PLAYER_API int init_main( )
11218+{
11219+#if defined(_WIN32) && !defined(WIN32_PLATFORM_PSPC)
11220+ setvbuf(stdout, NULL, _IONBF, 0);
11221+#endif /* defined(_WIN32) && !defined(WIN32_PLATFORM_PSPC) */
11222+
11223+ FPHXMEDIAPLATFORMOPEN fpHXMediaPlatformOpen = NULL;
11224+ FPHXCREATEMEDIAPLATFORM fpHXCreateMediaPlatform = NULL;
11225+ FPHXMEDIAPLATFORMCLOSE fpHXMediaPlatformClose = NULL;
11226+
11227+ FPRMCREATEENGINE fpCreateEngine = NULL;
11228+ FPRMCLOSEENGINE fpCloseEngine = NULL;
11229+ FPRMSETDLLACCESSPATH fpSetDll = NULL;
11230+
11231+ HX_RESULT theErr = HXR_OK;
11232+ ExampleClientContext** ppExContexts = NULL;
11233+#if defined(HELIX_FEATURE_AUTO_BANDWIDTH_DETECTION) && defined(_WIN32)
11234+ ExampleABD* pABD = NULL;
11235+#endif
11236+ IHXPlayer** ppPlayers = NULL;
11237+ IHXQuickSeek* ppQuickSeek = NULL;
11238+ IHXErrorSink* pErrorSink = NULL;
11239+ IHXErrorSinkControl* pErrorSinkControl = NULL;
11240+ UINT32 ulABDResult = 0;
11241+ UINT32 ulProbPktSize = 0;
11242+ UINT32 ulProbPktNum = 0;
11243+#if defined(HELIX_FEATURE_PLAYBACK_VELOCITY)
11244+ INT32 lVelocity = 100;
11245+ INT32 lKeyFrameMode = 0;
11246+ INT32 lAutoSwitch = 0;
11247+#endif /* #if defined(HELIX_FEATURE_PLAYBACK_VELOCITY) */
11248+ CHXString* pABDServer = NULL;
11249+ char* pszURL[MAX_NUM_URLS];
11250+ char* pszURLOrig[MAX_NUM_URLS];
11251+ UINT32 ulNumURLsFound = 0;
11252+ int nNumPlayers = 1;
11253+ int nNumPlayRepeats = 1;
11254+ int nTimeDelta = DEFAULT_TIME_DELTA;
11255+ int nStopTime = DEFAULT_STOP_TIME;
11256+ bool bStopTime = true;
11257+ int i = 0;
11258+ char* pszGUIDList = NULL;
11259+#ifdef _MACINTOSH
11260+ char dllhome[MAX_PATH] = {'\0'}; /* Flawfinder: ignore */
11261+#elif defined(_SYMBIAN)
11262+ char dllhome[MAX_PATH] = "c:"; /* Flawfinder: ignore */
11263+#else
11264+ char dllhome[MAX_PATH] = {'.','\0'}; /* Flawfinder: ignore */
11265+#endif
11266+ DLLAccess* pDLLAccess = NULL;
11267+ char staticLibPath[MAX_PATH] = {0}; /* Flawfinder: ignore */
11268+#ifdef _WINDOWS
11269+ HINSTANCE hDll = NULL;
11270+#endif
11271+ bool bStopping = false;
11272+ int nPlay = 0;
11273+
11274+ // NULL out the URL arrays
11275+ memset(pszURL, 0, MAX_NUM_URLS * sizeof(char*));
11276+ memset(pszURLOrig, 0, MAX_NUM_URLS * sizeof(char*));
11277+
11278+
11279+ //See if the user has set their HELIX_LIBS env var. This is overridden by the
11280+ //-l option.
11281+ const char* pszHelixLibs = getenv("HELIX_LIBS");
11282+ if( pszHelixLibs )
11283+ SafeStrCpy( dllhome, pszHelixLibs, MAX_PATH);
11284+
11285+
11286+
11287+ GetGlobal()->bEnableAdviceSink = TRUE;
11288+ GetGlobal()->g_prefList.Add("UseOverlay", "0");
11289+
11290+ SafeSprintf(staticLibPath, MAX_PATH, "%s/%s", dllhome, "hxmedpltfm.so");
11291+
11292+ if (dllhome)
11293+ {
11294+ GetDLLAccessPath()->SetPath(DLLTYPE_COMMON, dllhome);
11295+ GetDLLAccessPath()->SetPath(DLLTYPE_PLUGIN, dllhome);
11296+ GetDLLAccessPath()->SetPath(DLLTYPE_CODEC, dllhome);
11297+ }
11298+
11299+ // initialize the globals
11300+ GetGlobal()->m_fpCreateEngine = NULL;
11301+ GetGlobal()->m_fpCloseEngine = NULL;
11302+ GetGlobal()->g_nPlayers = 0;
11303+
11304+ // prepare/load the HXCore module
11305+ pDLLAccess = new DLLAccess();
11306+
11307+ STDOUT("Simpleplayer is looking for the client core at %s\n", staticLibPath );
11308+
11309+ if (DLLAccess::DLL_OK != pDLLAccess->open(staticLibPath))
11310+ {
11311+ const char* pErrorString = NULL;
11312+ pErrorString = pDLLAccess->getErrorString();
11313+ STDERR("splayer: %s\n\n", pErrorString);
11314+#ifndef _STATICALLY_LINKED
11315+#ifndef _MACINTOSH
11316+ //Make sure the user has told us where to find the DLLs at. Either
11317+ //with the -l option or with the HELIX_LIBS env var.
11318+ STDERR("You must tell the player where to find the client core and\n");
11319+ STDERR("all of its supporting DLLs and codecs. Please use the -l\n");
11320+ STDERR("option or set your HELIX_LIBS env variable to point the player.\n");
11321+ STDERR("to where you have all of the DLLs installed.\n\n" );
11322+ //PrintUsage(argv[0]);
11323+#endif
11324+#endif
11325+ goto cleanup;
11326+ }
11327+
11328+ GetGlobal()->m_fpHXMediaPlatformOpen = (FPHXMEDIAPLATFORMOPEN) pDLLAccess->getSymbol("HXMediaPlatformOpen");
11329+ GetGlobal()->m_fpHXCreateMediaPlatform = (FPHXCREATEMEDIAPLATFORM) pDLLAccess->getSymbol("HXCreateMediaPlatform");
11330+ GetGlobal()->m_fpHXMediaPlatformClose = (FPHXMEDIAPLATFORMCLOSE) pDLLAccess->getSymbol("HXMediaPlatformClose");
11331+
11332+ GetGlobal()->m_fpCreateEngine = (FPRMCREATEENGINE) pDLLAccess->getSymbol("CreateEngine");
11333+ GetGlobal()->m_fpCloseEngine = (FPRMCLOSEENGINE) pDLLAccess->getSymbol("CloseEngine");
11334+ GetGlobal()->m_fpSetDLLAccessPath = (FPRMSETDLLACCESSPATH) pDLLAccess->getSymbol("SetDLLAccessPath");
11335+
11336+ if (GetGlobal()->m_fpHXMediaPlatformOpen == NULL ||
11337+ GetGlobal()->m_fpHXCreateMediaPlatform == NULL ||
11338+ GetGlobal()->m_fpHXMediaPlatformClose == NULL ||
11339+ GetGlobal()->m_fpCreateEngine == NULL ||
11340+ GetGlobal()->m_fpCloseEngine == NULL ||
11341+ GetGlobal()->m_fpSetDLLAccessPath == NULL )
11342+ {
11343+ theErr = HXR_FAILED;
11344+ goto cleanup;
11345+ }
11346+
11347+#if defined(USE_XWINDOWS) && defined(HELIX_FEATURE_VIDEO)
11348+ XInitThreads();
11349+#endif
11350+
11351+ {
11352+ fpHXMediaPlatformOpen = GetGlobal()->m_fpHXMediaPlatformOpen;
11353+ fpHXCreateMediaPlatform = GetGlobal()->m_fpHXCreateMediaPlatform;
11354+ fpHXMediaPlatformClose = GetGlobal()->m_fpHXMediaPlatformClose;
11355+
11356+ if (HXR_OK != fpHXMediaPlatformOpen())
11357+ {
11358+ theErr = HXR_FAILED;
11359+ goto cleanup;
11360+ }
11361+
11362+ if (HXR_OK != fpHXCreateMediaPlatform((IHXMediaPlatform**)&GetGlobal()->pMediaPlatform))
11363+ {
11364+ theErr = HXR_FAILED;
11365+ goto cleanup;
11366+ }
11367+
11368+ IHXMediaPlatform* pMediaPlatform = GetGlobal()->pMediaPlatform;
11369+
11370+
11371+ if (HXR_OK != pMediaPlatform->AddPluginPath("HelixSimplePlayer", dllhome))
11372+ {
11373+ theErr = HXR_FAILED;
11374+ goto cleanup;
11375+ }
11376+
11377+ if (HXR_OK != pMediaPlatform->Init(NULL))
11378+ {
11379+ theErr = HXR_FAILED;
11380+ goto cleanup;
11381+ }
11382+
11383+ IHXCommonClassFactory* pCCF = NULL;
11384+ if (HXR_OK != pMediaPlatform->QueryInterface(IID_IHXCommonClassFactory,
11385+ (void**)&pCCF))
11386+ {
11387+ theErr = HXR_FAILED;
11388+ goto cleanup;
11389+ }
11390+
11391+ if (HXR_OK != pCCF->CreateInstance(CLSID_IHXClientEngine, (void**)&GetGlobal()->pEngine))
11392+ {
11393+ HX_RELEASE(pCCF);
11394+ theErr = HXR_FAILED;
11395+ goto cleanup;
11396+ }
11397+
11398+ HX_RELEASE(pCCF);
11399+
11400+ IHXMediaPlatformKicker* pKicker = NULL;
11401+ pMediaPlatform->QueryInterface(IID_IHXMediaPlatformKicker, (void**)&pKicker);
11402+ HX_ASSERT(pKicker);
11403+ GetGlobal()->g_pIHXKicker = pKicker;
11404+ GetGlobal()->g_uThreadIDForKicker = HXGetCurrentThreadID();
11405+
11406+ pthread_t thread_id;
11407+ pthread_create(&thread_id, NULL, kickman, NULL);
11408+ GetGlobal()->g_pThreadKickmanId = thread_id;
11409+ }
11410+
11411+
11412+
11413+ {
11414+
11415+
11416+#if defined(_WIN32) && !defined(WIN32_PLATFORM_PSPC)
11417+ SetConsoleCtrlHandler((PHANDLER_ROUTINE)HandlerRoutine,
11418+ TRUE);
11419+#endif
11420+
11421+ }
11422+
11423+ return HXR_OK;
11424+
11425+ cleanup:
11426+ deinit_main();
11427+ return HXR_FAIL;
11428+}
11429+
11430+/* Get the least index to available entry in Getglobal()->gPlayers */
11431+static int get_index()
11432+{
11433+ int i;
11434+ /* an simple implementation */
11435+ for (i = 0; i < MAX_NUM_PLAYERS; i++)
11436+ {
11437+ if (GetGlobal()->g_Players[i] == NULL)
11438+ return i;
11439+ }
11440+
11441+ return -1;
11442+}
11443+
11444+PLAYER_API unsigned int get_curr_playtime(void *pPlayerHandle)
11445+{
11446+ unsigned int time = 0;
11447+ IHXPlayer *pPlayer = (IHXPlayer *)pPlayerHandle;
11448+ if (pPlayer)
11449+ time = pPlayer->GetCurrentPlayTime();
11450+ return time;
11451+}
11452+
11453+PLAYER_API int get_player(void **ppPlayerHandle, on_buffering_cb_t on_buffering_cb, on_pos_length_cb_t on_pos_length_cb, on_state_change_cb_t on_state_change_cb, on_new_frame_cb_t on_new_frame_cb, void *context)
11454+{
11455+ int index = get_index();
11456+ IHXPlayer **ppPlayer = (IHXPlayer **)ppPlayerHandle;
11457+ ExampleClientContext* pExContext = NULL;
11458+ pExContext = new ExampleClientContext(index);
11459+ if (!pExContext)
11460+ {
11461+ return HXR_UNEXPECTED;
11462+ }
11463+ pExContext->AddRef();
11464+
11465+ ppPlayer[0] = NULL;
11466+ IHXClientEngine* pEngine = GetGlobal()->pEngine;
11467+ if (HXR_OK != pEngine->CreatePlayer(*ppPlayer))
11468+ {
11469+ HX_RELEASE(pExContext);
11470+ return HXR_FAILED;
11471+ }
11472+#if 1
11473+ char* pszGUIDList = NULL;
11474+ //initialize the example context
11475+ pszGUIDList = GetGlobal()->g_pszGUIDList;
11476+ {
11477+ char pszGUID[GUID_LEN + 1]; /* Flawfinder: ignore */ // add 1 for terminator
11478+ char* token = NULL;
11479+ IHXPreferences* pPreferences = NULL;
11480+
11481+ pszGUID[0] = '\0';
11482+
11483+ if (pszGUIDList)
11484+ {
11485+ // Get next GUID from the GUID list
11486+ {
11487+ token = strtok(pszGUIDList, "\n\0");
11488+ }
11489+ if (token)
11490+ {
11491+ strncpy(pszGUID, token, GUID_LEN); /* Flawfinder: ignore */
11492+ pszGUID[GUID_LEN] = '\0';
11493+ }
11494+ }
11495+
11496+ ppPlayer[0]->QueryInterface(IID_IHXPreferences,
11497+ (void**) &pPreferences);
11498+
11499+ pExContext->Init(ppPlayer[0], pPreferences, pszGUID, on_buffering_cb, on_pos_length_cb, on_state_change_cb, on_new_frame_cb, context);
11500+
11501+ ppPlayer[0]->SetClientContext(pExContext);
11502+
11503+ HX_RELEASE(pPreferences);
11504+
11505+ IHXErrorSinkControl* pErrorSinkControl = NULL;
11506+ ppPlayer[0]->QueryInterface(IID_IHXErrorSinkControl,
11507+ (void**) &pErrorSinkControl);
11508+
11509+ if (pErrorSinkControl)
11510+ {
11511+ IHXErrorSink* pErrorSink = NULL;
11512+ pExContext->QueryInterface(IID_IHXErrorSink,
11513+ (void**) &pErrorSink);
11514+ if (pErrorSink)
11515+ {
11516+ pErrorSinkControl->AddErrorSink(pErrorSink, HXLOG_EMERG, HXLOG_INFO);
11517+ }
11518+ HX_RELEASE(pErrorSink);
11519+ }
11520+ HX_RELEASE(pErrorSinkControl);
11521+ GetGlobal()->g_prefList.SetPreferences(ppPlayer[0]);
11522+
11523+ }
11524+#endif
11525+ HX_ASSERT(GetGlobal()->g_nPlayers < MAX_NUM_PLAYERS);
11526+ GetGlobal()->g_Players[index] = ppPlayer[0];
11527+ GetGlobal()->g_pClientContexts[index] = pExContext;
11528+ GetGlobal()->g_nPlayers++;
11529+
11530+ return HXR_OK;
11531+}
11532+
11533+static int get_index_by_player( IHXPlayer *pPlayer)
11534+{
11535+ int i;
11536+ /* an simple implementation */
11537+ for (i = 0; i < MAX_NUM_PLAYERS; i++)
11538+ {
11539+ if (GetGlobal()->g_Players[i] && GetGlobal()->g_Players[i] == pPlayer)
11540+ return i;
11541+ }
11542+
11543+ return -1;
11544+}
11545+
11546+PLAYER_API int player_openurl( void *pPlayerHandle, char *pszRawURL)
11547+{
11548+ HX_RESULT ret;
11549+ IHXPlayer *pPlayer = (IHXPlayer *)pPlayerHandle;
11550+ int index = get_index_by_player(pPlayer);
11551+ if (index < 0)
11552+ return HXR_FAIL;
11553+
11554+ char *pszURLOrig = RemoveWrappingQuotes(pszRawURL);
11555+
11556+ //if no "://" was found lets add file:// by default so that you
11557+ //can refer to local content as just ./splay ~/Content/startrek.rm,
11558+ //for example, and not ./splay file:///home/gregory/Content/startrek.rm
11559+ char* pszAddOn = NULL;
11560+ if( strstr( pszURLOrig, "://") )
11561+ pszAddOn = (char *)"";
11562+ else
11563+ pszAddOn = (char *)"file://";
11564+
11565+ char *pszURL = new char[strlen(pszURLOrig)+strlen(pszAddOn)+1];
11566+ sprintf( pszURL, "%s%s", pszAddOn, pszURLOrig ); /* Flawfinder: ignore */
11567+ // Increment the number of URLs we have found
11568+ STDERR("opening %s on player\n", pszURL);
11569+
11570+ GetGlobal()->g_pszURLs[index] = pszURL;
11571+ ret = pPlayer->OpenURL(pszURL);
11572+
11573+ UINT32 sleepTime = 0;
11574+
11575+ IHXMediaPlatformKicker* pKicker = GetGlobal()->g_pIHXKicker;
11576+ if( pKicker )
11577+ {
11578+ pKicker->Kick(HXGetCurrentThreadID(), &sleepTime);
11579+ }
11580+
11581+ return ret;
11582+}
11583+
11584+PLAYER_API int put_player( void *pPlayerHandle)
11585+{
11586+ IHXPlayer *pPlayer = (IHXPlayer *)pPlayerHandle;
11587+ int index;
11588+ index = get_index_by_player(pPlayer);
11589+ if (index < 0)
11590+ return HXR_FAIL;
11591+
11592+ ExampleClientContext *pClientContext = GetGlobal()->g_pClientContexts[index];
11593+ if (pClientContext) {
11594+ pClientContext->Release();
11595+ pClientContext = NULL;
11596+ }
11597+
11598+ GetGlobal()->g_pClientContexts[index] = NULL;
11599+ if (pPlayer) {
11600+ if (GetGlobal()->pEngine) {
11601+ GetGlobal()->pEngine->ClosePlayer(pPlayer);
11602+ }
11603+ pPlayer->Release();
11604+ pPlayer = NULL;
11605+ }
11606+ GetGlobal()->g_Players[index] = NULL;
11607+ GetGlobal()->g_nPlayers--;
11608+ delete [] GetGlobal()->g_pszURLs[index];
11609+ GetGlobal()->g_pszURLs[index] = NULL;
11610+
11611+ return HXR_OK;
11612+}
11613+
11614+PLAYER_API int player_geturl( void *pPlayerHandle, char **pszURL)
11615+{
11616+ IHXPlayer *pPlayer = (IHXPlayer *)pPlayerHandle;
11617+ int index = get_index_by_player(pPlayer);
11618+ if (index >= 0) {
11619+ *pszURL = GetGlobal()->g_pszURLs[index];
11620+ return HXR_OK;
11621+ }
11622+
11623+ return HXR_FAIL;
11624+}
11625+
11626+PLAYER_API int player_begin( void *pPlayerHandle )
11627+{
11628+ IHXPlayer *pPlayer = (IHXPlayer *)pPlayerHandle;
11629+ UINT32 sleepTime = 0;
11630+ pPlayer->Begin();
11631+
11632+#if 0
11633+ IHXMediaPlatformKicker* pKicker = GetGlobal()->g_pIHXKicker;
11634+ if( pKicker )
11635+ {
11636+ pKicker->Kick(HXGetCurrentThreadID(), &sleepTime);
11637+ }
11638+#endif
11639+ return HXR_OK;
11640+}
11641+
11642+PLAYER_API int player_pause( void *pPlayerHandle )
11643+{
11644+ IHXPlayer *pPlayer = (IHXPlayer *)pPlayerHandle;
11645+ UINT32 sleepTime = 0;
11646+ pPlayer->Pause();
11647+
11648+#if 0
11649+ IHXMediaPlatformKicker* pKicker = GetGlobal()->g_pIHXKicker;
11650+ if( pKicker )
11651+ {
11652+ pKicker->Kick(HXGetCurrentThreadID(), &sleepTime);
11653+ }
11654+#endif
11655+ return HXR_OK;
11656+}
11657+
11658+PLAYER_API int player_stop( void *pPlayerHandle )
11659+{
11660+ IHXPlayer *pPlayer = (IHXPlayer *)pPlayerHandle;
11661+ pPlayer->Stop();
11662+ return HXR_OK;
11663+}
11664+
11665+#if 0
11666+int main(int argc, char *argv[])
11667+{
11668+ IHXPlayer *pPlayer;
11669+ init_main();
11670+ while(1) {
11671+ get_player(&pPlayer);
11672+ player_openurl(pPlayer, argv[1]);
11673+ player_begin(pPlayer);
11674+ // sleep(2);
11675+ player_stop(pPlayer);
11676+ put_player(pPlayer);
11677+ }
11678+ deinit_main();
11679+ return 0;
11680+}
11681+#endif
11682+
11683+PLAYER_API int player_seek(void *pPlayerHandle, int pos)
11684+{
11685+ IHXPlayer *pPlayer = (IHXPlayer *)pPlayerHandle;
11686+ if (pPlayer == NULL)
11687+ return HXR_FAIL;
11688+
11689+ return pPlayer->Seek(pos);
11690+}
11691+PLAYER_API int player_getvolume(void *pPlayerHandle)
11692+{
11693+ IHXPlayer *pPlayer = (IHXPlayer *)pPlayerHandle;
11694+ if (pPlayer == NULL)
11695+ return HXR_FAIL;
11696+
11697+ int volume = 0;
11698+
11699+ IHXAudioPlayer* pAudioPlayer = NULL;
11700+ pPlayer->QueryInterface(IID_IHXAudioPlayer, (void**) &pAudioPlayer);
11701+ if (pAudioPlayer)
11702+ {
11703+ // Get the IHXVolume
11704+ IHXVolume* pVolume = pAudioPlayer->GetAudioVolume();
11705+ if (pVolume)
11706+ {
11707+ volume = pVolume->GetVolume();
11708+ }
11709+ HX_RELEASE(pVolume);
11710+ }
11711+ HX_RELEASE(pAudioPlayer);
11712+
11713+ return volume;
11714+}
11715+
11716+
11717+PLAYER_API int player_setvolume(void *pPlayerHandle, unsigned short volume)
11718+{
11719+ IHXPlayer *pPlayer = (IHXPlayer *)pPlayerHandle;
11720+ if (pPlayer == NULL)
11721+ return HXR_FAIL;
11722+
11723+ IHXAudioPlayer* pAudioPlayer = NULL;
11724+ pPlayer->QueryInterface(IID_IHXAudioPlayer, (void**) &pAudioPlayer);
11725+ if (pAudioPlayer)
11726+ {
11727+ // Get the IHXVolume
11728+ IHXVolume* pVolume = pAudioPlayer->GetAudioVolume();
11729+ if (pVolume)
11730+ {
11731+ pVolume->SetVolume(volume);
11732+ }
11733+ HX_RELEASE(pVolume);
11734+ }
11735+ HX_RELEASE(pAudioPlayer);
11736+}
11737+
11738+PLAYER_API int deinit_main()
11739+{
11740+
11741+ pthread_cancel(GetGlobal()->g_pThreadKickmanId);
11742+ int ret ;
11743+ ret = pthread_join(GetGlobal()->g_pThreadKickmanId, NULL);
11744+ if (ret < 0) {
11745+ perror("pthread_join error\n");
11746+ }
11747+#if defined(HELIX_FEATURE_PLAYBACK_VELOCITY)
11748+ if (GetGlobal()->g_pVelocityCaps)
11749+ {
11750+ IHXPlaybackVelocityCaps* pCaps = GetGlobal()->g_pVelocityCaps;
11751+ pCaps->Release();
11752+ GetGlobal()->g_pVelocityCaps = NULL;
11753+ }
11754+#endif /* #if defined(HELIX_FEATURE_PLAYBACK_VELOCITY) */
11755+
11756+#ifdef __TCS__
11757+ g_nPlayers = 0;
11758+#endif
11759+
11760+
11761+ {
11762+ IHXClientEngine* pEngine = GetGlobal()->pEngine;
11763+
11764+ if (pEngine)
11765+ {
11766+ IHXClientEngine2* pEngine2 = NULL;
11767+ if (HXR_OK == pEngine->QueryInterface(IID_IHXClientEngine2,
11768+ (void**)&pEngine2))
11769+ {
11770+ pEngine2->Close();
11771+ }
11772+ HX_RELEASE(pEngine2);
11773+ }
11774+ HX_RELEASE(GetGlobal()->pEngine);
11775+ HX_RELEASE(GetGlobal()->g_pIHXKicker);
11776+
11777+ if (GetGlobal()->pMediaPlatform)
11778+ {
11779+ // Reset() not only close the platform but also remove all
11780+ // persistent information(i.e. preferences) maintained by the
11781+ // platform
11782+ // GetGlobal()->pMediaPlatform->Reset(NULL);
11783+ GetGlobal()->pMediaPlatform->Close();
11784+ HX_RELEASE(GetGlobal()->pMediaPlatform);
11785+ }
11786+
11787+ if (GetGlobal()->m_fpHXMediaPlatformClose)
11788+ {
11789+ GetGlobal()->m_fpHXMediaPlatformClose();
11790+ }
11791+ }
11792+
11793+
11794+ if (GetGlobal()->bEnableVerboseMode)
11795+ {
11796+ STDOUT("\nDone.\n");
11797+ }
11798+
11799+ if (GetGlobal()->g_pszUsername)
11800+ {
11801+ delete [] GetGlobal()->g_pszUsername;
11802+ GetGlobal()->g_pszUsername = NULL;
11803+ }
11804+ if (GetGlobal()->g_pszPassword)
11805+ {
11806+ delete [] GetGlobal()->g_pszPassword;
11807+ GetGlobal()->g_pszPassword = NULL;
11808+ }
11809+ if (GetGlobal()->g_pszGUIDFile)
11810+ {
11811+ delete [] GetGlobal()->g_pszGUIDFile;
11812+ GetGlobal()->g_pszGUIDFile = NULL;
11813+ }
11814+ if (GetGlobal()->g_pszGUIDList)
11815+ {
11816+ delete [] GetGlobal()->g_pszGUIDList;
11817+ GetGlobal()->g_pszGUIDList = NULL;
11818+ }
11819+ // If an error occurred during playback, return that
11820+
11821+ if (GetGlobal()->g_Error != HXR_OK)
11822+ {
11823+ return GetGlobal()->g_Error;
11824+ }
11825+ // or HXR_OK (if there was more than one player)
11826+ else
11827+ {
11828+ return HXR_OK;
11829+ }
11830+}
11831+char* GetAppName(char* pszArgv0)
11832+{
11833+ char* pszAppName;
11834+
11835+ pszAppName = strrchr(pszArgv0, '\\');
11836+
11837+ if (NULL == pszAppName)
11838+ {
11839+ return pszArgv0;
11840+ }
11841+ else
11842+ {
11843+ return pszAppName + 1;
11844+ }
11845+}
11846+
11847+void PrintUsage(const char* pszAppName)
11848+{
11849+}
11850+
11851+
11852+
11853+HXBOOL ReadGUIDFile()
11854+{
11855+ HXBOOL bSuccess = FALSE;
11856+ FILE* pFile = NULL;
11857+ int nNumRead = 0;
11858+ int readSize = 10000;
11859+ char* pszBuffer = new char[readSize];
11860+
11861+ if (GetGlobal()->g_pszGUIDFile)
11862+ {
11863+ if((pFile = fopen(GetGlobal()->g_pszGUIDFile, "r")) != NULL)
11864+ {
11865+ // Read in the entire file
11866+ nNumRead = fread(pszBuffer, sizeof(char), readSize, pFile);
11867+ pszBuffer[nNumRead] = '\0';
11868+
11869+ // Store it for later parsing
11870+ GetGlobal()->g_pszGUIDList = new char[nNumRead + 1];
11871+ strcpy(GetGlobal()->g_pszGUIDList, pszBuffer); /* Flawfinder: ignore */
11872+
11873+ fclose(pFile);
11874+ pFile = NULL;
11875+
11876+ if (nNumRead > 0)
11877+ {
11878+ bSuccess = TRUE;
11879+ }
11880+ }
11881+ }
11882+
11883+ delete [] pszBuffer;
11884+
11885+ return bSuccess;
11886+}
11887+
11888+static int are_all_src_seekable(IHXPlayer *pPlayer)
11889+{
11890+ UINT16 nSrcCnt;
11891+ nSrcCnt = pPlayer->GetSourceCount();
11892+ HXSource *pSource = NULL; /* This is brute-force */
11893+ for (UINT16 i = 0; i < nSrcCnt; i++)
11894+ {
11895+ if (pPlayer->GetSource(i, (IUnknown *&)pSource) == HXR_OK)
11896+ {
11897+ if (!pSource->IsSeekable())
11898+ return FALSE;
11899+
11900+
11901+ }
11902+ }
11903+
11904+}
11905+
11906+PLAYER_API int player_canseek(void *pPlayerHandle)
11907+{
11908+ if (!pPlayerHandle)
11909+ return FALSE;
11910+
11911+ IHXPlayer *pPlayer = (IHXPlayer *)pPlayerHandle;
11912+ ExampleClientContext* pExContext=NULL;
11913+ if (pPlayer->GetClientContext((IUnknown*&)pExContext) != HXR_OK)
11914+ return FALSE;
11915+
11916+ if (!pExContext)
11917+ return FALSE;
11918+
11919+ EHXClientState State = pExContext->GetState();
11920+
11921+ int all_src_seekable = are_all_src_seekable(pPlayer);
11922+
11923+ HX_RELEASE(pExContext);
11924+
11925+ if (State < HX_CLIENT_STATE_CONNECTED)
11926+ return TRUE;
11927+
11928+ if (all_src_seekable && (!pPlayer->IsLive() || State == HX_CLIENT_STATE_PAUSED))
11929+ return TRUE;
11930+
11931+ return FALSE;
11932+}
11933+
11934+
11935Index: helix-libs/clientapps/clutter/player.h
11936===================================================================
11937--- /dev/null 1970-01-01 00:00:00.000000000 +0000
11938+++ helix-libs/clientapps/clutter/player.h 2008-10-13 06:54:45.000000000 -0700
11939@@ -0,0 +1,60 @@
11940+#ifndef _PLAYER_H_
11941+#define _PLAYER_H_
11942+
11943+#ifdef __cplusplus
11944+#define PLAYER_API extern "C"
11945+#else
11946+#define PLAYER_API
11947+#endif
11948+
11949+/* Duplicate of EHXClientState */
11950+typedef enum _EPlayerStateState
11951+{
11952+ PLAYER_STATE_READY = 0, // uninitialized
11953+ PLAYER_STATE_CONNECTING, // attempting to connect to sources
11954+ PLAYER_STATE_CONNECTED, // connected to sources (realized)
11955+ PLAYER_STATE_OPENING, // opening sources
11956+ PLAYER_STATE_OPENED, // opened sources
11957+ PLAYER_STATE_PREFETCHING,// obtaining resources, buffering, etc.
11958+ PLAYER_STATE_PREFETCHED, // ready for playback at time zero
11959+ PLAYER_STATE_PLAYING, // currently playing
11960+ PLAYER_STATE_PAUSED, // paused
11961+ PLAYER_STATE_SEEKING // seeking
11962+} EHXPlayerState;
11963+
11964+typedef struct {
11965+ int left;
11966+ int top;
11967+ int right;
11968+ int bottom;
11969+} PlayerRect;
11970+
11971+typedef struct {
11972+ PlayerRect Rect;
11973+ unsigned int cx;
11974+ unsigned int cy;
11975+} PlayerImgInfo;
11976+
11977+typedef void (*on_pos_length_cb_t)(unsigned int, unsigned int, void *);
11978+typedef void (*on_buffering_cb_t)(unsigned int, unsigned short, void *);
11979+typedef void (*on_state_change_cb_t)(unsigned short, unsigned short, void *);
11980+typedef void (*on_new_frame_cb_t)(unsigned char *p, unsigned int size, PlayerImgInfo *rect, void *context);
11981+
11982+PLAYER_API int init_main();
11983+PLAYER_API int deinit_main();
11984+PLAYER_API int get_player(void **ppPlayerHandle, on_buffering_cb_t on_buffering_cb, on_pos_length_cb_t on_pos_length_cb, on_state_change_cb_t on_state_change_cb, on_new_frame_cb_t on_new_frame_cb, void *context);
11985+PLAYER_API int player_openurl( void *pPlayerHandle, char *pszRawURL);
11986+PLAYER_API int put_player( void *pPlayerHandle);
11987+PLAYER_API int player_geturl( void *pPlayerHandle, char **pszURL);
11988+PLAYER_API int player_begin( void *pPlayerHandle );
11989+PLAYER_API int player_stop( void *pPlayerHandle );
11990+PLAYER_API int player_pause( void *pPlayerHandle );
11991+PLAYER_API unsigned int get_curr_playtime(void *pPlayerHandle);
11992+PLAYER_API int player_seek(void *pPlayerHandle, int pos);
11993+PLAYER_API int player_getvolume(void *pPlayerHandle);
11994+PLAYER_API int player_setvolume(void *pPlayerHandle, unsigned short volumn);
11995+PLAYER_API int player_canseek(void *pPlayerHandle);
11996+
11997+
11998+#endif
11999+
12000Index: helix-libs/clientapps/clutter/preflist.cpp
12001===================================================================
12002--- /dev/null 1970-01-01 00:00:00.000000000 +0000
12003+++ helix-libs/clientapps/clutter/preflist.cpp 2008-10-13 06:05:49.000000000 -0700
12004@@ -0,0 +1,142 @@
12005+/* ***** BEGIN LICENSE BLOCK *****
12006+ * Source last modified: $Id: preflist.cpp,v 1.2 2007/07/06 20:32:36 jfinnecy Exp $
12007+ *
12008+ * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
12009+ *
12010+ * The contents of this file, and the files included with this file,
12011+ * are subject to the current version of the RealNetworks Public
12012+ * Source License (the "RPSL") available at
12013+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
12014+ * the file under the current version of the RealNetworks Community
12015+ * Source License (the "RCSL") available at
12016+ * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
12017+ * will apply. You may also obtain the license terms directly from
12018+ * RealNetworks. You may not use this file except in compliance with
12019+ * the RPSL or, if you have a valid RCSL with RealNetworks applicable
12020+ * to this file, the RCSL. Please see the applicable RPSL or RCSL for
12021+ * the rights, obligations and limitations governing use of the
12022+ * contents of the file.
12023+ *
12024+ * Alternatively, the contents of this file may be used under the
12025+ * terms of the GNU General Public License Version 2 (the
12026+ * "GPL") in which case the provisions of the GPL are applicable
12027+ * instead of those above. If you wish to allow use of your version of
12028+ * this file only under the terms of the GPL, and not to allow others
12029+ * to use your version of this file under the terms of either the RPSL
12030+ * or RCSL, indicate your decision by deleting the provisions above
12031+ * and replace them with the notice and other provisions required by
12032+ * the GPL. If you do not delete the provisions above, a recipient may
12033+ * use your version of this file under the terms of any one of the
12034+ * RPSL, the RCSL or the GPL.
12035+ *
12036+ * This file is part of the Helix DNA Technology. RealNetworks is the
12037+ * developer of the Original Code and owns the copyrights in the
12038+ * portions it created.
12039+ *
12040+ * This file, and the files included with this file, is distributed
12041+ * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
12042+ * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
12043+ * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
12044+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
12045+ * ENJOYMENT OR NON-INFRINGEMENT.
12046+ *
12047+ * Technology Compatibility Kit Test Suite(s) Location:
12048+ * http://www.helixcommunity.org/content/tck
12049+ *
12050+ * Contributor(s):
12051+ *
12052+ * ***** END LICENSE BLOCK ***** */
12053+#include "preflist.h"
12054+
12055+#include "hxstring.h"
12056+#include "hxccf.h"
12057+#include "hxprefs.h"
12058+#include "ihxpckts.h"
12059+
12060+class CHXPrefInfo
12061+{
12062+public:
12063+ CHXPrefInfo(const char* pKey, const char* pValue);
12064+ ~CHXPrefInfo();
12065+
12066+ const char* Key() const { return m_key;}
12067+ const char* Value() const { return m_value;}
12068+
12069+private:
12070+ CHXString m_key;
12071+ CHXString m_value;
12072+};
12073+
12074+CHXPrefInfo::CHXPrefInfo(const char* pKey, const char* pValue) :
12075+ m_key(pKey),
12076+ m_value(pValue)
12077+{}
12078+
12079+CHXPrefInfo::~CHXPrefInfo()
12080+{}
12081+
12082+CHXPrefList::CHXPrefList()
12083+{}
12084+
12085+CHXPrefList::~CHXPrefList()
12086+{
12087+ Clear();
12088+}
12089+
12090+void CHXPrefList::Add(const char* pKey, const char* pValue)
12091+{
12092+ CHXPrefInfo* pInfo = new CHXPrefInfo(pKey, pValue);
12093+
12094+ if (pInfo)
12095+ {
12096+ if (!m_prefInfo.AddTail(pInfo))
12097+ {
12098+ // We failed to insert the preference.
12099+ HX_DELETE(pInfo);
12100+ }
12101+ }
12102+}
12103+
12104+void CHXPrefList::Clear()
12105+{
12106+ while(!m_prefInfo.IsEmpty())
12107+ {
12108+ CHXPrefInfo* pInfo = (CHXPrefInfo*)m_prefInfo.RemoveHead();
12109+ HX_DELETE(pInfo);
12110+ }
12111+}
12112+
12113+void CHXPrefList::SetPreferences(IUnknown* pContext)
12114+{
12115+ IHXPreferences* pPrefs = NULL;
12116+ IHXCommonClassFactory* pCCF = NULL;
12117+
12118+ if (pContext &&
12119+ (HXR_OK == pContext->QueryInterface(IID_IHXPreferences,
12120+ (void**)&pPrefs)) &&
12121+ (HXR_OK == pContext->QueryInterface(IID_IHXCommonClassFactory,
12122+ (void**)&pCCF)))
12123+ {
12124+ CHXSimpleList::Iterator itr = m_prefInfo.Begin();
12125+
12126+ for(; itr != m_prefInfo.End(); ++itr)
12127+ {
12128+ CHXPrefInfo* pInfo = (CHXPrefInfo*)(*itr);
12129+
12130+ IHXBuffer* pBuf = NULL;
12131+
12132+ if ((HXR_OK == pCCF->CreateInstance(CLSID_IHXBuffer,
12133+ (void**)&pBuf)) &&
12134+ (HXR_OK == pBuf->Set((const unsigned char*)pInfo->Value(),
12135+ strlen(pInfo->Value()))))
12136+ {
12137+ pPrefs->WritePref(pInfo->Key(), pBuf);
12138+ }
12139+
12140+ HX_RELEASE(pBuf);
12141+ }
12142+ }
12143+
12144+ HX_RELEASE(pPrefs);
12145+ HX_RELEASE(pCCF);
12146+}
12147Index: helix-libs/clientapps/clutter/preflist.h
12148===================================================================
12149--- /dev/null 1970-01-01 00:00:00.000000000 +0000
12150+++ helix-libs/clientapps/clutter/preflist.h 2008-10-13 06:05:49.000000000 -0700
12151@@ -0,0 +1,69 @@
12152+/* ***** BEGIN LICENSE BLOCK *****
12153+ * Source last modified: $Id: preflist.h,v 1.2 2007/07/06 20:32:36 jfinnecy Exp $
12154+ *
12155+ * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
12156+ *
12157+ * The contents of this file, and the files included with this file,
12158+ * are subject to the current version of the RealNetworks Public
12159+ * Source License (the "RPSL") available at
12160+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
12161+ * the file under the current version of the RealNetworks Community
12162+ * Source License (the "RCSL") available at
12163+ * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
12164+ * will apply. You may also obtain the license terms directly from
12165+ * RealNetworks. You may not use this file except in compliance with
12166+ * the RPSL or, if you have a valid RCSL with RealNetworks applicable
12167+ * to this file, the RCSL. Please see the applicable RPSL or RCSL for
12168+ * the rights, obligations and limitations governing use of the
12169+ * contents of the file.
12170+ *
12171+ * Alternatively, the contents of this file may be used under the
12172+ * terms of the GNU General Public License Version 2 (the
12173+ * "GPL") in which case the provisions of the GPL are applicable
12174+ * instead of those above. If you wish to allow use of your version of
12175+ * this file only under the terms of the GPL, and not to allow others
12176+ * to use your version of this file under the terms of either the RPSL
12177+ * or RCSL, indicate your decision by deleting the provisions above
12178+ * and replace them with the notice and other provisions required by
12179+ * the GPL. If you do not delete the provisions above, a recipient may
12180+ * use your version of this file under the terms of any one of the
12181+ * RPSL, the RCSL or the GPL.
12182+ *
12183+ * This file is part of the Helix DNA Technology. RealNetworks is the
12184+ * developer of the Original Code and owns the copyrights in the
12185+ * portions it created.
12186+ *
12187+ * This file, and the files included with this file, is distributed
12188+ * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
12189+ * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
12190+ * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
12191+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
12192+ * ENJOYMENT OR NON-INFRINGEMENT.
12193+ *
12194+ * Technology Compatibility Kit Test Suite(s) Location:
12195+ * http://www.helixcommunity.org/content/tck
12196+ *
12197+ * Contributor(s):
12198+ *
12199+ * ***** END LICENSE BLOCK ***** */
12200+#ifndef PREFLIST_H
12201+#define PREFLIST_H
12202+
12203+#include "hxslist.h"
12204+
12205+class CHXPrefList
12206+{
12207+public:
12208+ CHXPrefList();
12209+ ~CHXPrefList();
12210+
12211+ void Add(const char* pKey, const char* pValue);
12212+ void Clear();
12213+
12214+ void SetPreferences(IUnknown* pContext);
12215+
12216+private:
12217+ CHXSimpleList m_prefInfo;
12218+};
12219+
12220+#endif /* PREFLIST_H */
12221Index: helix-libs/clientapps/clutter/print.cpp
12222===================================================================
12223--- /dev/null 1970-01-01 00:00:00.000000000 +0000
12224+++ helix-libs/clientapps/clutter/print.cpp 2008-10-13 06:05:49.000000000 -0700
12225@@ -0,0 +1,80 @@
12226+/* ***** BEGIN LICENSE BLOCK *****
12227+ * Version: RCSL 1.0/RPSL 1.0
12228+ *
12229+ * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
12230+ *
12231+ * The contents of this file, and the files included with this file, are
12232+ * subject to the current version of the RealNetworks Public Source License
12233+ * Version 1.0 (the "RPSL") available at
12234+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
12235+ * the file under the RealNetworks Community Source License Version 1.0
12236+ * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
12237+ * in which case the RCSL will apply. You may also obtain the license terms
12238+ * directly from RealNetworks. You may not use this file except in
12239+ * compliance with the RPSL or, if you have a valid RCSL with RealNetworks
12240+ * applicable to this file, the RCSL. Please see the applicable RPSL or
12241+ * RCSL for the rights, obligations and limitations governing use of the
12242+ * contents of the file.
12243+ *
12244+ * This file is part of the Helix DNA Technology. RealNetworks is the
12245+ * developer of the Original Code and owns the copyrights in the portions
12246+ * it created.
12247+ *
12248+ * This file, and the files included with this file, is distributed and made
12249+ * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
12250+ * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
12251+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
12252+ * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
12253+ *
12254+ * Technology Compatibility Kit Test Suite(s) Location:
12255+ * http://www.helixcommunity.org/content/tck
12256+ *
12257+ * Contributor(s):
12258+ *
12259+ * ***** END LICENSE BLOCK ***** */
12260+
12261+#include <stdarg.h>
12262+#include <stdio.h>
12263+#include "print.h"
12264+#ifdef WIN32_PLATFORM_PSPC
12265+#include "hlxosstr.h"
12266+#include <winbase.h>
12267+#endif
12268+
12269+int print2stdout(const char* pFmt, ...)
12270+{
12271+ va_list args;
12272+
12273+ va_start(args, pFmt);
12274+
12275+#ifdef WIN32_PLATFORM_PSPC
12276+ char szMessage[512];
12277+ int ret = vsprintf(szMessage, pFmt, args);
12278+ OutputDebugString(OS_STRING(szMessage));
12279+#else
12280+ int ret = vfprintf(stdout, pFmt, args);
12281+#endif
12282+
12283+ va_end(args);
12284+
12285+ return ret;
12286+}
12287+
12288+int print2stderr(const char* pFmt, ...)
12289+{
12290+ va_list args;
12291+
12292+ va_start(args, pFmt);
12293+
12294+#ifdef WIN32_PLATFORM_PSPC
12295+ char szMessage[512];
12296+ int ret = vsprintf(szMessage, pFmt, args);
12297+ OutputDebugString(OS_STRING(szMessage));
12298+#else
12299+ int ret = vfprintf(stderr, pFmt, args);
12300+#endif
12301+
12302+ va_end(args);
12303+
12304+ return ret;
12305+}
12306Index: helix-libs/clientapps/clutter/print.h
12307===================================================================
12308--- /dev/null 1970-01-01 00:00:00.000000000 +0000
12309+++ helix-libs/clientapps/clutter/print.h 2008-10-13 06:05:49.000000000 -0700
12310@@ -0,0 +1,60 @@
12311+/* ***** BEGIN LICENSE BLOCK *****
12312+ * Version: RCSL 1.0/RPSL 1.0
12313+ *
12314+ * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
12315+ *
12316+ * The contents of this file, and the files included with this file, are
12317+ * subject to the current version of the RealNetworks Public Source License
12318+ * Version 1.0 (the "RPSL") available at
12319+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
12320+ * the file under the RealNetworks Community Source License Version 1.0
12321+ * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
12322+ * in which case the RCSL will apply. You may also obtain the license terms
12323+ * directly from RealNetworks. You may not use this file except in
12324+ * compliance with the RPSL or, if you have a valid RCSL with RealNetworks
12325+ * applicable to this file, the RCSL. Please see the applicable RPSL or
12326+ * RCSL for the rights, obligations and limitations governing use of the
12327+ * contents of the file.
12328+ *
12329+ * This file is part of the Helix DNA Technology. RealNetworks is the
12330+ * developer of the Original Code and owns the copyrights in the portions
12331+ * it created.
12332+ *
12333+ * This file, and the files included with this file, is distributed and made
12334+ * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
12335+ * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
12336+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
12337+ * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
12338+ *
12339+ * Technology Compatibility Kit Test Suite(s) Location:
12340+ * http://www.helixcommunity.org/content/tck
12341+ *
12342+ * Contributor(s):
12343+ *
12344+ * ***** END LICENSE BLOCK ***** */
12345+
12346+#ifndef PRINT_H
12347+#define PRINT_H
12348+
12349+#ifdef __cplusplus
12350+extern "C" {
12351+#endif
12352+
12353+#ifdef _SYMBIAN
12354+#include "platform/symbian/symbian_print.h"
12355+
12356+#define STDOUT symbianPrint
12357+#define STDERR symbianPrint
12358+#else
12359+int print2stdout(const char* pFmt, ...);
12360+int print2stderr(const char* pFmt, ...);
12361+#define STDOUT print2stdout
12362+#define STDERR print2stderr
12363+#endif
12364+
12365+#ifdef __cplusplus
12366+};
12367+#endif
12368+
12369+
12370+#endif /* PRINT_H */
12371Index: helix-libs/clientapps/clutter/shmhelp.h
12372===================================================================
12373--- /dev/null 1970-01-01 00:00:00.000000000 +0000
12374+++ helix-libs/clientapps/clutter/shmhelp.h 2008-10-13 06:05:49.000000000 -0700
12375@@ -0,0 +1,88 @@
12376+/* ***** BEGIN LICENSE BLOCK *****
12377+ * Source last modified: $Id: shmhelp.h,v 1.5 2007/07/06 20:54:01 jfinnecy Exp $
12378+ *
12379+ * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
12380+ *
12381+ * The contents of this file, and the files included with this file,
12382+ * are subject to the current version of the RealNetworks Public
12383+ * Source License (the "RPSL") available at
12384+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
12385+ * the file under the current version of the RealNetworks Community
12386+ * Source License (the "RCSL") available at
12387+ * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
12388+ * will apply. You may also obtain the license terms directly from
12389+ * RealNetworks. You may not use this file except in compliance with
12390+ * the RPSL or, if you have a valid RCSL with RealNetworks applicable
12391+ * to this file, the RCSL. Please see the applicable RPSL or RCSL for
12392+ * the rights, obligations and limitations governing use of the
12393+ * contents of the file.
12394+ *
12395+ * Alternatively, the contents of this file may be used under the
12396+ * terms of the GNU General Public License Version 2 (the
12397+ * "GPL") in which case the provisions of the GPL are applicable
12398+ * instead of those above. If you wish to allow use of your version of
12399+ * this file only under the terms of the GPL, and not to allow others
12400+ * to use your version of this file under the terms of either the RPSL
12401+ * or RCSL, indicate your decision by deleting the provisions above
12402+ * and replace them with the notice and other provisions required by
12403+ * the GPL. If you do not delete the provisions above, a recipient may
12404+ * use your version of this file under the terms of any one of the
12405+ * RPSL, the RCSL or the GPL.
12406+ *
12407+ * This file is part of the Helix DNA Technology. RealNetworks is the
12408+ * developer of the Original Code and owns the copyrights in the
12409+ * portions it created.
12410+ *
12411+ * This file, and the files included with this file, is distributed
12412+ * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
12413+ * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
12414+ * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
12415+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
12416+ * ENJOYMENT OR NON-INFRINGEMENT.
12417+ *
12418+ * Technology Compatibility Kit Test Suite(s) Location:
12419+ * http://www.helixcommunity.org/content/tck
12420+ *
12421+ * Contributor(s):
12422+ *
12423+ * ***** END LICENSE BLOCK ***** */
12424+
12425+#if defined(USE_XWINDOWS)
12426+#include <X11/X.h>
12427+#include <X11/Xlib.h>
12428+#include <X11/extensions/XShm.h>
12429+#endif
12430+
12431+#include "hxcom.h"
12432+#include "hxtypes.h"
12433+
12434+
12435+class ShmHelp
12436+{
12437+ public:
12438+
12439+ //Helpers
12440+ static void Init(Display* pDisplay );
12441+ static HXBOOL ShmAvailable();
12442+ static HX_RESULT DetachSharedRegion(UCHAR**ppMem, XShmSegmentInfo* pInfo );
12443+ static HX_RESULT CreateSharedRegion( INT32 nSize,
12444+ UCHAR**ppMem,
12445+ int* pnShmID,
12446+ XShmSegmentInfo* pInfo );
12447+
12448+
12449+ protected:
12450+
12451+ private:
12452+ static HXBOOL zm_bUseShm;
12453+
12454+ //The X11 Segment ID....
12455+ static int zm_nSegment;
12456+ static Display* zm_pDisplay;
12457+
12458+ ShmHelp();
12459+ ShmHelp(Display*);
12460+ ~ShmHelp();
12461+
12462+};
12463+
12464Index: helix-libs/clientapps/clutter/unix.pcf
12465===================================================================
12466--- /dev/null 1970-01-01 00:00:00.000000000 +0000
12467+++ helix-libs/clientapps/clutter/unix.pcf 2008-10-13 06:05:49.000000000 -0700
12468@@ -0,0 +1,65 @@
12469+#
12470+# ***** BEGIN LICENSE BLOCK *****
12471+# Version: RCSL 1.0/RPSL 1.0
12472+#
12473+# Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
12474+#
12475+# The contents of this file, and the files included with this file, are
12476+# subject to the current version of the RealNetworks Public Source License
12477+# Version 1.0 (the "RPSL") available at
12478+# http://www.helixcommunity.org/content/rpsl unless you have licensed
12479+# the file under the RealNetworks Community Source License Version 1.0
12480+# (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
12481+# in which case the RCSL will apply. You may also obtain the license terms
12482+# directly from RealNetworks. You may not use this file except in
12483+# compliance with the RPSL or, if you have a valid RCSL with RealNetworks
12484+# applicable to this file, the RCSL. Please see the applicable RPSL or
12485+# RCSL for the rights, obligations and limitations governing use of the
12486+# contents of the file.
12487+#
12488+# This file is part of the Helix DNA Technology. RealNetworks is the
12489+# developer of the Original Code and owns the copyrights in the portions
12490+# it created.
12491+#
12492+# This file, and the files included with this file, is distributed and made
12493+# available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
12494+# EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
12495+# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
12496+# FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
12497+#
12498+# Technology Compatibility Kit Test Suite(s) Location:
12499+# http://www.helixcommunity.org/content/tck
12500+#
12501+# Contributor(s):
12502+#
12503+# ***** END LICENSE BLOCK *****
12504+#
12505+
12506+
12507+if( ('HELIX_FEATURE_MINI_SITE' not in project.defines) and
12508+ (platform.name in ('linux2', 'linux-i386')) and
12509+ ('HELIX_FEATURE_VIDEO' in project.defines) and
12510+ (project.BuildOption("nodll"))
12511+ ):
12512+ project.sys_libraries.append('Xv', 'Xext')
12513+
12514+
12515+
12516+
12517+if project.BuildOption("nodll"):
12518+ if project.IsDefined("HELIX_FEATURE_VIDEO_CODEC_RV20"):
12519+ if platform.name in ('linux2', 'linux-i386', 'win32') and sysinfo.arch == 'i386':
12520+ project.AddLibraries(GetSDKPath("rvg2dec_libs") + '[adecg2]')
12521+ else:
12522+ project.AddLibraries(GetSDKPath("rvg2dec_libs") + '[cdecg2]')
12523+
12524+ if project.IsDefined("HELIX_FEATURE_VIDEO_CODEC_RV30") or \
12525+ project.IsDefined("HELIX_FEATURE_VIDEO_CODEC_RV40"):
12526+ if project.IsDefined("HELIX_FEATURE_ANSIC_RV89COMBO"):
12527+ project.AddLibraries(GetSDKPath("rv89combo_c_libs")+"[cdec]")
12528+ else:
12529+ if platform.name in ('linux2', 'linux-i386') and sysinfo.arch == 'i386':
12530+ project.AddLibraries(GetSDKPath("rv89combo_libs")+"[adec40]")
12531+ else:
12532+ project.AddLibraries(GetSDKPath("rv89combo_libs")+"[cdec40]")
12533+
12534Index: helix-libs/clientapps/clutter/unixcmap.h
12535===================================================================
12536--- /dev/null 1970-01-01 00:00:00.000000000 +0000
12537+++ helix-libs/clientapps/clutter/unixcmap.h 2008-10-13 06:05:49.000000000 -0700
12538@@ -0,0 +1,51 @@
12539+/* ***** BEGIN LICENSE BLOCK *****
12540+ * Source last modified: $Id: unixcmap.h,v 1.3 2007/07/06 20:54:01 jfinnecy Exp $
12541+ *
12542+ * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
12543+ *
12544+ * The contents of this file, and the files included with this file,
12545+ * are subject to the current version of the RealNetworks Public
12546+ * Source License (the "RPSL") available at
12547+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
12548+ * the file under the current version of the RealNetworks Community
12549+ * Source License (the "RCSL") available at
12550+ * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
12551+ * will apply. You may also obtain the license terms directly from
12552+ * RealNetworks. You may not use this file except in compliance with
12553+ * the RPSL or, if you have a valid RCSL with RealNetworks applicable
12554+ * to this file, the RCSL. Please see the applicable RPSL or RCSL for
12555+ * the rights, obligations and limitations governing use of the
12556+ * contents of the file.
12557+ *
12558+ * Alternatively, the contents of this file may be used under the
12559+ * terms of the GNU General Public License Version 2 (the
12560+ * "GPL") in which case the provisions of the GPL are applicable
12561+ * instead of those above. If you wish to allow use of your version of
12562+ * this file only under the terms of the GPL, and not to allow others
12563+ * to use your version of this file under the terms of either the RPSL
12564+ * or RCSL, indicate your decision by deleting the provisions above
12565+ * and replace them with the notice and other provisions required by
12566+ * the GPL. If you do not delete the provisions above, a recipient may
12567+ * use your version of this file under the terms of any one of the
12568+ * RPSL, the RCSL or the GPL.
12569+ *
12570+ * This file is part of the Helix DNA Technology. RealNetworks is the
12571+ * developer of the Original Code and owns the copyrights in the
12572+ * portions it created.
12573+ *
12574+ * This file, and the files included with this file, is distributed
12575+ * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
12576+ * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
12577+ * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
12578+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
12579+ * ENJOYMENT OR NON-INFRINGEMENT.
12580+ *
12581+ * Technology Compatibility Kit Test Suite(s) Location:
12582+ * http://www.helixcommunity.org/content/tck
12583+ *
12584+ * Contributor(s):
12585+ *
12586+ * ***** END LICENSE BLOCK ***** */
12587+
12588+EXTERN_C Colormap HXGetXColormap(Display* pDisplay, Window window);
12589+EXTERN_C void HXFindBestXColor(Display* pDisplay, Colormap cmap, XColor* desired);
12590Index: helix-libs/clientapps/clutter/visuals.h
12591===================================================================
12592--- /dev/null 1970-01-01 00:00:00.000000000 +0000
12593+++ helix-libs/clientapps/clutter/visuals.h 2008-10-13 06:05:49.000000000 -0700
12594@@ -0,0 +1,74 @@
12595+/* ***** BEGIN LICENSE BLOCK *****
12596+ * Source last modified: $Id: visuals.h,v 1.4 2007/07/06 20:54:01 jfinnecy Exp $
12597+ *
12598+ * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
12599+ *
12600+ * The contents of this file, and the files included with this file,
12601+ * are subject to the current version of the RealNetworks Public
12602+ * Source License (the "RPSL") available at
12603+ * http://www.helixcommunity.org/content/rpsl unless you have licensed
12604+ * the file under the current version of the RealNetworks Community
12605+ * Source License (the "RCSL") available at
12606+ * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
12607+ * will apply. You may also obtain the license terms directly from
12608+ * RealNetworks. You may not use this file except in compliance with
12609+ * the RPSL or, if you have a valid RCSL with RealNetworks applicable
12610+ * to this file, the RCSL. Please see the applicable RPSL or RCSL for
12611+ * the rights, obligations and limitations governing use of the
12612+ * contents of the file.
12613+ *
12614+ * Alternatively, the contents of this file may be used under the
12615+ * terms of the GNU General Public License Version 2 (the
12616+ * "GPL") in which case the provisions of the GPL are applicable
12617+ * instead of those above. If you wish to allow use of your version of
12618+ * this file only under the terms of the GPL, and not to allow others
12619+ * to use your version of this file under the terms of either the RPSL
12620+ * or RCSL, indicate your decision by deleting the provisions above
12621+ * and replace them with the notice and other provisions required by
12622+ * the GPL. If you do not delete the provisions above, a recipient may
12623+ * use your version of this file under the terms of any one of the
12624+ * RPSL, the RCSL or the GPL.
12625+ *
12626+ * This file is part of the Helix DNA Technology. RealNetworks is the
12627+ * developer of the Original Code and owns the copyrights in the
12628+ * portions it created.
12629+ *
12630+ * This file, and the files included with this file, is distributed
12631+ * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
12632+ * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
12633+ * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
12634+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
12635+ * ENJOYMENT OR NON-INFRINGEMENT.
12636+ *
12637+ * Technology Compatibility Kit Test Suite(s) Location:
12638+ * http://www.helixcommunity.org/content/tck
12639+ *
12640+ * Contributor(s):
12641+ *
12642+ * ***** END LICENSE BLOCK ***** */
12643+
12644+#ifndef _UNIX
12645+#error This is the UNIX platform specific implementation.
12646+#endif
12647+
12648+#ifndef _VISUALS_H_
12649+#define _VISUALS_H_
12650+
12651+#if defined(USE_XWINDOWS)
12652+#include <X11/Xlib.h>
12653+#include <X11/Xutil.h>
12654+#include <X11/Xos.h>
12655+#endif
12656+
12657+//
12658+// These functions are loaded with dlsym() so turn off name mangling
12659+// with extern "C".
12660+//
12661+extern "C" {
12662+
12663+Visual* GetBestVisual(Display* display);
12664+Visual* GetVisual(Display* display, long mask, XVisualInfo* templ);
12665+
12666+}
12667+
12668+#endif // _VISUALS_H_
diff --git a/meta-extras/packages/helix/helix-libs/helix-player.pc b/meta-extras/packages/helix/helix-libs/helix-player.pc
new file mode 100644
index 0000000000..5d2994809e
--- /dev/null
+++ b/meta-extras/packages/helix/helix-libs/helix-player.pc
@@ -0,0 +1,11 @@
1prefix=/usr
2exec_prefix=${prefix}
3libdir=${exec_prefix}/lib
4includedir=${prefix}/include
5
6Name: helix-player
7Description: Helix Player Interface
8Version: 4.1.0
9Libs: -L${libdir} -lhelix-player -lstdc++
10Cflags: -I/opt/helix/include -D_UNIX
11Requires:
diff --git a/meta-extras/packages/helix/helix-libs/hxclient.pc b/meta-extras/packages/helix/helix-libs/hxclient.pc
new file mode 100644
index 0000000000..8f64d25670
--- /dev/null
+++ b/meta-extras/packages/helix/helix-libs/hxclient.pc
@@ -0,0 +1,11 @@
1prefix=/opt/helix
2exec_prefix=${prefix}
3libdir=${exec_prefix}/lib
4includedir=${prefix}/include
5
6Name: hxclient
7Description: Helix Client Libraries off the Atlas Branch
8Version: 4.1.0
9Libs: -L${libdir} -lhxclient -lstdc++
10Cflags: -I${includedir} -D_UNIX
11Requires:
diff --git a/meta-extras/packages/helix/ribosome.bb b/meta-extras/packages/helix/ribosome.bb
new file mode 100644
index 0000000000..3cea6f6755
--- /dev/null
+++ b/meta-extras/packages/helix/ribosome.bb
@@ -0,0 +1,43 @@
1DESCRIPTION = "Ribosome: HelixCommunity Build System"
2SECTION = "base"
3HOMEPAGE = "http://helixcommunity.org"
4LICENSE = "GPLv2"
5
6_SNAPSHOT = "22102008"
7_TARBALL_SERVER = "http://git.moblin.org/repos/users/rusty"
8
9PV="r0"
10PR = "r1"
11
12SRC_URI = "${_TARBALL_SERVER}/ribosome-${_SNAPSHOT}.tar.bz2 \
13 ${_TARBALL_SERVER}/client-bif-${_SNAPSHOT}.tar.bz2 \
14 ${_TARBALL_SERVER}/common-bif-${_SNAPSHOT}.tar.bz2 \
15 file://ribosome/clutter.bif \
16 file://ribosome/buildrc"
17
18S = "${WORKDIR}"
19
20COMPATIBLE_HOST = '(i.86.*-linux)'
21
22do_install() {
23 # Install build system of doom
24 install -d ${D}${libdir}
25 cp -a ribosome-${_SNAPSHOT} ${D}${libdir}/ribosome
26 install -m 0644 ribosome/buildrc ${D}${libdir}/ribosome/
27
28 # Install client BIF's
29 install -d ${D}${libdir}/ribosome/bif-cvs/helix/client/build/BIF
30 install -m 0644 client-bif-${_SNAPSHOT}/*.bif \
31 ${D}${libdir}/ribosome/bif-cvs/helix/client/build/BIF
32
33 # Install common BIF's
34 install -d ${D}${libdir}/ribosome/bif-cvs/helix/common/build/BIF
35 install -m 0644 common-bif-${_SNAPSHOT}/*.bif \
36 ${D}${libdir}/ribosome/bif-cvs/helix/common/build/BIF
37
38 # Install our own custom BIF
39 install -m 0644 ribosome/*.bif ${D}${libdir}/ribosome/bif-cvs/helix/client/build/BIF/
40
41 # The [ and ] characters break packaging, remove for now
42 rm -rf ${D}${libdir}/ribosome/test/data/utils/[client-restricted]
43}
diff --git a/meta-extras/packages/helix/ribosome/buildrc b/meta-extras/packages/helix/ribosome/buildrc
new file mode 100644
index 0000000000..6dbc47a06d
--- /dev/null
+++ b/meta-extras/packages/helix/ribosome/buildrc
@@ -0,0 +1,4 @@
1AddMultiCVS("helix",":ext:cvs.helixcommunity.org:/cvsroot/")
2AddBIFPath("common", "[helix]/common/build/BIF")
3AddBIFPath("client", "[helix]/client/build/BIF")
4SetSDKPath("oggvorbissdk", "/usr/")
diff --git a/meta-extras/packages/helix/ribosome/clutter.bif b/meta-extras/packages/helix/ribosome/clutter.bif
new file mode 100755
index 0000000000..a87fcb3faa
--- /dev/null
+++ b/meta-extras/packages/helix/ribosome/clutter.bif
@@ -0,0 +1,68 @@
1<?xml version="1.0" ?>
2<build id="clutter">
3 <inherit id="hxclient_3_1_0_atlas"/>
4 <cvs root="helix"/>
5 <cvs tag="hxclient_3_1_0_atlas"/>
6 <default target="clutter" profile="helix-client-all-defines" options=""/>
7 <targets>
8
9 <!-- clutter -->
10 <module id="clutter" name="clientapps/clutter" group="core">
11 <includeplatforms>
12 unix
13 </includeplatforms>
14
15 <defines>
16 HELIX_FEATURE_AUDIO_VORBIS
17 HELIX_FEATURE_VIDEO_THEORA
18 HELIX_FEATURE_NETSERVICES_SHIM
19 HELIX_FEATURE_AVIFF
20 HELIX_CONFIG_SLUGGISHAUTOUPGRADE
21 HELIX_FEATURE_ALSA
22 _FORTIFY_SOURCE=2
23 </defines>
24
25 <source_dependlist>
26 client_include
27 datatype_tools_dtdriver_dtdrplin
28 </source_dependlist>
29
30 <dependlist>
31 helix_client_objs
32 player_hxclientkit
33 player_hxclientkit_src_hxrecordengine
34 client_core
35 client_resource
36 client_xres
37 protocol_sdp
38 video_site
39 datatype_smil
40 datatype_text_realtext_fileformat
41 datatype_text_realtext_renderer
42 datatype_tools_dtdriver_dtdrplin
43 datatype_ogg_fileformat
44 datatype_vorbis_renderer
45 datatype_theora_renderer
46 datatype_h261_renderer
47 datatype_h263
48 datatype_group_audio
49 datatype_group_image
50 datatype_ram
51 datatype_sdp
52 datatype_avi_fileformat
53 filesystem_local
54 filesystem_http
55 filesystem_memory
56 common_auth_authmgr
57 common_auth_rn5auth
58 client_auth_basicauth
59 common_log_logsystem
60 common_log_logobserverfile
61 </dependlist>
62
63 </module>
64
65 </targets>
66
67</build>
68
diff --git a/meta-extras/packages/lirc/files/lirc_sir-sa1100.patch b/meta-extras/packages/lirc/files/lirc_sir-sa1100.patch
new file mode 100644
index 0000000000..245b28ac51
--- /dev/null
+++ b/meta-extras/packages/lirc/files/lirc_sir-sa1100.patch
@@ -0,0 +1,10 @@
1--- lirc/drivers/lirc_sir/lirc_sir.c.orig 2004-11-18 17:30:17 +0100
2+++ lirc/drivers/lirc_sir/lirc_sir.c 2004-11-18 17:30:21 +0100
3@@ -628,6 +628,7 @@
4 struct timeval curr_tv;
5 static unsigned long deltv;
6 #ifdef LIRC_ON_SA1100
7+ unsigned long deltintrtv;
8 int status;
9 static int n=0;
10
diff --git a/meta-extras/packages/lirc/files/lircd.conf_nslu2 b/meta-extras/packages/lirc/files/lircd.conf_nslu2
new file mode 100644
index 0000000000..5fbaba469c
--- /dev/null
+++ b/meta-extras/packages/lirc/files/lircd.conf_nslu2
@@ -0,0 +1,1886 @@
1# This file is modified for the NSLU2.
2# It's based on http://lirc.sourceforge.net/remotes/philips/RC-5
3# and should support all RC5 compatible remotes.
4# The timings are for a de-underclocked NSLU2.
5
6# To see which key generates which code, run "irw".
7# To check whether lirc works at all, run "mode2 -d /dev/lirc"
8# after stopping lircd with "/etc/init.d/lircd stop".
9# To learn a new remote, run "irrecord -d /dev/lirc /etc/lircd.conf.new" and after
10# success "mv /etc/lircd.conf.new /etc/lircd.conf".
11# You could also take the timing values from /etc/lircd.conf.new
12# and paste it in here.
13# See also /etc/lircrc.
14
15begin remote
16
17 name RC5
18 bits 13
19 flags RC5|CONST_LENGTH
20 eps 30
21 aeps 100
22# if it doesn't work, you could change the following values:
23 one 863 921
24 zero 863 921
25 plead 947
26 gap 113626
27 min_repeat 1
28 repeat_bit 2
29
30 begin codes
31 amp1-0 0x0000000000001400
32 amp1-1 0x0000000000001401
33 amp1-2 0x0000000000001402
34 amp1-3 0x0000000000001403
35 amp1-4 0x0000000000001404
36 amp1-5 0x0000000000001405
37 amp1-6 0x0000000000001406
38 amp1-7 0x0000000000001407
39 amp1-8 0x0000000000001408
40 amp1-9 0x0000000000001409
41 amp1-graphic_equalizer_left 0x000000000000140A
42 amp1-graphic_equalizer_right 0x000000000000140B
43 amp1-standby 0x000000000000140C
44 amp1-mute/demute 0x000000000000140D
45 amp1-P.P. 0x000000000000140E
46 amp1-display 0x000000000000140F
47 amp1-volume+ 0x0000000000001410
48 amp1-volume- 0x0000000000001411
49 amp1-brightness+ 0x0000000000001412
50 amp1-brightness- 0x0000000000001413
51 amp1-colour_saturation+ 0x0000000000001414
52 amp1-colour_saturation- 0x0000000000001415
53 amp1-bass+ 0x0000000000001416
54 amp1-bass- 0x0000000000001417
55 amp1-treble+ 0x0000000000001418
56 amp1-treble- 0x0000000000001419
57 amp1-balance_right 0x000000000000141A
58 amp1-balance_left 0x000000000000141B
59 amp1-graph_equal_left&right 0x000000000000141C
60 amp1-loudness 0x000000000000141D
61 amp1-high_tone_filter 0x000000000000141E
62 amp1-low_tone_filter 0x000000000000141F
63 amp1-step+ 0x0000000000001420
64 amp1-step- 0x0000000000001421
65 amp1-signal_path_scroll 0x0000000000001422
66 amp1-INVALID 0x0000000000001423
67 amp1-INVALID 0x0000000000001424
68 amp1-surround_mode 0x0000000000001425
69 amp1-sleeptimer 0x0000000000001426
70 amp1-balance_rear 0x0000000000001427
71 amp1-balance_front 0x0000000000001428
72 amp1-TPS 0x0000000000001429
73 amp1-timer_set 0x000000000000142A
74 amp1-timer_up 0x000000000000142B
75 amp1-timer_down 0x000000000000142C
76 amp1-timer_memo 0x000000000000142D
77 amp1-acoustic_memory 0x000000000000142E
78 amp1-acoustic_memory_select 0x000000000000142F
79 amp1-pause 0x0000000000001430
80 amp1-erase 0x0000000000001431
81 amp1-rewind 0x0000000000001432
82 amp1-go_to 0x0000000000001433
83 amp1-wind 0x0000000000001434
84 amp1-play 0x0000000000001435
85 amp1-stop 0x0000000000001436
86 amp1-recording 0x0000000000001437
87 amp1-external1 0x0000000000001438
88 amp1-external2 0x0000000000001439
89 amp1-clear_all_memory 0x000000000000143A
90 amp1-INVALID 0x000000000000143B
91 amp1-dyn_range_expand/compr 0x000000000000143C
92 amp1-system_standby 0x000000000000143D
93 amp1-INVALID 0x000000000000143E
94 amp1-system_select 0x000000000000143F
95 amp1-surround_sound 0x0000000000000400
96 amp1-balance_front 0x0000000000000401
97 amp1-balance_rear 0x0000000000000402
98 amp1-sound_effects1 0x0000000000000403
99 amp1-sound_effects2 0x0000000000000404
100 amp1-sound_effects3 0x0000000000000405
101 amp1-sound_effects4 0x0000000000000406
102 amp1-sound_effects5 0x0000000000000407
103 amp1-sound_or_menu_func.1 0x0000000000000408
104 amp1-sound_or_menu_func.2 0x0000000000000409
105 amp1-sound_or_menu_func.3 0x000000000000040A
106 amp1-linear_function_up 0x000000000000040D
107 amp1-linear_function_down 0x000000000000040E
108 amp1-catalogue 0x000000000000040F
109 amp1-cursor_step_up 0x0000000000000410
110 amp1-cursor_step_down 0x0000000000000411
111 amp1-menu_on 0x0000000000000412
112 amp1-menu_off 0x0000000000000413
113 amp1-display_A/V_status 0x0000000000000414
114 amp1-cursor_step_left 0x0000000000000415
115 amp1-cursor_step_right 0x0000000000000416
116 amp1-menu_function 0x0000000000000417
117 amp1-PIP_on/off 0x0000000000000418
118 amp1-PIP_shift 0x0000000000000419
119 amp1-PIP_main_swap 0x000000000000041A
120 amp1-strobe_on/off 0x000000000000041B
121 amp1-multi_strobe 0x000000000000041C
122 amp1-main_freezed 0x000000000000041D
123 amp1-3/9_multi_scan 0x000000000000041E
124 amp1-PIP_mode_select 0x000000000000041F
125 amp1-mosaic 0x0000000000000420
126 amp1-solarization 0x0000000000000421
127 amp1-main_stored 0x0000000000000422
128 amp1-PIP_strobe 0x0000000000000423
129 amp1-recall_main 0x0000000000000424
130 amp1-PIP_freeze 0x0000000000000425
131 amp1-PIP_step_up 0x0000000000000426
132 amp1-PIP_step_down 0x0000000000000427
133 amp1-INVALID 0x000000000000042C
134 amp1-INVALID 0x0000000000000430
135 amp1-INVALID 0x0000000000000431
136 amp1-INVALID 0x0000000000000436
137 amp1-INVALID 0x0000000000000437
138 amp1-connect 0x000000000000043B
139 amp1-disconnect 0x000000000000043C
140 amp2-0 0x00000000000014C0
141 amp2-1 0x00000000000014C1
142 amp2-2 0x00000000000014C2
143 amp2-3 0x00000000000014C3
144 amp2-4 0x00000000000014C4
145 amp2-5 0x00000000000014C5
146 amp2-6 0x00000000000014C6
147 amp2-7 0x00000000000014C7
148 amp2-8 0x00000000000014C8
149 amp2-9 0x00000000000014C9
150 amp2-graphic_equalizer_left 0x00000000000014CA
151 amp2-graphic_equalizer_right 0x00000000000014CB
152 amp2-standby 0x00000000000014CC
153 amp2-mute/demute 0x00000000000014CD
154 amp2-P.P. 0x00000000000014CE
155 amp2-display 0x00000000000014CF
156 amp2-volume+ 0x00000000000014D0
157 amp2-volume- 0x00000000000014D1
158 amp2-brightness+ 0x00000000000014D2
159 amp2-brightness- 0x00000000000014D3
160 amp2-colour_saturation+ 0x00000000000014D4
161 amp2-colour_saturation- 0x00000000000014D5
162 amp2-bass+ 0x00000000000014D6
163 amp2-bass- 0x00000000000014D7
164 amp2-treble+ 0x00000000000014D8
165 amp2-treble- 0x00000000000014D9
166 amp2-balance_right 0x00000000000014DA
167 amp2-balance_left 0x00000000000014DB
168 amp2-graph_equal_left&right 0x00000000000014DC
169 amp2-loudness 0x00000000000014DD
170 amp2-high_tone_filter 0x00000000000014DE
171 amp2-low_tone_filter 0x00000000000014DF
172 amp2-step+ 0x00000000000014E0
173 amp2-step- 0x00000000000014E1
174 amp2-signal_path_scroll 0x00000000000014E2
175 amp2-INVALID 0x00000000000014E3
176 amp2-INVALID 0x00000000000014E4
177 amp2-surround_mode 0x00000000000014E5
178 amp2-sleeptimer 0x00000000000014E6
179 amp2-balance_rear 0x00000000000014E7
180 amp2-balance_front 0x00000000000014E8
181 amp2-TPS 0x00000000000014E9
182 amp2-timer_set 0x00000000000014EA
183 amp2-timer_up 0x00000000000014EB
184 amp2-timer_down 0x00000000000014EC
185 amp2-timer_memo 0x00000000000014ED
186 amp2-acoustic_memory 0x00000000000014EE
187 amp2-acoustic_memory_select 0x00000000000014EF
188 amp2-pause 0x00000000000014F0
189 amp2-erase 0x00000000000014F1
190 amp2-rewind 0x00000000000014F2
191 amp2-go_to 0x00000000000014F3
192 amp2-wind 0x00000000000014F4
193 amp2-play 0x00000000000014F5
194 amp2-stop 0x00000000000014F6
195 amp2-recording 0x00000000000014F7
196 amp2-external1 0x00000000000014F8
197 amp2-external2 0x00000000000014F9
198 amp2-clear_all_memory 0x00000000000014FA
199 amp2-INVALID 0x00000000000014FB
200 amp2-dyn_range_expand/compr 0x00000000000014FC
201 amp2-system_standby 0x00000000000014FD
202 amp2-INVALID 0x00000000000014FE
203 amp2-system_select 0x00000000000014FF
204 amp2-surround_sound 0x00000000000004C0
205 amp2-balance_front 0x00000000000004C1
206 amp2-balance_rear 0x00000000000004C2
207 amp2-sound_effects1 0x00000000000004C3
208 amp2-sound_effects2 0x00000000000004C4
209 amp2-sound_effects3 0x00000000000004C5
210 amp2-sound_effects4 0x00000000000004C6
211 amp2-sound_effects5 0x00000000000004C7
212 amp2-sound_or_menu_func.1 0x00000000000004C8
213 amp2-sound_or_menu_func.2 0x00000000000004C9
214 amp2-sound_or_menu_func.3 0x00000000000004CA
215 amp2-linear_function_up 0x00000000000004CD
216 amp2-linear_function_down 0x00000000000004CE
217 amp2-catalogue 0x00000000000004CF
218 amp2-cursor_step_up 0x00000000000004D0
219 amp2-cursor_step_down 0x00000000000004D1
220 amp2-menu_on 0x00000000000004D2
221 amp2-menu_off 0x00000000000004D3
222 amp2-display_A/V_status 0x00000000000004D4
223 amp2-cursor_step_left 0x00000000000004D5
224 amp2-cursor_step_right 0x00000000000004D6
225 amp2-menu_function 0x00000000000004D7
226 amp2-PIP_on/off 0x00000000000004D8
227 amp2-PIP_shift 0x00000000000004D9
228 amp2-PIP_main_swap 0x00000000000004DA
229 amp2-strobe_on/off 0x00000000000004DB
230 amp2-multi_strobe 0x00000000000004DC
231 amp2-main_freezed 0x00000000000004DD
232 amp2-3/9_multi_scan 0x00000000000004DE
233 amp2-PIP_mode_select 0x00000000000004DF
234 amp2-mosaic 0x00000000000004E0
235 amp2-solarization 0x00000000000004E1
236 amp2-main_stored 0x00000000000004E2
237 amp2-PIP_strobe 0x00000000000004E3
238 amp2-recall_main 0x00000000000004E4
239 amp2-PIP_freeze 0x00000000000004E5
240 amp2-PIP_step_up 0x00000000000004E6
241 amp2-PIP_step_down 0x00000000000004E7
242 amp2-INVALID 0x00000000000004EC
243 amp2-INVALID 0x00000000000004F0
244 amp2-INVALID 0x00000000000004F1
245 amp2-INVALID 0x00000000000004F6
246 amp2-INVALID 0x00000000000004F7
247 amp2-connect 0x00000000000004FB
248 amp2-disconnect 0x00000000000004FC
249 cd-0 0x0000000000001500
250 cd-1 0x0000000000001501
251 cd-2 0x0000000000001502
252 cd-3 0x0000000000001503
253 cd-4 0x0000000000001504
254 cd-5 0x0000000000001505
255 cd-6 0x0000000000001506
256 cd-7 0x0000000000001507
257 cd-8 0x0000000000001508
258 cd-9 0x0000000000001509
259 cd-cursor_scroll 0x000000000000150A
260 cd-display_scroll 0x000000000000150B
261 cd-standby 0x000000000000150C
262 cd-mute/demute 0x000000000000150D
263 cd-P.P._(personal_pref.) 0x000000000000150E
264 cd-display 0x000000000000150F
265 cd-volume+ 0x0000000000001510
266 cd-volume- 0x0000000000001511
267 cd-brightness+ 0x0000000000001512
268 cd-brightness- 0x0000000000001513
269 cd-colour_saturation+ 0x0000000000001514
270 cd-colour_saturation- 0x0000000000001515
271 cd-bass+ 0x0000000000001516
272 cd-bass- 0x0000000000001517
273 cd-treble+ 0x0000000000001518
274 cd-treble- 0x0000000000001519
275 cd-balance_right 0x000000000000151A
276 cd-balance_left 0x000000000000151B
277 cd-rept_once/TSPo/shuffle 0x000000000000151C
278 cd-repeat_cont/TSPc 0x000000000000151D
279 cd-select+ 0x000000000000151E
280 cd-select- 0x000000000000151F
281 cd-next 0x0000000000001520
282 cd-previous 0x0000000000001521
283 cd-index_next 0x0000000000001522
284 cd-index_previous 0x0000000000001523
285 cd-play/program 0x0000000000001524
286 cd-speed_nominal 0x0000000000001525
287 cd-speed+ 0x0000000000001526
288 cd-speed- 0x0000000000001527
289 cd-INVALID 0x0000000000001528
290 cd-store_execute 0x0000000000001529
291 cd-INVALID 0x000000000000152A
292 cd-scan_forward 0x000000000000152B
293 cd-INVALID 0x000000000000152C
294 cd-open/close 0x000000000000152D
295 cd-INVALID 0x000000000000152E
296 cd-INVALID 0x000000000000152F
297 cd-pause 0x0000000000001530
298 cd-erase 0x0000000000001531
299 cd-rewind 0x0000000000001532
300 cd-go_to 0x0000000000001533
301 cd-wind 0x0000000000001534
302 cd-play 0x0000000000001535
303 cd-stop 0x0000000000001536
304 cd-recording 0x0000000000001537
305 cd-external1 0x0000000000001538
306 cd-external2 0x0000000000001539
307 cd-clear_all_memory 0x000000000000153A
308 cd-repeat_A/B_program 0x000000000000153B
309 cd-dynamic_range_expand 0x000000000000153C
310 cd-system_standby 0x000000000000153D
311 cd-dynamic_range_compress 0x000000000000153E
312 cd-system_select 0x000000000000153F
313 cd-surround_sound 0x0000000000000500
314 cd-balance_front 0x0000000000000501
315 cd-balance_rear 0x0000000000000502
316 cd-sound_effects1 0x0000000000000503
317 cd-sound_effects2 0x0000000000000504
318 cd-sound_effects3 0x0000000000000505
319 cd-sound_effects4 0x0000000000000506
320 cd-sound_effects5 0x0000000000000507
321 cd-sound_or_menu_func.1 0x0000000000000508
322 cd-sound_or_menu_func.2 0x0000000000000509
323 cd-sound_or_menu_func.3 0x000000000000050A
324 cd-linear_function_up 0x000000000000050D
325 cd-linear_function_down 0x000000000000050E
326 cd-sound_or_menu_func. 0x000000000000050F
327 cd-cursor_step_up 0x0000000000000510
328 cd-cursor_step_down 0x0000000000000511
329 cd-menu_on 0x0000000000000512
330 cd-menu_off 0x0000000000000513
331 cd-display_A/V_status 0x0000000000000514
332 cd-cursor_step_left 0x0000000000000515
333 cd-cursor_step_right 0x0000000000000516
334 cd-menu_function 0x0000000000000517
335 cd-PIP_on/off 0x0000000000000518
336 cd-PIP_shift 0x0000000000000519
337 cd-PIP_main_swap 0x000000000000051A
338 cd-strobe_on/off 0x000000000000051B
339 cd-multi_strobe 0x000000000000051C
340 cd-main_freezed 0x000000000000051D
341 cd-3/9_multi_scan 0x000000000000051E
342 cd-PIP_mode_select 0x000000000000051F
343 cd-mosaic 0x0000000000000520
344 cd-solarization 0x0000000000000521
345 cd-main_stored 0x0000000000000522
346 cd-PIP_strobe 0x0000000000000523
347 cd-recall_main 0x0000000000000524
348 cd-PIP_freeze 0x0000000000000525
349 cd-PIP_step_up 0x0000000000000526
350 cd-PIP_step_down 0x0000000000000527
351 cd-INVALID 0x0000000000000528
352 cd-INVALID 0x0000000000000529
353 cd-INVALID 0x000000000000052A
354 cd-INVALID 0x000000000000052B
355 cd-FTS 0x000000000000052C
356 cd-INVALID 0x000000000000052D
357 cd-INVALID 0x0000000000000532
358 cd-INVALID 0x0000000000000533
359 cd-INVALID 0x0000000000000534
360 cd-INVALID 0x0000000000000535
361 cd-sub_mode1 0x0000000000000536
362 cd-sub_mode2 0x0000000000000537
363 cd-connect 0x000000000000053B
364 cd-disconnect 0x000000000000053C
365 lv1-0 0x0000000000001100
366 lv1-1 0x0000000000001101
367 lv1-2 0x0000000000001102
368 lv1-3 0x0000000000001103
369 lv1-4 0x0000000000001104
370 lv1-5 0x0000000000001105
371 lv1-6 0x0000000000001106
372 lv1-7 0x0000000000001107
373 lv1-8 0x0000000000001108
374 lv1-9 0x0000000000001109
375 lv1-picture_number/time 0x000000000000110A
376 lv1-channel_number 0x000000000000110B
377 lv1-standby 0x000000000000110C
378 lv1-mute/demute 0x000000000000110D
379 lv1-P.P._(personal_pref.) 0x000000000000110E
380 lv1-display 0x000000000000110F
381 lv1-volume+ 0x0000000000001110
382 lv1-volume- 0x0000000000001111
383 lv1-brightness+ 0x0000000000001112
384 lv1-brightness- 0x0000000000001113
385 lv1-colour_saturation+ 0x0000000000001114
386 lv1-colour_saturation- 0x0000000000001115
387 lv1-bass+ 0x0000000000001116
388 lv1-bass- 0x0000000000001117
389 lv1-treble+ 0x0000000000001118
390 lv1-treble- 0x0000000000001119
391 lv1-balance_right 0x000000000000111A
392 lv1-balance_left 0x000000000000111B
393 lv1-repeat_once/TSPo 0x000000000000111C
394 lv1-repeat_cont/TSPc 0x000000000000111D
395 lv1-next 0x000000000000111E
396 lv1-fast_run_reverse 0x000000000000111F
397 lv1-entry 0x0000000000001120
398 lv1-auto_stop/memory 0x0000000000001121
399 lv1-slow_run_reverse 0x0000000000001122
400 lv1-audio1 0x0000000000001123
401 lv1-audio2 0x0000000000001124
402 lv1-still_picture 0x0000000000001125
403 lv1-speed+ 0x0000000000001126
404 lv1-speed- 0x0000000000001127
405 lv1-slow_run_forward 0x0000000000001128
406 lv1-still_forward 0x0000000000001129
407 lv1-fast_run_forward 0x000000000000112A
408 lv1-search_automatic 0x000000000000112B
409 lv1-scan_reverse 0x000000000000112C
410 lv1-open/close_(eject) 0x000000000000112D
411 lv1-scan_forward 0x000000000000112E
412 lv1-play_reverse 0x000000000000112F
413 lv1-pause 0x0000000000001130
414 lv1-erase 0x0000000000001131
415 lv1-rewind 0x0000000000001132
416 lv1-go_to 0x0000000000001133
417 lv1-wind 0x0000000000001134
418 lv1-play 0x0000000000001135
419 lv1-stop 0x0000000000001136
420 lv1-recording 0x0000000000001137
421 lv1-external1 0x0000000000001138
422 lv1-external2 0x0000000000001139
423 lv1-clear_all_memory 0x000000000000113A
424 lv1-freeze_segment 0x000000000000113B
425 lv1-TXT_(pal)/ant.sw_(ntsc) 0x000000000000113C
426 lv1-system_standby 0x000000000000113D
427 lv1-CX_on/off 0x000000000000113E
428 lv1-system_select 0x000000000000113F
429 lv1-surround_sound 0x0000000000000100
430 lv1-balance_front 0x0000000000000101
431 lv1-balance_rear 0x0000000000000102
432 lv1-sound_effects1 0x0000000000000103
433 lv1-sound_effects2 0x0000000000000104
434 lv1-sound_effects3 0x0000000000000105
435 lv1-sound_effects4 0x0000000000000106
436 lv1-sound_effects5 0x0000000000000107
437 lv1-sound_or_menu_func.1 0x0000000000000108
438 lv1-sound_or_menu_func.2 0x0000000000000109
439 lv1-sound_or_menu_func.3 0x000000000000010A
440 lv1-INVALID 0x000000000000010B
441 lv1-INVALID 0x000000000000010C
442 lv1-linear_function_up 0x000000000000010D
443 lv1-linear_function_down 0x000000000000010E
444 lv1-sound_or_menu_func. 0x000000000000010F
445 lv1-cursor_step_up 0x0000000000000110
446 lv1-cursor_step_down 0x0000000000000111
447 lv1-menu_on 0x0000000000000112
448 lv1-menu_off 0x0000000000000113
449 lv1-display_A/V_status 0x0000000000000114
450 lv1-cursor_step_left 0x0000000000000115
451 lv1-cursor_step_right 0x0000000000000116
452 lv1-menu_function 0x0000000000000117
453 lv1-PIP_on/off 0x0000000000000118
454 lv1-PIP_shift 0x0000000000000119
455 lv1-PIP_main_swap 0x000000000000011A
456 lv1-strobe_on/off 0x000000000000011B
457 lv1-multi_strobe 0x000000000000011C
458 lv1-main_freezed 0x000000000000011D
459 lv1-3/9_multi_scan 0x000000000000011E
460 lv1-PIP_mode_select 0x000000000000011F
461 lv1-mosaic 0x0000000000000120
462 lv1-solarization 0x0000000000000121
463 lv1-main_stored 0x0000000000000122
464 lv1-PIP_strobe 0x0000000000000123
465 lv1-recall_main 0x0000000000000124
466 lv1-PIP_freeze 0x0000000000000125
467 lv1-PIP_step_up 0x0000000000000126
468 lv1-PIP_step_down 0x0000000000000127
469 lv1-INVALID 0x0000000000000128
470 lv1-INVALID 0x0000000000000129
471 lv1-INVALID 0x000000000000012A
472 lv1-INVALID 0x000000000000012B
473 lv1-INVALID 0x000000000000012C
474 lv1-INVALID 0x000000000000012D
475 lv1-INVALID 0x0000000000000130
476 lv1-INVALID 0x0000000000000131
477 lv1-INVALID 0x0000000000000132
478 lv1-INVALID 0x0000000000000133
479 lv1-INVALID 0x0000000000000134
480 lv1-INVALID 0x0000000000000135
481 lv1-sub_mode1 0x0000000000000136
482 lv1-sub_mode2 0x0000000000000137
483 lv1-INVALID 0x0000000000000138
484 lv1-INVALID 0x0000000000000139
485 lv1-INVALID 0x000000000000013A
486 lv1-connect 0x000000000000013B
487 lv1-disconnect 0x000000000000013C
488 lv2-0 0x0000000000001300
489 lv2-1 0x0000000000001301
490 lv2-2 0x0000000000001302
491 lv2-3 0x0000000000001303
492 lv2-4 0x0000000000001304
493 lv2-5 0x0000000000001305
494 lv2-6 0x0000000000001306
495 lv2-7 0x0000000000001307
496 lv2-8 0x0000000000001308
497 lv2-9 0x0000000000001309
498 lv2-picture_number/time 0x000000000000130A
499 lv2-chapter_number 0x000000000000130B
500 lv2-standby 0x000000000000130C
501 lv2-mute/demute 0x000000000000130D
502 lv2-P.P._(personal_pref.) 0x000000000000130E
503 lv2-display 0x000000000000130F
504 lv2-volume+ 0x0000000000001310
505 lv2-volume- 0x0000000000001311
506 lv2-brightness+ 0x0000000000001312
507 lv2-brightness- 0x0000000000001313
508 lv2-colour_saturation+ 0x0000000000001314
509 lv2-colour_saturation- 0x0000000000001315
510 lv2-bass+ 0x0000000000001316
511 lv2-bass- 0x0000000000001317
512 lv2-treble+ 0x0000000000001318
513 lv2-treble- 0x0000000000001319
514 lv2-balance_right 0x000000000000131A
515 lv2-balance_left 0x000000000000131B
516 lv2-repeat_once/TSPo 0x000000000000131C
517 lv2-repeat_cont/TSPc 0x000000000000131D
518 lv2-next 0x000000000000131E
519 lv2-programming 0x000000000000131F
520 lv2-INVALID 0x0000000000001320
521 lv2-auto_stop/memory 0x0000000000001321
522 lv2-slow_run_reverse 0x0000000000001322
523 lv2-stereo_left/right 0x0000000000001323
524 lv2-previous 0x0000000000001324
525 lv2-still_reverse 0x0000000000001325
526 lv2-speed+ 0x0000000000001326
527 lv2-speed- 0x0000000000001327
528 lv2-slow_run_forward 0x0000000000001328
529 lv2-still_forward 0x0000000000001329
530 lv2-digital_multi_screen 0x000000000000132A
531 lv2-strobe 0x000000000000132B
532 lv2-scan_reverse 0x000000000000132C
533 lv2-open/close_(eject) 0x000000000000132D
534 lv2-scan_forward 0x000000000000132E
535 lv2-INVALID 0x000000000000132F
536 lv2-pause 0x0000000000001330
537 lv2-erase 0x0000000000001331
538 lv2-rewind 0x0000000000001332
539 lv2-go_to 0x0000000000001333
540 lv2-wind 0x0000000000001334
541 lv2-play 0x0000000000001335
542 lv2-stop 0x0000000000001336
543 lv2-recording 0x0000000000001337
544 lv2-external1 0x0000000000001338
545 lv2-external2 0x0000000000001339
546 lv2-clear_all_memory 0x000000000000133A
547 lv2-repeat_A/B_program 0x000000000000133B
548 lv2-TXT_(pal)/ant.sw_(ntsc) 0x000000000000133C
549 lv2-system_standby 0x000000000000133D
550 lv2-CX_on/off 0x000000000000133E
551 lv2-system_select 0x000000000000133F
552 lv2-surround_sound 0x0000000000000300
553 lv2-balance_front 0x0000000000000301
554 lv2-balance_rear 0x0000000000000302
555 lv2-sound_effects1 0x0000000000000303
556 lv2-sound_effects2 0x0000000000000304
557 lv2-sound_effects3 0x0000000000000305
558 lv2-sound_effects4 0x0000000000000306
559 lv2-sound_effects5 0x0000000000000307
560 lv2-sound_or_menu_func.1 0x0000000000000308
561 lv2-sound_or_menu_func.2 0x0000000000000309
562 lv2-sound_or_menu_func.3 0x000000000000030A
563 lv2-linear_function_up 0x000000000000030D
564 lv2-linear_function_down 0x000000000000030E
565 lv2-sound_or_menu_func. 0x000000000000030F
566 lv2-cursor_step_up 0x0000000000000310
567 lv2-cursor_step_down 0x0000000000000311
568 lv2-menu_on 0x0000000000000312
569 lv2-menu_off 0x0000000000000313
570 lv2-display_A/V_status 0x0000000000000314
571 lv2-cursor_step_left 0x0000000000000315
572 lv2-cursor_step_right 0x0000000000000316
573 lv2-menu_function 0x0000000000000317
574 lv2-PIP_on/off 0x0000000000000318
575 lv2-PIP_shift 0x0000000000000319
576 lv2-PIP_main_swap 0x000000000000031A
577 lv2-strobe_on/off 0x000000000000031B
578 lv2-multi_strobe 0x000000000000031C
579 lv2-main_freezed 0x000000000000031D
580 lv2-3/9_multi_scan 0x000000000000031E
581 lv2-PIP_mode_select 0x000000000000031F
582 lv2-mosaic 0x0000000000000320
583 lv2-solarization 0x0000000000000321
584 lv2-main_stored 0x0000000000000322
585 lv2-PIP_strobe 0x0000000000000323
586 lv2-recall_main 0x0000000000000324
587 lv2-PIP_freeze 0x0000000000000325
588 lv2-PIP_step_up 0x0000000000000326
589 lv2-PIP_step_down 0x0000000000000327
590 lv2-FTS 0x000000000000032C
591 lv2-index_next 0x0000000000000330
592 lv2-index_previous 0x0000000000000331
593 lv2-sub_mode1 0x0000000000000336
594 lv2-sub_mode2 0x0000000000000337
595 lv2-connect 0x000000000000033B
596 lv2-disconnect 0x000000000000033C
597 phono-0 0x0000000000001540
598 phono-1 0x0000000000001541
599 phono-2 0x0000000000001542
600 phono-3 0x0000000000001543
601 phono-4 0x0000000000001544
602 phono-5 0x0000000000001545
603 phono-6 0x0000000000001546
604 phono-7 0x0000000000001547
605 phono-8 0x0000000000001548
606 phono-9 0x0000000000001549
607 phono-INVALID 0x000000000000154A
608 phono-INVALID 0x000000000000154B
609 phono-standby 0x000000000000154C
610 phono-mute/demute 0x000000000000154D
611 phono-P.P. 0x000000000000154E
612 phono-display 0x000000000000154F
613 phono-volume+ 0x0000000000001550
614 phono-volume- 0x0000000000001551
615 phono-brightness+ 0x0000000000001552
616 phono-brightness- 0x0000000000001553
617 phono-colour_saturation+ 0x0000000000001554
618 phono-colour_saturation- 0x0000000000001555
619 phono-bass+ 0x0000000000001556
620 phono-bass- 0x0000000000001557
621 phono-treble+ 0x0000000000001558
622 phono-treble- 0x0000000000001559
623 phono-balance_right 0x000000000000155A
624 phono-balance_left 0x000000000000155B
625 phono-repeat_once 0x000000000000155C
626 phono-repeat_continuously 0x000000000000155D
627 phono-select+ 0x000000000000155E
628 phono-select- 0x000000000000155F
629 phono-next 0x0000000000001560
630 phono-previous 0x0000000000001561
631 phono-index_next 0x0000000000001562
632 phono-index_previous 0x0000000000001563
633 phono-stereo/mono 0x0000000000001564
634 phono-INVALID 0x0000000000001565
635 phono-INVALID 0x0000000000001566
636 phono-INVALID 0x0000000000001567
637 phono-INVALID 0x0000000000001568
638 phono-store_execute 0x0000000000001569
639 phono-INVALID 0x000000000000156A
640 phono-scan_forward 0x000000000000156B
641 phono-INVALID 0x000000000000156C
642 phono-open/close 0x000000000000156D
643 phono-wave_scroll 0x000000000000156E
644 phono-INVALID 0x000000000000156F
645 phono-pause 0x0000000000001570
646 phono-erase 0x0000000000001571
647 phono-rewind 0x0000000000001572
648 phono-go_to 0x0000000000001573
649 phono-wind 0x0000000000001574
650 phono-play 0x0000000000001575
651 phono-stop 0x0000000000001576
652 phono-recording 0x0000000000001577
653 phono-external1 0x0000000000001578
654 phono-external2 0x0000000000001579
655 phono-clear_all_memory 0x000000000000157A
656 phono-INVALID 0x000000000000157B
657 phono-INVALID 0x000000000000157C
658 phono-system_standby 0x000000000000157D
659 phono-counter_memory 0x000000000000157E
660 phono-system_select 0x000000000000157F
661 phono-surround_sound 0x0000000000000540
662 phono-balance_front 0x0000000000000541
663 phono-balance_rear 0x0000000000000542
664 phono-sound_effects1 0x0000000000000543
665 phono-sound_effects2 0x0000000000000544
666 phono-sound_effects3 0x0000000000000545
667 phono-sound_effects4 0x0000000000000546
668 phono-sound_effects5 0x0000000000000547
669 phono-sound_or_menu_func.1 0x0000000000000548
670 phono-sound_or_menu_func.2 0x0000000000000549
671 phono-sound_or_menu_func.3 0x000000000000054A
672 phono-linear_function_up 0x000000000000054D
673 phono-linear_function_down 0x000000000000054E
674 phono-sound_or_menu_func. 0x000000000000054F
675 phono-cursor_step_up 0x0000000000000550
676 phono-cursor_step_down 0x0000000000000551
677 phono-menu_on 0x0000000000000552
678 phono-menu_off 0x0000000000000553
679 phono-display_A/V_status 0x0000000000000554
680 phono-cursor_step_left 0x0000000000000555
681 phono-cursor_step_right 0x0000000000000556
682 phono-menu_function 0x0000000000000557
683 phono-PIP_on/off 0x0000000000000558
684 phono-PIP_shift 0x0000000000000559
685 phono-PIP_main_swap 0x000000000000055A
686 phono-strobe_on/off 0x000000000000055B
687 phono-multi_strobe 0x000000000000055C
688 phono-main_freezed 0x000000000000055D
689 phono-3/9_multi_scan 0x000000000000055E
690 phono-PIP_mode_select 0x000000000000055F
691 phono-mosaic 0x0000000000000560
692 phono-solarization 0x0000000000000561
693 phono-main_stored 0x0000000000000562
694 phono-PIP_strobe 0x0000000000000563
695 phono-recall_main 0x0000000000000564
696 phono-PIP_freeze 0x0000000000000565
697 phono-PIP_step_up 0x0000000000000566
698 phono-PIP_step_down 0x0000000000000567
699 phono-INVALID 0x0000000000000568
700 phono-INVALID 0x0000000000000569
701 phono-INVALID 0x000000000000056A
702 phono-INVALID 0x000000000000056B
703 phono-INVALID 0x000000000000056C
704 phono-INVALID 0x000000000000056D
705 phono-INVALID 0x0000000000000572
706 phono-INVALID 0x0000000000000573
707 phono-INVALID 0x0000000000000574
708 phono-INVALID 0x0000000000000575
709 phono-sub_mode 0x0000000000000576
710 phono-sub_mode 0x0000000000000577
711 phono-connect 0x000000000000057B
712 phono-disconnect 0x000000000000057C
713 rec1-0 0x0000000000001480
714 rec1-1 0x0000000000001481
715 rec1-2 0x0000000000001482
716 rec1-3 0x0000000000001483
717 rec1-4 0x0000000000001484
718 rec1-5 0x0000000000001485
719 rec1-6 0x0000000000001486
720 rec1-7 0x0000000000001487
721 rec1-8 0x0000000000001488
722 rec1-9 0x0000000000001489
723 rec1-INVALID 0x000000000000148A
724 rec1-INVALID 0x000000000000148B
725 rec1-standby 0x000000000000148C
726 rec1-mute/demute 0x000000000000148D
727 rec1-P.P. 0x000000000000148E
728 rec1-display 0x000000000000148F
729 rec1-volume+ 0x0000000000001490
730 rec1-volume- 0x0000000000001491
731 rec1-brightness+ 0x0000000000001492
732 rec1-brightness- 0x0000000000001493
733 rec1-colour_saturation+ 0x0000000000001494
734 rec1-colour_saturation- 0x0000000000001495
735 rec1-bass+ 0x0000000000001496
736 rec1-bass- 0x0000000000001497
737 rec1-treble+ 0x0000000000001498
738 rec1-treble- 0x0000000000001499
739 rec1-balance_right 0x000000000000149A
740 rec1-balance_left 0x000000000000149B
741 rec1-repeat_once 0x000000000000149C
742 rec1-repeat_continuously 0x000000000000149D
743 rec1-select+ 0x000000000000149E
744 rec1-select- 0x000000000000149F
745 rec1-next 0x00000000000014A0
746 rec1-previous 0x00000000000014A1
747 rec1-INVALID 0x00000000000014A2
748 rec1-last_record_cancel 0x00000000000014A3
749 rec1-sequential 0x00000000000014A4
750 rec1-blank_search 0x00000000000014A5
751 rec1-INVALID 0x00000000000014A6
752 rec1-INVALID 0x00000000000014A7
753 rec1-recording_pause 0x00000000000014A8
754 rec1-store_execute 0x00000000000014A9
755 rec1-recording_blank 0x00000000000014AA
756 rec1-scan_forward 0x00000000000014AB
757 rec1-mechanism_A 0x00000000000014AC
758 rec1-eject 0x00000000000014AD
759 rec1-mechanism_B 0x00000000000014AE
760 rec1-play_reverse 0x00000000000014AF
761 rec1-pause 0x00000000000014B0
762 rec1-erase 0x00000000000014B1
763 rec1-rewind 0x00000000000014B2
764 rec1-go_to 0x00000000000014B3
765 rec1-wind 0x00000000000014B4
766 rec1-play 0x00000000000014B5
767 rec1-stop 0x00000000000014B6
768 rec1-recording 0x00000000000014B7
769 rec1-external1 0x00000000000014B8
770 rec1-external2 0x00000000000014B9
771 rec1-clear_all_memory 0x00000000000014BA
772 rec1-INVALID 0x00000000000014BB
773 rec1-INVALID 0x00000000000014BC
774 rec1-system_standby 0x00000000000014BD
775 rec1-INVALID 0x00000000000014BE
776 rec1-system_select 0x00000000000014BF
777 rec1-surround_sound 0x0000000000000480
778 rec1-balance_front 0x0000000000000481
779 rec1-balance_rear 0x0000000000000482
780 rec1-sound_effects1 0x0000000000000483
781 rec1-sound_effects2 0x0000000000000484
782 rec1-sound_effects3 0x0000000000000485
783 rec1-sound_effects4 0x0000000000000486
784 rec1-sound_effects5 0x0000000000000487
785 rec1-sound_or_menu_func.1 0x0000000000000488
786 rec1-sound_or_menu_func.2 0x0000000000000489
787 rec1-sound_or_menu_func.3 0x000000000000048A
788 rec1-linear_function_up 0x000000000000048D
789 rec1-linear_function_down 0x000000000000048E
790 rec1-sound_or_menu_func. 0x000000000000048F
791 rec1-cursor_step_up 0x0000000000000490
792 rec1-cursor_step_down 0x0000000000000491
793 rec1-menu_on 0x0000000000000492
794 rec1-menu_off 0x0000000000000493
795 rec1-display_A/V_status 0x0000000000000494
796 rec1-cursor_step_left 0x0000000000000495
797 rec1-cursor_step_right 0x0000000000000496
798 rec1-menu_function 0x0000000000000497
799 rec1-PIP_on/off 0x0000000000000498
800 rec1-PIP_shift 0x0000000000000499
801 rec1-PIP_main_swap 0x000000000000049A
802 rec1-strobe_on/off 0x000000000000049B
803 rec1-multi_strobe 0x000000000000049C
804 rec1-main_freezed 0x000000000000049D
805 rec1-3/9_multi_scan 0x000000000000049E
806 rec1-PIP_mode_select 0x000000000000049F
807 rec1-mosaic 0x00000000000004A0
808 rec1-solarization 0x00000000000004A1
809 rec1-main_stored 0x00000000000004A2
810 rec1-PIP_strobe 0x00000000000004A3
811 rec1-recall_main 0x00000000000004A4
812 rec1-PIP_freeze 0x00000000000004A5
813 rec1-PIP_step_up 0x00000000000004A6
814 rec1-PIP_step_down 0x00000000000004A7
815 rec1-automatic_start_ID 0x00000000000004A8
816 rec1-write_skip_ID 0x00000000000004A9
817 rec1-skip_on/off 0x00000000000004AA
818 rec1-write_end_ID 0x00000000000004AB
819 rec1-write_FTS 0x00000000000004AC
820 rec1-write_TOC 0x00000000000004AD
821 rec1-write_start_ID 0x00000000000004B2
822 rec1-Ca/Er/SK_ID 0x00000000000004B3
823 rec1-reformat 0x00000000000004B4
824 rec1-blank_search 0x00000000000004B5
825 rec1-sub_mode 0x00000000000004B6
826 rec1-sub_mode 0x00000000000004B7
827 rec1-connect 0x00000000000004BB
828 rec1-disconnect 0x00000000000004BC
829 rec2-0 0x00000000000015C0
830 rec2-1 0x00000000000015C1
831 rec2-2 0x00000000000015C2
832 rec2-3 0x00000000000015C3
833 rec2-4 0x00000000000015C4
834 rec2-5 0x00000000000015C5
835 rec2-6 0x00000000000015C6
836 rec2-7 0x00000000000015C7
837 rec2-8 0x00000000000015C8
838 rec2-9 0x00000000000015C9
839 rec2-INVALID 0x00000000000015CA
840 rec2-INVALID 0x00000000000015CB
841 rec2-standby 0x00000000000015CC
842 rec2-mute/demute 0x00000000000015CD
843 rec2-P.P. 0x00000000000015CE
844 rec2-display 0x00000000000015CF
845 rec2-volume+ 0x00000000000015D0
846 rec2-volume- 0x00000000000015D1
847 rec2-brightness+ 0x00000000000015D2
848 rec2-brightness- 0x00000000000015D3
849 rec2-colour_saturation+ 0x00000000000015D4
850 rec2-colour_saturation- 0x00000000000015D5
851 rec2-bass+ 0x00000000000015D6
852 rec2-bass- 0x00000000000015D7
853 rec2-treble+ 0x00000000000015D8
854 rec2-treble- 0x00000000000015D9
855 rec2-balance_right 0x00000000000015DA
856 rec2-balance_left 0x00000000000015DB
857 rec2-repeat_once 0x00000000000015DC
858 rec2-repeat_continuously 0x00000000000015DD
859 rec2-select+ 0x00000000000015DE
860 rec2-select- 0x00000000000015DF
861 rec2-next 0x00000000000015E0
862 rec2-previous 0x00000000000015E1
863 rec2-INVALID 0x00000000000015E2
864 rec2-last_record_cancel 0x00000000000015E3
865 rec2-sequential 0x00000000000015E4
866 rec2-blank_search 0x00000000000015E5
867 rec2-INVALID 0x00000000000015E6
868 rec2-INVALID 0x00000000000015E7
869 rec2-recording_pause 0x00000000000015E8
870 rec2-store_execute 0x00000000000015E9
871 rec2-recording_blank 0x00000000000015EA
872 rec2-scan_forward 0x00000000000015EB
873 rec2-mechanism_A 0x00000000000015EC
874 rec2-eject 0x00000000000015ED
875 rec2-mechanism_B 0x00000000000015EE
876 rec2-play_reverse 0x00000000000015EF
877 rec2-pause 0x00000000000015F0
878 rec2-erase 0x00000000000015F1
879 rec2-rewind 0x00000000000015F2
880 rec2-go_to 0x00000000000015F3
881 rec2-wind 0x00000000000015F4
882 rec2-play 0x00000000000015F5
883 rec2-stop 0x00000000000015F6
884 rec2-recording 0x00000000000015F7
885 rec2-external1 0x00000000000015F8
886 rec2-external2 0x00000000000015F9
887 rec2-clear_all_memory 0x00000000000015FA
888 rec2-INVALID 0x00000000000015FB
889 rec2-INVALID 0x00000000000015FC
890 rec2-system_standby 0x00000000000015FD
891 rec2-INVALID 0x00000000000015FE
892 rec2-system_select 0x00000000000015FF
893 rec2-surround_sound 0x00000000000005C0
894 rec2-balance_front 0x00000000000005C1
895 rec2-balance_rear 0x00000000000005C2
896 rec2-sound_effects1 0x00000000000005C3
897 rec2-sound_effects2 0x00000000000005C4
898 rec2-sound_effects3 0x00000000000005C5
899 rec2-sound_effects4 0x00000000000005C6
900 rec2-sound_effects5 0x00000000000005C7
901 rec2-sound_or_menu_func.1 0x00000000000005C8
902 rec2-sound_or_menu_func.2 0x00000000000005C9
903 rec2-sound_or_menu_func.3 0x00000000000005CA
904 rec2-linear_function_up 0x00000000000005CD
905 rec2-linear_function_down 0x00000000000005CE
906 rec2-sound_or_menu_func. 0x00000000000005CF
907 rec2-cursor_step_up 0x00000000000005D0
908 rec2-cursor_step_down 0x00000000000005D1
909 rec2-menu_on 0x00000000000005D2
910 rec2-menu_off 0x00000000000005D3
911 rec2-display_A/V_status 0x00000000000005D4
912 rec2-cursor_step_left 0x00000000000005D5
913 rec2-cursor_step_right 0x00000000000005D6
914 rec2-menu_function 0x00000000000005D7
915 rec2-PIP_on/off 0x00000000000005D8
916 rec2-PIP_shift 0x00000000000005D9
917 rec2-PIP_main_swap 0x00000000000005DA
918 rec2-strobe_on/off 0x00000000000005DB
919 rec2-multi_strobe 0x00000000000005DC
920 rec2-main_freezed 0x00000000000005DD
921 rec2-3/9_multi_scan 0x00000000000005DE
922 rec2-PIP_mode_select 0x00000000000005DF
923 rec2-mosaic 0x00000000000005E0
924 rec2-solarization 0x00000000000005E1
925 rec2-main_stored 0x00000000000005E2
926 rec2-PIP_strobe 0x00000000000005E3
927 rec2-recall_main 0x00000000000005E4
928 rec2-PIP_freeze 0x00000000000005E5
929 rec2-PIP_step_up 0x00000000000005E6
930 rec2-PIP_step_down 0x00000000000005E7
931 rec2-automatic_start_ID 0x00000000000005E8
932 rec2-write_skip_ID 0x00000000000005E9
933 rec2-skip_on/off 0x00000000000005EA
934 rec2-write_end_ID 0x00000000000005EB
935 rec2-write_FTS 0x00000000000005EC
936 rec2-write_TOC 0x00000000000005ED
937 rec2-write_start_ID 0x00000000000005F2
938 rec2-Ca/Er/SK_ID 0x00000000000005F3
939 rec2-reformat 0x00000000000005F4
940 rec2-blank_search 0x00000000000005F5
941 rec2-sub_mode 0x00000000000005F6
942 rec2-sub_mode 0x00000000000005F7
943 rec2-connect 0x00000000000005FB
944 rec2-disconnect 0x00000000000005FC
945 sat-0 0x0000000000001200
946 sat-1 0x0000000000001201
947 sat-2 0x0000000000001202
948 sat-3 0x0000000000001203
949 sat-4 0x0000000000001204
950 sat-5 0x0000000000001205
951 sat-6 0x0000000000001206
952 sat-7 0x0000000000001207
953 sat-8 0x0000000000001208
954 sat-9 0x0000000000001209
955 sat-1/2_digits 0x000000000000120A
956 sat-channel/program_mode 0x000000000000120B
957 sat-standby 0x000000000000120C
958 sat-mute/demute 0x000000000000120D
959 sat-P.P. 0x000000000000120E
960 sat-display 0x000000000000120F
961 sat-volume+ 0x0000000000001210
962 sat-volume- 0x0000000000001211
963 sat-brightness+ 0x0000000000001212
964 sat-brightness- 0x0000000000001213
965 sat-colour_saturation+ 0x0000000000001214
966 sat-colour_saturation- 0x0000000000001215
967 sat-bass+ 0x0000000000001216
968 sat-bass- 0x0000000000001217
969 sat-treble+ 0x0000000000001218
970 sat-treble- 0x0000000000001219
971 sat-balance_right 0x000000000000121A
972 sat-balance_left 0x000000000000121B
973 sat-INVALID 0x000000000000121C
974 sat-INVALID 0x000000000000121D
975 sat-INVALID 0x000000000000121E
976 sat-INVALID 0x000000000000121F
977 sat-channel/program+ 0x0000000000001220
978 sat-channel/program- 0x0000000000001221
979 sat-INVALID 0x0000000000001222
980 sat-language_select/mode1 0x0000000000001223
981 sat-special_stereo_on/off 0x0000000000001224
982 sat-audio_mixed_/_mode2 0x0000000000001225
983 sat-INVALID 0x0000000000001226
984 sat-INVALID 0x0000000000001227
985 sat-INVALID 0x0000000000001228
986 sat-INVALID 0x0000000000001229
987 sat-INVALID 0x000000000000122A
988 sat-INVALID 0x000000000000122B
989 sat-INVALID 0x000000000000122C
990 sat-INVALID 0x000000000000122D
991 sat-subtitle 0x000000000000122E
992 sat-INVALID 0x000000000000122F
993 sat-pause 0x0000000000001230
994 sat-erase 0x0000000000001231
995 sat-rewind 0x0000000000001232
996 sat-go_to 0x0000000000001233
997 sat-wind 0x0000000000001234
998 sat-play 0x0000000000001235
999 sat-stop 0x0000000000001236
1000 sat-recording 0x0000000000001237
1001 sat-external1 0x0000000000001238
1002 sat-external2 0x0000000000001239
1003 sat-INVALID 0x000000000000123A
1004 sat-INVALID 0x000000000000123B
1005 sat-TXT_submode 0x000000000000123C
1006 sat-system_standby 0x000000000000123D
1007 sat-INVALID 0x000000000000123E
1008 sat-system_select 0x000000000000123F
1009 sat-surround_sound 0x0000000000000200
1010 sat-balance_front 0x0000000000000201
1011 sat-balance_rear 0x0000000000000202
1012 sat-sound_effects1 0x0000000000000203
1013 sat-sound_effects2 0x0000000000000204
1014 sat-sound_effects3 0x0000000000000205
1015 sat-sound_effects4 0x0000000000000206
1016 sat-sound_effects5 0x0000000000000207
1017 sat-sound_or_menu_func.1 0x0000000000000208
1018 sat-sound_or_menu_func.2 0x0000000000000209
1019 sat-sound_or_menu_func.3 0x000000000000020A
1020 sat-INVALID 0x000000000000020B
1021 sat-INVALID 0x000000000000020C
1022 sat-linear_function_up 0x000000000000020D
1023 sat-linear_function_down 0x000000000000020E
1024 sat-sound_or_menu_func. 0x000000000000020F
1025 sat-cursor_step_up 0x0000000000000210
1026 sat-cursor_step_down 0x0000000000000211
1027 sat-menu_on 0x0000000000000212
1028 sat-menu_off 0x0000000000000213
1029 sat-display_A/V_status 0x0000000000000214
1030 sat-cursor_step_left 0x0000000000000215
1031 sat-cursor_step_right 0x0000000000000216
1032 sat-menu_function 0x0000000000000217
1033 sat-PIP_on/off 0x0000000000000218
1034 sat-PIP_shift 0x0000000000000219
1035 sat-PIP_main_swap 0x000000000000021A
1036 sat-strobe_on/off 0x000000000000021B
1037 sat-multi_strobe 0x000000000000021C
1038 sat-main_freezed 0x000000000000021D
1039 sat-3/9_multi_scan 0x000000000000021E
1040 sat-PIP_mode_select 0x000000000000021F
1041 sat-mosaic 0x0000000000000220
1042 sat-solarization 0x0000000000000221
1043 sat-main_stored 0x0000000000000222
1044 sat-PIP_strobe 0x0000000000000223
1045 sat-recall_main 0x0000000000000224
1046 sat-PIP_freeze 0x0000000000000225
1047 sat-PIP_step_up 0x0000000000000226
1048 sat-PIP_step_down 0x0000000000000227
1049 sat-INVALID 0x0000000000000228
1050 sat-INVALID 0x0000000000000229
1051 sat-INVALID 0x000000000000022A
1052 sat-INVALID 0x000000000000022B
1053 sat-INVALID 0x000000000000022C
1054 sat-INVALID 0x000000000000022D
1055 sat-INVALID 0x0000000000000230
1056 sat-INVALID 0x0000000000000231
1057 sat-INVALID 0x0000000000000232
1058 sat-INVALID 0x0000000000000233
1059 sat-INVALID 0x0000000000000234
1060 sat-INVALID 0x0000000000000235
1061 sat-sub_mode 0x0000000000000236
1062 sat-sub_mode 0x0000000000000237
1063 sat-INVALID 0x0000000000000238
1064 sat-INVALID 0x0000000000000239
1065 sat-INVALID 0x000000000000023A
1066 sat-connect 0x000000000000023B
1067 sat-INVALID 0x000000000000023C
1068 text-0 0x0000000000001080
1069 text-1 0x0000000000001081
1070 text-2 0x0000000000001082
1071 text-3 0x0000000000001083
1072 text-4 0x0000000000001084
1073 text-5 0x0000000000001085
1074 text-6 0x0000000000001086
1075 text-7 0x0000000000001087
1076 text-8 0x0000000000001088
1077 text-9 0x0000000000001089
1078 text-step_page+ 0x000000000000108A
1079 text-step_page- 0x000000000000108B
1080 text-standby 0x000000000000108C
1081 text-mute/demute 0x000000000000108D
1082 text-P.P. 0x000000000000108E
1083 text-display 0x000000000000108F
1084 text-volume+ 0x0000000000001090
1085 text-volume- 0x0000000000001091
1086 text-brightness+ 0x0000000000001092
1087 text-brightness- 0x0000000000001093
1088 text-colour_saturation+ 0x0000000000001094
1089 text-colour_saturation- 0x0000000000001095
1090 text-bass+ 0x0000000000001096
1091 text-bass- 0x0000000000001097
1092 text-treble+ 0x0000000000001098
1093 text-treble- 0x0000000000001099
1094 text-balance_right 0x000000000000109A
1095 text-balance_left 0x000000000000109B
1096 text-enter/validation_(Frnc) 0x000000000000109C
1097 text-memory_out 0x000000000000109D
1098 text-sequence_out 0x000000000000109E
1099 text-INVALID 0x000000000000109F
1100 text-exchange 0x00000000000010A0
1101 text-index/summary_(France) 0x00000000000010A1
1102 text-row_zero_(France) 0x00000000000010A2
1103 text-1st/2nd_language 0x00000000000010A3
1104 text-spacial_stereo_on/off 0x00000000000010A4
1105 text-INVALID 0x00000000000010A5
1106 text-hardcopy_printer 0x00000000000010A6
1107 text-antiope_TV_mixed_(Frnc) 0x00000000000010A7
1108 text-PIP_select 0x00000000000010A8
1109 text-page_hold_on/off 0x00000000000010A9
1110 text-clck_timed_page_(F:magazine) 0x00000000000010AA
1111 text-large_top/lrge_bot/norm 0x00000000000010AB
1112 text-reveal/conceal/canc_pic 0x00000000000010AC
1113 text-cancel_teletext_picture 0x00000000000010AD
1114 text-TV/Text_mixed/Subtitle 0x00000000000010AE
1115 text-PIP_shift 0x00000000000010AF
1116 text-pause 0x00000000000010B0
1117 text-erase 0x00000000000010B1
1118 text-rewind 0x00000000000010B2
1119 text-go_to 0x00000000000010B3
1120 text-wind 0x00000000000010B4
1121 text-play 0x00000000000010B5
1122 text-stop 0x00000000000010B6
1123 text-recording 0x00000000000010B7
1124 text-external1 0x00000000000010B8
1125 text-external2 0x00000000000010B9
1126 text-PIP_display_mode 0x00000000000010BA
1127 text-INVALID 0x00000000000010BB
1128 text-INVALID 0x00000000000010BC
1129 text-system_standby 0x00000000000010BD
1130 text-news_flash_(France) 0x00000000000010BE
1131 text-system_select 0x00000000000010BF
1132 text-surround_sound 0x0000000000000080
1133 text-balance_front 0x0000000000000081
1134 text-balance_rear 0x0000000000000082
1135 text-sound_effects1 0x0000000000000083
1136 text-sound_effects2 0x0000000000000084
1137 text-sound_effects3 0x0000000000000085
1138 text-sound_effects4 0x0000000000000086
1139 text-sound_effects5 0x0000000000000087
1140 text-sound_or_menu_func.1 0x0000000000000088
1141 text-sound_or_menu_func.2 0x0000000000000089
1142 text-sound_or_menu_func.3 0x000000000000008A
1143 text-linear_function_up 0x000000000000008D
1144 text-linear_function_down 0x000000000000008E
1145 text-sound_or_menu_func. 0x000000000000008F
1146 text-cursor_step_up 0x0000000000000090
1147 text-cursor_step_down 0x0000000000000091
1148 text-menu_on 0x0000000000000092
1149 text-menu_off 0x0000000000000093
1150 text-display_A/V_status 0x0000000000000094
1151 text-cursor_step_left 0x0000000000000095
1152 text-cursor_step_right 0x0000000000000096
1153 text-menu_function 0x0000000000000097
1154 text-PIP_on/off 0x0000000000000098
1155 text-PIP_shift 0x0000000000000099
1156 text-PIP_main_swap 0x000000000000009A
1157 text-strobe_on/off 0x000000000000009B
1158 text-multi_strobe 0x000000000000009C
1159 text-main_freezed 0x000000000000009D
1160 text-3/9_multi_scan 0x000000000000009E
1161 text-PIP_mode_select 0x000000000000009F
1162 text-mosaic 0x00000000000000A0
1163 text-solarization 0x00000000000000A1
1164 text-main_stored 0x00000000000000A2
1165 text-PIP_strobe 0x00000000000000A3
1166 text-recall_main 0x00000000000000A4
1167 text-PIP_freeze 0x00000000000000A5
1168 text-PIP_step_up 0x00000000000000A6
1169 text-PIP_step_down 0x00000000000000A7
1170 text-red 0x00000000000000AB
1171 text-green 0x00000000000000AC
1172 text-yellow 0x00000000000000AD
1173 text-cyan 0x00000000000000AE
1174 text-INVALID 0x00000000000000AF
1175 text-sub_mode 0x00000000000000B6
1176 text-sub_mode 0x00000000000000B7
1177 text-cleaning_up 0x00000000000000BA
1178 text-connect 0x00000000000000BB
1179 text-disconnect 0x00000000000000BC
1180 text-cleaning_up1 0x00000000000000BD
1181 text-cleaning_up2 0x00000000000000BE
1182 text-cleaning_up3 0x00000000000000BF
1183 tuner-0 0x0000000000001440
1184 tuner-1 0x0000000000001441
1185 tuner-2 0x0000000000001442
1186 tuner-3 0x0000000000001443
1187 tuner-4 0x0000000000001444
1188 tuner-5 0x0000000000001445
1189 tuner-6 0x0000000000001446
1190 tuner-7 0x0000000000001447
1191 tuner-8 0x0000000000001448
1192 tuner-9 0x0000000000001449
1193 tuner-1/2_digits 0x000000000000144A
1194 tuner-INVALID 0x000000000000144B
1195 tuner-standby 0x000000000000144C
1196 tuner-mute/demute 0x000000000000144D
1197 tuner-P.P. 0x000000000000144E
1198 tuner-display 0x000000000000144F
1199 tuner-volume+ 0x0000000000001450
1200 tuner-volume- 0x0000000000001451
1201 tuner-brightness+ 0x0000000000001452
1202 tuner-brightness- 0x0000000000001453
1203 tuner-colour_saturation+ 0x0000000000001454
1204 tuner-colour_saturation- 0x0000000000001455
1205 tuner-bass+ 0x0000000000001456
1206 tuner-bass- 0x0000000000001457
1207 tuner-treble+ 0x0000000000001458
1208 tuner-treble- 0x0000000000001459
1209 tuner-balance_right 0x000000000000145A
1210 tuner-balance_left 0x000000000000145B
1211 tuner-INVALID 0x000000000000145C
1212 tuner-INVALID 0x000000000000145D
1213 tuner-search+ 0x000000000000145E
1214 tuner-search- 0x000000000000145F
1215 tuner-preset+ 0x0000000000001460
1216 tuner-preset- 0x0000000000001461
1217 tuner-INVALID 0x0000000000001462
1218 tuner-INVALID 0x0000000000001463
1219 tuner-INVALID 0x0000000000001464
1220 tuner-mono/stereo 0x0000000000001465
1221 tuner-INVALID 0x0000000000001466
1222 tuner-INVALID 0x0000000000001467
1223 tuner-RF_switch 0x0000000000001468
1224 tuner-store_execute 0x0000000000001469
1225 tuner-INVALID 0x000000000000146A
1226 tuner-scan_forward 0x000000000000146B
1227 tuner-INVALID 0x000000000000146C
1228 tuner-FM 0x000000000000146D
1229 tuner-MW_(USA:_MW/FM) 0x000000000000146E
1230 tuner-LW 0x000000000000146F
1231 tuner-pause 0x0000000000001470
1232 tuner-erase 0x0000000000001471
1233 tuner-rewind 0x0000000000001472
1234 tuner-go_to 0x0000000000001473
1235 tuner-wind 0x0000000000001474
1236 tuner-play 0x0000000000001475
1237 tuner-stop 0x0000000000001476
1238 tuner-recording 0x0000000000001477
1239 tuner-external1 0x0000000000001478
1240 tuner-external2 0x0000000000001479
1241 tuner-clear_all_memory 0x000000000000147A
1242 tuner-INVALID 0x000000000000147B
1243 tuner-INVALID 0x000000000000147C
1244 tuner-system_standby 0x000000000000147D
1245 tuner-INVALID 0x000000000000147E
1246 tuner-system_select 0x000000000000147F
1247 tuner-surround_sound 0x0000000000000440
1248 tuner-balance_front 0x0000000000000441
1249 tuner-balance_rear 0x0000000000000442
1250 tuner-sound_effects1 0x0000000000000443
1251 tuner-sound_effects2 0x0000000000000444
1252 tuner-sound_effects3 0x0000000000000445
1253 tuner-sound_effects4 0x0000000000000446
1254 tuner-sound_effects5 0x0000000000000447
1255 tuner-sound_or_menu_func.1 0x0000000000000448
1256 tuner-sound_or_menu_func.2 0x0000000000000449
1257 tuner-sound_or_menu_func.3 0x000000000000044A
1258 tuner-linear_function_up 0x000000000000044D
1259 tuner-linear_function_down 0x000000000000044E
1260 tuner-sound_or_menu_func. 0x000000000000044F
1261 tuner-cursor_step_up 0x0000000000000450
1262 tuner-cursor_step_down 0x0000000000000451
1263 tuner-menu_on 0x0000000000000452
1264 tuner-menu_off 0x0000000000000453
1265 tuner-display_A/V_status 0x0000000000000454
1266 tuner-cursor_step_left 0x0000000000000455
1267 tuner-cursor_step_right 0x0000000000000456
1268 tuner-menu_function 0x0000000000000457
1269 tuner-PIP_on/off 0x0000000000000458
1270 tuner-PIP_shift 0x0000000000000459
1271 tuner-PIP_main_swap 0x000000000000045A
1272 tuner-strobe_on/off 0x000000000000045B
1273 tuner-multi_strobe 0x000000000000045C
1274 tuner-main_freezed 0x000000000000045D
1275 tuner-3/9_multi_scan 0x000000000000045E
1276 tuner-PIP_mode_select 0x000000000000045F
1277 tuner-mosaic 0x0000000000000460
1278 tuner-solarization 0x0000000000000461
1279 tuner-main_stored 0x0000000000000462
1280 tuner-PIP_strobe 0x0000000000000463
1281 tuner-recall_main 0x0000000000000464
1282 tuner-PIP_freeze 0x0000000000000465
1283 tuner-PIP_step_up 0x0000000000000466
1284 tuner-PIP_step_down 0x0000000000000467
1285 tuner-INVALID 0x000000000000046C
1286 tuner-INVALID 0x0000000000000470
1287 tuner-INVALID 0x0000000000000471
1288 tuner-INVALID 0x0000000000000476
1289 tuner-INVALID 0x0000000000000477
1290 tuner-connect 0x000000000000047B
1291 tuner-disconnect 0x000000000000047C
1292 tv1-0 0x0000000000001000
1293 tv1-1 0x0000000000001001
1294 tv1-2 0x0000000000001002
1295 tv1-3 0x0000000000001003
1296 tv1-4 0x0000000000001004
1297 tv1-5 0x0000000000001005
1298 tv1-6 0x0000000000001006
1299 tv1-7 0x0000000000001007
1300 tv1-8 0x0000000000001008
1301 tv1-9 0x0000000000001009
1302 tv1-1/2/3_digs_(japan:10) 0x000000000000100A
1303 tv1-channel/program(jap:11) 0x000000000000100B
1304 tv1-standby 0x000000000000100C
1305 tv1-mute/demute 0x000000000000100D
1306 tv1-P.P._(personal_pref.) 0x000000000000100E
1307 tv1-display 0x000000000000100F
1308 tv1-volume+ 0x0000000000001010
1309 tv1-volume- 0x0000000000001011
1310 tv1-brightness+ 0x0000000000001012
1311 tv1-brightness- 0x0000000000001013
1312 tv1-colour_saturation+ 0x0000000000001014
1313 tv1-colour_saturation- 0x0000000000001015
1314 tv1-bass+ 0x0000000000001016
1315 tv1-bass- 0x0000000000001017
1316 tv1-treble+ 0x0000000000001018
1317 tv1-treble- 0x0000000000001019
1318 tv1-balance_right 0x000000000000101A
1319 tv1-balance_left 0x000000000000101B
1320 tv1-contrast+ 0x000000000000101C
1321 tv1-contrast- 0x000000000000101D
1322 tv1-search+ 0x000000000000101E
1323 tv1-tint/hue+ 0x000000000000101F
1324 tv1-channel/program+ 0x0000000000001020
1325 tv1-channel/program- 0x0000000000001021
1326 tv1-alt/channel 0x0000000000001022
1327 tv1-1st/2nd_language 0x0000000000001023
1328 tv1-spacial_stereo_on/off 0x0000000000001024
1329 tv1-mono/stereo_(USA) 0x0000000000001025
1330 tv1-sleeptimer 0x0000000000001026
1331 tv1-tint/hue- 0x0000000000001027
1332 tv1-RF_switch/PIP_select 0x0000000000001028
1333 tv1-vote 0x0000000000001029
1334 tv1-timed_page/channel 0x000000000000102A
1335 tv1-increment_(USA) 0x000000000000102B
1336 tv1-decrement_(USA) 0x000000000000102C
1337 tv1-INVALID 0x000000000000102D
1338 tv1-2nd_controls_(USA:menu) 0x000000000000102E
1339 tv1-PIP_shift 0x000000000000102F
1340 tv1-pause 0x0000000000001030
1341 tv1-erase 0x0000000000001031
1342 tv1-rewind 0x0000000000001032
1343 tv1-go_to 0x0000000000001033
1344 tv1-wind 0x0000000000001034
1345 tv1-play 0x0000000000001035
1346 tv1-stop 0x0000000000001036
1347 tv1-recording 0x0000000000001037
1348 tv1-external1 0x0000000000001038
1349 tv1-external2 0x0000000000001039
1350 tv1-PIP_display_mode 0x000000000000103A
1351 tv1-view_data_mode/advance 0x000000000000103B
1352 tv1-teletext_submode_(J:12) 0x000000000000103C
1353 tv1-system_standby 0x000000000000103D
1354 tv1-crispener_on/off 0x000000000000103E
1355 tv1-system_select 0x000000000000103F
1356 tv1-surround_sound 0x0000000000000000
1357 tv1-balance_front 0x0000000000000001
1358 tv1-balance_rear 0x0000000000000002
1359 tv1-sound_effects1 0x0000000000000003
1360 tv1-sound_effects2 0x0000000000000004
1361 tv1-sound_effects3 0x0000000000000005
1362 tv1-sound_effects4 0x0000000000000006
1363 tv1-sound_effects5 0x0000000000000007
1364 tv1-sound_or_menu_func.1 0x0000000000000008
1365 tv1-sound_or_menu_func.2 0x0000000000000009
1366 tv1-sound_or_menu_func.3 0x000000000000000A
1367 tv1-linear_function_up 0x000000000000000D
1368 tv1-linear_function_down 0x000000000000000E
1369 tv1-sound_or_menu_func. 0x000000000000000F
1370 tv1-cursor_step_up 0x0000000000000010
1371 tv1-cursor_step_down 0x0000000000000011
1372 tv1-menu_on 0x0000000000000012
1373 tv1-menu_off 0x0000000000000013
1374 tv1-display_A/V_status 0x0000000000000014
1375 tv1-cursor_step_left 0x0000000000000015
1376 tv1-cursor_step_right 0x0000000000000016
1377 tv1-menu_function 0x0000000000000017
1378 tv1-PIP_on/off 0x0000000000000018
1379 tv1-PIP_shift 0x0000000000000019
1380 tv1-PIP_main_swap 0x000000000000001A
1381 tv1-strobe_on/off 0x000000000000001B
1382 tv1-multi_strobe 0x000000000000001C
1383 tv1-main_freezed 0x000000000000001D
1384 tv1-3/9_multi_scan 0x000000000000001E
1385 tv1-PIP_mode_select 0x000000000000001F
1386 tv1-mosaic 0x0000000000000020
1387 tv1-solarization 0x0000000000000021
1388 tv1-main_stored 0x0000000000000022
1389 tv1-PIP_strobe 0x0000000000000023
1390 tv1-recall_main 0x0000000000000024
1391 tv1-PIP_freeze 0x0000000000000025
1392 tv1-PIP_step_up 0x0000000000000026
1393 tv1-PIP_step_down 0x0000000000000027
1394 tv1-INVALID 0x000000000000002B
1395 tv1-INVALID 0x000000000000002C
1396 tv1-INVALID 0x000000000000002D
1397 tv1-INVALID 0x000000000000002E
1398 tv1-index 0x000000000000002F
1399 tv1-sub_mode 0x0000000000000036
1400 tv1-sub_mode 0x0000000000000037
1401 tv1-cleaning_up 0x000000000000003A
1402 tv1-connect 0x000000000000003B
1403 tv1-disconnect 0x000000000000003C
1404 tv1-cleaning_up1 0x000000000000003D
1405 tv1-cleaning_up2 0x000000000000003E
1406 tv1-cleaning_up3 0x000000000000003F
1407 tv2-0 0x0000000000001040
1408 tv2-1 0x0000000000001041
1409 tv2-2 0x0000000000001042
1410 tv2-3 0x0000000000001043
1411 tv2-4 0x0000000000001044
1412 tv2-5 0x0000000000001045
1413 tv2-6 0x0000000000001046
1414 tv2-7 0x0000000000001047
1415 tv2-8 0x0000000000001048
1416 tv2-9 0x0000000000001049
1417 tv2-1/2/3_digs_(japan:10) 0x000000000000104A
1418 tv2-channel/program(jap:11) 0x000000000000104B
1419 tv2-standby 0x000000000000104C
1420 tv2-mute/demute 0x000000000000104D
1421 tv2-P.P._(personal_pref.) 0x000000000000104E
1422 tv2-display 0x000000000000104F
1423 tv2-volume+ 0x0000000000001050
1424 tv2-volume- 0x0000000000001051
1425 tv2-brightness+ 0x0000000000001052
1426 tv2-brightness- 0x0000000000001053
1427 tv2-colour_saturation+ 0x0000000000001054
1428 tv2-colour_saturation- 0x0000000000001055
1429 tv2-bass+ 0x0000000000001056
1430 tv2-bass- 0x0000000000001057
1431 tv2-treble+ 0x0000000000001058
1432 tv2-treble- 0x0000000000001059
1433 tv2-balance_right 0x000000000000105A
1434 tv2-balance_left 0x000000000000105B
1435 tv2-contrast+ 0x000000000000105C
1436 tv2-contrast- 0x000000000000105D
1437 tv2-search+ 0x000000000000105E
1438 tv2-tint/hue+ 0x000000000000105F
1439 tv2-channel/program+ 0x0000000000001060
1440 tv2-channel/program- 0x0000000000001061
1441 tv2-alt/channel 0x0000000000001062
1442 tv2-1st/2nd_language 0x0000000000001063
1443 tv2-spacial_stereo_on/off 0x0000000000001064
1444 tv2-mono/stereo_(USA) 0x0000000000001065
1445 tv2-sleeptimer 0x0000000000001066
1446 tv2-tint/hue- 0x0000000000001067
1447 tv2-RF_switch/PIP_select 0x0000000000001068
1448 tv2-vote 0x0000000000001069
1449 tv2-timed_page/channel 0x000000000000106A
1450 tv2-increment_(USA) 0x000000000000106B
1451 tv2-decrement_(USA) 0x000000000000106C
1452 tv2-INVALID 0x000000000000106D
1453 tv2-2nd_controls_(USA:menu) 0x000000000000106E
1454 tv2-PIP_shift 0x000000000000106F
1455 tv2-pause 0x0000000000001070
1456 tv2-erase 0x0000000000001071
1457 tv2-rewind 0x0000000000001072
1458 tv2-go_to 0x0000000000001073
1459 tv2-wind 0x0000000000001074
1460 tv2-play 0x0000000000001075
1461 tv2-stop 0x0000000000001076
1462 tv2-recording 0x0000000000001077
1463 tv2-external1 0x0000000000001078
1464 tv2-external2 0x0000000000001079
1465 tv2-PIP_display_mode 0x000000000000107A
1466 tv2-view_data_mode/advance 0x000000000000107B
1467 tv2-teletext_submode_(J:12) 0x000000000000107C
1468 tv2-system_standby 0x000000000000107D
1469 tv2-crispener_on/off 0x000000000000107E
1470 tv2-system_select 0x000000000000107F
1471 tv2-surround_sound 0x0000000000000040
1472 tv2-balance_front 0x0000000000000041
1473 tv2-balance_rear 0x0000000000000042
1474 tv2-sound_effects1 0x0000000000000043
1475 tv2-sound_effects2 0x0000000000000044
1476 tv2-sound_effects3 0x0000000000000045
1477 tv2-sound_effects4 0x0000000000000046
1478 tv2-sound_effects5 0x0000000000000047
1479 tv2-sound_or_menu_func.1 0x0000000000000048
1480 tv2-sound_or_menu_func.2 0x0000000000000049
1481 tv2-sound_or_menu_func.3 0x000000000000004A
1482 tv2-linear_function_up 0x000000000000004D
1483 tv2-linear_function_down 0x000000000000004E
1484 tv2-sound_or_menu_func. 0x000000000000004F
1485 tv2-cursor_step_up 0x0000000000000050
1486 tv2-cursor_step_down 0x0000000000000051
1487 tv2-menu_on 0x0000000000000052
1488 tv2-menu_off 0x0000000000000053
1489 tv2-display_A/V_status 0x0000000000000054
1490 tv2-cursor_step_left 0x0000000000000055
1491 tv2-cursor_step_right 0x0000000000000056
1492 tv2-menu_function 0x0000000000000057
1493 tv2-PIP_on/off 0x0000000000000058
1494 tv2-PIP_shift 0x0000000000000059
1495 tv2-PIP_main_swap 0x000000000000005A
1496 tv2-strobe_on/off 0x000000000000005B
1497 tv2-multi_strobe 0x000000000000005C
1498 tv2-main_freezed 0x000000000000005D
1499 tv2-3/9_multi_scan 0x000000000000005E
1500 tv2-PIP_mode_select 0x000000000000005F
1501 tv2-mosaic 0x0000000000000060
1502 tv2-solarization 0x0000000000000061
1503 tv2-main_stored 0x0000000000000062
1504 tv2-PIP_strobe 0x0000000000000063
1505 tv2-recall_main 0x0000000000000064
1506 tv2-PIP_freeze 0x0000000000000065
1507 tv2-PIP_step_up 0x0000000000000066
1508 tv2-PIP_step_down 0x0000000000000067
1509 tv2-INVALID 0x000000000000006B
1510 tv2-INVALID 0x000000000000006C
1511 tv2-INVALID 0x000000000000006D
1512 tv2-INVALID 0x000000000000006E
1513 tv2-index 0x000000000000006F
1514 tv2-sub_mode 0x0000000000000076
1515 tv2-sub_mode 0x0000000000000077
1516 tv2-cleaning_up 0x000000000000007A
1517 tv2-connect 0x000000000000007B
1518 tv2-disconnect 0x000000000000007C
1519 tv2-cleaning_up1 0x000000000000007D
1520 tv2-cleaning_up2 0x000000000000007E
1521 tv2-cleaning_up3 0x000000000000007F
1522 vcr1-0 0x0000000000001140
1523 vcr1-1 0x0000000000001141
1524 vcr1-2 0x0000000000001142
1525 vcr1-3 0x0000000000001143
1526 vcr1-4 0x0000000000001144
1527 vcr1-5 0x0000000000001145
1528 vcr1-6 0x0000000000001146
1529 vcr1-7 0x0000000000001147
1530 vcr1-8 0x0000000000001148
1531 vcr1-9 0x0000000000001149
1532 vcr1-1/2_digits/AM/PM 0x000000000000114A
1533 vcr1-channel/program_mode 0x000000000000114B
1534 vcr1-standby 0x000000000000114C
1535 vcr1-mute/demute 0x000000000000114D
1536 vcr1-P.P. 0x000000000000114E
1537 vcr1-display 0x000000000000114F
1538 vcr1-volume+ 0x0000000000001150
1539 vcr1-volume- 0x0000000000001151
1540 vcr1-brightness+ 0x0000000000001152
1541 vcr1-brightness- 0x0000000000001153
1542 vcr1-colour_saturation+ 0x0000000000001154
1543 vcr1-colour_saturation- 0x0000000000001155
1544 vcr1-bass+ 0x0000000000001156
1545 vcr1-bass- 0x0000000000001157
1546 vcr1-treble+ 0x0000000000001158
1547 vcr1-treble- 0x0000000000001159
1548 vcr1-balance_right 0x000000000000115A
1549 vcr1-balance_left 0x000000000000115B
1550 vcr1-ITR_(OTR)_delay 0x000000000000115C
1551 vcr1-timer_programming 0x000000000000115D
1552 vcr1-record_select 0x000000000000115E
1553 vcr1-fast_run_reverse 0x000000000000115F
1554 vcr1-step+ 0x0000000000001160
1555 vcr1-step- 0x0000000000001161
1556 vcr1-slow_run_reverse 0x0000000000001162
1557 vcr1-audio_output_select 0x0000000000001163
1558 vcr1-clock/channel 0x0000000000001164
1559 vcr1-speed- 0x0000000000001165
1560 vcr1-speed+ 0x0000000000001166
1561 vcr1-Instant_Time_Recording 0x0000000000001167
1562 vcr1-slow_run_forward 0x0000000000001168
1563 vcr1-still_forward 0x0000000000001169
1564 vcr1-fast_run_forward 0x000000000000116A
1565 vcr1-index_scan 0x000000000000116B
1566 vcr1-scan_reverse 0x000000000000116C
1567 vcr1-eject 0x000000000000116D
1568 vcr1-scan_forward 0x000000000000116E
1569 vcr1-play_reverse 0x000000000000116F
1570 vcr1-pause 0x0000000000001170
1571 vcr1-erase 0x0000000000001171
1572 vcr1-rewind 0x0000000000001172
1573 vcr1-go_to 0x0000000000001173
1574 vcr1-wind 0x0000000000001174
1575 vcr1-play 0x0000000000001175
1576 vcr1-stop 0x0000000000001176
1577 vcr1-recording 0x0000000000001177
1578 vcr1-external1 0x0000000000001178
1579 vcr1-external2 0x0000000000001179
1580 vcr1-short/long_play 0x000000000000117A
1581 vcr1-counter_memory 0x000000000000117B
1582 vcr1-scroll_local_display 0x000000000000117C
1583 vcr1-system_standby 0x000000000000117D
1584 vcr1-RF_switch 0x000000000000117E
1585 vcr1-system_select 0x000000000000117F
1586 vcr1-surround_sound 0x0000000000000140
1587 vcr1-balance_front 0x0000000000000141
1588 vcr1-balance_rear 0x0000000000000142
1589 vcr1-sound_effects1 0x0000000000000143
1590 vcr1-sound_effects2 0x0000000000000144
1591 vcr1-sound_effects3 0x0000000000000145
1592 vcr1-sound_effects4 0x0000000000000146
1593 vcr1-sound_effects5 0x0000000000000147
1594 vcr1-sound_or_menu_func.1 0x0000000000000148
1595 vcr1-sound_or_menu_func.2 0x0000000000000149
1596 vcr1-sound_or_menu_func.3 0x000000000000014A
1597 vcr1-data_stream_start 0x000000000000014B
1598 vcr1-data_stream_end 0x000000000000014C
1599 vcr1-linear_function_up 0x000000000000014D
1600 vcr1-linear_function_down 0x000000000000014E
1601 vcr1-catalogue 0x000000000000014F
1602 vcr1-cursor_step_up 0x0000000000000150
1603 vcr1-cursor_step_down 0x0000000000000151
1604 vcr1-menu_on 0x0000000000000152
1605 vcr1-menu_off 0x0000000000000153
1606 vcr1-display_A/V_status 0x0000000000000154
1607 vcr1-cursor_step_left 0x0000000000000155
1608 vcr1-cursor_step_right 0x0000000000000156
1609 vcr1-acknowledge 0x0000000000000157
1610 vcr1-PIP_on/off 0x0000000000000158
1611 vcr1-PIP_shift 0x0000000000000159
1612 vcr1-PIP_main_swap 0x000000000000015A
1613 vcr1-strobe_on/off 0x000000000000015B
1614 vcr1-multi_strobe 0x000000000000015C
1615 vcr1-main_freezed 0x000000000000015D
1616 vcr1-3/9_multi_scan 0x000000000000015E
1617 vcr1-PIP_mode_select 0x000000000000015F
1618 vcr1-mosaic 0x0000000000000160
1619 vcr1-solarization 0x0000000000000161
1620 vcr1-main_stored 0x0000000000000162
1621 vcr1-PIP_strobe 0x0000000000000163
1622 vcr1-recall_main 0x0000000000000164
1623 vcr1-PIP_freeze 0x0000000000000165
1624 vcr1-PIP_step_up 0x0000000000000166
1625 vcr1-PIP_step_down 0x0000000000000167
1626 vcr1-automatic_start_ID 0x0000000000000168
1627 vcr1-write_skip_ID 0x0000000000000169
1628 vcr1-skip_on/off 0x000000000000016A
1629 vcr1-write_end_ID 0x000000000000016B
1630 vcr1-write_FTS 0x000000000000016C
1631 vcr1-write_TOC 0x000000000000016D
1632 vcr1-viss_index_next 0x0000000000000170
1633 vcr1-viss_index_previous 0x0000000000000171
1634 vcr1-mark 0x0000000000000172
1635 vcr1-erase 0x0000000000000173
1636 vcr1-renumber 0x0000000000000174
1637 vcr1-blank_search 0x0000000000000175
1638 vcr1-sub_mode 0x0000000000000176
1639 vcr1-sub_mode 0x0000000000000177
1640 vcr1-auto_repeat 0x0000000000000178
1641 vcr1-insert_temp 0x0000000000000179
1642 vcr1-scr_loc_disp 0x000000000000017A
1643 vcr1-connect 0x000000000000017B
1644 vcr1-INVALID 0x000000000000017C
1645 vcr2-0 0x0000000000001180
1646 vcr2-1 0x0000000000001181
1647 vcr2-2 0x0000000000001182
1648 vcr2-3 0x0000000000001183
1649 vcr2-4 0x0000000000001184
1650 vcr2-5 0x0000000000001185
1651 vcr2-6 0x0000000000001186
1652 vcr2-7 0x0000000000001187
1653 vcr2-8 0x0000000000001188
1654 vcr2-9 0x0000000000001189
1655 vcr2-1/2_digits/AM/PM 0x000000000000118A
1656 vcr2-channel/program_mode 0x000000000000118B
1657 vcr2-standby 0x000000000000118C
1658 vcr2-mute/demute 0x000000000000118D
1659 vcr2-P.P. 0x000000000000118E
1660 vcr2-display 0x000000000000118F
1661 vcr2-volume+ 0x0000000000001190
1662 vcr2-volume- 0x0000000000001191
1663 vcr2-brightness+ 0x0000000000001192
1664 vcr2-brightness- 0x0000000000001193
1665 vcr2-colour_saturation+ 0x0000000000001194
1666 vcr2-colour_saturation- 0x0000000000001195
1667 vcr2-bass+ 0x0000000000001196
1668 vcr2-bass- 0x0000000000001197
1669 vcr2-treble+ 0x0000000000001198
1670 vcr2-treble- 0x0000000000001199
1671 vcr2-balance_right 0x000000000000119A
1672 vcr2-balance_left 0x000000000000119B
1673 vcr2-ITR_(OTR)_delay 0x000000000000119C
1674 vcr2-timer_programming 0x000000000000119D
1675 vcr2-record_select 0x000000000000119E
1676 vcr2-fast_run_reverse 0x000000000000119F
1677 vcr2-step+ 0x00000000000011A0
1678 vcr2-step- 0x00000000000011A1
1679 vcr2-slow_run_reverse 0x00000000000011A2
1680 vcr2-audio_output_select 0x00000000000011A3
1681 vcr2-clock/channel 0x00000000000011A4
1682 vcr2-speed- 0x00000000000011A5
1683 vcr2-speed+ 0x00000000000011A6
1684 vcr2-Instant_Time_Recording 0x00000000000011A7
1685 vcr2-slow_run_forward 0x00000000000011A8
1686 vcr2-still_forward 0x00000000000011A9
1687 vcr2-fast_run_forward 0x00000000000011AA
1688 vcr2-index_scan 0x00000000000011AB
1689 vcr2-scan_reverse 0x00000000000011AC
1690 vcr2-eject 0x00000000000011AD
1691 vcr2-scan_forward 0x00000000000011AE
1692 vcr2-play_reverse 0x00000000000011AF
1693 vcr2-pause 0x00000000000011B0
1694 vcr2-erase 0x00000000000011B1
1695 vcr2-rewind 0x00000000000011B2
1696 vcr2-go_to 0x00000000000011B3
1697 vcr2-wind 0x00000000000011B4
1698 vcr2-play 0x00000000000011B5
1699 vcr2-stop 0x00000000000011B6
1700 vcr2-recording 0x00000000000011B7
1701 vcr2-external1 0x00000000000011B8
1702 vcr2-external2 0x00000000000011B9
1703 vcr2-short/long_play 0x00000000000011BA
1704 vcr2-counter_memory 0x00000000000011BB
1705 vcr2-scroll_local_display 0x00000000000011BC
1706 vcr2-system_standby 0x00000000000011BD
1707 vcr2-RF_switch 0x00000000000011BE
1708 vcr2-system_select 0x00000000000011BF
1709 vcr2-surround_sound 0x0000000000000180
1710 vcr2-balance_front 0x0000000000000181
1711 vcr2-balance_rear 0x0000000000000182
1712 vcr2-sound_effects1 0x0000000000000183
1713 vcr2-sound_effects2 0x0000000000000184
1714 vcr2-sound_effects3 0x0000000000000185
1715 vcr2-sound_effects4 0x0000000000000186
1716 vcr2-sound_effects5 0x0000000000000187
1717 vcr2-sound_or_menu_func.1 0x0000000000000188
1718 vcr2-sound_or_menu_func.2 0x0000000000000189
1719 vcr2-sound_or_menu_func.3 0x000000000000018A
1720 vcr2-data_stream_start 0x000000000000018B
1721 vcr2-data_stream_end 0x000000000000018C
1722 vcr2-linear_function_up 0x000000000000018D
1723 vcr2-linear_function_down 0x000000000000018E
1724 vcr2-catalogue 0x000000000000018F
1725 vcr2-cursor_step_up 0x0000000000000190
1726 vcr2-cursor_step_down 0x0000000000000191
1727 vcr2-menu_on 0x0000000000000192
1728 vcr2-menu_off 0x0000000000000193
1729 vcr2-display_A/V_status 0x0000000000000194
1730 vcr2-cursor_step_left 0x0000000000000195
1731 vcr2-cursor_step_right 0x0000000000000196
1732 vcr2-acknowledge 0x0000000000000197
1733 vcr2-PIP_on/off 0x0000000000000198
1734 vcr2-PIP_shift 0x0000000000000199
1735 vcr2-PIP_main_swap 0x000000000000019A
1736 vcr2-strobe_on/off 0x000000000000019B
1737 vcr2-multi_strobe 0x000000000000019C
1738 vcr2-main_freezed 0x000000000000019D
1739 vcr2-3/9_multi_scan 0x000000000000019E
1740 vcr2-PIP_mode_select 0x000000000000019F
1741 vcr2-mosaic 0x00000000000001A0
1742 vcr2-solarization 0x00000000000001A1
1743 vcr2-main_stored 0x00000000000001A2
1744 vcr2-PIP_strobe 0x00000000000001A3
1745 vcr2-recall_main 0x00000000000001A4
1746 vcr2-PIP_freeze 0x00000000000001A5
1747 vcr2-PIP_step_up 0x00000000000001A6
1748 vcr2-PIP_step_down 0x00000000000001A7
1749 vcr2-automatic_start_ID 0x00000000000001A8
1750 vcr2-write_skip_ID 0x00000000000001A9
1751 vcr2-skip_on/off 0x00000000000001AA
1752 vcr2-write_end_ID 0x00000000000001AB
1753 vcr2-write_FTS 0x00000000000001AC
1754 vcr2-write_TOC 0x00000000000001AD
1755 vcr2-viss_index_next 0x00000000000001B0
1756 vcr2-viss_index_previous 0x00000000000001B1
1757 vcr2-mark 0x00000000000001B2
1758 vcr2-erase 0x00000000000001B3
1759 vcr2-renumber 0x00000000000001B4
1760 vcr2-blank_search 0x00000000000001B5
1761 vcr2-sub_mode 0x00000000000001B6
1762 vcr2-sub_mode 0x00000000000001B7
1763 vcr2-auto_repeat 0x00000000000001B8
1764 vcr2-insert_temp 0x00000000000001B9
1765 vcr2-scr_loc_disp 0x00000000000001BA
1766 vcr2-connect 0x00000000000001BB
1767 vcr2-INVALID 0x00000000000001BC
1768 vd-0 0x00000000000010C0
1769 vd-1 0x00000000000010C1
1770 vd-2 0x00000000000010C2
1771 vd-3 0x00000000000010C3
1772 vd-4 0x00000000000010C4
1773 vd-5 0x00000000000010C5
1774 vd-6 0x00000000000010C6
1775 vd-7 0x00000000000010C7
1776 vd-8 0x00000000000010C8
1777 vd-9 0x00000000000010C9
1778 vd-=/=_=/= 0x00000000000010CA
1779 vd-* 0x00000000000010CB
1780 vd-standby 0x00000000000010CC
1781 vd-mute/demute 0x00000000000010CD
1782 vd-P.P. 0x00000000000010CE
1783 vd-display 0x00000000000010CF
1784 vd-volume+ 0x00000000000010D0
1785 vd-volume- 0x00000000000010D1
1786 vd-brightness+ 0x00000000000010D2
1787 vd-brightness- 0x00000000000010D3
1788 vd-colour_saturation+ 0x00000000000010D4
1789 vd-colour_saturation- 0x00000000000010D5
1790 vd-bass+ 0x00000000000010D6
1791 vd-bass- 0x00000000000010D7
1792 vd-treble+ 0x00000000000010D8
1793 vd-treble- 0x00000000000010D9
1794 vd-balance_right 0x00000000000010DA
1795 vd-balance_left 0x00000000000010DB
1796 vd-INVALID 0x00000000000010DC
1797 vd-INVALID 0x00000000000010DD
1798 vd-attribute_on/off 0x00000000000010DE
1799 vd-INVALID 0x00000000000010DF
1800 vd-INVALID 0x00000000000010E0
1801 vd-index 0x00000000000010E1
1802 vd-INVALID 0x00000000000010E2
1803 vd-1st/2nd_language 0x00000000000010E3
1804 vd-spacial_stereo_on/off 0x00000000000010E4
1805 vd-INVALID 0x00000000000010E5
1806 vd-hardcopy_printer 0x00000000000010E6
1807 vd-INVALID 0x00000000000010E7
1808 vd-terminal_initiation 0x00000000000010E8
1809 vd-INVALID 0x00000000000010E9
1810 vd-INVALID 0x00000000000010EA
1811 vd-large_top/lrge_bot/norm 0x00000000000010EB
1812 vd-INVALID 0x00000000000010EC
1813 vd-INVALID 0x00000000000010ED
1814 vd-TV/Text_mixed 0x00000000000010EE
1815 vd-view_data_line_off 0x00000000000010EF
1816 vd-pause 0x00000000000010F0
1817 vd-erase 0x00000000000010F1
1818 vd-rewind 0x00000000000010F2
1819 vd-go_to 0x00000000000010F3
1820 vd-wind 0x00000000000010F4
1821 vd-play 0x00000000000010F5
1822 vd-stop 0x00000000000010F6
1823 vd-recording 0x00000000000010F7
1824 vd-external1 0x00000000000010F8
1825 vd-external2 0x00000000000010F9
1826 vd-INVALID 0x00000000000010FA
1827 vd-view_data_line_on 0x00000000000010FB
1828 vd-INVALID 0x00000000000010FC
1829 vd-system_standby 0x00000000000010FD
1830 vd-INVALID 0x00000000000010FE
1831 vd-system_select 0x00000000000010FF
1832 vd-surround_sound 0x00000000000000C0
1833 vd-balance_front 0x00000000000000C1
1834 vd-balance_rear 0x00000000000000C2
1835 vd-sound_effects1 0x00000000000000C3
1836 vd-sound_effects2 0x00000000000000C4
1837 vd-sound_effects3 0x00000000000000C5
1838 vd-sound_effects4 0x00000000000000C6
1839 vd-sound_effects5 0x00000000000000C7
1840 vd-sound_or_menu_func.1 0x00000000000000C8
1841 vd-sound_or_menu_func.2 0x00000000000000C9
1842 vd-sound_or_menu_func.3 0x00000000000000CA
1843 vd-linear_function_up 0x00000000000000CD
1844 vd-linear_function_down 0x00000000000000CE
1845 vd-sound_or_menu_func. 0x00000000000000CF
1846 vd-cursor_step_up 0x00000000000000D0
1847 vd-cursor_step_down 0x00000000000000D1
1848 vd-menu_on 0x00000000000000D2
1849 vd-menu_off 0x00000000000000D3
1850 vd-display_A/V_status 0x00000000000000D4
1851 vd-cursor_step_left 0x00000000000000D5
1852 vd-cursor_step_right 0x00000000000000D6
1853 vd-menu_function 0x00000000000000D7
1854 vd-PIP_on/off 0x00000000000000D8
1855 vd-PIP_shift 0x00000000000000D9
1856 vd-PIP_main_swap 0x00000000000000DA
1857 vd-strobe_on/off 0x00000000000000DB
1858 vd-multi_strobe 0x00000000000000DC
1859 vd-main_freezed 0x00000000000000DD
1860 vd-3/9_multi_scan 0x00000000000000DE
1861 vd-PIP_mode_select 0x00000000000000DF
1862 vd-mosaic 0x00000000000000E0
1863 vd-solarization 0x00000000000000E1
1864 vd-main_stored 0x00000000000000E2
1865 vd-PIP_strobe 0x00000000000000E3
1866 vd-recall_main 0x00000000000000E4
1867 vd-PIP_freeze 0x00000000000000E5
1868 vd-PIP_step_up 0x00000000000000E6
1869 vd-PIP_step_down 0x00000000000000E7
1870 vd-INVALID 0x00000000000000EB
1871 vd-INVALID 0x00000000000000EC
1872 vd-INVALID 0x00000000000000ED
1873 vd-INVALID 0x00000000000000EE
1874 vd-INVALID 0x00000000000000EF
1875 vd-sub_mode 0x00000000000000F6
1876 vd-sub_mode 0x00000000000000F7
1877 vd-cleaning_up 0x00000000000000FA
1878 vd-connect 0x00000000000000FB
1879 vd-disconnect 0x00000000000000FC
1880 vd-cleaning_up1 0x00000000000000FD
1881 vd-cleaning_up2 0x00000000000000FE
1882 vd-cleaning_up3 0x00000000000000FF
1883 end codes
1884
1885end remote
1886
diff --git a/meta-extras/packages/lirc/files/lircd.init b/meta-extras/packages/lirc/files/lircd.init
new file mode 100755
index 0000000000..11ce62447f
--- /dev/null
+++ b/meta-extras/packages/lirc/files/lircd.init
@@ -0,0 +1,39 @@
1#! /bin/sh
2#
3# This is an init script for Familiar
4# Copy it to /etc/init.d/lircd and type
5# > update-rc.d lircd defaults 20
6#
7
8
9test -f /usr/sbin/lircd || exit 0
10test -f /etc/lircd.conf || exit 0
11
12case "$1" in
13 start)
14 echo -n "Starting lirc daemon: lircd"
15 start-stop-daemon --start --quiet --exec /usr/sbin/lircd -- --device=/dev/lirc
16 echo "."
17 ;;
18 stop)
19 echo -n "Stopping lirc daemon: lircd"
20 start-stop-daemon --stop --quiet --exec /usr/sbin/lircd
21 echo "."
22 ;;
23 reload|force-reload)
24 start-stop-daemon --stop --quiet --signal 1 --exec /usr/sbin/lircd
25 ;;
26 restart)
27 echo -n "Stopping lirc daemon: lircd"
28 start-stop-daemon --stop --quiet --exec /usr/sbin/lircd
29 sleep 1
30 echo -n "Starting lirc daemon: lircd"
31 start-stop-daemon --start --quiet --exec /usr/sbin/lircd -- --device=/dev/lirc
32 echo "."
33 ;;
34 *)
35 echo "Usage: /etc/init.d/lircd {start|stop|reload|restart|force-reload}"
36 exit 1
37esac
38
39exit 0
diff --git a/meta-extras/packages/lirc/files/lircexec.init b/meta-extras/packages/lirc/files/lircexec.init
new file mode 100755
index 0000000000..3a8c1a306e
--- /dev/null
+++ b/meta-extras/packages/lirc/files/lircexec.init
@@ -0,0 +1,37 @@
1#! /bin/sh
2#
3# This is an init script for Familiar
4# Copy it to /etc/init.d/lircexecd and type
5# > update-rc.d lircexecd defaults 20
6# It must be started after lircd (and it does alphabetically :-)
7# irexec reads /etc/lircrc by default
8
9
10test -f /usr/bin/irexec || exit 0
11test -f /etc/lircrc || exit 0
12
13case "$1" in
14 start)
15 echo -n "Starting lircexec daemon: irexec"
16 start-stop-daemon --start --quiet --exec /usr/bin/irexec -- --daemon
17 echo "."
18 ;;
19 stop)
20 echo -n "Stopping lircexec daemon: irexec"
21 start-stop-daemon --stop --quiet --exec /usr/bin/irexec
22 echo "."
23 ;;
24 restart|force-restart)
25 echo -n "Stopping lircexec daemon: irexec"
26 start-stop-daemon --stop --quiet --exec /usr/bin/irexec
27 sleep 1
28 echo -n "Starting lircexec daemon: irexec"
29 start-stop-daemon --start --quiet --exec /usr/bin/irexec -- --daemon
30 echo "."
31 ;;
32 *)
33 echo "Usage: /etc/init.d/lircexec {start|stop|reload|restart|force-restart}"
34 exit 1
35esac
36
37exit 0
diff --git a/meta-extras/packages/lirc/files/lircmd.init b/meta-extras/packages/lirc/files/lircmd.init
new file mode 100755
index 0000000000..1a96207dbb
--- /dev/null
+++ b/meta-extras/packages/lirc/files/lircmd.init
@@ -0,0 +1,38 @@
1#! /bin/sh
2#
3# This is an init script for Familiar
4# Copy it to /etc/init.d/lirc and type
5# > update-rc.d lirc defaults 20
6#
7
8
9test -f /usr/sbin/lircmd || exit 0
10
11case "$1" in
12 start)
13 echo -n "Starting lirc daemon: lircmd"
14 start-stop-daemon --start --quiet --exec /usr/sbin/lircmd
15 echo "."
16 ;;
17 stop)
18 echo -n "Stopping lirc daemon: lircmd"
19 start-stop-daemon --stop --quiet --exec /usr/sbin/lircmd
20 echo "."
21 ;;
22 reload|force-reload)
23 start-stop-daemon --stop --quiet --signal 1 --exec /usr/sbin/lircmd
24 ;;
25 restart)
26 echo -n "Stopping lirc daemon: lircmd"
27 start-stop-daemon --stop --quiet --exec /usr/sbin/lircmd
28 sleep 1
29 echo -n "Starting lirc daemon: lircmd"
30 start-stop-daemon --start --quiet --exec /usr/sbin/lircmd
31 echo "."
32 ;;
33 *)
34 echo "Usage: /etc/init.d/lircmd {start|stop|reload|restart|force-reload}"
35 exit 1
36esac
37
38exit 0
diff --git a/meta-extras/packages/lirc/files/lircrc_nslu2 b/meta-extras/packages/lirc/files/lircrc_nslu2
new file mode 100644
index 0000000000..0669d90b09
--- /dev/null
+++ b/meta-extras/packages/lirc/files/lircrc_nslu2
@@ -0,0 +1,113 @@
1# This is the default files read by all lirc clients
2# (see also /etc/lircd.conf)
3
4# I run /sbin/buzzer before every command to get an audible feedback
5
6## Here LIRC could shutdown your system
7#begin
8# prog = irexec
9# remote = RC5
10# repeat = 0
11# button = vcr2-standby
12# config = /sbin/buzzer; /sbin/halt
13#end
14
15
16## Here LIRC controls your mpd music deamon
17begin
18 prog = irexec
19 remote = RC5
20 repeat = 0
21 button = vcr2-pause
22 config = /sbin/buzzer; mpc toggle
23end
24begin
25 prog = irexec
26 remote = RC5
27 repeat = 0
28 button = vcr2-step+
29 config = /sbin/buzzer; mpc next
30end
31begin
32 prog = irexec
33 remote = RC5
34 repeat = 0
35 button = vcr2-step-
36 config = /sbin/buzzer; mpc prev
37end
38begin
39 prog = irexec
40 remote = RC5
41 repeat = 0
42 button = vcr2-scan_forward
43 config = /sbin/buzzer; mpc seek +00:00:30
44end
45begin
46 prog = irexec
47 remote = RC5
48 repeat = 0
49 button = vcr2-scan_reverse
50 config = /sbin/buzzer; mpc seek -00:00:30
51end
52begin
53 prog = irexec
54 remote = RC5
55 repeat = 0
56 button = vcr2-brightness+
57 config = /sbin/buzzer; mpc volume +20
58end
59begin
60 prog = irexec
61 remote = RC5
62 repeat = 0
63 button = vcr2-brightness-
64 config = /sbin/buzzer; mpc volume -20
65end
66
67
68## Here LIRC acts as an repeater
69begin
70 prog = irexec
71 remote = RC5
72 repeat = 0
73 button = vcr2-volume+
74 config = /sbin/buzzer; irsend SEND_ONCE RC5 amp1-volume+
75end
76begin
77 prog = irexec
78 remote = RC5
79 repeat = 0
80 button = vcr2-volume-
81 config = /sbin/buzzer; irsend SEND_ONCE RC5 amp1-volume-
82end
83
84
85## Here LIRC is the input device for your LC display software
86begin
87 prog = lcdd
88 remote = RC5
89 repeat = 0
90 button = vcr2-1
91 config = A
92end
93begin
94 prog = lcdd
95 remote = RC5
96 repeat = 0
97 button = vcr2-2
98 config = B
99end
100begin
101 prog = lcdd
102 remote = RC5
103 repeat = 0
104 button = vcr2-3
105 config = C
106end
107begin
108 prog = lcdd
109 remote = RC5
110 repeat = 0
111 button = vcr2-4
112 config = D
113end
diff --git a/meta-extras/packages/lirc/files/split-hauppauge.patch b/meta-extras/packages/lirc/files/split-hauppauge.patch
new file mode 100644
index 0000000000..170a233ffb
--- /dev/null
+++ b/meta-extras/packages/lirc/files/split-hauppauge.patch
@@ -0,0 +1,141 @@
1--- lirc/remotes/hauppauge/lircd.conf.hauppauge~ 2003-05-03 15:42:30.000000000 +0100
2+++ lirc/remotes/hauppauge/lircd.conf.hauppauge 2004-10-10 20:14:14.000000000 +0100
3@@ -51,71 +51,3 @@
4 end codes
5
6 end remote
7-
8-
9-#
10-# this config file was automatically generated
11-# using lirc-0.6.6(animax) on Tue Apr 15 19:50:27 2003
12-#
13-# contributed by
14-#
15-# brand: Hauppauge
16-# model no. of remote control:
17-# devices being controlled by this remote: PVR 2/350
18-#
19-
20-begin remote
21-
22- name hauppauge_pvr
23- bits 13
24- flags RC5|CONST_LENGTH
25- eps 30
26- aeps 100
27-
28- one 969 811
29- zero 969 811
30- plead 1097
31- gap 114605
32- toggle_bit 2
33-
34-
35- begin codes
36- Power 0x00000000000017FD
37- Go 0x00000000000017FB
38- 1 0x00000000000017C1
39- 2 0x00000000000017C2
40- 3 0x00000000000017C3
41- 4 0x00000000000017C4
42- 5 0x00000000000017C5
43- 6 0x00000000000017C6
44- 7 0x00000000000017C7
45- 8 0x00000000000017C8
46- 9 0x00000000000017C9
47- Back/Exit 0x00000000000017DF
48- 0 0x00000000000017C0
49- Menu 0x00000000000017CD
50- Red 0x00000000000017CB
51- Green 0x00000000000017EE
52- Yellow 0x00000000000017F8
53- Blue 0x00000000000017E9
54- Ch+ 0x00000000000017E0
55- Ch- 0x00000000000017E1
56- Vol- 0x00000000000017D1
57- Vol+ 0x00000000000017D0
58- Ok 0x00000000000017E5
59- Mute 0x00000000000017CF
60- Blank 0x00000000000017CC
61- Full 0x00000000000017FC
62- Rewind 0x00000000000017F2
63- Play 0x00000000000017F5
64- Forward 0x00000000000017F4
65- Record 0x00000000000017F7
66- Stop 0x00000000000017F6
67- Pause 0x00000000000017F0
68- Replay 0x00000000000017E4
69- Skip 0x00000000000017DE
70- end codes
71-
72-end remote
73-
74-
75--- /dev/null 2004-06-13 02:32:19.000000000 +0100
76+++ lirc/remotes/hauppauge/lircd.conf.hauppauge-pvr 2004-10-10 20:14:05.000000000 +0100
77@@ -0,0 +1,64 @@
78+#
79+# this config file was automatically generated
80+# using lirc-0.6.6(animax) on Tue Apr 15 19:50:27 2003
81+#
82+# contributed by
83+#
84+# brand: Hauppauge
85+# model no. of remote control:
86+# devices being controlled by this remote: PVR 2/350
87+#
88+
89+begin remote
90+
91+ name hauppauge_pvr
92+ bits 13
93+ flags RC5|CONST_LENGTH
94+ eps 30
95+ aeps 100
96+
97+ one 969 811
98+ zero 969 811
99+ plead 1097
100+ gap 114605
101+ toggle_bit 2
102+
103+
104+ begin codes
105+ Power 0x00000000000017FD
106+ Go 0x00000000000017FB
107+ 1 0x00000000000017C1
108+ 2 0x00000000000017C2
109+ 3 0x00000000000017C3
110+ 4 0x00000000000017C4
111+ 5 0x00000000000017C5
112+ 6 0x00000000000017C6
113+ 7 0x00000000000017C7
114+ 8 0x00000000000017C8
115+ 9 0x00000000000017C9
116+ Back/Exit 0x00000000000017DF
117+ 0 0x00000000000017C0
118+ Menu 0x00000000000017CD
119+ Red 0x00000000000017CB
120+ Green 0x00000000000017EE
121+ Yellow 0x00000000000017F8
122+ Blue 0x00000000000017E9
123+ Ch+ 0x00000000000017E0
124+ Ch- 0x00000000000017E1
125+ Vol- 0x00000000000017D1
126+ Vol+ 0x00000000000017D0
127+ Ok 0x00000000000017E5
128+ Mute 0x00000000000017CF
129+ Blank 0x00000000000017CC
130+ Full 0x00000000000017FC
131+ Rewind 0x00000000000017F2
132+ Play 0x00000000000017F5
133+ Forward 0x00000000000017F4
134+ Record 0x00000000000017F7
135+ Stop 0x00000000000017F6
136+ Pause 0x00000000000017F0
137+ Replay 0x00000000000017E4
138+ Skip 0x00000000000017DE
139+ end codes
140+
141+end remote
diff --git a/meta-extras/packages/lirc/lirc-config.inc b/meta-extras/packages/lirc/lirc-config.inc
new file mode 100644
index 0000000000..03bfc61e39
--- /dev/null
+++ b/meta-extras/packages/lirc/lirc-config.inc
@@ -0,0 +1,13 @@
1EXTRA_OECONF = "--with-kerneldir=${STAGING_KERNEL_DIR} --with-driver=${DRIVER}"
2
3DRIVER ?= "serial"
4# fails to build at the moment, re-enable later
5#DRIVER_collie = "sa1100"
6DRIVER_h3600 = "sa1100"
7DRIVER_simpad = "sa1100"
8DRIVER_nslu2 = "nslu2"
9# XXX Why is X disabled on all these platforms anyway?
10EXTRA_OECONF_append_collie = " --without-x"
11EXTRA_OECONF_append_h3600 = " --without-x"
12EXTRA_OECONF_append_simpad = " --without-x"
13EXTRA_OECONF_append_nslu2 = " --without-x --with-transmitter --with-soft-carrier"
diff --git a/meta-extras/packages/lirc/lirc-modules_0.8.3.bb b/meta-extras/packages/lirc/lirc-modules_0.8.3.bb
new file mode 100644
index 0000000000..ee1de7194e
--- /dev/null
+++ b/meta-extras/packages/lirc/lirc-modules_0.8.3.bb
@@ -0,0 +1,33 @@
1DESCRIPTION = "LIRC is a package that allows you to decode and send infra-red signals of many commonly used remote controls."
2SECTION = "base"
3PRIORITY = "optional"
4LICENSE = "GPL"
5DEPENDS = "virtual/kernel virtual/fakeroot-native"
6PR = "r2"
7
8SRC_URI = "${SOURCEFORGE_MIRROR}/lirc/lirc-${PV}.tar.gz \
9 file://lirc_sir-sa1100.patch;patch=1"
10S = "${WORKDIR}/lirc-${PV}"
11
12inherit autotools module-base
13
14include lirc-config.inc
15
16do_compile() {
17 # ${KERNEL_LD} doesn't understand the LDFLAGS, so suppress them
18 cd drivers && oe_runmake CC="${KERNEL_CC}" LD="${KERNEL_LD}" LDFLAGS=""
19}
20
21fakeroot do_install() {
22 oe_runmake -C drivers DESTDIR="${D}" moduledir="/lib/modules/${KERNEL_VERSION}/lirc" install
23 rm -rf ${D}/dev
24}
25
26pkg_postinst() {
27#!/bin/sh
28set -e
29if [ ! -c $D/dev/lirc ]; then mknod $D/dev/lirc c 61 0; fi
30exit 0
31}
32
33FILES_${PN} = "/lib/modules"
diff --git a/meta-extras/packages/lirc/lirc_0.8.3.bb b/meta-extras/packages/lirc/lirc_0.8.3.bb
new file mode 100644
index 0000000000..9e4cacc3e4
--- /dev/null
+++ b/meta-extras/packages/lirc/lirc_0.8.3.bb
@@ -0,0 +1,31 @@
1DESCRIPTION = "LIRC is a package that allows you to decode and send infra-red signals of many commonly used remote controls."
2SECTION = "console/network"
3PRIORITY = "optional"
4LICENSE = "GPL"
5DEPENDS = "virtual/kernel virtual/libx11 libxau libsm libice"
6PR = "r5"
7
8SRC_URI = "${SOURCEFORGE_MIRROR}/lirc/lirc-${PV}.tar.gz \
9 file://lircd.init file://lircmd.init"
10S = "${WORKDIR}/lirc-${PV}"
11
12inherit autotools module-base update-rc.d
13
14INITSCRIPT_NAME = "lircd"
15INITSCRIPT_PARAMS = "defaults 20"
16
17include lirc-config.inc
18
19EXTRA_OEMAKE = 'SUBDIRS="daemons tools"'
20
21do_install_append() {
22 install -d ${D}${sysconfdir}/init.d
23 install ${WORKDIR}/lircd.init ${D}${sysconfdir}/init.d/lircd
24
25 install -d ${D}${datadir}/lirc/
26 cp -pPR ${S}/remotes ${D}${datadir}/lirc/
27}
28
29PACKAGES =+ "lirc-x"
30
31FILES_lirc-x = "${bindir}/irxevent ${bindir}/xmode2"
diff --git a/meta-extras/packages/llvm/llvm-native/fix_ldflags_export.patch b/meta-extras/packages/llvm/llvm-native/fix_ldflags_export.patch
new file mode 100644
index 0000000000..77511d68f6
--- /dev/null
+++ b/meta-extras/packages/llvm/llvm-native/fix_ldflags_export.patch
@@ -0,0 +1,26 @@
1Index: trunk/tools/llvm-config/Makefile
2===================================================================
3--- trunk.orig/tools/llvm-config/Makefile 2008-02-11 15:14:22.000000000 +0000
4+++ trunk/tools/llvm-config/Makefile 2008-04-11 16:58:06.000000000 +0100
5@@ -27,7 +27,7 @@
6 # This is blank for now. We need to be careful about adding stuff here:
7 # LDFLAGS tend not to be portable, and we don't currently require the
8 # user to use libtool when linking against LLVM.
9-SUB_LDFLAGS =
10+SUB_LDFLAGS = ${LD.Flags}
11
12 FinalLibDeps = $(PROJ_OBJ_DIR)/FinalLibDeps.txt
13 LibDeps = $(PROJ_OBJ_DIR)/LibDeps.txt
14@@ -57,10 +57,11 @@
15 # Build our final script.
16 $(ToolDir)/llvm-config: llvm-config.in $(FinalLibDeps)
17 $(Echo) "Building llvm-config script."
18+ $(Echo) 's,@LLVM_LDFLAGS@,$(SUB_LDFLAGS),'
19 $(Verb) $(ECHO) 's,@LLVM_CPPFLAGS@,$(SUB_CPPFLAGS),' > temp.sed
20 $(Verb) $(ECHO) 's,@LLVM_CFLAGS@,$(SUB_CFLAGS),' >> temp.sed
21 $(Verb) $(ECHO) 's,@LLVM_CXXFLAGS@,$(SUB_CXXFLAGS),' >> temp.sed
22- $(Verb) $(ECHO) 's,@LLVM_LDFLAGS@,$(SUB_LDFLAGS),' >> temp.sed
23+ $(Verb) $(ECHO) 's#@LLVM_LDFLAGS@#$(SUB_LDFLAGS)#' >> temp.sed
24 $(Verb) $(ECHO) 's,@LLVM_BUILDMODE@,$(BuildMode),' >> temp.sed
25 $(Verb) $(SED) -f temp.sed < $< > $@
26 $(Verb) $(RM) temp.sed
diff --git a/meta-extras/packages/llvm/llvm-native_svn.bb b/meta-extras/packages/llvm/llvm-native_svn.bb
new file mode 100644
index 0000000000..56cc0d97b7
--- /dev/null
+++ b/meta-extras/packages/llvm/llvm-native_svn.bb
@@ -0,0 +1,13 @@
1DEPENDS = "flex-native"
2SRC_URI = "svn://llvm.org/svn/llvm-project/llvm;proto=http;module=trunk \
3 file://fix_ldflags_export.patch;patch=1"
4
5PV = "0.0+${SRCREV}"
6PR = "r1"
7
8S = "${WORKDIR}/trunk"
9
10inherit autotools native
11
12EXTRA_OECONF = "--enable-optimized"
13EXTRA_OEMAKE = "ENABLE_OPTIMIZED=1" \ No newline at end of file
diff --git a/meta-extras/packages/maemo/nokia770-init/fixup-770.sh b/meta-extras/packages/maemo/nokia770-init/fixup-770.sh
new file mode 100644
index 0000000000..0f1734d2ab
--- /dev/null
+++ b/meta-extras/packages/maemo/nokia770-init/fixup-770.sh
@@ -0,0 +1,26 @@
1#! /bin/sh
2case "$1" in
3 start)
4 echo -n "Unmounting virtual fs from initrd"
5 umount /mnt/initfs/sys
6 umount /mnt/initfs/proc
7 ln -s /dev/vc/0 /dev/tty0
8 ln -s /dev/vc/1 /dev/tty1
9 ln -s /dev/vc/2 /dev/tty2
10 ln -s /dev/vc/3 /dev/tty3
11 ln -s /dev/vc/4 /dev/tty4
12 ln -s /dev/vc/5 /dev/tty5
13 ln -s /dev/vc/6 /dev/tty6
14 ln -s /dev/vc/7 /dev/tty7
15 /sbin/ifconfig wlan0 up
16 ;;
17 stop)
18 ;;
19 *)
20 echo "Usage: $SCRIPTNAME {start|stop}" >&2
21 exit 1
22 ;;
23esac
24
25exit 0
26 \ No newline at end of file
diff --git a/meta-extras/packages/maemo/nokia770-init_1.0.bb b/meta-extras/packages/maemo/nokia770-init_1.0.bb
new file mode 100644
index 0000000000..9075c016a6
--- /dev/null
+++ b/meta-extras/packages/maemo/nokia770-init_1.0.bb
@@ -0,0 +1,38 @@
1LICENSE = "GPL"
2PR = "r7"
3
4DEPENDS = "base-passwd"
5
6SRC_URI = "file://fixup-770.sh"
7
8COMPATIBLE_MACHINE = "(nokia770|nokia800)"
9
10inherit update-rc.d
11
12INITSCRIPT_NAME = "fixup-770.sh"
13INITSCRIPT_PARAMS = "defaults 01"
14
15FILES_${PN} = "${sysconfdir} ${libdir}"
16
17do_install () {
18 install -d ${D}${sysconfdir}/init.d
19 install -m 755 ${WORKDIR}/fixup-770.sh ${D}/${sysconfdir}/init.d/fixup-770.sh
20
21 install -d ${D}/lib/firmware
22}
23
24pkg_postinst () {
25#!/bin/sh
26
27# set up some links to firmware and modules in initrd
28 mkdir -p $D/lib/firmware
29 ln -sf /mnt/initfs/usr/lib/hotplug/firmware/3825.arm $D/lib/firmware/3825.arm
30 ln -sf /mnt/initfs/usr/lib/hotplug/firmware/3826.arm $D/lib/firmware/3826.arm
31 ln -sf /mnt/initfs/usr/lib/hotplug/firmware/bc4fw.bin $D/lib/firmware/bc4fw.bin
32 ln -sf /mnt/initfs/usr/lib/hotplug/firmware/brf6150fw.bin $D/lib/firmware/brf6150fw.bin
33 ln -sf /mnt/initfs/usr/lib/hotplug/firmware/mtlm3825.arm $D/lib/firmware/mtlm3825.arm
34 ln -sf /mnt/initfs/usr/lib/hotplug/firmware/mtlm3826.arm $D/lib/firmware/mtlm3826.arm
35
36# rm -rf $D/lib/modules
37# ln -s /mnt/initfs/lib/modules $D/lib/modules
38}
diff --git a/meta-extras/packages/maemo/xpext/auxdir.patch b/meta-extras/packages/maemo/xpext/auxdir.patch
new file mode 100644
index 0000000000..da5841a132
--- /dev/null
+++ b/meta-extras/packages/maemo/xpext/auxdir.patch
@@ -0,0 +1,13 @@
1--- configure.ac.old 2005-06-03 12:53:28.000000000 +0200
2+++ configure.ac 2005-06-03 12:54:29.000000000 +0200
3@@ -25,9 +25,9 @@
4
5 AC_PREREQ([2.57])
6 AC_INIT([spext], [1.0], [lauri.leukkunen@nokia.com], spext)
7+AC_CONFIG_AUX_DIR(.)
8 AM_INIT_AUTOMAKE([dist-bzip2])
9 AM_MAINTAINER_MODE
10-AC_CONFIG_AUX_DIR(.)
11
12 dnl PKG_CHECK_MODULES(FIXESEXT, fixesext)
13
diff --git a/meta-extras/packages/maemo/xpext_1.0-5.bb b/meta-extras/packages/maemo/xpext_1.0-5.bb
new file mode 100644
index 0000000000..5be3d1c041
--- /dev/null
+++ b/meta-extras/packages/maemo/xpext_1.0-5.bb
@@ -0,0 +1,22 @@
1DESCRIPTION = "X Server Nokia 770 extensions library"
2LICENSE= "MIT"
3SECTION = "x11/libs"
4PRIORITY = "optional"
5DEPENDS = "virtual/libx11 libxext"
6PR = "r1"
7
8SRC_URI = "http://repository.maemo.org/pool/maemo/ossw/source/x/${PN}/${PN}_${PV}.tar.gz \
9 file://auxdir.patch;patch=1;pnum=0"
10S = "${WORKDIR}/xpext-1.0"
11
12# ${PN} is empty so we need to tweak -dev and -dbg package dependencies
13RDEPENDS_${PN}-dev = ""
14RRECOMMENDS_${PN}-dbg = "${PN}-dev (= ${EXTENDPV})"
15
16inherit autotools pkgconfig
17
18do_configure_prepend () {
19 cd ${S}
20 chmod +x ./autogen.sh
21 ./autogen.sh
22}
diff --git a/meta-extras/packages/maemo/xsp_1.0.0-8.bb b/meta-extras/packages/maemo/xsp_1.0.0-8.bb
new file mode 100644
index 0000000000..c722213c86
--- /dev/null
+++ b/meta-extras/packages/maemo/xsp_1.0.0-8.bb
@@ -0,0 +1,12 @@
1DESCRIPTION = "X Server Nokia 770 extensions library"
2SECTION = "x11/libs"
3PRIORITY = "optional"
4LICENSE= "MIT"
5DEPENDS = "virtual/libx11 libxext xpext"
6
7PR = "r1"
8
9SRC_URI = "http://repository.maemo.org/pool/maemo/ossw/source/x/xsp/${PN}_${PV}.tar.gz"
10S = "${WORKDIR}/Xsp"
11
12inherit autotools pkgconfig
diff --git a/meta-extras/packages/osc/osc-native_svn.bb b/meta-extras/packages/osc/osc-native_svn.bb
new file mode 100755
index 0000000000..ab0ee0ba3a
--- /dev/null
+++ b/meta-extras/packages/osc/osc-native_svn.bb
@@ -0,0 +1,28 @@
1DESCRIPTION = "osc - OpenSUSE build service command-line tool."
2HOMEPAGE = "http://en.opensuse.org/Build_Service/CLI"
3SECTION = "console/utils"
4LICENSE = "GPL"
5PV = "0.0+svnr${SRCREV}"
6PR = "r1"
7DEPENDS = "python-native rpm-native"
8RDEPENDS = ""
9
10SRC_URI = "svn://forgesvn1.novell.com/svn/opensuse/trunk/buildservice/src/clientlib/python;module=osc;proto=https"
11S = "${WORKDIR}/osc"
12
13inherit native
14
15do_install() {
16 BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \
17 STAGING_LIBDIR=${STAGING_LIBDIR} STAGING_INCDIR=${STAGING_INCDIR} \
18 ${STAGING_BINDIR_NATIVE}/python setup.py build ||
19 oefatal "python setup.py build execution failed."
20
21 BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \
22 STAGING_LIBDIR=${STAGING_LIBDIR_NATIVE} STAGING_INCDIR=${STAGING_INCDIR_NATIVE} \
23 ${STAGING_BINDIR_NATIVE}/python setup.py install --prefix=${D}${prefix} --install-data=${D}${datadir} || \
24 oefatal "python setup.py install execution failed."
25
26 ln -sf osc-wrapper.py ${D}${bindir}/osc
27}
28
diff --git a/meta-extras/packages/tasks/task-poky-x11-netbook.bb b/meta-extras/packages/tasks/task-poky-x11-netbook.bb
new file mode 100644
index 0000000000..a5ebb54073
--- /dev/null
+++ b/meta-extras/packages/tasks/task-poky-x11-netbook.bb
@@ -0,0 +1,28 @@
1#
2# Copyright (C) 2008 Intel.
3#
4
5DESCRIPTION = "Netbook Tasks for Poky"
6PR = "r1"
7
8PACKAGES = "\
9 task-poky-x11-netbook \
10 task-poky-x11-netbook-dbg \
11 task-poky-x11-netbook-dev \
12 "
13
14PACKAGE_ARCH = "${MACHINE_ARCH}"
15
16ALLOW_EMPTY = "1"
17
18NETWORK_MANAGER ?= "networkmanager-applet"
19RDEPENDS_task-poky-x11-netbook = "\
20 mutter \
21 matchbox-desktop \
22 matchbox-session-netbook \
23 matchbox-config-gtk \
24 xcursor-transparent-theme \
25 sato-icon-theme \
26 settings-daemon \
27 gtk-sato-engine \
28 ${NETWORK_MANAGER}"
diff --git a/meta-extras/packages/yum/createrepo-native/pathfix.patch b/meta-extras/packages/yum/createrepo-native/pathfix.patch
new file mode 100644
index 0000000000..a09a51ccc9
--- /dev/null
+++ b/meta-extras/packages/yum/createrepo-native/pathfix.patch
@@ -0,0 +1,81 @@
1Index: createrepo-0.9/Makefile
2===================================================================
3--- createrepo-0.9.orig/Makefile 2008-08-23 17:49:24.000000000 +0100
4+++ createrepo-0.9/Makefile 2008-08-23 17:52:01.000000000 +0100
5@@ -10,22 +10,6 @@
6 SHELL = /bin/sh
7 top_srcdir = .
8 srcdir = .
9-prefix = /usr
10-exec_prefix = ${prefix}
11-
12-bindir = ${exec_prefix}/bin
13-sbindir = ${exec_prefix}/sbin
14-libexecdir = ${exec_prefix}/libexec
15-datadir = ${prefix}/share
16-sysconfdir = ${prefix}/etc
17-sharedstatedir = ${prefix}/com
18-localstatedir = ${prefix}/var
19-libdir = ${exec_prefix}/lib
20-infodir = ${prefix}/info
21-docdir =
22-includedir = ${prefix}/include
23-oldincludedir = /usr/include
24-mandir = ${prefix}/share/man
25
26 pkgdatadir = $(datadir)/$(PKGNAME)
27 pkglibdir = $(libdir)/$(PKGNAME)
28Index: createrepo-0.9/bin/Makefile
29===================================================================
30--- createrepo-0.9.orig/bin/Makefile 2008-08-23 17:50:13.000000000 +0100
31+++ createrepo-0.9/bin/Makefile 2008-08-23 17:50:23.000000000 +0100
32@@ -1,22 +1,6 @@
33 SHELL = /bin/sh
34 top_srcdir = ..
35 srcdir = ../bin
36-prefix = /usr
37-exec_prefix = ${prefix}
38-
39-bindir = ${exec_prefix}/bin
40-sbindir = ${exec_prefix}/sbin
41-libexecdir = ${exec_prefix}/libexec
42-datadir = ${prefix}/share
43-sysconfdir = ${prefix}/etc
44-sharedstatedir = ${prefix}/com
45-localstatedir = ${prefix}/var
46-libdir = ${exec_prefix}/lib
47-infodir = ${prefix}/info
48-docdir =
49-includedir = ${prefix}/include
50-oldincludedir = /usr/include
51-mandir = ${prefix}/man
52
53 pkgdatadir = $(datadir)/$(PKGNAME)
54 pkglibdir = $(libdir)/$(PKGNAME)
55Index: createrepo-0.9/docs/Makefile
56===================================================================
57--- createrepo-0.9.orig/docs/Makefile 2008-08-23 17:52:42.000000000 +0100
58+++ createrepo-0.9/docs/Makefile 2008-08-23 17:52:50.000000000 +0100
59@@ -1,22 +1,6 @@
60 SHELL = /bin/sh
61 top_srcdir = ..
62 srcdir = ../docs
63-prefix = /usr
64-exec_prefix = ${prefix}
65-
66-bindir = ${exec_prefix}/bin
67-sbindir = ${exec_prefix}/sbin
68-libexecdir = ${exec_prefix}/libexec
69-datadir = ${prefix}/share
70-sysconfdir = ${prefix}/etc
71-sharedstatedir = ${prefix}/com
72-localstatedir = ${prefix}/var
73-libdir = ${exec_prefix}/lib
74-infodir = ${prefix}/info
75-docdir =
76-includedir = ${prefix}/include
77-oldincludedir = /usr/include
78-mandir = ${datadir}/man
79
80 pkgdatadir = $(datadir)/$(PKGNAME)
81 pkglibdir = $(libdir)/$(PKGNAME)
diff --git a/meta-extras/packages/yum/createrepo-native_0.9.8.bb b/meta-extras/packages/yum/createrepo-native_0.9.8.bb
new file mode 100644
index 0000000000..895f2e96fe
--- /dev/null
+++ b/meta-extras/packages/yum/createrepo-native_0.9.8.bb
@@ -0,0 +1,17 @@
1DEPENDS = "python-native libxml2-native"
2RDEPENDS = "yum-native"
3
4SRC_URI = "http://createrepo.baseurl.org/download/createrepo-${PV}.tar.gz \
5 file://pathfix.patch;patch=1 "
6PR = "r2"
7
8inherit autotools native
9
10S = "${WORKDIR}/createrepo-${PV}"
11
12do_compile_append () {
13 sed -e 's#exec /usr/share#exec ${datadir}#' -i ${S}/bin/createrepo
14 sed -e 's#exec /usr/share#exec ${datadir}#' -i ${S}/bin/modifyrepo
15 sed -e 's#!/usr/bin/python#!${bindir}/python#' -i ${S}/genpkgmetadata.py
16 sed -e 's#!/usr/bin/python#!${bindir}/python#' -i ${S}/modifyrepo.py
17}
diff --git a/meta-extras/packages/yum/files/98_yum b/meta-extras/packages/yum/files/98_yum
new file mode 100644
index 0000000000..cb4047ad2b
--- /dev/null
+++ b/meta-extras/packages/yum/files/98_yum
@@ -0,0 +1 @@
d root root 0755 /var/cache/yum none
diff --git a/meta-extras/packages/yum/files/extract-postinst.awk b/meta-extras/packages/yum/files/extract-postinst.awk
new file mode 100644
index 0000000000..8f2836b32c
--- /dev/null
+++ b/meta-extras/packages/yum/files/extract-postinst.awk
@@ -0,0 +1,11 @@
1/Name:.*/ {
2 package = substr($0, 7)
3 next
4}
5/postinstall.*scriptlet .*/ {
6 next
7}
8{
9 print $0 >> ENVIRON["D"] "/etc/rpm-postinsts/" package ".sh"
10}
11
diff --git a/meta-extras/packages/yum/files/fix b/meta-extras/packages/yum/files/fix
new file mode 100644
index 0000000000..bcb3301e14
--- /dev/null
+++ b/meta-extras/packages/yum/files/fix
@@ -0,0 +1,18 @@
1---
2 rpmUtils/Makefile | 2 +-
3 1 file changed, 1 insertion(+), 1 deletion(-)
4
5--- yum-3.2.18.orig/rpmUtils/Makefile
6+++ yum-3.2.18/rpmUtils/Makefile
7@@ -1,10 +1,10 @@
8 PYTHON=python
9 PACKAGE = $(shell basename `pwd`)
10 PYFILES = $(wildcard *.py)
11 PYVER := $(shell $(PYTHON) -c 'import sys; print "%.3s" %(sys.version)')
12-PYSYSDIR := $(shell $(PYTHON) -c 'import sys; print sys.prefix')
13+PYSYSDIR := /usr
14 PYLIBDIR = $(PYSYSDIR)/lib/python$(PYVER)
15 PKGDIR = $(PYLIBDIR)/site-packages/$(PACKAGE)
16
17 all:
18 echo "Nothing to do"
diff --git a/meta-extras/packages/yum/files/hacks.patch b/meta-extras/packages/yum/files/hacks.patch
new file mode 100644
index 0000000000..61f477172c
--- /dev/null
+++ b/meta-extras/packages/yum/files/hacks.patch
@@ -0,0 +1,81 @@
1---
2 rpmUtils/arch.py | 3 +++
3 rpmUtils/transaction.py | 1 +
4 yum/constants.py | 2 +-
5 yum/depsolve.py | 2 ++
6 4 files changed, 7 insertions(+), 1 deletion(-)
7
8Index: yum-3.2.18/rpmUtils/arch.py
9===================================================================
10--- yum-3.2.18.orig/rpmUtils/arch.py 2008-06-17 14:05:42.000000000 +0100
11+++ yum-3.2.18/rpmUtils/arch.py 2008-10-02 22:09:19.000000000 +0100
12@@ -275,6 +275,12 @@
13 return arch
14
15 def getCanonArch(skipRpmPlatform = 0):
16+ import os
17+ if 'YUM_ARCH_FORCE' in os.environ:
18+ return os.environ['YUM_ARCH_FORCE']
19+
20+ sys.exit(1)
21+
22 if not skipRpmPlatform and os.access("/etc/rpm/platform", os.R_OK):
23 try:
24 f = open("/etc/rpm/platform", "r")
25@@ -331,6 +338,12 @@
26 base arch is the arch before noarch in the arches dict if myarch is not
27 a key in the multilibArches."""
28
29+ import os
30+ if 'YUM_ARCH_FORCE' in os.environ:
31+ return os.environ['YUM_ARCH_FORCE']
32+
33+ sys.exit(1)
34+
35 if not myarch:
36 myarch = canonArch
37
38Index: yum-3.2.18/rpmUtils/transaction.py
39===================================================================
40--- yum-3.2.18.orig/rpmUtils/transaction.py 2008-06-17 14:05:42.000000000 +0100
41+++ yum-3.2.18/rpmUtils/transaction.py 2008-10-02 17:09:57.000000000 +0100
42@@ -43,6 +43,7 @@
43 'clean']
44 self.tsflags = []
45 self.open = True
46+ self.ts.setProbFilter(rpm.RPMPROB_FILTER_IGNOREOS | rpm.RPMPROB_FILTER_IGNOREARCH)
47
48 def __del__(self):
49 # Automatically close the rpm transaction when the reference is lost
50Index: yum-3.2.18/yum/constants.py
51===================================================================
52--- yum-3.2.18.orig/yum/constants.py 2008-07-21 16:56:54.000000000 +0100
53+++ yum-3.2.18/yum/constants.py 2008-10-02 17:09:57.000000000 +0100
54@@ -17,7 +17,7 @@
55 """
56
57 #Constants
58-YUM_PID_FILE = '/var/run/yum.pid'
59+YUM_PID_FILE = '/var/run2/yum.pid'
60
61 #transaction set states
62 TS_UPDATE = 10
63Index: yum-3.2.18/yum/depsolve.py
64===================================================================
65--- yum-3.2.18.orig/yum/depsolve.py 2008-08-06 17:05:16.000000000 +0100
66+++ yum-3.2.18/yum/depsolve.py 2008-10-02 17:09:57.000000000 +0100
67@@ -141,9 +141,14 @@
68 else:
69 self.logger.critical(_('Invalid tsflag in config file: %s'), flag)
70
71+ self._ts.addTsFlag(rpm.RPMTRANS_FLAG_NOPOST)
72+ self._ts.addTsFlag(rpm.RPMTRANS_FLAG_NOTRIGGERS)
73+
74 probfilter = 0
75 for flag in self.tsInfo.probFilterFlags:
76 probfilter |= flag
77+ probfilter |= rpm.RPMPROB_FILTER_IGNOREOS
78+ probfilter |= rpm.RPMPROB_FILTER_IGNOREARCH
79 self._ts.setProbFilter(probfilter)
80
81 def whatProvides(self, name, flags, version):
diff --git a/meta-extras/packages/yum/files/paths.patch b/meta-extras/packages/yum/files/paths.patch
new file mode 100644
index 0000000000..0175d05b34
--- /dev/null
+++ b/meta-extras/packages/yum/files/paths.patch
@@ -0,0 +1,106 @@
1---
2 Makefile | 18 +++++++++---------
3 docs/Makefile | 12 ++++++------
4 etc/Makefile | 20 ++++++++++----------
5 3 files changed, 25 insertions(+), 25 deletions(-)
6
7Index: yum-3.2.27/Makefile
8===================================================================
9--- yum-3.2.27.orig/Makefile 2010-03-04 01:10:20.000000000 +0000
10+++ yum-3.2.27/Makefile 2010-03-23 13:49:50.663912930 +0000
11@@ -22,19 +22,19 @@
12 for d in $(SUBDIRS); do make PYTHON=$(PYTHON) -C $$d; [ $$? = 0 ] || exit 1 ; done
13
14 install:
15- mkdir -p $(DESTDIR)/usr/share/yum-cli
16+ mkdir -p $(DESTDIR)$(datadir)/yum-cli
17 for p in $(PYFILES) ; do \
18- install -m 644 $$p $(DESTDIR)/usr/share/yum-cli/$$p; \
19+ install -m 644 $$p $(DESTDIR)$(datadir)/yum-cli/$$p; \
20 done
21- mv $(DESTDIR)/usr/share/yum-cli/yum-updatesd.py $(DESTDIR)/usr/share/yum-cli/yumupd.py
22- $(PYTHON) -c "import compileall; compileall.compile_dir('$(DESTDIR)/usr/share/yum-cli', 1, '$(PYDIR)', 1)"
23+ mv $(DESTDIR)$(datadir)/yum-cli/yum-updatesd.py $(DESTDIR)$(datadir)/yum-cli/yumupd.py
24+ $(PYTHON) -c "import compileall; compileall.compile_dir('$(DESTDIR)$(datadir)/yum-cli', 1, '$(PYDIR)', 1)"
25
26- mkdir -p $(DESTDIR)/usr/bin $(DESTDIR)/usr/sbin
27- install -m 755 bin/yum.py $(DESTDIR)/usr/bin/yum
28- install -m 755 bin/yum-updatesd.py $(DESTDIR)/usr/sbin/yum-updatesd
29+ mkdir -p $(DESTDIR)$(bindir) $(DESTDIR)$(sbindir)
30+ install -m 755 bin/yum.py $(DESTDIR)$(bindir)/yum
31+ install -m 755 bin/yum-updatesd.py $(DESTDIR)$(sbindir)/yum-updatesd
32
33- mkdir -p $(DESTDIR)/var/cache/yum
34- mkdir -p $(DESTDIR)/var/lib/yum
35+ mkdir -p $(DESTDIR)$(localstatedir)/cache/yum
36+ mkdir -p $(DESTDIR)$(localstatedir)/lib/yum
37
38 for d in $(SUBDIRS); do make PYTHON=$(PYTHON) DESTDIR=`cd $(DESTDIR); pwd` -C $$d install; [ $$? = 0 ] || exit 1; done
39
40Index: yum-3.2.27/docs/Makefile
41===================================================================
42--- yum-3.2.27.orig/docs/Makefile 2009-04-07 14:57:06.000000000 +0100
43+++ yum-3.2.27/docs/Makefile 2010-03-23 13:52:30.086667913 +0000
44@@ -6,10 +6,10 @@
45 rm -fr epydoc
46
47 install:
48- mkdir -p $(DESTDIR)/usr/share/man/man5
49- mkdir -p $(DESTDIR)/usr/share/man/man8
50- install -m 644 yum.8 $(DESTDIR)/usr/share/man/man8/yum.8
51- install -m 644 yum-shell.8 $(DESTDIR)/usr/share/man/man8/yum-shell.8
52- install -m 644 yum.conf.5 $(DESTDIR)/usr/share/man/man5/yum.conf.5
53- install -m 644 yum-updatesd.8 $(DESTDIR)/usr/share/man/man8/yum-updatesd.8
54- install -m 644 yum-updatesd.conf.5 $(DESTDIR)/usr/share/man/man5/yum-updatesd.conf.5
55+ mkdir -p $(DESTDIR)$(mandir)/man5
56+ mkdir -p $(DESTDIR)$(mandir)/man8
57+ install -m 644 yum.8 $(DESTDIR)$(mandir)/man8/yum.8
58+ install -m 644 yum-shell.8 $(DESTDIR)$(mandir)/man8/yum-shell.8
59+ install -m 644 yum.conf.5 $(DESTDIR)$(mandir)/man5/yum.conf.5
60+ install -m 644 yum-updatesd.8 $(DESTDIR)$(mandir)/man8/yum-updatesd.8
61+ install -m 644 yum-updatesd.conf.5 $(DESTDIR)$(mandir)/man5/yum-updatesd.conf.5
62Index: yum-3.2.27/etc/Makefile
63===================================================================
64--- yum-3.2.27.orig/etc/Makefile 2009-10-26 18:56:06.000000000 +0000
65+++ yum-3.2.27/etc/Makefile 2010-03-23 13:54:40.421912460 +0000
66@@ -1,4 +1,4 @@
67-YUMETC=$(DESTDIR)/etc/yum
68+YUMETC=$(DESTDIR)$(sysconfdir)/yum
69
70 all:
71 echo "Nothing to do"
72@@ -7,23 +7,23 @@
73 rm -f *.pyc *.pyo *~
74
75 install:
76- mkdir -p $(DESTDIR)/etc/yum/
77- mkdir -p $(DESTDIR)/etc/yum/repos.d
78+ mkdir -p $(DESTDIR)$(sysconfdir)/yum/
79+ mkdir -p $(DESTDIR)$(sysconfdir)/yum/repos.d
80
81 install -m 644 yum.conf $(YUMETC)/yum.conf
82
83 install -m 644 version-groups.conf $(YUMETC)/version-groups.conf
84
85- mkdir -p $(DESTDIR)/etc/logrotate.d
86- install -m 644 yum.logrotate $(DESTDIR)/etc/logrotate.d/yum
87+ mkdir -p $(DESTDIR)$(sysconfdir)/logrotate.d
88+ install -m 644 yum.logrotate $(DESTDIR)$(sysconfdir)/logrotate.d/yum
89
90- mkdir -p $(DESTDIR)/etc/rc.d/init.d
91- install -m 755 yum-updatesd.init $(DESTDIR)/etc/rc.d/init.d/yum-updatesd
92+ mkdir -p $(DESTDIR)$(sysconfdir)/rc.d/init.d
93+ install -m 755 yum-updatesd.init $(DESTDIR)$(sysconfdir)/rc.d/init.d/yum-updatesd
94
95- mkdir -p $(DESTDIR)/etc/dbus-1/system.d/
96- install -m 755 yum-updatesd-dbus.conf $(DESTDIR)/etc/dbus-1/system.d/yum-updatesd.conf
97+ mkdir -p $(DESTDIR)$(sysconfdir)/dbus-1/system.d/
98+ install -m 755 yum-updatesd-dbus.conf $(DESTDIR)$(sysconfdir)/dbus-1/system.d/yum-updatesd.conf
99
100- install -m 755 yum-updatesd.conf $(DESTDIR)/etc/yum/yum-updatesd.conf
101+ install -m 755 yum-updatesd.conf $(DESTDIR)$(sysconfdir)/yum/yum-updatesd.conf
102
103- mkdir -p $(DESTDIR)/etc/bash_completion.d
104- install -m 644 yum.bash $(DESTDIR)/etc/bash_completion.d
105+ mkdir -p $(DESTDIR)$(sysconfdir)/bash_completion.d
106+ install -m 644 yum.bash $(DESTDIR)$(sysconfdir)/bash_completion.d
diff --git a/meta-extras/packages/yum/files/paths2.patch b/meta-extras/packages/yum/files/paths2.patch
new file mode 100644
index 0000000000..8fe6d0c983
--- /dev/null
+++ b/meta-extras/packages/yum/files/paths2.patch
@@ -0,0 +1,35 @@
1---
2 rpmUtils/Makefile | 2 +-
3 yum/Makefile | 2 +-
4 2 files changed, 2 insertions(+), 2 deletions(-)
5
6Index: yum-3.2.27/rpmUtils/Makefile
7===================================================================
8--- yum-3.2.27.orig/rpmUtils/Makefile 2010-03-24 17:26:39.759798777 +0000
9+++ yum-3.2.27/rpmUtils/Makefile 2010-03-24 17:26:54.835863845 +0000
10@@ -2,8 +2,8 @@
11 PACKAGE = $(shell basename `pwd`)
12 PYFILES = $(wildcard *.py)
13 PYVER := $(shell $(PYTHON) -c 'import sys; print "%.3s" %(sys.version)')
14-PYSYSDIR := $(shell $(PYTHON) -c 'import sys; print sys.prefix')
15-PYLIBDIR = $(PYSYSDIR)/lib/python$(PYVER)
16+PYSYSDIR = $(libdir)
17+PYLIBDIR = $(PYSYSDIR)/python$(PYVER)
18 PKGDIR = $(PYLIBDIR)/site-packages/$(PACKAGE)
19
20 all:
21Index: yum-3.2.27/yum/Makefile
22===================================================================
23--- yum-3.2.27.orig/yum/Makefile 2010-03-24 17:26:39.759798777 +0000
24+++ yum-3.2.27/yum/Makefile 2010-03-24 17:26:43.726773783 +0000
25@@ -2,8 +2,8 @@
26 PACKAGE = $(shell basename `pwd`)
27 PYFILES = $(wildcard *.py)
28 PYVER := $(shell $(PYTHON) -c 'import sys; print "%.3s" %(sys.version)')
29-PYSYSDIR := $(shell $(PYTHON) -c 'import sys; print sys.prefix')
30-PYLIBDIR = $(PYSYSDIR)/lib/python$(PYVER)
31+PYSYSDIR = $(libdir)
32+PYLIBDIR = $(PYSYSDIR)/python$(PYVER)
33 PKGDIR = $(PYLIBDIR)/site-packages/$(PACKAGE)
34
35 all:
diff --git a/meta-extras/packages/yum/files/yum-install-recommends.py b/meta-extras/packages/yum/files/yum-install-recommends.py
new file mode 100755
index 0000000000..64716f2c3e
--- /dev/null
+++ b/meta-extras/packages/yum/files/yum-install-recommends.py
@@ -0,0 +1,39 @@
1#!/usr/bin/env python
2import os, sys
3
4root = sys.argv[1]
5installcmd = sys.argv[2]
6
7#
8# Take an rpm image and look through for Recommends:. For each recommends
9# found, try and install any matching packages including any Recommends for
10# packages installed by us.
11#
12
13
14def get_recommends():
15 deps = []
16 output = os.popen("rpm --root %s -aq --recommends" % (root))
17 lines = output.readlines()
18 for line in lines:
19 line = line.replace("(none)","")
20 if line:
21 deps.append(line.split()[0])
22 return deps
23
24processed = []
25
26while True:
27 toinstall = []
28 recommends = set(get_recommends())
29 for item in recommends:
30 if item not in processed:
31 toinstall.append(item)
32 if len(toinstall) != 0:
33 print "Installing %s" % " ".join(toinstall)
34 os.system("%s %s" % (installcmd, " ".join(toinstall)))
35 else:
36 break
37 processed.extend(toinstall)
38
39
diff --git a/meta-extras/packages/yum/yum_3.2.27.bb b/meta-extras/packages/yum/yum_3.2.27.bb
new file mode 100644
index 0000000000..acebc79dde
--- /dev/null
+++ b/meta-extras/packages/yum/yum_3.2.27.bb
@@ -0,0 +1,46 @@
1DESCRIPTION = "yum package manger is an automatic updater for rpm."
2HOMEPAGE = "http://yum.baseurl.org/"
3BUGTRACKER = "http://yum.baseurl.org/report"
4
5LICENSE = "GPLv2"
6LIC_FILES_CHKSUM = "file://COPYING;md5=18810669f13b87348459e611d31ab760 \
7 file://yum/sqlutils.py;beginline=2;endline=14;md5=d704ae6a9d69ce90768ab9188236b992"
8
9RDEPENDS = "python-rpm python-core python-iniparse python-urlgrabber \
10 python-shell python-re python-logging python-pickle \
11 python-netserver python-compression \
12 python-unixadmin python-xml python-sqlite3 \
13 python-textutils python-fcntl python-email \
14 yum-metadata-parser"
15
16PR = "r9"
17
18SRC_URI = "http://yum.baseurl.org/download/3.2/yum-${PV}.tar.gz \
19 file://paths.patch;apply=yes \
20 file://paths2.patch;apply=yes \
21 file://yum-install-recommends.py \
22 file://extract-postinst.awk \
23 file://98_yum"
24
25S = "${WORKDIR}/yum-${PV}"
26
27inherit autotools
28
29do_compile_append () {
30 sed -e 's#!/usr/bin/python#!${bindir}/python#' -e 's#/usr/share#${datadir}#' -i ${S}/bin/yum.py
31 sed -e 's#!/usr/bin/python#!${bindir}/python#' -e 's#/usr/share#${datadir}#' -i ${S}/bin/yum-updatesd.py
32}
33
34do_install_append () {
35 install -d ${D}${bindir}/
36 install ${WORKDIR}/extract-postinst.awk ${D}${bindir}/
37 install ${WORKDIR}/yum-install-recommends.py ${D}${bindir}/
38 rmdir ${D}${localstatedir}/cache/yum
39 rmdir ${D}${localstatedir}/cache
40 install -d ${D}/etc/default/volatiles
41 install -m 0644 ${WORKDIR}/98_yum ${D}/etc/default/volatiles
42}
43
44FILES_${PN} += "${libdir}/python* ${datadir}/yum-cli"
45
46BBCLASSEXTEND = "native"