| [830] | 1 | This is Qt version 4.6.3 for OS/2 and eCS. | 
|---|
| [144] | 2 |  | 
|---|
| [397] | 3 | This document contains a brief information on the OS/2 version of the Qt | 
|---|
| [524] | 4 | library. Please read it carefully before starting your work. You may also | 
|---|
|  | 5 | visit the project page at | 
|---|
| [144] | 6 |  | 
|---|
|  | 7 | http://svn.netlabs.org/qt4/wiki | 
|---|
|  | 8 |  | 
|---|
| [188] | 9 | to get more information and the latest news and also to report bugs. | 
|---|
| [144] | 10 |  | 
|---|
| [397] | 11 | To get a brief list of OS/2-specific changes from release to release | 
|---|
|  | 12 | please see the CHANGES.OS2 file included in this distribution. | 
|---|
| [144] | 13 |  | 
|---|
| [740] | 14 | Please note that this version is binary incompatible with previous versions of | 
|---|
|  | 15 | Qt 4 for OS/2! This is not a behavior of the original Qt library (where versions | 
|---|
|  | 16 | with the same major number are usually binary compatible), but it is due to the | 
|---|
|  | 17 | fact that we continue to add missing features to the OS/2 version ot Qt and this | 
|---|
|  | 18 | cannot be done witout breaking the binary compatibility. On practice, this means | 
|---|
|  | 19 | that you need to recompile your applications with the new version of the Qt | 
|---|
|  | 20 | library in order to make them work with it. | 
|---|
| [188] | 21 |  | 
|---|
| [397] | 22 |  | 
|---|
| [740] | 23 |  | 
|---|
| [144] | 24 | REQUIREMENTS | 
|---|
|  | 25 |  | 
|---|
| [397] | 26 | In order to compile the Qt library and Qt-based applications, you will need | 
|---|
|  | 27 | the following tools: | 
|---|
| [144] | 28 |  | 
|---|
|  | 29 | - One of the OS/2 Warp 4, OS/2 Warp 4.5 or eComStation operating systems. | 
|---|
|  | 30 |  | 
|---|
| [740] | 31 | - GCC compiler version 4.4.2 for OS/2, patched OpenWatcom linker and | 
|---|
|  | 32 | GNU Make 3.81beta1 or above. The GCC compiler must be set up to use the | 
|---|
|  | 33 | OpenWatcom linker for linking. | 
|---|
| [144] | 34 |  | 
|---|
| [740] | 35 | If you do not have a working GCC environment with the above requirements, it | 
|---|
|  | 36 | is recommended to download a ready-to-use GCC 4.2.2 distribution from here: | 
|---|
| [524] | 37 |  | 
|---|
| [740] | 38 | ftp://ftp.netlabs.org/pub/qt4/gcc-4_4_2-complete-20091205.zip | 
|---|
| [524] | 39 |  | 
|---|
| [740] | 40 | This distribution includes all tools necessary to compile and build the Qt | 
|---|
|  | 41 | library from the source code. Just follow the installation instructions | 
|---|
|  | 42 | contained in the README file inside this ZIP archive to set up the GCC | 
|---|
|  | 43 | environment. | 
|---|
| [524] | 44 |  | 
|---|
| [740] | 45 | Please note that starting from Qt 4.6.2, support for GCC 3.3.5 and earlier | 
|---|
|  | 46 | versions of the compiler has been dropped and the Qt library will most | 
|---|
|  | 47 | likely not build if you use one of these compilers. Later versions prior to | 
|---|
|  | 48 | GCC 4.4.2 may work but they are not tested and not supported. | 
|---|
| [950] | 49 |  | 
|---|
| [894] | 50 | - IBM RC (Resource Compiler) Version 5.00.007 (comes with OS/2 Toolkit 4.5) | 
|---|
|  | 51 | or Version 4.00.011 (comes with eCS 2.0). Other versions may not work | 
|---|
|  | 52 | correctly. | 
|---|
| [524] | 53 |  | 
|---|
| [740] | 54 | There is also a set of optional tools which are necessary to enable the selected | 
|---|
|  | 55 | features of the Qt library. If these tools are missing, the Qt configuration | 
|---|
|  | 56 | script (discussed in section "COMPILING QT" below) will automatically disable | 
|---|
|  | 57 | the corresponding feature: | 
|---|
| [144] | 58 |  | 
|---|
| [983] | 59 | - Perl 5.8.2 or above. This is required if you want to perform a shadow build | 
|---|
|  | 60 | of the Qt library (which is a recommended way to go). Please refer to | 
|---|
|  | 61 | section "COMPILING QT" for more information about shadow builds. Recent | 
|---|
|  | 62 | builds of Perl for OS/2 are available here: | 
|---|
|  | 63 |  | 
|---|
|  | 64 | http://os2ports.smedley.info/index.php?page=perl | 
|---|
|  | 65 |  | 
|---|
| [954] | 66 | - MAPSYM 4.00.000 (Oct 4 2001) to enable generation of symbol (.SYM) files for | 
|---|
|  | 67 | DLLs and executables. This tool comes with OS/2 Toolkit 4.5. Note that other | 
|---|
|  | 68 | versions of this tool may not work correctly. | 
|---|
| [144] | 69 |  | 
|---|
| [954] | 70 | - LxLite 1.3.3 or above (not tested) to enable the compression of DLLs and | 
|---|
|  | 71 | executables (which saves hard disk space and application startup time). If | 
|---|
|  | 72 | you use a recent version of eComStation (e.g. 2.0 rc6) you will already have | 
|---|
|  | 73 | LxLite installed. Otherwise, you may take it from here: | 
|---|
|  | 74 |  | 
|---|
| [740] | 75 | http://www.os2site.com/sw/util/archiver/lxlt133.zip | 
|---|
| [144] | 76 |  | 
|---|
| [789] | 77 | - CUPS 1.3.11 or later to support printing in Qt. The CUPS libraries are | 
|---|
|  | 78 | available at: | 
|---|
| [576] | 79 |  | 
|---|
| [789] | 80 | http://download.smedley.info/cups-1.3.11-os2-20090807.zip | 
|---|
| [576] | 81 |  | 
|---|
|  | 82 | Linking against eCUPS also requires pthread.lib: | 
|---|
|  | 83 |  | 
|---|
|  | 84 | http://web.os2power.com/download/lib/pthread-20100217-os2.zip | 
|---|
|  | 85 |  | 
|---|
| [788] | 86 | - OpenSSL 0.9.8o or later to support OpenSSL in Qt. The OpenSSL libraries are | 
|---|
|  | 87 | available at: | 
|---|
| [314] | 88 |  | 
|---|
| [789] | 89 | http://bauxite.sakura.ne.jp/tmp/os2/openssl-1.0.0a-os2knix-20100706-runtime.zip | 
|---|
| [788] | 90 | http://bauxite.sakura.ne.jp/tmp/os2/openssl-1.0.0a-os2knix-20100706-dev.zip | 
|---|
|  | 91 |  | 
|---|
| [792] | 92 | - MySQL 5.1 or later for the MySQL Qt plugin. The MySQL libraries are | 
|---|
|  | 93 | available at: | 
|---|
| [788] | 94 |  | 
|---|
| [792] | 95 | http://download.smedley.info/mysql-5.1.51-os2-20101001.zip | 
|---|
| [788] | 96 |  | 
|---|
| [792] | 97 | Note that you will also need the above OpenSSL libraries and pthread.lib to | 
|---|
| [824] | 98 | be able to use this MySQL build. The MySQL Qt plugin itself will require | 
|---|
|  | 99 | OpenSSL DLLs in your LIBPATH at runtime. | 
|---|
| [788] | 100 |  | 
|---|
| [803] | 101 | - PostgersSQL 9.0.1 or later to support the PostgresSQL Qt plugin. The | 
|---|
|  | 102 | PostgresSQL libraries are available at: | 
|---|
| [792] | 103 |  | 
|---|
| [817] | 104 | http://download.smedley.info/postgresql-9.0.1-os2-20101108.zip | 
|---|
| [792] | 105 |  | 
|---|
| [817] | 106 | Note that you will also need libc064x.dll for this PostgresSQL build: | 
|---|
| [803] | 107 |  | 
|---|
|  | 108 | http://download.smedley.info/libc064x.zip | 
|---|
|  | 109 |  | 
|---|
| [824] | 110 | Note that you will also need the above OpenSSL libraries and pthread.lib to | 
|---|
|  | 111 | be able to use this PostgresSQL build. The PostgresSQL Qt plugin itself will | 
|---|
|  | 112 | require OpenSSL DLLs in your LIBPATH at runtime. | 
|---|
| [803] | 113 |  | 
|---|
|  | 114 |  | 
|---|
| [824] | 115 |  | 
|---|
| [740] | 116 | SETTING UP THE ENVIRONMENT | 
|---|
| [397] | 117 |  | 
|---|
| [740] | 118 | First of all, make sure that your GCC environment is set up and meets the | 
|---|
|  | 119 | specified requirements. To perform a quick check, you may run the following | 
|---|
|  | 120 | command: | 
|---|
| [397] | 121 |  | 
|---|
| [740] | 122 | gcc --version && make --version && wl /version | 
|---|
| [397] | 123 |  | 
|---|
| [740] | 124 | If the setup is done properly, it will print the versions of the key tools | 
|---|
|  | 125 | to the console. | 
|---|
| [144] | 126 |  | 
|---|
| [740] | 127 | The next step is to set up the Qt environment. If you installed the Qt | 
|---|
|  | 128 | development libraries from the WPI archive (refer to section "USING OFFICIAL | 
|---|
|  | 129 | BINARY QT ARCHIVES" below for more details about existing WPI archives), you | 
|---|
|  | 130 | will only need to run the supplied "QtEnv.cmd" script which will do all the | 
|---|
|  | 131 | setup job for you. The script is located in the directory where you installed | 
|---|
|  | 132 | the developmnent libraries (or in the WPS folder created by the WPI installer). | 
|---|
| [760] | 133 | Execute this script in a command line session to make it ready for building | 
|---|
|  | 134 | Qt 4 applications (for example, using the "qmake" command follwed by "make" | 
|---|
|  | 135 | for applications based on qmake project files which most of them are). If you | 
|---|
|  | 136 | go that way, you may skip the rest of this section and proceed directly to | 
|---|
| [788] | 137 | section "USING OFFICIAL BINARY QT ARCHIVES" below. | 
|---|
| [524] | 138 |  | 
|---|
| [740] | 139 | If you use the full source code ZIP distribution of the Qt library or work | 
|---|
|  | 140 | directly with the Qt SVN tree, you will need to set up the environment yourself | 
|---|
|  | 141 | by performing the following steps: | 
|---|
| [259] | 142 |  | 
|---|
| [740] | 143 | - Add the "bin" subdirectory of the directory where you unpacked the Qt4 | 
|---|
|  | 144 | source tree to PATH and BEGINLIBPATH, like this: | 
|---|
| [144] | 145 |  | 
|---|
| [740] | 146 | set PATH=D:\Coding\Qt4\bin;%PATH% | 
|---|
|  | 147 | set BEGINLIBPATH=D:\Coding\Qt4\bin;%BEGINLIBPATH% | 
|---|
|  | 148 |  | 
|---|
|  | 149 | - Add the system DLLs to the GCC library path with the following command: | 
|---|
|  | 150 |  | 
|---|
|  | 151 | set LIBRARY_PATH=C:\OS2\DLL;C:\MPTN\DLL;%LIBRARY_PATH% | 
|---|
|  | 152 |  | 
|---|
|  | 153 | where C: is your boot drive. | 
|---|
|  | 154 |  | 
|---|
| [152] | 155 | - Make sure CMD.EXE is your command line processor (the generated makefiles | 
|---|
| [258] | 156 | will rely on its 'copy', 'if' and other commands). If you have a Unix shell | 
|---|
|  | 157 | (SH.EXE) in your environment, you may need to force GNU make to use CMD.EXE | 
|---|
| [740] | 158 | by executing the followingn command: | 
|---|
| [152] | 159 |  | 
|---|
| [740] | 160 | set MAKESHELL=C:\OS2\CMD.EXE | 
|---|
| [144] | 161 |  | 
|---|
| [740] | 162 | where C: is your boot drive. | 
|---|
| [258] | 163 |  | 
|---|
| [740] | 164 | Note that the QTDIR environment variable used in previous Qt versions is not | 
|---|
|  | 165 | used in Qt4 anymore. Therefore, there is no need to set this variable | 
|---|
|  | 166 | explicitly. | 
|---|
| [524] | 167 |  | 
|---|
| [740] | 168 | There is also no need to set the QMAKESPEC variable explicitly. If it is absent, | 
|---|
|  | 169 | qmake will use the specification stored in the <Qt4_Home>/mkspecs/default | 
|---|
|  | 170 | directory, which on OS/2 always refers to the "os2-g++" specification, the only | 
|---|
|  | 171 | one supported at the present time. | 
|---|
| [524] | 172 |  | 
|---|
| [740] | 173 | NOTE: | 
|---|
|  | 174 |  | 
|---|
|  | 175 | It is especially important to make sure that there are no traces of any | 
|---|
|  | 176 | other Watcom or OpenWatcom installation in the environment where you build | 
|---|
|  | 177 | Qt as it will interfere with the patched OpenWatcom linker we use. This | 
|---|
|  | 178 | basically means removing all environment variables containing "WATCOM" in | 
|---|
|  | 179 | their names and also removing references to all those Watcom installations | 
|---|
|  | 180 | from PATH. | 
|---|
|  | 181 |  | 
|---|
|  | 182 |  | 
|---|
|  | 183 |  | 
|---|
|  | 184 | SETTING UP OPTIONAL TOOLS | 
|---|
|  | 185 |  | 
|---|
|  | 186 | The following list describes the steps necessary to set up the optional tools | 
|---|
|  | 187 | that the Qt library depends on: | 
|---|
|  | 188 |  | 
|---|
| [789] | 189 | - Unzip the CUPS libraries to some directory and set the following environment | 
|---|
|  | 190 | variables to tell the Qt configure script its location: | 
|---|
| [576] | 191 |  | 
|---|
| [792] | 192 | set CUPS_INCLUDEPATH=<path_to_CUPS>\include | 
|---|
|  | 193 | set CUPS_LIBS=-L<path_to_CUPS>\lib -llibcups.a -L<path_to_pthread> -lpthread.lib | 
|---|
| [576] | 194 |  | 
|---|
| [788] | 195 | - Unzip the OpenSSL libraries to some directory and set the following | 
|---|
|  | 196 | environment variables to tell the Qt configure script its location: | 
|---|
| [144] | 197 |  | 
|---|
| [792] | 198 | set OPENSSL_INCLUDEPATH=<path_to_OpenSSL>\include | 
|---|
| [788] | 199 | set OPENSSL_LIBS= | 
|---|
| [144] | 200 |  | 
|---|
| [788] | 201 | Note that you will also need to place OpenSSL DLLs to BEGINLIBPATH (if they | 
|---|
|  | 202 | are not already in your LIBPATH) so that Qt applications can find them at | 
|---|
|  | 203 | runtime: | 
|---|
|  | 204 |  | 
|---|
| [792] | 205 | set BEGINLIBPATH=<path_to_OpenSSL>\dll;%BEGINLIBPATH% | 
|---|
| [788] | 206 |  | 
|---|
| [792] | 207 | - Unzip the MySQL archive to some directory and set the following environment | 
|---|
|  | 208 | variables to tell the Qt configure script the library location: | 
|---|
| [788] | 209 |  | 
|---|
| [792] | 210 | set MYSQL_INCLUDEPATH=<path_to_MySQL>\include' | 
|---|
|  | 211 | set MYSQL_LIBS=-L<path_to_MySQL>\lib -lmysqlclient_r -L<path_to_OpenSSL>\lib -llibssl -llibcrypto -L<path_to_pthread> -lpthread | 
|---|
| [788] | 212 |  | 
|---|
| [824] | 213 | Note that you will also need to place OpenSSL DLLs to BEGINLIBPATH (as | 
|---|
|  | 214 | described above) because the MySQL plugin links statically to them and Qt | 
|---|
|  | 215 | will not be able to load it otherwise. | 
|---|
|  | 216 |  | 
|---|
| [803] | 217 | - Unzip the PostgresSQL archive to some directory and set the following | 
|---|
|  | 218 | environment variables to tell the Qt configure script the library location: | 
|---|
| [792] | 219 |  | 
|---|
| [803] | 220 | set PSQL_INCLUDEPATH=<path_to_PostgresSQL>\include' | 
|---|
|  | 221 | set PSQL_LIBS=-L<path_to_PostgresSQL>\lib -llibpq -L<path_to_OpenSSL>\lib -llibssl -llibcrypto -L<path_to_pthread> -lpthread | 
|---|
|  | 222 |  | 
|---|
| [824] | 223 | Note that you will also need to place OpenSSL DLLs to BEGINLIBPATH (as | 
|---|
|  | 224 | described above) because the PostgresSQL plugin links statically to them and | 
|---|
|  | 225 | Qt will not be able to load it otherwise. | 
|---|
| [803] | 226 |  | 
|---|
| [824] | 227 | Note that you need to make sure that OpenSSL DLLs are in BEGINLIBPATH or in | 
|---|
|  | 228 | LIBPATH before Qt attempts to load the SQL plugins for the first time. If it | 
|---|
|  | 229 | fails to load them, it will cache a failure and will not retry even if the | 
|---|
|  | 230 | plugins can be loaded later. To fix that, you need to delete the file | 
|---|
|  | 231 | %HOME%\.config\Trolltech.ini where this cache is stored. | 
|---|
| [803] | 232 |  | 
|---|
| [824] | 233 |  | 
|---|
|  | 234 |  | 
|---|
| [397] | 235 | COMPILING QT | 
|---|
|  | 236 |  | 
|---|
| [740] | 237 | You should skip this section if you installed the Qt development libraries using | 
|---|
|  | 238 | the WPI archive (that already contains compiled release versions of the | 
|---|
|  | 239 | libraries) and proceed directly to the next section. | 
|---|
| [397] | 240 |  | 
|---|
| [983] | 241 | When the environment is set up as described above, you may build the Qt library. | 
|---|
|  | 242 | There are two distinct ways of doing this: in the source tree or in a separate | 
|---|
|  | 243 | directory of your choice. In the first case, all results of the build process | 
|---|
|  | 244 | (intermediate object files as well as final executables and DLLs) will be placed | 
|---|
|  | 245 | right in the source tree. In the second case, they will be placed in the | 
|---|
|  | 246 | separate directory -- this is called a shadow build. | 
|---|
| [144] | 247 |  | 
|---|
| [983] | 248 | Shadow builds are the recommended way to go because they keep the source | 
|---|
|  | 249 | directories clean and also allow to use the same source tree for creating any | 
|---|
|  | 250 | number of builds, each with its own build options. | 
|---|
| [144] | 251 |  | 
|---|
| [983] | 252 | To perform a shadow build, do the following steps: | 
|---|
| [144] | 253 |  | 
|---|
| [983] | 254 | 1. Create a directory outside the Qt4 source tree. | 
|---|
| [144] | 255 |  | 
|---|
| [983] | 256 | 2. Go to that directory. | 
|---|
| [144] | 257 |  | 
|---|
| [983] | 258 | 3. Type: | 
|---|
| [144] | 259 |  | 
|---|
| [983] | 260 | <source_tree>\configure.cmd | 
|---|
| [243] | 261 |  | 
|---|
| [983] | 262 | where <source_tree> is the directory containing the Qt4 source tree. This | 
|---|
|  | 263 | will create all necessary configuration files, headers, Makefiles and will | 
|---|
|  | 264 | also build the qmake tool which is necessary to control the rest of the | 
|---|
|  | 265 | build process (note that building qmake will take some time). | 
|---|
|  | 266 |  | 
|---|
|  | 267 | 4. Once the configure process is finished, type: | 
|---|
|  | 268 |  | 
|---|
|  | 269 | make | 
|---|
|  | 270 |  | 
|---|
|  | 271 | Note that by the default the shadow build will produce the release version of | 
|---|
|  | 272 | the Qt library. This may be changed by passing command line options to | 
|---|
| [990] | 273 | configure.cmd at step 3. For example, the debug build can be requested using | 
|---|
|  | 274 | the '-debug' option. For a full list of options supported by configure.cmd, | 
|---|
|  | 275 | type: | 
|---|
| [983] | 276 |  | 
|---|
| [990] | 277 | configure.cmd -h | 
|---|
|  | 278 |  | 
|---|
| [983] | 279 | To perform a normal build, you execute 'configure.cmd' followed by 'make' right | 
|---|
|  | 280 | in the directory containing the Qt4 source tree. The default in this case is to | 
|---|
|  | 281 | build both the debug and release versions of the Qt library. | 
|---|
|  | 282 |  | 
|---|
|  | 283 | Please keep in mind that in case of the dual debug and release build (where both | 
|---|
|  | 284 | flavors are stored in the same build directory), only DLL and LIB files will be | 
|---|
|  | 285 | separated (because the debug versions of them will have the 'd' suffix in the | 
|---|
|  | 286 | file name). Executable files are normally taken from the release build but, | 
|---|
|  | 287 | since the file names are identical, sometimes they may be overwritten by the | 
|---|
|  | 288 | debug versions (e.g. when you rebuild parts of the library later). For this | 
|---|
|  | 289 | reason, performing dual builds is not recommended. | 
|---|
|  | 290 |  | 
|---|
|  | 291 | The Qt library is huge so the build process will take several hours (or even | 
|---|
|  | 292 | several dozen of hours) depending on your hardware and configure options. | 
|---|
|  | 293 |  | 
|---|
| [740] | 294 | Once the library is successfully built, you may try to compile the demos and | 
|---|
|  | 295 | examples by visiting the individual example subdirectories in the source tree | 
|---|
| [983] | 296 | and typing 'qmake' followed by 'make'. | 
|---|
| [144] | 297 |  | 
|---|
| [402] | 298 | NOTE: | 
|---|
| [144] | 299 |  | 
|---|
| [402] | 300 | This version of Qt for OS/2 includes the Extended system tray plugin for | 
|---|
| [314] | 301 | XCenter/eCenter which is necessary to enable Qt support for the special | 
|---|
|  | 302 | notification area on the XCenter/eCenter panel (called the "system tray") | 
|---|
|  | 303 | which is used by many long-running applications to display their status. | 
|---|
|  | 304 | In order to activate this support, you need to install this plugin to your | 
|---|
|  | 305 | XCenter or eCenter. The plugin is built during the normal Qt build process | 
|---|
|  | 306 | and can be found in the file \plugins\xcenter\xsystray.dll in the Qt source | 
|---|
|  | 307 | tree. In order to install the plugin, do the following: | 
|---|
| [188] | 308 |  | 
|---|
| [314] | 309 | a. Copy xsystray.dll to <XWorkplace installation folder>\plugins\xcenter\ | 
|---|
|  | 310 | (on eComStation, this will be C:\ecs\system\ewps\plugins\xcenter\ where | 
|---|
|  | 311 | C: is your boot drive). | 
|---|
| [188] | 312 |  | 
|---|
| [314] | 313 | b. Restart WPS. | 
|---|
|  | 314 |  | 
|---|
|  | 315 | c. Add the "Extended system tray" widget to the XCenter/eCenter panel using | 
|---|
|  | 316 | the XCenter context menu ('Create new widget'). | 
|---|
|  | 317 |  | 
|---|
|  | 318 | Note that if you upgrade from the previous version of the plugin then | 
|---|
|  | 319 | please unlock xsystray.dll in the target folder using the UNLOCK.EXE | 
|---|
|  | 320 | utility (which you can find in the LxLite package, for example) before | 
|---|
|  | 321 | performing step a., otherwise the copy operation will fail. | 
|---|
|  | 322 |  | 
|---|
| [397] | 323 | IMPORTANT NOTE: | 
|---|
| [314] | 324 |  | 
|---|
| [397] | 325 | Please take into account that the Qt library you build on your own as | 
|---|
|  | 326 | described above is NOT intended for wide distribution with Qt applications | 
|---|
|  | 327 | you port or create. Such private Qt builds help you develop Qt applications | 
|---|
|  | 328 | (because you can easily debug your program and parts of the Qt framework at | 
|---|
|  | 329 | the source level) but being widely distributed they will create a so-called | 
|---|
|  | 330 | DLL hell when a program running on a user computer crashes because it picks | 
|---|
|  | 331 | up a wrong build of the Qt library. This will happen because even a single | 
|---|
|  | 332 | change to Qt configuration options may make your build binary incompatible | 
|---|
|  | 333 | with another build. And even if you convince the user to isolate different | 
|---|
| [740] | 334 | DLLs (using LIBPATHSTRICT and BEGINLIBPATH) it will create another major | 
|---|
|  | 335 | problem: two different Qt applications will load two different copies of Qt | 
|---|
|  | 336 | into memory which will create an unnecessary overhead by doubling the | 
|---|
|  | 337 | amount of used system resources. | 
|---|
| [314] | 338 |  | 
|---|
| [397] | 339 | In order to nicely solve this problem, netlabs.org provides the official | 
|---|
| [740] | 340 | binary builds of the Qt library distributed as WPI archives which are | 
|---|
| [397] | 341 | described in the next section. | 
|---|
|  | 342 |  | 
|---|
|  | 343 |  | 
|---|
|  | 344 |  | 
|---|
| [740] | 345 | USING OFFICIAL BINARY QT ARCHIVES | 
|---|
| [397] | 346 |  | 
|---|
|  | 347 | For your convenience, netlabs.org provides the following binary distributions | 
|---|
| [740] | 348 | of the Qt library (where X_Y_Z is the Qt version number) distributed as WPI | 
|---|
|  | 349 | archives: | 
|---|
| [397] | 350 |  | 
|---|
| [740] | 351 | qt-lib-X_Y_Z.wpi   - Runtime DLLs and binaries ("lib" archive) | 
|---|
|  | 352 | qt-dev-X_Y_Z.wpi   - Development libraries, tools and headers ("dev" archive) | 
|---|
| [397] | 353 |  | 
|---|
| [740] | 354 | These archives are called the official binary archives of the Qt library for | 
|---|
|  | 355 | OS/2. An official binary archive contains the most complete Qt build that | 
|---|
|  | 356 | enables all features of the Qt library and includes all standard Qt plugins | 
|---|
|  | 357 | implemented for the OS/2 platform at the time of the release. | 
|---|
| [397] | 358 |  | 
|---|
| [740] | 359 | The "lib" archive contains the release versions of DLLs (and may contain a few | 
|---|
| [397] | 360 | helper binaries) necessary to run applications created using the Qt framework. | 
|---|
| [740] | 361 | This package is usually installed by end users together with Qt applications | 
|---|
| [397] | 362 | they want to use. | 
|---|
|  | 363 |  | 
|---|
| [740] | 364 | The "dev" archive contains pre-built release versions of import libraries and | 
|---|
| [397] | 365 | a complete set of C++ include headers of the Qt framework. This package is used | 
|---|
|  | 366 | by developers and porters of Qt applications to build release versions of the | 
|---|
| [740] | 367 | applications that are binary compatibie with the Qt runtime provided by the | 
|---|
|  | 368 | official "lib" archive described above. Using the "dev" package requires the | 
|---|
|  | 369 | same environment as described in section "SETTING UP THE ENVIRONMET" above. | 
|---|
| [397] | 370 |  | 
|---|
| [740] | 371 | Please note again that the "dev" archive is intended to make a final release | 
|---|
|  | 372 | build of the Qt application which you do when you decide to ship a new version | 
|---|
|  | 373 | to the end users -- makes sure that the deployed application will share the same | 
|---|
|  | 374 | Qt runtime with other Qt applications. However, for daily work it is highly | 
|---|
|  | 375 | recommended that you build the debug version of the Qt library yourself (using | 
|---|
|  | 376 | the full source code ZIP archive or directly from SVN) as described in section | 
|---|
|  | 377 | "COMPILING QT"). | 
|---|
| [524] | 378 |  | 
|---|
| [740] | 379 | Besides the "lib" and the "dev" archives, the following official archives exist | 
|---|
| [541] | 380 | that you may also find useful: | 
|---|
| [397] | 381 |  | 
|---|
| [541] | 382 | qt-examples-X_Y_Z.wpi  - Demo and example sources ("examples") | 
|---|
| [397] | 383 |  | 
|---|
| [740] | 384 | The "examples" archive contains the source code and compiled binaries of the | 
|---|
|  | 385 | demo and example applications shipped with Qt. They serve as a good | 
|---|
|  | 386 | demonstration of the Qt library features and it is recommended to look at them. | 
|---|
|  | 387 | The binaries are compiled using the official "lib" archive. Please note that | 
|---|
|  | 388 | some demos and examples may miss from the arcvhice since not all features have | 
|---|
|  | 389 | been implemented in the OS/2 version of Qt yet. | 
|---|
| [408] | 390 |  | 
|---|
| [397] | 391 | NOTE: | 
|---|
|  | 392 |  | 
|---|
|  | 393 | All .DLL and .EXE files of the official binary build contain a DESCRIPTION | 
|---|
|  | 394 | string with the vendor field set to "netlabs.org" (by contrast, all custom | 
|---|
|  | 395 | Qt builds will set the vendor field to what the USER environment variable | 
|---|
|  | 396 | contains or to "anonymous" if USER is not set). Please note that you must | 
|---|
|  | 397 | NOT set vendor to "netlabs.org" when creating your own builds of the Qt | 
|---|
| [740] | 398 | library because it will make it difficult to identify various distributions | 
|---|
|  | 399 | and track possible problems with the builds. | 
|---|
| [397] | 400 |  | 
|---|
|  | 401 |  | 
|---|
|  | 402 |  | 
|---|
| [541] | 403 | QMAKE CONFIG OPTIONS | 
|---|
|  | 404 |  | 
|---|
| [740] | 405 | The following CONFIG options of the qmake tool have a special meaning in OS/2: | 
|---|
| [541] | 406 |  | 
|---|
|  | 407 | windows           Turns on generation of PM (WINDOWAPI) executables. By | 
|---|
|  | 408 | default, this option is set for release builds that link | 
|---|
|  | 409 | to the Qt GUI library. | 
|---|
|  | 410 |  | 
|---|
|  | 411 | console           Turns on generation of text mode (WINDOWCOMPAT) executables. | 
|---|
|  | 412 | By default, this option is set when setting the "windows" | 
|---|
|  | 413 | option is not appropriate (see above). | 
|---|
|  | 414 |  | 
|---|
|  | 415 | In addition, qmake recognizes the following OS/2-specific CONFIG options: | 
|---|
|  | 416 |  | 
|---|
|  | 417 | map               Turns on generation of the .map files for executables and | 
|---|
| [957] | 418 | DLLs. Note that this option is not set by default. | 
|---|
| [541] | 419 |  | 
|---|
| [954] | 420 | sym               Turns on generation of the .sym files for executables and | 
|---|
|  | 421 | DLLs. The option is turned on by default if configure.cmd | 
|---|
|  | 422 | is able to find the MAPSYM tool in PATH. | 
|---|
|  | 423 |  | 
|---|
| [541] | 424 | exepack           Turns on compression for executables and DLLs. The option is | 
|---|
|  | 425 | turned on by default for release builds if configure.cmd | 
|---|
| [954] | 426 | is able to find a compression tool (LxLite) in PATH. | 
|---|
| [541] | 427 |  | 
|---|
|  | 428 | highmem           Turns on high memory usage for dynamically allocated memory | 
|---|
|  | 429 | in DLLs and executables. When this option is set, a special | 
|---|
|  | 430 | compiler flag (-Zhigh-mem for GCC) is used to enable high | 
|---|
|  | 431 | memory support in the C library (LIBC). This option is set | 
|---|
|  | 432 | by default so that all Qt DLLs and Qt applications built | 
|---|
|  | 433 | with qmake are enabled for high memory. Note that high | 
|---|
|  | 434 | memory support must be enabled for all LIBC-based DLLs | 
|---|
|  | 435 | linked to the executable as well as for the executable | 
|---|
|  | 436 | itself: high memory usage will be disabled if one of them | 
|---|
|  | 437 | votes against it. | 
|---|
|  | 438 |  | 
|---|
| [740] | 439 | export_all        Cause the linker to export all public symbols in a generated | 
|---|
|  | 440 | DLL. By default (when this option is absent), only the | 
|---|
|  | 441 | symbols marked with the __declspec(dllexport) compiler | 
|---|
|  | 442 | directive in the source files. | 
|---|
| [541] | 443 |  | 
|---|
|  | 444 |  | 
|---|
| [740] | 445 |  | 
|---|
|  | 446 | PRINTING SUPPORT | 
|---|
|  | 447 |  | 
|---|
|  | 448 | Starting with version 4.6.2, Qt for OS/2 supports printing through the CUPS | 
|---|
|  | 449 | framework (provided that this support is enabled when building Qt, see the | 
|---|
|  | 450 | respective sections in the beginning of this document). The OS/2 implementation | 
|---|
|  | 451 | of the CUPS framework is provided by the eCUPS package available at | 
|---|
|  | 452 | http://svn.netlabs.org/ecups/. | 
|---|
|  | 453 |  | 
|---|
|  | 454 | The Qt Runtime detects the presence of eCUPS in the system on the fly and talks | 
|---|
|  | 455 | to the CUPS daemon directly, bypassing the standard OS/2 printing subsystem. | 
|---|
|  | 456 | This means that in order to print from Qt applications, you don't need to create | 
|---|
|  | 457 | and configure printer objects using the standard OS/2 system printer setup | 
|---|
|  | 458 | procedure -- you only need to install eCUPS and configure your printers in | 
|---|
|  | 459 | there. Please refer to the eCUPS user manual to obtain the detailed instructions | 
|---|
|  | 460 | on how to configure CUPS printers. | 
|---|
|  | 461 |  | 
|---|
|  | 462 |  | 
|---|
|  | 463 |  | 
|---|
| [870] | 464 | FILE WATCHING FUNCTION | 
|---|
|  | 465 |  | 
|---|
|  | 466 | Qt supports a mechanism of notifying Qt applications about changes to the file | 
|---|
|  | 467 | system, such as creating files or directories, changing their attributes or | 
|---|
|  | 468 | deleting them, even if these changes are performed outside Qt applications. In | 
|---|
|  | 469 | particular, this is used in standard Qt open file dialogs where you can | 
|---|
|  | 470 | instantly observe changes made to the directory contents by third-party | 
|---|
|  | 471 | applications running in the background. | 
|---|
|  | 472 |  | 
|---|
|  | 473 | In order to support this functionality on OS/2, Qt relies on the file watching | 
|---|
|  | 474 | mechanism provided by the Presentation Manager. This mechanism is a global | 
|---|
|  | 475 | system resource so that only one process may use it at a time. In a standard | 
|---|
|  | 476 | installation of OS/2 or eComStation this resource is exclusively used by the | 
|---|
|  | 477 | Workplace Shell and is not available to other applications. In order to overcome | 
|---|
|  | 478 | this limitation, a respective function was included to xWorkplace, the famous | 
|---|
|  | 479 | WPS extension (which lives inside the WPS process), starting with version 1.0.8. | 
|---|
|  | 480 | This function allows any number of other processes to receive notifications | 
|---|
|  | 481 | about file system changes and it gets utilized by Qt as well. | 
|---|
|  | 482 |  | 
|---|
|  | 483 | If an earlier version of xWorkplace is installed on the user system, or if no | 
|---|
|  | 484 | xWorkplace extension is present at all, Qt uses its own method of detecting | 
|---|
|  | 485 | file system changes which is based on polling the directory contents in regular | 
|---|
|  | 486 | intervals. While this method works well for a small number of watched | 
|---|
|  | 487 | directories with just few files in them, it may significantly slow down the | 
|---|
|  | 488 | system if you work with a directory containing thousands of files. | 
|---|
|  | 489 |  | 
|---|
|  | 490 | Therefore, is strongly recommended to install or upgrade to xWorkplace version | 
|---|
|  | 491 | 1.0.8 or above to make sure that you will not suffer from the described problem. | 
|---|
|  | 492 | You will also need to make sure that the "Enable folder auto-refresh" check box | 
|---|
|  | 493 | located on the "Folder Views" page in the Workplace Shell settings notebook is | 
|---|
|  | 494 | turned on in order to enable the notification mechanism (note that you may need | 
|---|
|  | 495 | to reboot after changing its state). | 
|---|
|  | 496 |  | 
|---|
|  | 497 |  | 
|---|
|  | 498 |  | 
|---|
| [429] | 499 | ENVIRONMENT VARIABLES | 
|---|
|  | 500 |  | 
|---|
|  | 501 | The Qt library recognizes a number of OS/2-specific environment variables that | 
|---|
|  | 502 | affect its functionality at runtime. The table below lists these variables and | 
|---|
|  | 503 | their meaning: | 
|---|
|  | 504 |  | 
|---|
| [740] | 505 | QT_PM_NO_DIVE             If set, Qt will not use DIVE (direct interface video | 
|---|
|  | 506 | extensions) for painting widgets even if DIVE (which | 
|---|
|  | 507 | provides a much faster painting speed than the | 
|---|
|  | 508 | regular GPI approach) is available. Currently, this | 
|---|
|  | 509 | is the default setting if the Panorama video driver | 
|---|
|  | 510 | is detected because its DIVE implementation contains | 
|---|
|  | 511 | a number of bugs. | 
|---|
|  | 512 |  | 
|---|
|  | 513 | QT_PM_DIVE=<mode>         Enables using DIVE for painting widgets. <mode> is | 
|---|
|  | 514 | one of: | 
|---|
|  | 515 |  | 
|---|
|  | 516 | - FB (direct framebuffer access, which is the | 
|---|
|  | 517 | fastest mode but causes the curruption of the | 
|---|
|  | 518 | screen under the software mouse pointer due to | 
|---|
|  | 519 | the limitation of DIVE). If this mode is not | 
|---|
|  | 520 | available, BLIT will be used (see below). | 
|---|
|  | 521 |  | 
|---|
|  | 522 | - FBSWM (the same FB but hides the mouse pointer | 
|---|
|  | 523 | before painting which introduces mouse flicker | 
|---|
|  | 524 | and may be a bit slower than the raw FB). | 
|---|
|  | 525 |  | 
|---|
|  | 526 | - BLIT (slower than both FB and FBSWM but prevents | 
|---|
|  | 527 | screen corruption under the mouse pointer and | 
|---|
| [807] | 528 | does not produce the mouse pointer flicker | 
|---|
| [740] | 529 | effect). | 
|---|
|  | 530 |  | 
|---|
|  | 531 | This variable is ignored if QT_PM_NO_DIVE is set. If | 
|---|
|  | 532 | neither this nor the QT_PM_NO_DIVE variable is set, | 
|---|
|  | 533 | the FBSWM mode is used by default (unless the | 
|---|
|  | 534 | current video driver is Panorama, see above). | 
|---|
|  | 535 |  | 
|---|
| [429] | 536 | QT_PM_NO_SOUND_SHARE      If set, Qt will open the audio device in exclusive | 
|---|
|  | 537 | only one sound may be played on the computer at a | 
|---|
| [950] | 538 | time. This mode is necessary for some sound cards | 
|---|
| [429] | 539 | when using the Uniaud audio driver as it is known to | 
|---|
| [950] | 540 | have problems with simultaneous playback. | 
|---|
|  | 541 | Qt builds, | 
|---|
| [429] | 542 |  | 
|---|
|  | 543 | QT_PM_SOUND_SHARE         The opposite to the above. If set, Qt will open the | 
|---|
| [950] | 544 | audio device in shared mode. This is the default | 
|---|
|  | 545 | behavior if neither this nor the | 
|---|
|  | 546 | QT_PM_NO_SOUND_SHARE variable is set. This variable | 
|---|
|  | 547 | is ignored if QT_PM_NO_SOUND_SHARE is set. | 
|---|
| [429] | 548 |  | 
|---|
|  | 549 | QT_PM_NO_REGISTRY         If set, Qt will not use the Open32 registry to store | 
|---|
|  | 550 | application settings with QSettings. Instead, plain | 
|---|
|  | 551 | text INI files will be used for both NativeFormat | 
|---|
|  | 552 | and IniFormat. Due to a number of problems in the | 
|---|
|  | 553 | Open32 registry implementation (that may easily lead | 
|---|
|  | 554 | to registry corruption), this is the default | 
|---|
|  | 555 | behavior if neither this nor the QT_PM_REGISTRY | 
|---|
|  | 556 | variable is set. | 
|---|
|  | 557 |  | 
|---|
|  | 558 | QT_PM_REGISTRY            The opposite to the above. If set, Qt will use the | 
|---|
| [624] | 559 | Open32 registry to store application settings. This | 
|---|
|  | 560 | variable is ignored if QT_PM_NO_REGISTRY is set. | 
|---|
| [429] | 561 |  | 
|---|
| [624] | 562 | QT_PM_NO_SYSTEM_LOCALE    If set, Qt will ignore the regional settings from | 
|---|
|  | 563 | the system locale object found in the Country | 
|---|
|  | 564 | Palette located in the System Setup folder and will | 
|---|
|  | 565 | take them from the internal Qt locale database | 
|---|
|  | 566 | according to the current country and language | 
|---|
|  | 567 | settings. Due to the fact that this internal Qt | 
|---|
|  | 568 | database usually has a better representation of the | 
|---|
|  | 569 | regional settings, this is the default behavior if | 
|---|
|  | 570 | neither this nor the QT_PM_SYSTEM_LOCALE variable is | 
|---|
|  | 571 | set. | 
|---|
| [429] | 572 |  | 
|---|
| [624] | 573 | QT_PM_SYSTEM_LOCALE       The opposite to the above. If set, Qt will use the | 
|---|
|  | 574 | regional settings as found in the default locale | 
|---|
|  | 575 | object set the Country Palette.  This variable is | 
|---|
|  | 576 | ignored if QT_PM_NO_SYSTEM_LOCALE is set. | 
|---|
| [429] | 577 |  | 
|---|
| [624] | 578 | LANG                      This variable can be used to override the default | 
|---|
|  | 579 | country and language used in the Qt application both | 
|---|
|  | 580 | for regional settings and for translations. The | 
|---|
|  | 581 | format of the value is "ll_CC" where <ll> is the | 
|---|
|  | 582 | two-letter ISO language code and <CC> is the two- | 
|---|
|  | 583 | letter ISO country code. Note that if this variable | 
|---|
|  | 584 | is not set, Qt will derive the language and country | 
|---|
|  | 585 | from the system country code specified in the | 
|---|
|  | 586 | COUNTRY statement of CONFIG.SYS. | 
|---|
|  | 587 |  | 
|---|
|  | 588 |  | 
|---|
|  | 589 |  | 
|---|
| [740] | 590 | COMMAND LINE OPTIONS | 
|---|
| [576] | 591 |  | 
|---|
| [740] | 592 | Any Qt executable recognizes a number of command line options that may change | 
|---|
|  | 593 | the behavior of the Qt application. Here are the most interesting ones: | 
|---|
| [576] | 594 |  | 
|---|
| [740] | 595 | -style <name>             Changes the default Qt widget style (theme) to a | 
|---|
|  | 596 | style with the given name. The buiil-in styles which | 
|---|
|  | 597 | are always available in the official build include: | 
|---|
|  | 598 | "windows" (currently, the default on OS/2), "motif", | 
|---|
|  | 599 | "cde", "plastique" and "cleanlooks". Other styles | 
|---|
|  | 600 | may be also provided by the style plugins. | 
|---|
| [576] | 601 |  | 
|---|
| [740] | 602 | -graphicssystem <name>    Changes the graphics system used to paint widgets. | 
|---|
|  | 603 | On OS/2, only two values are supported: "native" | 
|---|
|  | 604 | (the default one) and "raster". The "native" system | 
|---|
|  | 605 | uses DIVE (direct interface video extensions) when | 
|---|
|  | 606 | it is available. If DIVE is not available or if it | 
|---|
|  | 607 | is disabled (see the QT_PM_NO_DIVE environment | 
|---|
|  | 608 | variable description for details), the "raster" | 
|---|
|  | 609 | system will be automatically selected as a fallback. | 
|---|
| [576] | 610 |  | 
|---|
|  | 611 |  | 
|---|
| [740] | 612 |  | 
|---|
| [144] | 613 | CURRENT LIMITATIONS | 
|---|
|  | 614 |  | 
|---|
| [740] | 615 | 1. configure.cmd is does not build demos and examples by default (to save | 
|---|
|  | 616 | time). They may be built by hand, as described above. | 
|---|
| [144] | 617 |  | 
|---|
| [830] | 618 | 2. configure.cmd does not understand all command line options understood by | 
|---|
|  | 619 | configure scripts on other platforms. If you want to customize your build | 
|---|
|  | 620 | of the Qt library (which is normally not recommended and not supported), | 
|---|
|  | 621 | you may try to modify configure.cmd itself. | 
|---|
| [524] | 622 |  | 
|---|
| [740] | 623 | 3. OS/2 bitmap fonts are not supported. Use TTF or Type1 (PFB) fonts with Qt. | 
|---|
| [144] | 624 |  | 
|---|
| [740] | 625 | 4. No native PM style, but Qt will use fonts and colors from the current | 
|---|
| [320] | 626 | OS/2 theme. Hint: if your default OS/2 font is "WarpSans", install the | 
|---|
|  | 627 | "Workplace Sans" TTF font from Alex Taylor to get more native look & feel. | 
|---|
| [740] | 628 | It is recommended to install version 0.7 of the Normal face and version 0.3 | 
|---|
| [320] | 629 | of the Bold face which you can find here: | 
|---|
| [144] | 630 |  | 
|---|
| [320] | 631 | http://users.socis.ca/~ataylo00/creative/fonts/workplace/ | 
|---|
| [287] | 632 |  | 
|---|
| [740] | 633 | 5. QProcess: when starting PM applications from text-mode applications, the | 
|---|
| [524] | 634 | returned PID is a PID of the intermediate cmd.exe process, not the target | 
|---|
|  | 635 | application. | 
|---|
| [145] | 636 |  | 
|---|
| [740] | 637 | 6. The following classes are not available due to their rare usage or low | 
|---|
| [524] | 638 | importance on the OS/2 platform: QSharedMemory, QSystemSemaphore, | 
|---|
| [740] | 639 | QInputContext. On the source level, a number of macros is defined to | 
|---|
|  | 640 | reflect this, respectively: QT_NO_SYSTEMSEMAPHORE, QT_NO_SHAREDMEMORY, | 
|---|
|  | 641 | QT_NO_IM. Normally, Qt applications use these macros in the form of | 
|---|
|  | 642 | "#fndef QT_NO_SOMEFEATURE" to isolate the relevant parts of the code that | 
|---|
|  | 643 | uses these classes so that the application still builds when the | 
|---|
|  | 644 | corresponding feature is missing. | 
|---|
| [243] | 645 |  | 
|---|
| [740] | 646 | 7. No qt3support module. This functionality is rarely necessary in mature | 
|---|
|  | 647 | real life Qt applications and has low priority. In the code, it is | 
|---|
|  | 648 | reflected by the absense of the QT3_SUPPORT macro. | 
|---|
| [145] | 649 |  | 
|---|
| [740] | 650 | 8. The following features are missing (either because of the lack of the | 
|---|
|  | 651 | required support from the system side or because of the rare usage): | 
|---|
|  | 652 |  | 
|---|
|  | 653 | - IPV6 support in the network module (QT_NO_IPV6 is defined). | 
|---|
|  | 654 | - phonon module (QT_NO_PHONON is defined). | 
|---|
|  | 655 | - multimedia module (QT_NO_MULTIMEDIA is defined). | 
|---|
|  | 656 | - OpenGL module (QT_NO_OPENGL is defined). | 
|---|
|  | 657 | - declarative module (QT_NO_DECLARATIVE is defined). | 
|---|
|  | 658 | - tablet support (QT_NO_TABLET is defined). | 
|---|
|  | 659 |  | 
|---|
| [524] | 660 | See the project roadmap for more information on the current progress and | 
|---|
|  | 661 | future plans: | 
|---|
| [144] | 662 |  | 
|---|
| [524] | 663 | http://svn.netlabs.org/qt4/roadmap | 
|---|
| [144] | 664 |  | 
|---|
| [524] | 665 | Feel free to request new features and report bugs using the project bug | 
|---|
|  | 666 | tracker abaialble at: | 
|---|
| [188] | 667 |  | 
|---|
| [524] | 668 | http://svn.netlabs.org/qt4/report | 
|---|
|  | 669 |  | 
|---|
|  | 670 |  | 
|---|
|  | 671 |  | 
|---|
| [144] | 672 | CREDITS | 
|---|
|  | 673 |  | 
|---|
|  | 674 | Dmitry A. Kuminov (development) | 
|---|
|  | 675 | Silvan Scherrer (management) | 
|---|
|  | 676 |  | 
|---|
|  | 677 | netlabs.org (hosting & support) | 
|---|
|  | 678 |  | 
|---|
|  | 679 | Nokia Corporation (original Qt library) | 
|---|
|  | 680 |  | 
|---|
|  | 681 | We also want to THANK all individuals and organizations who made the donations | 
|---|
|  | 682 | to this project and helped to make it happen. Please visit | 
|---|
|  | 683 |  | 
|---|
|  | 684 | http://qt.netlabs.org/en/site/index.xml | 
|---|
|  | 685 |  | 
|---|
|  | 686 | to get the full list of sponsors and to find information on how you can support | 
|---|
|  | 687 | the project. | 
|---|
|  | 688 |  | 
|---|
|  | 689 |  | 
|---|
|  | 690 | Qt is a trademark of Nokia Corporation and/or its subsidiary(-ies). | 
|---|
|  | 691 | OS/2 and OS/2 Warp are trademarks of the IBM Corporation and/or its subsidiary(-ies). | 
|---|
|  | 692 | eComStation is a trademark of Serenity Systems International and/or its subsidiary(-ies). | 
|---|
|  | 693 | Etc. | 
|---|