@database Player61A.guide @author Jarno Paananen @$VER: 610.4 / 16.06.98 @node MAIN "The PlayerR 6.1A" ------------------------------------------------------------------------- - The Player R 6.1A 610.4 / 16.06.98 - - Copyright C 1992-95 Jarno Paananen - - Guru / Sahara Surfers - - A Sahara Surfers Product 1995 - - Fixed in 1998 by NoName and Platon42 - ------------------------------------------------------------------------- 0. @{" About the fix " link FIX} 1. @{" Foreword " link FOREWORD} 2. @{" Distribution and copyrights " link DISTRIBUTION} 3. @{" Requirements " link REQUIRES} 4. @{" Features " link FEATURES} 5. @{" P61con, the Converter " link CONVERTER} 6. @{" P61, the Player " link PLAYER} 7. @{" Using The Player in your own programs " link USING} 8. @{" The Usecode-system " link USECODE} 9. @{" Bugs? " link BUGS} 10. @{" Hellos " link HELLOS} 11. @{" Contact address " link CONTACT} @endnode @node FIX "The PlayerR 6.1A: About the fix" @{u}0. About the fix:@{uu} After I got myself the long awaited A4060, I got very disappointed by the *huge* number of demos that fail on this config because of a very small bug in the replay-source. They all played way too fast in 95% of the time, so I had to be very lucky if I wanted to watch a demo as it has been originally designed. This had to be changed of course. I tried to look around for a fixed version but couldn't get one; I had to do the fix on my own. Since it was playing too fast it had to be an interrupt-problem, surprisingly I found the bug rather fast. The writes to INTREQ have only been done once, but they need to be done twice on A4040 and A4060! For the case that you have already modified 610.2 to your needs and don't want to do this work again, please look into the source and apply the 3 changes that are marked with ";!!!" ! If you think that this fix is useless, have a look at this small list of well-known, actual demos and intros that fail (play too fast) on my A4060: My Kingdom, Superautodrome 1&2, Aphrodisiae, Haupex, Extralife, Diskobox, A Sensation, Imitation None, Pulse and many many others! For comments or more bugs, mail me at: lop@gmx.de (Leif Oppermann) /// Leif Oppermann (27.04.98) --- One month after the above, I visited the #amycoders homepage and found another fix, done by Platon42. He managed to remove some Enforcer Hits. To me the source seems bugfree now and I thought it might be a good idea to make a new release-pack for you. Well, here it is. To be up-to-date, visit amycoders from time to time at http://come.to/amiga /// Leif Oppermann (16.06.98) @endnode @node FOREWORD "The PlayerR 6.1A: Foreword" @{u}1. Foreword:@{uu} This little utility was first started just for fun about two years ago and was meant just to my own use, but when I noticed that there weren't a GOOD Protracker-compatible replay available and after I saw a few tries to fix this (ProPacker, Prorunner, etc.) I decided to give other people a chance to play their Protracker-tunes FAST! When designing the moduleformat, I also included packing and this 6.1 packing method is the most efficient I've seen for this purpose (6.1 is even better, although not ready yet...) Afterwards features like the two delta-formats have been introduced to keep this player on the edge of development. I also made a converter to make it easier to use PT-modules. It uses Reqtools and Powerpacker libraries (both by Nico Francois) so it can also load Powerpacked modules. The converter is made as easy as possible to the user. @endnode @node DISTRIBUTION "The PlayerR 6.1A: Distribution and copyrights" @{u}2. Distribution and copyrights:@{uu} This program and all other stuff coming in this package are FULLY copyrighted by @{u}@{b}Jarno Paananen / Guru of Sahara Surfers.@{uu}@{ub} With the exception of Reqtools and Powerpacker libraries C by @{b}Nico Francois@{ub} (You have made a big favour to all programmers on the Amiga!) @{u}BUT!:@{uu} You're allowed to make additions or modifications or what so ever to fit the playroutine to your own needs. That's why the sources are here. But, please: credits for the author and a copy to myself, if possible, so I can add your new features to the future releases! @{u}Contents of this package:@{uu} P61Con - The converter Player61A.guide - Amigaguide format docs, this file Player61A.changes - History of changes, bugfixes etc. 610.4.asm - The main thing, Replay source 610.4.bin - Binary version CIA_Example.G - An example of how to use the CIA-version Player61.i - Include file Vibtab - Vibrato table Periods - Periodtable with finetunes Periods.nft - Same with no finetunes Infos.s - ASM-One specific outputs P61.testmod - Module by Skylord/Sector 7 NOTE!: The default jump size is word! Everything without size declaration means a word! The normal @{u}@{b}disclaimer:@{uu}@{ub} The author cannot be held liable for the suitability or accuracy of this manual and/or the program it describes. Any damage directly or indirectly caused by the use or misuse of this manual and/or the program it describes is the sole responsibility of the user her/him self. A few words about distribution: This program is freeware. You can distribute it as long as @{u}ALL@{uu} files are included and not more than a nominal fee for copying is asked. This program can @{u}NOT@{uu} be used for commercial purposes without written permission from the author and a contribution for development costs (like Coca-Cola :-). If you have suggestions or remarks about this program, or if you find any bugs, please let me know. THIS MEANS: IF YOU ARE GOING TO USE THIS IN COMMERCIAL SOFTWARE YOU SHOULD AT LEAST ASK ME FIRST AND I WOULD BE GLAD TO RECEIVE SOMETHING AS A COMPENSATION FOR THE TROUBLE THIS THING HAS CAUSED ME, BECAUSE MAKING THIS HASN'T BEEN JUST FUN AND SUNSHINE... This was meant especially to software houses using this without my permission, like Team 17: Where the hell did you get that P41 you used in Super Frog from?!? It was never released due to P50. I just gave it to some friends for beta testing... If you want to clear your conscience, contact me. To everyone: If you're going to use this player in your commercial software, you should know, that the one released is never the newest version and is always somewhat cut down. If you contact (and pay...) me, you get misc stuff like sound effect engines with it, if you want. And tidy conscience... The black list (programs using The Player without my permission (nor money :) All are using the beta of P41A: - Super Frog from Team 17 (see ya at Assembly'95...) - OverDrive from Team 17 - Alien Breed II from Team 17 - Action Pool from Team 17 - Qwack from Team 17 - Kick Off 3 - Impossible Mission 2025 from MicroProse At @{u}least@{uu}. Thanks to these firms for contacting me before using The Player: Bloodhouse - Stardust (Hi Everyone!) - Super Stardust Core Design - Banshee (Hi Soren!) Why is this list shorter? @endnode @node REQUIRES "The PlayerR 6.1A: Requires" @{u}3. Requirements:@{uu} - An Amiga computer (for PC use MIDAS!) - Reqtools and Powerpacker libraries - about 30 kB of memory for the converter, and if converting, 2 * (number of patterns * 1024 + 1084) bytes for buffers - Works on 512kB machines, more memory recommended, especially for converting. - Kickstart 1.2 or greater. - Kickstart 2.0-style colors recommended (looks better) @endnode @node FEATURES "The PlayerR 6.1A: Features" @{u}4. Features:@{uu} - a very efficient method to pack the pattern data and play it VERY fast in realtime - cut-down header compared to the original one (4 bytes info, 6 bytes/sample, 8 bytes/pattern, 1 byte/position plus one byte for stopmark) - removes all names, unused patterns, samples, data after loops, empty data after unlooped samples, commands with no use and some smaller things - Delta format samples! Samples have the same quality, but packing efficiency is better with for example Imploder or Powerpacker. Look below for some stats! - 4-bit delta packing! Packs samples in ratio 1:2 with very little loss of quality. Try it! - nearly impossible to rip without finding the call to the init routine, except if the optional `P61A`-sign is used - works on every Amiga, tested under KS1.2-3.1, from WB or CLI/Shell, detaches itself from CLI, supports WB icons, etc... - loads files packed with Powerpacker, FImp or XPK (all references to Powerpacked files also apply to FImp and XPK files) Should support modules with 100 patterns (At least in PT2.x from Noxious) IF patterns are packed under 64kB in PASS 1... (pointers are only words) Commands implemented at the moment: - NoiseTracker 2.0 commands (0-6,A-F) - Tremolo (7), Sample offset (9), Fine slides (E1/E2), Set finetune (E5), Pattern loop (E6), Retrig note (E9), Fine volume slides (EA/EB), Note cut (EC), Note delay (ED), Pattern delay (EE), Invert loop (EF) - finetune and tempo - NOTE!:Patternbreak (D) does @{b}NOT@{ub} support break to a specified line, linenumber is just ignored! This is due to my packing system. @{u}Comparision to other players:@{uu} Tunes: 1. ( alcoholic score ) 2. enigma year bkh-nhp 3. knulla kuk !!! 4. menuloader 5. scrambled mind 6. tapiiri Note that these are random tunes picked out from about 120Mb I have, and everyone should be able to test these results. Tune: 1 2 3 4 5 6 ---------------------------------------------------------------------- Original: 121024 249550 160218 23390 163738 19664 P61A: 88704 204588 120062 16644 130650 6878 P60A: 90118 205984 121834 16992 131420 7306 NoisePacker 3.0: 93576* 214148* 128940* 17588 132736 10278* NoisePacker 2.02: 104560* 227770* 138218* 18292 140614 14094* ProPacker 1.0: 108028 226326 147302 20414 148742 14480 ProRunner 2.0: 98974 218588 132894 19338 143136 11978 Promizer 4.1: 103608 224778 136710 19762 147114 11260 TrackerPacker 3.0: 90992 209900 124434 17074 131578 9144 * = lacks some features (finetune, commands etc.) Obvious? TrackerPacker gets quite close sometimes, but... @{u}Some notes concerning this:@{uu} (After reading the docs of Prorunner 2.0 I thought that maybe I should also write some advertisement bullshit here, but I decided to stay in the facts...) - P61A is the fastest replay of these... - Has the best packing as seen above... - 4- and 8-bit delta samples (the first one to have these)... - Fully system friendly if needed (allocates channels, CIA's etc.)... - Works on all Amigas (the first released one to check the VBR)... - Supports CIA-tempos (the first one with no processor waits)... - Fully PC-relative replay (released before Cosmos...) - Has the so-much-praised master volume control... - Usecode-system - User-friendly converter (unlike NP2.0, PP1.0 and PRU2.0)... - Versions for Asm-One, DevPac3 and DevPac2... Enough? If you still want to use some of those other players, feel free... IF SOMEONE COULD SEND ME PROPACKER 2.x, PLEASE DO! @{u}Delta vs. normal samples:@{uu} Tune: ((( the war ))) by Audiomonster / Melon Dezign Original P61 tune: 260182 ------------------------------------- Normal Delta Diff. FImp: 184828 168650 16178 PP: 184812 162612 22200 xpkNUKE: 187340 166684 20656 xpkSQSH: 148600 144124 4476 Make your own conclusions. @endnode @node CONVERTER "The PlayerR 6.1A: P61con, the Converter" @{u}5. P61con, the Converter:@{uu} Note!: Do _NOT_ merge hunks in this file, because it uses two SEPERATE code hunks for detaching. If you do, it crashes straight away... Shell usage: P61con [-q][filename] -q Be quiet. The only way to stop playing is to give CTRL-C-signal to the DETACHED piece of code. Use TaskX or similar. filename to play. No checkings made, so be sure it IS a P61-module! WB usage is normal. Double clicking on a modules icon or click on module, shift and click on P61con to play it. 1. @{" Converting ProTracker-modules " link CONVERT} 2. @{" Playing modules " link PLAY} 3. @{" Converting back to Protracker " link RIPPER} 4. @{" Sample packer-selector " link SELECTOR} 5. @{" Preferences " link PREFERENCES} @endnode @node CONVERT "The PlayerR 6.1A: P61con, the Converter, Converting Protracker-modules" @{u}1. Converting Protracker-modules:@{uu} First a normal Reqtools filerequster asks you to select one or more (supports batch-processing) modules. If you select multiple modules, the directory for the modules to be saved is asked. Then loading with the Powerpacker library. If you chose one module, the name and path for the save are asked. As the packing starts, an info requester with some bars and statistics pops up. If you are converting only one module and have sample packing on, @{"Sample packer-selector" link SELECTOR} appears. When the job is done, save and some statistics about the efficiency are shown. If you have converted only one module, also the @{"Usecode" link USECODE} is here. @endnode @node PLAY "The PlayerR 6.1A: P61con, the Converter, Playing modules" @{u}2. Playing modules:@{uu} First the converter asks for a module and then loads it using the Powerpacker library so it can also be packed with the Powerpacker :) @{b}DOES NOT SUPPORT FILES WITH SAMPLES IN OTHER FILE!@{ub} If it finds P61 from the memory, it informs it to play the module. If not, a requester is shown with the name of the file and a stop gadget below. The play routine is the system friendly tempo one, allocates channels with priority 127, a CIA-timer and returns if it couldn't get something. Should work with every system friendly program. @endnode @node RIPPER "The PlayerR 6.1A: P61con, the Converter, Converting back to Protracker" @{u}3. Converting back to Protracker:@{uu} This option is disabled to partly because I want to give people some peace from Perverter and alike ie. protect their modules from ripping. (I of course have my own version, which has this option implemented and enabled...) So you have to make your own reconverter is you want to listen the modules in PT-format. Usage is easy, just load P61A-module and save it as Protracker-module. Be sure it IS a P61A-module, otherwise I can't quarantee the result... Damn! The new ProWizard (version 2.16) supports P61A-format so in this version this feature is enabled, in request of Nemesis1 (Hi!). @endnode @node SELECTOR "The PlayerR 6.1A: P61con, the Converter, Sample packer-selector" @{u}4. Sample packer-selector:@{uu} When you have @{"sample packing-option" link PREFERENCES} on, a requester appears when you convert only one module. It is used to select which samples are to be packed with @{"4-bit delta packing" link FEATURES} and has the following functions: Original -Plays the original sample. Stop with right mouse button! Packed -Plays the sample after packing and depacking it. This sounds same as the final packed sample. Stop with right mouse button! Pack -Marks the sample to be packed. Pack rest -Marks this and the rest of the samples to be packed. Don't pack -Marks the sample NOT to be packed. Don't pack rest -Marks this and the rest of the samples NOT to be packed. Use of keyboard shortcuts is highly recommended! @endnode @node PREFERENCES "The PlayerR 6.1A: P61con, the Converter, Preferences" @{u}5. Preferences:@{uu} Default loading directory: The directory converter first gives you, when you load Protracker modules. Default saving directory: The directory converter first gives you, when you save ONE P61 module. Default batch directory: The directory converter first gives you, when you save multiple P61 modules. Prefices: These are used to mask files in file- requesters and put to the beginning of the filename when saving. Can be up to 7 chars long. Two files: If you want samples and rest of the tune to be saved in separate files. P61A sign: If you want the P61A sign to be inserted in the beginning of the module. No samples: If you're converting multiple modules with same samples, this disables the saving of samples. Tempo: Whether the player should use tempo or not. Icon: If you want the icon to be saved with the module. Delta: If you want to use 8-bit delta samples. Sample packing: If you want to pack samples to 4-bit delta. @endnode @node PLAYER "The PlayerR 6.1A: P61, the Player" @{u}6. P61, the Player:@{uu} This program was under work (and still is...) for quite a lot time. The idea came from Simply / Parallax, due to the fact that Multiplayer can't play P50-modules without GMOD-header and that makes modules about 6kb larger... So I had to get working. Two days before Assembly'93 I rewrote this program completely in a big hurry, so please forgive me those bugs that @{u}will@{uu} appear. Present program is the same, but plays P61-modules. The interface is now quite neat, small is beautiful? Under KS3.0 those proportional gadgets are quite nice. Functions should be familiar to all who have used some player program (Multiplayer, Smartplay etc.). The only special feature is that if you try to load a Protracker module and you have P61con in memory waiting in its mainmenu, P61 gives this module to it to be packed. P61con saves it to the ram-disk and informs P61 to load it. After loading P61 deletes the module from the ram-disk. @endnode @node USING "The PlayerR 6.1A: Using The Player in your own programs" @{u}7. Using The Player in your own programs:@{uu} NOTE: The instructions for the binaryfile-versions expect you to have loaded the file to a label called "Player" The versions are in the same file and these topics describe the various possible versions to compile the source. Also the binary versions have their instructions here. Completely PC-relative! 1. @{" Normal VBlank-version " link VBLANK} 2. @{" Non-lev6-version " link NONLEV6} (too slow. Contact me if interested) 3. @{" CIA-version with tempo " link CIA} 4. @{" 68020-versions " link 68020} 5. @{" Player61.i " link INCLUDE} @endnode @node VBLANK "The PlayerR 6.1A: Using The Player in your own programs, VBlank" @{u}1. Normal VBlank version:@{uu} Options: CIA = 0 system = 0 lev6 = 1 Exec = 1 if ExecBase is valid and 0 if not This should be easy for all you who've used the ugly Protracker routine or one of the millions of others. Call "P61_Init" with the address to the module in A0 and the address to the samples in A1 or if they are in the same file, clear A1. If you have a module with samples packed, put address to the sample buffer in A2. Uses all registers, so preserve them if you're going to use them afterwards. IF YOU ARE USING INVALID EXECBASE: ---------------------------------- Check the Base yourself and put it to P61_VBR or Player+P61_UseVBR. You can also get the VBR there, if using valid ExecBase. TO CHECK IF MODULE HAS PACKED SAMPLES: -------------------------------------- Check bit 6 ($40) of the offset 3 from the beginning (excluding optional sign). If it is set, the module has packed samples. Size of the required buffer is then at offset 4. To play the music, call P61_Music every frame (with NTSCs who want to play the tune in PAL-speed or vice versa, use the @{"CIA-version" link CIA}). To end the music and turn the DMAs off, call P61_End. With system option = 1, allocation of channels and lev6-timer are included. Returns non-zero in D0, if couldn't allocate something. With the binary file, P61_Init is Player+P61_InitOffset, P61_Music is Player+P61_MusicOffset and P61_End is Player+P61_EndOffset. The source can be compiled with at least Asm-One 1.09 by T.F.A. (the Best assembler around!). A separate version for Devpac3 is also included. This version should be easy to make work under any assembler with incbin command. The maximum rastertime taken is under 6 lines on a normal 68000 Amiga. Fast? Invert loop can take it beyond that, though. Everything has its costs. @endnode @node NONLEV6 "The PlayerR 6.1A: Using The Player in your own programs, Non-lev6" @{u}2. Non-lev6 version:@{uu} Options: CIA = 0 system = 0 lev6 = 0 This routine is basically the same as the @{"lev6-version" link VBLANK}, but you have to call P61_Setloop about 7 raster lines after P61_Music. This system is done to enable the use of those 7 lines. So if have a routine, which fits to these 7 lines, do it while waiting... This is not too much slower compared to the lev6-version, but I'd still advise you to use it if possible. It makes your life a hell lot easier... @endnode @node CIA "The PlayerR 6.1A: Using The Player in your own programs, CIA" @{u}3. CIA version with tempo:@{uu} Options: CIA = 1 system = 0/1 lev6 = 1 Exec = 1 if ExecBase is valid and 0 if not The first tempoplayer I know, which uses only the lev6-int and does @{u}NOT@{uu} use those fucking processor loops. As fast as the normal @{"lev6-version!" link VBLANK} Otherwise normal init, but info for the setting of CIA is needed in D0: 0 - Autodetect, if PAL/NTSC, uses ExecBase->VBlankFrequency. 1 - Force PAL. If you've destroyed the ExecBase, detect the timing yourself and use these force modes. 2 - Force NTSC No further actions needed. Returns non-zero in D0, if it couldn't allocate something. The player starts playing right away, so do @{u}NOT@{uu} call P61_Music. To end call the normal P61_End. To enable using of tempo, set P61_UseTempo to some non-zero value. If system is set to 1, allocations for timer and channels are included. Use if possible. NOTE: If you want to use this in your own program that needs synchronizing to the beam, do one of these: 1. Do your routine in VBlank-interrupt. 2. Do your routine in copper interrupt. 3. If you do NOT have to wait for a specific line, wait for VBlank bit in INTREQR ($1e) and clear it afterwards. 4. If you have to wait for some specified line, disable Copper-interrupt from INTENA ($9a), set Copper-interrupt bit in INTREQ ($9c) with Copper at the specified line and wait for the bit in INTREQR ($1e) in our own routine. Clear it afterwards. See the examples supplied. Otherwise this WILL steal some frames from you time to time... @endnode @node 68020 "The PlayerR 6.1A: Using The Player in your own programs, 68020" @{u}4. 68020-versions:@{uu} Options: opt020 = 1 These are a bit optimized versions for the 020+ machines. The difference to the 000/010-versions is only a slight one and because those versions take only a half of a rasterline on a 25mhz A4000, I think these are nearly useless. But if you really want to make a 020+ program or AGA-only stuff, this is for you... Can be compiled at least with Asm-One 1.15 by T.F.A. Interface is similar to the 000/010-versions. @endnode @node INCLUDE "The PlayerR 6.1A: Using The Player in your own programs, Player6.i" @{u}5. Player61.i:@{uu} This is the include file of all the structures needed, if you're going to compile the source. Also if you are making some additions to this player (like quadrascopes, etc. (these kind of things are maybe coming, I already have quite a bunch of 'em linked to this player)) you can look for the information there. First I was going to release this only as a binary version, but after thinking a few more moments, I decided to make this include file and release the source, just to make supporting and developing of this product possible. @endnode @node USECODE "The PlayerR 6.1A: The Usecode-system" @{u}8. The Usecode-system:@{uu} This system was created for fun on a sunny afternoon. I got a crazy idea of putting a code of which features a module needs to the beginning of the source and let conditional compiling take care of the rest. The main idea is to reduce the lenght of this massive player to the real needs of the module. So only the commands the module needs are saved to the player. Also if the module doesn't use finetune, a smaller periodtable is used. And finally if the module doesn't use vibrato or tremolo, the 512 bytes long vibrato table is left out. What you have to do is: Take down the Usecode shown in the requester after the converter has packed your module (if only one module is being processed or from the filenote) and put this code to the beginning of the source into the place for it. Compile and you have a customised version for this module only. Usecode -1 leaves all features ie. compiles the full version. for example: use = $9f0f @endnode @node BUGS "The PlayerR 6.1A: Bugs?" @{u}9. Bugs?:@{uu} Some of you might still remember (in horror...) the previous versions of this marvelous :) player. Those 4.x-versions were all more or less beta- versions and that showed... (previous versions weren't even released, thank god..) This version has gone through quite a hell of beta-testing, by myself, my Good friends Janne Juhola (Simply/Parallax), Steffan Schumacher (Metal/Parallax), Kari-Pekka Koljonen (Moonstone/Hippopotamus Design), AND ESPECIALLY Mikko Karvonen (Yolk/Parallax)! Also thanks for reporting bugs / wanted features go to: - Dr.Jekyll / Andromeda - Shayera / Spoon And the rest I can't remember at the moment, sorry! @endnode @node HELLOS "The PlayerR 6.1A: Hellos" @{u}10. Hellos:@{uu} A bit more hellos than in the converter to: To all who make those nice multiformat-player-programs (Multiplayer, Smartplay, etc.): If you want some information about this format to be included in your program, or anything else, just let me know! To Turbo and Marley of Infect (authors of Exotic ripper): You did it! I just ask how?!? You say it's deep search and it surely is. Fab prog! The pattern format changed once again... Some peace from Perverter and the like... To Gryzor (author of ProWizard): Hi! So how did it feel to make support for P61? Well, now I can use the same program for all modules again, so at least something positive... Great program anyway! And hellos especially to: - Janne Oksanen / Stratos of Sahara Surfers - Nothing special to say, but hello. - Petteri Kangaslampi / Alfred of Sahara Surfers - LIVE rules... Thanks for help with the new format! Hopefully Midas comes off great! - Kari-Pekka Koljonen / Moonstone of Hippopotamus Design - Great sendings (when coming...). Happy with this? HiP is Really Cool! - John Hinge / Shayera of Spoon - Sorry for huge delay, but hopefully this gives some compensation... - All of you waiting for (e-)mail from me: please have patience... (or recontact me!) @endnode @node CONTACT "The PlayerR 6.1A: Contact address" @{u}11. Contact address:@{uu} I'm improving this utility for my own use (they made me release this!), but send me some $$$ (Finnish marks, please) or two disks with a return envelope WITH stamps (or International Response Coupon) and I'll send you the newest version (Mention which version you have, so I won't send the same version!) @{u}@{b}IF THESE CONDITIONS ARE NOT MET, ABSOLUTELY NO REPLY IS GUARANTEED!@{ub}@{uu} Also for licences for commercial use! TO: (@{u}NO swapping!@{uu}) J.Paananen Puskalantie 6 FIN-37120 Nokia Finland Or by phone: +358-31-3422147 / Jarno Or preferably via Internet: jpaana@kauhajoki.fi (Main account) jpaana@freenet.hut.fi (redirected) (fool-proof ;) NOTICE!!! Also my other account (Jarno_Paananen@sonata.fipnet.fi) died by the end of March, so use only one of these! @endnode .