Changeset 4179 for trunk/doc


Ignore:
Timestamp:
Sep 4, 2000, 4:02:31 AM (25 years ago)
Author:
bird
Message:

Updated the Win32k documentation.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/doc/Readme.txt

    r3868 r4179  
    5353  other controls creation and manipulation is now implemented fully in Odin32.
    5454  Applications have Win32 look: Win32 specific controls are also supported
    55   (Open32 is still a requirement as other Odin32 functions use it!) 
    56 - New and improved PE2LX converter 
     55  (Open32 is still a requirement as other Odin32 functions use it!)
     56- New and improved PE2LX converter
    5757- New Portable Executable Loader (PE) that overcomes some differences
    5858  between OS/2 and Win32 memory models (this does not include 512MB
    59   per-process memory limitation in OS/2, you still need the Aurora-level 
    60   kernel for that) 
     59  per-process memory limitation in OS/2, you still need the Aurora-level
     60  kernel for that)
    6161- New WIN32K32k.SYS driver that automates loading of Win32 binaries (no
    6262  conversion or invocation through PE.EXE loader is needed), now
    6363  compatible with WSeB (Aurora) and no longer dependant of code under
    64   GNU license 
     64  GNU license
    6565- Wine ports of common controls (comctl32), shell extensions (shell32) and
    6666  OLE
    67 - Full implementation of memory mapped files 
    68 - Joystick support (winmm) 
    69 - Direct Input (DirectX keyboard & mouse) added (Wine Port) 
     67- Full implementation of memory mapped files
     68- Joystick support (winmm)
     69- Direct Input (DirectX keyboard & mouse) added (Wine Port)
    7070- Rewrite of DirectDraw. More complete implementation.
    7171- Couple of (not core Win32 API, but often used) new DLLs (winasp32, lz32,
    7272  avifil32...), so users don't have to have Windows license at all to run
    73   Windows programs 
     73  Windows programs
    7474- Many new API functions implemented or ported from Wine, allows
    75   developers to port Win32 apps directly to OS/2 with little to no rewriting
    76 - Many bugfixes and enhancements
    77 - Many new programs that load and/or work with Odin
    78 - Full source code available
     75  developers to port Win32 apps directly to OS/2 with little to no rewriting
     76- Many bugfixes and enhancements
     77- Many new programs that load and/or work with Odin
     78- Full source code available
     79
     80
    7981
    80822.0 Installing Odin (UPDATED)
     
    8284
    8385Odin daily builds are now also distributed as WarpIn archives.
    84 WarpIn is a generic OS/2 installation application that can be 
     86WarpIn is a generic OS/2 installation application that can be
    8587downloaded from warpin.netlabs.org.
    8688
    8789To install Odin run warpin.exe with the name of the daily build archive
    88 as parameter. 
     90as parameter.
    8991Follow the instructions to complete the installation.
    9092The Odin installation consists of:
     
    1061082.0.1 Log files
    107109---------------
    108 The alpha 5 binaries and daily build zipfiles can generate logfiles to show 
     110The alpha 5 binaries and daily build zipfiles can generate logfiles to show
    109111what a win32 application is doing. This can be very useful to determine
    110112why certain applications don't run correctly.
    111113
    112 The major disadvantage of loggging is the overhead. Therefor it has been 
     114The major disadvantage of loggging is the overhead. Therefor it has been
    113115disabled by default in the alpha 5 release and daily builds.
    114116To enable logging set the environment variable WIN32LOG_ENABLED:
     
    170172
    171173
    172 2.3 The Ring0 conversion utility driver (WIN32K.SYS)
    173 ----------------------------------------------------
     1742.3 Win32k.sys - native OS/2 PE-loader
     175--------------------------------------
    174176
    175177The win32k.sys driver makes PE (Win32) executables equal to native OS/2
    176 executables by implementing a Ring 0 on-the-fly converter. The converter is
    177 Pe2Lx.exe. So, everything that works with Pe2Lx will probably work with
    178 win32k.sys. And vice versa, when Pe2lx can't handle it, win32k.sys won't either.
     178executables by implementing a Ring 0 on-the-fly loader / converter.
    179179
    180180You may wonder how you may run a Win32 program using a device driver. You
     
    184184
    185185For example, if you fancy playing windows solitaire.
    186     1) Make sure the necessary DLLs are in you (BEGIN/END)LIBPATH,
    187        and that SOL.EXE is in the current directory or the directory you
    188        specify.
     186    1) Make sure the necessary DLLs (MSVCRT.DLL and CARDS.DLL) are in you
     187       PATH, current dir, SOL.EXE dir, Odin32 System32 dir, Odin32 System dir,
     188       Odin32 dir, or LIBPATHs; and that you have SOL.EXE somewhere.
    189189
    190190    2) Then start SOL.EXE by simply typing SOL.EXE (with path if necessary).
     
    196196-------------
    197197
    198 The Win32k.sys is alpha software and any bugs which haven't been found
     198The Win32k.sys is quite alpha software and any bugs which haven't been found
    199199yet may crash and/or corrupt you entire system! Make sure you have backed up
    200200important stuff first!
     
    202202We are not responsible for ANYTHING AT ALL! See Odin32 disclaimer...
    203203
    204 Before you install win32k.sys make sure that you have a backdoor to your system
     204Before you install Win32k.sys make sure that you have a backdoor to your system
    205205which works. For example try to boot your system using the Alt+F1 during bootup
    206206and choose Commandline boot (F2). Make sure you have an textmode editor which
     
    211211------------------
    212212
    213 Win32k should work on any Warp 4 or Warp Server for e-business installations
    214 which Odin32 works on. It requires only one thing, a kernel symbol file. The
    215 kernel symbol is looked for in \OS2\PDPSI\PMDF\WARP4 and
    216 \OS2\PDPSI\PMDF\WARP45_U/S. All warp 4 and WE4eB installations should have
    217 those direcotries (we hope). It is updated when you install a new fixpack - so
    218 there is really nothing to worry about for the common user.
    219 
    220 For those playing with debug-kernels, make sure that OS2KRNL.SYM is matching
    221 the running kernel, while this file too is investigated. (The complete list
    222 is found in src\Win32k\dev16\probkrnl.c,apszSym[] - odin32 source tree.)
    223 
     213Win32k should at least work on OS/2 Warp 3 and above, but I don't get too
     214surprised if it worked on 2.11 too. DBCS are not supported yet AFAIK.
     215
     216It no longer requires a kernel file for retail kernels (if you don't know what
     217kernel you have, you have a retail kernel). Win32k does now contain a
     218"database" for the most recent retail kernels. Currently this is:
     219    Warp 4 fp#1 -> fp#14
     220    Aurora GA, FP1, preFP2
     221    Warp 3 fp#32-> fp#42
     222
     223If the running kernel is not found in the "database" or is a debug kernel
     224wink32.sys will look for symbolfiles as it allways did.
     225If you use the -s:<symfile> argument the given symbol file will be
     226investigated before the database is searched.
     227
     228NOTE! It hasn't been fully verified that all the different national fixpaks
     229have the same symbols as the us-english ones. Feedback on this issue is
     230appreciated.
     231
     232NOTE! A piece of advice for those playing with debug-kernels: Make sure that
     233c:\OS2KRNL.SYM is matching the running kernel.
    224234
    2252352.3.2.1 Warp 3
    226236--------------
    227237
    228 Win32k is not tested with Warp 3. It is supposed to work with Warp 3 provided
    229 that the os2krnl.sym file is present. Warp Server 4 has this, common Warp 3
    230 doesn't.
     238Win32k is not tested with Warp 3. It is _supposed_ to work with Warp 3
     239provided you are running fixpack 32 or later.
     240(Fixpack 32 + y2kclock.exe is required for Y2K readyness anyway so...)
     241
     2422.3.2.1 OS/2 2.11
     243-----------------
     244
     245For the curiose user, Win32k.sys will probably work with OS/2 2.11 too.
     246I've not test this. But I have run successful Ring-3 tests against the
     247lates 2.11 fixpack kernels.
    231248
    232249
     
    235252
    236253To use Win32k.sys you have to add the following line into your config.sys:
    237     device=<d:\path\>win32k.sys
    238 
    239 Where <d:\path\> is the path to the win32k.sys, i.e. the odin32 executables
    240 directory.
     254    device=<d:\path\system32>win32k.sys
     255
     256Where <d:\path\system32> is the path to the win32k.sys, i.e. usually the odin32
     257system32 directory.
    241258
    242259After doing this, you'll have to reboot your machine to load the driver. During
    243260the boot process you will on a successful installation see some lines of
    244261technical info and finally a line saying:
    245     'Win32k.sys succesfully initiated!'
    246 
    247 If you don't see the line above something is wrong.
     262Win32k - Odin32 support driver.
     263    Build:            14046 - v20.45
     264    Found symbolfile: Win32k Symbol Database
     265Win32k.sys succesfully initiated!
     266
     267If you don't see the last line something is wrong, and some error info will be
     268shown. In the case of error the 'rc=<value>' is important to remember.
    248269
    249270
     
    251272-----------------------
    252273
     274The Capitalized letters are the one which is tested for when identifying the
     275argument.
     276
    253277There are some useful parameters for Win32k:
    254 -Q             Quiet driver initiation. (Default is verbose (-V) initiation.)
    255 -V             Verbose driver initiation. Default.
    256 -S:<filename>  Full path to the current OS/2 kernel symbol file.
    257 -K:<filename>  Full path to the running OS/2 kernel.
    258 
    259 
    260 2.3.5 Rings - Ring 0 / Ring 3
     278-Quited         Quiet driver initiation.
     279                Default: disabled (ie. -V)
     280
     281-Verbose        Verbose driver initiation.
     282                Default: enabled
     283
     284-S:<filename>   Full path to the current OS/2 kernel symbol file.
     285                When this is specified the given
     286                Default: symbol "database" and default locations are searched.
     287
     288
     289Loader parameters:
     290-SCript:<Y|N>   Enable / disable UNIX script support.
     291                Default: Enabled.
     292
     293-REXX:<Y|N>     Enable / disable pure REXX script support.
     294                Default: Enabled.
     295
     296-Java:<Y|N>     Enable / disable JAVA loading.
     297
     298-PE:<MIXED|PE2LX|PE|NOT>
     299                Enabled / disable and set mode of the PE loading.
     300                    MIXED:  Mix of Pe2Lx and Pe.exe. It uses Pe2Lx when
     301                            possible and backs out to pe.exe if the executables
     302                            aren't supported by the converter.
     303                    PE2LX:  Pe2Lx loader only.
     304                    PE:     Pe.exe only. The program is started using Pe.exe,
     305                            and the process name will be pe.exe.
     306                    NOT:    Disable PE loading.
     307
     308
     309Logging parameters:
     310-L<:E|:D>       Enables/Disables logging.
     311                Default: disabled.
     312
     313-Com:<1|2|3|4>
     314or
     315-C<1|2|3|4>     Which com-port to log to.
     316                Default: -C2
     317
     318-Warning:<1|2|3|4>
     319or
     320-W<1|2|3|4>     Warning/info level for PE loader. (This is warnings and info
     321                which is published thru the com-port as logging information.)
     322                Default: -W0
     323
     324
     325Heap parameters:
     326-HEAPMax:       Maximum swappable heap size in bytes.
     327                Default: 512KB
     328
     329-Heapinit:      Initial heapsize in bytes.
     330                Default: 16MB
     331
     332-RESHEAPMax:    Maximum resident heap size in bytes.
     333                Default: 256KB
     334
     335-Resheapinit:   Initial resident in bytes.
     336                Default: 16MB
     337
     338
     339Obsolete:
     340-K:<filename> Ignored. Win32k scans the kernel image in memory!
     341
     342
     3432.3.5 PE Loading
     344----------------
     345
     346Win32k.sys are able to do PE loading in two different ways.
     347
     3482.3.5.1 PE2LX
     349-------------
     350The first one is called PE2LX and hence uses the original Win32k.sys method
     351which is similar to Pe2Lx. This only requires that KERNEL32.DLL (ie. Odin32
     352System32 directory) is present somewhere in the PATH or LIBPATHs. The DLL
     353search order of PE2LX is now conforming with the Win32 order:
     354    1. The directory of the executable (.EXE).
     355    2. The current directory.
     356    3. The Odin32 System32 directory. (Kernel32.dll directory)
     357    4. The Odin32 System directory. (sibling of system32)
     358    5. The Odin32 directory. (parent of system32)
     359    6. The PATH environment variable. (TODO: quotes are not currently supported)
     360    7. The BEGINLIBPATH.
     361    8. The LIBPATH.
     362    9. The ENDLIBPATH.
     363(Note that the OS/2 DLLs in the _Odin32_ process are also found using this
     364search order. This shouldn't matter much as nearly all of the OS/2 DLL are
     365allready loaded. But if this proves a problem it could be changed.)
     366
     3672.3.5.2 PE
     368----------
     369The second one is called PE and invokes the Pe.EXE to execute the PE (Win32)
     370programs. This of course requies that PE.EXE is found in the PATH.
     371
     3722.3.5.3 Modes
     373--------------
     374Win32k.sys have three (or four) different ways of combining these two methods,
     375called modes:
     376    PE2LX only
     377    PE only
     378    PE2LX with fallback on PE.
     379    (fourth: NOT load any PE executables at all)
     380
     381The last one is the default one and is probably the best one currently.
     382
     383
     3842.3.6 UNIX Shell Script Loader
     385------------------------------
     386
     387The UNIX Shell Script Loader makes OS/2 able to run UNIX shell scripts as
     388native executables, just as UNIX does. A unix shell script is a text file
     389which has a starting line which specifies the interpreter for the script.
     390
     391For example a perl script:
     392#!/bin/perl5 -Sx
     393
     394Or the most common one:
     395#! /bin/sh
     396
     397Since Most OS/2 systems don't have a /bin directory or a /usr/bin directory
     398the executable specified are looked for in these ways:
     399    1. The exact filename specified.
     400    2. The filename specified with .EXE extention.
     401    3. Search the PATH for the filename (with out path of course).
     402    4. Search the PATH for the filename with .EXE extention (and with out path of course).
     403
     404So, you could now execute UNIX shell script in OS/2 without even modify the
     405path of the interpreter!
     406
     407The UNIX Shell Script Loader is enabled by default.
     408
     409
     4102.3.6 Pure REXX Loader
     411----------------------
     412
     413The Pure REXX Loader is a win32k.sys feature which enables REXX script with
     414the extentions .RX and .REX to run as native OS/2 executables. These REXX
     415scripts are executed using kRX.EXE which is found in the Odin32 System32
     416directory.
     417
     418When we say "Pure REXX" scripts, that means no use of command line should
     419occure in the script.
     420
     421The Pure REXX Loader is enabled by default.
     422
     423
     4242.3.7 Java Loader/Invoker
     425-------------------------
     426
     427Just for fun, I've added some code which detects JAVA class binaries and
     428executes the class using JAVA.EXE. I first thougth this should be easy, but
     429it turned out to have several problems.
     430So please note the following:
     431    - The classname is case sensitive, you have to write the exact class
     432      name (with .class extention or what ever extention the file have)
     433      when trying to execute a class. This could cause some throuble making
     434      WPS program objects for the classes....
     435    - To support executing of .class-files which are not in the current
     436      directory win32k.sys send the directory of the .class-file in to
     437      java.exe as a '-classpath' option. This option I soon found out had the
     438      sideeffect of making JAVA.exe ignore the other CLASSPATH and not use
     439      it's default class path. So now the contents of the CLASSPATH env. var.
     440      or a generated default classpath is also sent in with the '-classpath'
     441      option.
     442    - The CLASSPATH environment variable should not be longer than 639 chars.
     443
     444When you have successfully installed Win32k.sys try type this at the
     445commandline:
     446c:\java11\demo\hello\hello.class
     447
     448This is then printed at my screen:
     449Hello, Warped world!
     450
     451The JAVA Loader/Invoker is enabled by default.
     452
     453
     4542.3.8 Rings - Ring 0 / Ring 3
    261455-----------------------------
    262456
     
    264458and device drivers execute at this level, while user applications execute in
    265459Ring 3, the least priveleged executing level.
     460
     461
     4622.3.9 Win32k Control Center
     463---------------------------
     464
     465In your Odin32 System32 directory there is a program called Win32kCC.exe,
     466this is the Win32k Control Center (Win32kCC). Win32kCC is as the name says
     467a program controlling Win32k.sys.
     468
     469Win32kCC allows you to enable, disable and change behaviour of different
     470parts in Win32k.sys.
     471
     472For example: You could disable PE loading, or change it from MIXED mode (see
     4732.3.4, -PE) to PE2LX mode. Or change it from PE2LX mode to PE mode to see
     474if PE.EXE does a better job loading an executable.
     475
     476Note that the changes would not effect allready loaded executables.
     477
     478
     479Win32kCC also displays status info on the running Win32k.sys and OS/2 kernel:
     480    -Win32k.sys version number
     481    -Win32k build time/date
     482    -Path of the symbol file which was used (or Win32k Symbol Database).
     483    -OS/2 kernel build number fixpack (guess)
     484    -OS/2 kernel type as win32k has detected it
     485    -Number of Pe2Lx currently loaded modules
     486    -Win32k resident and swappable heap stats.
     487
     488PS. Beside the "PE Loader" area there is an "Elf Loader" area this is for a
     489future Elf2Lx loader.
     490
    266491
    267492
     
    274499problems as it requires all DLLs and EXEs to be converted into
    275500another file format thus changing the original Win32 files.
     501(It's only future use will be to convert Win32 executable with
     502debuginfo to LX with HLL (IPMD/ICSDEBUG) debuginfo for
     503sourcelevel debugging of Win32 executables under Odin32. This
     504is not yet implemented but are being worked on.)
     505
    276506
    277507
     
    293523Note that many other applications load and/or partly work.
    294524
     525
    2955264.0 Reporting Problems and Successes
    296527------------------------------------
     
    311542----------------
    312543
    313 This readme is intended for making people more familiar with ODIN and to 
    314 describe various aspects of the project such as accessing latest sources via 
    315 cvs, building the binaries, running win32 applications, how to identify and 
    316 report problems and bugs, as well as how to participate in this very 
     544This readme is intended for making people more familiar with ODIN and to
     545describe various aspects of the project such as accessing latest sources via
     546cvs, building the binaries, running win32 applications, how to identify and
     547report problems and bugs, as well as how to participate in this very
    317548promising project.
    318549
     
    322553
    323554Required compilers/tools:
    324         - IBM VisualAge 3.0 (CTx8 fixpack applied)
    325           (version 3.6 might also work, but version 4 is not
    326            recommended)
    327         - OS/2 Warp 4 Toolkit (project apparently doesn't compile with
    328           VAC's OS/2 headers)
    329           Might also work with EMX headers. (haven't tried this!)
    330         - ALP 4.0 (IBM Assembly Language Processor)
     555        - IBM VisualAge 3.0 (CTx8 fixpack applied)
     556          (version 3.6 might also work, but version 4 is not
     557           recommended)
     558        - OS/2 Warp 4 Toolkit (project apparently doesn't compile with
     559          VAC's OS/2 headers)
     560          Might also work with EMX headers. (haven't tried this!)
     561        - ALP 4.0 (IBM Assembly Language Processor)
    331562          Download the tools zipfile from http://service.boulder.ibm.com/ddk/
    332           (you need to register, but it's free)
    333         - Unix-like rm.exe (nmake clean)
     563          (you need to register, but it's free)
     564        - Unix-like rm.exe (nmake clean)
    334565
    335566Changes from last source code release:
    336         - Uses Wine headers and a stripped down version of os2win.h (Open32
     567        - Uses Wine headers and a stripped down version of os2win.h (Open32
    337568          header)
    338         - All Open32 apis have the 'O32_' prefix.
    339         - All Open32 declarations are appended with '_O32' (mostly due to
     569        - All Open32 apis have the 'O32_' prefix.
     570        - All Open32 declarations are appended with '_O32' (mostly due to
    340571          calling convention differences)
    341         - nmake DEBUG=1 builds the debug version
     572        - nmake DEBUG=1 builds the debug version
    342573          nmake         builds the release version
    343         - Several dlls (i.e. USER32, KERNEL32, ADVAPI32) contain extra .def
    344           files that are used to create libraries that contain the api names
    345           as required by the linker when you use them. (_apiname@nrparameterbytes)
     574        - Several dlls (i.e. USER32, KERNEL32, ADVAPI32) contain extra .def
     575          files that are used to create libraries that contain the api names
     576          as required by the linker when you use them. (_apiname@nrparameterbytes)
    346577
    347578Wine header notes:
    348         - Several header files have been changed to make them usable for VAC
    349         - Several header files contain bugfixes (mostly parameter type changes)
    350         - Several header files include additional declarations
    351         - At this time we don't intend to have our changes included in the
    352           Wine codebase as header files are not likely to change often.
     579        - Several header files have been changed to make them usable for VAC
     580        - Several header files contain bugfixes (mostly parameter type changes)
     581        - Several header files include additional declarations
     582        - At this time we don't intend to have our changes included in the
     583          Wine codebase as header files are not likely to change often.
    353584
    354585Coding conventions:
    355         - Do NOT directly call the Open32 apis unless you're writing
    356           a wrapper for it.
    357         - Do NOT include os2.h directly. Use os2wrap.h instead.
    358           os2wrap.h contains all the OS/2 apis with a wrapper around it to save
     586        - Do NOT directly call the Open32 apis unless you're writing
     587          a wrapper for it.
     588        - Do NOT include os2.h directly. Use os2wrap.h instead.
     589          os2wrap.h contains all the OS/2 apis with a wrapper around it to save
    359590          and restore the selector in FS. (some OS/2 apis set it back to the
    360           default value (150b))
    361         - Use the correct Win32 api when there are two version (ascii & unicode)
    362           Calling the standard one (SendMessage) causes a error during
     591          default value (150b))
     592        - Use the correct Win32 api when there are two version (ascii & unicode)
     593          Calling the standard one (SendMessage) causes a error during
    363594          compilation.
    364           Use SendMessageA instead.
    365         - Source code style will be decided on in the near future.
     595          Use SendMessageA instead.
     596        - Source code style will be decided on in the near future.
    366597
    367598
     
    369600--------------------------------------
    370601
    371 Please check out http://www.netlabs.org/ and http://www.netlabs.org/odin. 
     602Please check out http://www.netlabs.org/ and http://www.netlabs.org/odin.
    372603
    373604
     
    375606-------------------------
    376607
    377 Basically, if your system setup meets above stated requirements, everything you 
     608Basically, if your system setup meets above stated requirements, everything you
    378609need to do for a binary build is:
    379610
     
    384615  nmake release (not working right now!)
    385616
    386 As the current state of the project is still known to be alpha level, one should 
    387 expect some functions not to work properly. Therefore, we recommend the use of 
    388 the debug-version which creates long logfiles for problem determination purpose 
     617As the current state of the project is still known to be alpha level, one should
     618expect some functions not to work properly. Therefore, we recommend the use of
     619the debug-version which creates long logfiles for problem determination purpose
    389620and to allow active debugging with debuggers such as IPMD, ICAT, KDB, etc.
    390621
    391 Please note if you do not want to suffer from the performance loss of writing 
    392 logfiles, you can disable logging even with the debug binaries of ODIN by 
     622Please note if you do not want to suffer from the performance loss of writing
     623logfiles, you can disable logging even with the debug binaries of ODIN by
    393624setting:
    394625
     
    405636------------------
    406637
    407 ODIN is moving at a fast pace. Sometimes side effects of source dependencies may 
     638ODIN is moving at a fast pace. Sometimes side effects of source dependencies may
    408639require you to do a full rebuild of the binaries instead of an incremental build.
    409640
    410 However, rarely it also happens the sources contained in the CVS repository do 
    411 not build completely due to erroneous source code. Usually, this is fixed within 
     641However, rarely it also happens the sources contained in the CVS repository do
     642not build completely due to erroneous source code. Usually, this is fixed within
    412643two days at maximum.
    413644In such event, one can normally stick with the previous version of the particular
     
    420651------------------------------------
    421652
    422 http://www.os2.org/ has setup an ftp server that hosts the automatically 
    423 built binaries on daily basis. For people that do not have a suitable 
     653http://www.os2.org/ has setup an ftp server that hosts the automatically
     654built binaries on daily basis. For people that do not have a suitable
    424655development setup for ODIN, we provide the latest binary code that way.
    425656
     
    428659-------------------------
    429660
    430 As ODIN became an open source project, everybody is kindly invited to 
     661As ODIN became an open source project, everybody is kindly invited to
    431662contribute his/her share to the progress of the project. May it be
    432 active coding, fixing bugs or just providing detailed information about 
     663active coding, fixing bugs or just providing detailed information about
    433664examined problems.
    434665
    435666We suggest you subscribe to win32os2-wai and the corresponsing mailing lists
    436667on http://www.egroups.com.
    437 In case you are interested in participating, every member of the project will 
    438 be happy to give you direction to the right places and to give a personal 
     668In case you are interested in participating, every member of the project will
     669be happy to give you direction to the right places and to give a personal
    439670introduction to further development of the particular modules.
    440671
Note: See TracChangeset for help on using the changeset viewer.