Copyright© 2000-2001 by Adrian Au. All rights reserved.
The latest version can be found at: http://adrian.saxtus.gr (Backup: http://www.geocities.com/renx2)
I'm very interested in knowing how many people actually use this script. If you find the script useful, please send me an email with your name/nick, network, and any comments/suggestions. Thanks! My email is: renx2@yahoo.com
If you want to be notified of new versions, please let me know in the email.
All my scripts are all free for you to download and use. Please don't rip them off. I spent an enormous amount of time and energy writing, testing and improving them. Although they are free, if you are generous and want to reward my hard work, any donations/gifts are greatly appreciated. :)
CONTENTS:
INTRODUCTION
Last updated on December 11, 2001
INSTALLATION
HOW TO USE
NOTES
LICENSE AND DISTRIBUTION INFORMATION
HISTORY
INTRODUCTION:
Ren-Ren's Fserve Navigator (RFN) is an mIRC script that makes finding files and getting files from IRC file servers (fserves) easier than ever. RFN is very versatile and extensively customizable with its many abilities and options. These are the main features:
The script was tested on DALnet using mIRC v5.91 32-bit on a Windows 98 SE PIII-550MHz system. RFN may or may not work correctly in other versions of mIRC. There is no guarantee that the script will work 100% correctly. Use this at your own risk. Remember, if it hangs, press Ctrl-Break.
The script consists of: rfn-setup.mrc, rfn-system.mrc, rfn-dialog.mrc, rfn-dialog582.mrc, rfn-catch.mrc, rfn-file.mrc, rfn-dmain.mrc, rfn-dopt.mrc, and rfn-nav.mrc
rfndoc.htm is the file you're reading, and rfn-faq.txt contains additional notes (loaded into the RFN window's help tab). The license agreement is in rfn-license.txt. An icon file (rfn.ico) is also included. As you can see, I'm not good with graphics. Please don't mind the icon too much. The button rfnhelp.bmp appears in the About window and was made by bughunt.
INSTALLATION:
Extract the script files into one directory (preferrably one with spaces in the name). Open mIRC v5.91 (or above). Then type the following command in any mIRC window (replace "C:\mIRC\RFN\" with the directory you extracted the script to):
/load -rs C:\mIRC\RFN\rfn-setup.mrc
The license agreement will be shown. If you don't agree to it, setup is halted. rfn-license.txt must be present and unmodified. Otherwise, setup will not proceed.
mIRC may pop up a warning message. The script won't work if you don't let it initialize. During initialization, the script will load the required files and set up several variables. These will generally be %rfn-[something]. After it has served its function, rfn-setup.mrc will automatically unload.
If you're updating from an earlier version, don't just overwrite the files. You should use the Unload command from within RFN. Unloading manually removes all RFN settings.
HOW TO USE:
To open RFN, press Ctrl-F12, type the command /RFN, or choose Open RFN in the channel popup menu or mIRC menu bar. The window opens automatically when you type a trigger (eg. !List) in a channel or when you establish a connection to an Fserve.
When you connect to an IRC server, if the server does not return a network name, RFN will prompt you for one and add it automatically to its Network List.
Channels:
This tab displays the channels being watched for triggers, caught triggers, and various trigger information.
Channel listbox: The left listbox displays the channels you want to track. Modify the list with the plus/minus buttons. (When you manually type a listing command in a channel, that channel is added automatically.) The box above shows the current Fserve listing command. To add a command, type it in and use it. Press the "List Selected" button to send the current listing command to selected channels (or double-click on a channel). Press the "List Active" button to send to the active mIRC window (or to the first channel if the active window is not a channel).
Use the Save Channel command to save a channel's list of Fserves. The information is saved to the RFN directory as set under Options. Use the Load Channel command to load the information back. This replaces any existing information.
Triggers listbox: The middle listbox shows a channel's Fserves and FTP addresses. Modify the list with the plus/minus buttons. Be default, the » symbol represents people in your notify list, and the « symbol represents people whose Fserve information is not to be updated. The number after the Fserve name denotes which ad the trigger came from, since some Fserves have more than one ad. Double-click on an entry to activate the trigger. If the trigger is an FTP address, you'll have to run an external FTP program.
The SL checkbox toggles the List Each Fserve as Single Entry option, the Clr checkbox toggles the Clear Fserves on List option, and the Sort checkbox toggles sorting of Fserves according to open queue space (see Options). The Notify button adds/removes the selected entries in the listbox to/from the mIRC notify list. The Keep button adds/removes the selected entries from an internal list of Fserves whose information are not to be updated automatically. Press the Refresh button to reparse the ads.
You can search the Fserve ads using the editbox on the bottom. Type in your query and press the Search button or the Enter key. You can use " quotes around phrases to refine searches. Note that the search does not check data you enter manually, only the original Fserve ads are searched. To get the full list of Fserves again, just select the channel again. To send the selected Find command with the query to the selected channel, press the Find button. (If the find command being used is not already in the list, it's automatically added.)
Fserve Information: This shows various information parsed from the ad. Double-click on a trigger in the box to activate it. The Manual Entry button allows you to correct information if RFN parses incorrectly. Separate multiple triggers by a separator (eg. &). If the separator character is actually part of the trigger, put ‹› around the character (eg. ‹&›. Note that it automatically adds the Fserve to the Keep list.
Original Fserve Ad: When an Fserve is selected, this shows the original Fserve ad and the time of the last update. For XDCC Fserves, the command, description, number of packs, and time are shown. If no Fserve is selected, the Channel topic is displayed with the time the !List trigger was last used. The box can be edited directly (except for XDCC). Any changes you make (above the bottom two lines) are saved immediately. The "Say Highlighted Text" button sends the highlighted text in the box to the selected channel.
Fserves:
Fserve navigation occurs here. There are three large listboxes (from left to right): Fserves, Subdirectories, and Files. The grey box on the bottom is the Message box, and the white bar beneath that is the Edit box. Note that a given command only works if the Fserve supports it.
Fserves listbox: This lists all the currently opened Fserves. Select an Fserve to begin navigation. Click Start to look at the Fserve Welcome message again. Click Close to close the Fserve. The Refresh button refreshes the subdirectories/files list by sending the Dir command. Use this if the cache RFN loaded is old. The box below shows the channel and trigger associated with the selected Fserve. Directly edit this if it's wrong.
Subdirectories listbox: This lists all the subdirectories in the current directory (shown in the combo box above). Double-clicking enters the subdirectory. Click on .. to return to the parent directory. The current directory box lists the previously accessed subdirectories in the session. Select one and click the Go button to enter the subdirectory. Click the ! button to show the current path again.
Files listbox: This lists all the files in the current subdirectory. Double-click on a file to send the "Get" command. You can also select multiple files with the Ctrl key and click on the Get button. Don't flood the Fserve or risk getting banned. The IQueue button adds selected files to RFN's internal queue, while the IQueue Go button runs the internal queue. The Read button tries to read the first selected file in the Files listbox. The Sends, Queues, and Clr_Queues buttons executes the command as named. The Clr_Queues command clears the queue you may have on the current Fserve. The Size checkbox toggles the Sort Files by Size option.
Message box: Messages from the Fserves to you and vice versa are printed here. This is provided for a quick look at recent messages only. Switch to the Fserve Msg tab if you want to see messages in a clearer manner.
Edit box: This is for you to chat or type commands in manually. Press the Enter key on the keyboard to send the message.
In the window that opens for Fserve Welcome Message or Read command, the Copy button copies all the text displayed in the window to clipboard.
Fserve Msg:
The Fserve Msg has a single box showing messages Fserves sent to you and vice versa. As with most boxes, highlight and right-click to copy text.
Files History:
The Files History uses the rfn.ini file.
Networks: This lists the Networks stored in the files history. Modify the list with the plus/minus buttons.
Fserves listbox: This lists the Fserves stored in the files history. Those who are currently on the channel where they advertised the respective Fserve have an "o" symbol, whereas those who aren't have an "x" symbol. Modify the list with the plus/minus buttons. The IQ Go button runs the internal queue of the selected Fserve.
Queued/Failed/Received Files listboxes: These list the respective files. The All button lists all queued, failed, or received files regardless of what Fserve they were from. The plus/minus buttons are used to modify the lists. The IQueue button adds the selected files to the internal queue. Double-click on a file to try to access the Fserve, provided that the needed information (channel, trigger, and path) is listed in the File Information box, and that you and the Fserve's owner are on the recorded channel. For the failed file, RFN will try to get the file automatically after the Fserve opens. The Fserve will remain open until you close it.
File Information box: When a file is selected, this box in the bottom right shows the channel, trigger, path of that file, and number of retries. You can directly edit the box. Press the Save button to save (first 3 lines in the box must be present for Save to work). To cancel changes, just select the file in the listbox again. The Run File button runs the selected file in any of the three file lists (Queued, Failed or Received), provided it's still in the Get directory or the nickname's folder in the Get directory.
mIRC likes to put underscrolls ( _ ) in place of spaces in the filenames during DCC sends. Nice, but this can cause errors in the Files History.
Cache:
This tab has some similarities to the Fserves tab. The left listbox shows all the Fserves in the cache. The ones with "o" in front are currently in the channel where the Fserve was triggered. Those that aren't have an "x" in front. The Remove button above removes a selected cache. The cache of currently connected Fserves cannot be removed. The Rename button renames a selected cache. The Connect button tries to connect to the selected Fserve. The box below the list of Fserves shows the channel and trigger used to open the Fserve. You can edit this information directly. The first line must begin with # to denote channel name, and the second line is the trigger.
The middle listbox shows the subdirectories while the right listbox shows the files. Subdirectories whose contents are in the cache have the symbol "o" whereas those whose contents are not have the symbol "x". The box above the Subdirectories listbox shows the current directory. The IQueue button adds selected files to the internal queue. The IQueue Go button runs the internal queue. The Load and Save buttons load and save the cache respectively. The Size checkbox toggles the Sort Files by Size option. Double-click on a file to attempt to enter the Fserve and get the file. If you are currently connected to the Fserve, the file is added to the internal queue. If you double-click more files while trying to connect, these are added to the internal queue as well. You can add multiple files to the internal queue via the IQueue button.
IQueue:
This tab displays the RFN internal queue. The left listbox shows all the Fserves with internal queues. Modify with the Remove/Rename buttons. The bottom box contains the information required for the internal queue to run (channel, trigger, current file number/max queue number). It may be edited directly. If your queue history for the Fserve is empty and a timer is on for retry, the time until next retry is also shown (cannot be edited).
The right listbox displays the files queued internally for the selected Fserve. You can modify the order with the Remove, Up, Down, Top and Bottom buttons. The order is not saved until you press the Apply button. The IQueue Go button runs the internal queue of the selected Fserve.
The current file number means the number of files that RFN believes is currently queued on the Fserve. The max queue number is the maximum number of files that can be queued on the Fserve at a given time.
Status Window:
This tab opens the RFN-Status window. Various RFN messages (eg. new fserve alert, suppressed ads and triggers) are shown in this window when it's open. Otherwise, RFN messages are sent to the mIRC Status window. Right-click on the window for commands to open RFN and clear the Status window. Double-clicking on an empty Status window closes it, while doing so on a window with messages clears it.
Options:
This is where you can change various options. Any changes you make are saved immediately.
System:
Open on Desktop: This sets whether the interface window opens on the desktop. One advantage to desktop windows is that there is a minimize button. Default is on.
Always on Top: This sets whether the interface window is always on top of all other windows. Default is off.
RFN Menu/Popup Commands: This toggles the RFN popup commands in the channel window and the mIRC menubar. Default is on.
Status Window Always on Top: This sets whether the RFN-Status window is always on top. Default is off.
RFN Directory: This is the directory where RFN works from (to load/save rfn files and to store rfn.ini). Single-click to change it. Default is the script directory.
Fserve Open Sound: This is the sound played when an Fserve is opened and ready. Single-click to change it. During selection, press the cancel button (or press Esc) to set to none. Default is c:\windows\media\chimes.wav if it exists. Otherwise, default is none.
Warn Close Idle Sound: This is the sound played when an Fserve gives the idle warning. Single-click to change it. During selection, press the cancel button (or press Esc) to set to none. Default is c:\windows\media\chord.wav if it exists. Otherwise, default is none.
Alert Sound: This is the general alert sound played (eg. when you double-click on a trigger in Triggers listbox or a file in the Cache or Files History, when a new Fserve is found, etc.). During selection, press the cancel button (or press Esc) to set to none. Default is c:\windows\media\ding.wav if it exists. Otherwise, default is none.
Network List: If an IRC server does not return a network name, RFN will look up the network name of the server from this list. Modify the list with the plus/minus buttons. The "x" button clears the list. Each entry is in the form of: server network
For example, if irc.somewhere.net belongs to DALnet, type "irc.somewhere.net DALnet" and press the "+" button.
Window Size: Adjusts the size of the RFN window. Your choice of small, medium or large. Default is medium.
Save Options to File: Saves all options to rfn.ini file, except for RFN directory and Network List.
Load Options from File: Loads previously saved options from rfn.ini file, except for RFN directory and Network List. If an entry is empty, the current option is kept.
Default: Resets all the options (except RFN Directory, Network List and Custom Fserve Commands) to default values.
Catcher:
Catch All Notices: This sets whether RFN will catch all notices from people on a channel that you have typed !List in, regardless of whether RFN thinks it's an Fserve ad or not. Recommended to leave off unless you find RFN is not listing a lot of Fserve ads in your channel. Default is off.
Auto-Update Fserves from Channel: This sets whether to scan messages from channels for Fserve ads. Default is on.
Suppress Ads in Channels: This prevents Fserve ads from cluttering up the channel windows. Any ad caught by the RFN catcher will not show up in the channel windows. This is also useful to see what ads are not caught by RFN since only these would show in the channel windows. Turn New Fserve Alert on if you want to know when an ad is added. Default is on.
Echo Suppressed Ads to Status Window: This echos Fserve ads to the Status window if they were suppressed. This is provided in case you want to check those suppressed messages. Default is off.
Suppress Triggers in Channels: Fserve triggers, list triggers and find triggers are filtered from the channel window. Default is on.
Echo Suppressed Triggers to Status Window: This echos triggers to the Status window if they were suppressed.
New Fserve Alert: This sets whether to alert you with new Fserves. Default is off.
New Fserve Alert Sound: This sets whether new Fserve alerts play a sound. Default is on.
List Triggers: These are the recognized Fserve listing commands, separated by commas. The first one is the primary command. The others are recognized when you actually type them in channel windows. For mIRC commands, use ‹chan› to represent channel name as needed (eg. "/ctcp ‹chan› !List"). Default is "!list,!online".
List Timer: This defines the frequency that RFN will automatically send the Fserve listing command for update of Fserve information. Minimum is 3600 seconds (1 hour). Set to below 3600 to turn off the timers. A timer is started (or restarted) only when you use an Fserve listing command (within RFN or manually typed). Default is off (0).
Trigger Keywords: These are the keywords (separated by commas and sorted by priority) that RFN scans in Fserve ads to parse for the correct Triggers. These are also what RFN looks for when scanning messages to determine whether they are Fserve ads. If the keyword is at the end of the ad, RFN considers the trigger to be the first entry in the ad enclosed by parse opener and closer. Default is "trigger,[t®îggË®],FTP,Address,Server is up,« Ë×Çü®§îöñ »".
Parse Openers: These are the openers (separated by spaces and sorted by priority) used to parse Fserve ads. Information obtained this way is placed in the Fserve Information box. They are matched in position with the Parse Closers. The Default is "«« ( [ < { «". For example, in the partial notice "Fserve Triggers:(!This & !That)", the parse opener is ( and the closer is ). The openers and closers must occur at least 4 times in a notice in order to be considered.
Parse Closers: These are the closers (separated by spaces and sorted by priority) used to parse Fserve ads. Information obtained this way is placed in the Fserve Information box. They are matched in position with the Parse Openers. Default is "»» ) ] > } »".
Trigger Separators: This defines the symbols that separate multiple triggers listed in an Fserve advertisement. Default is "& º •".
Parse Exclude Strings: This defines strings (separated by spaces and in order of priority) that RFN will skip when determining starting and ending of information during parsing of advertisements. Exclusions typically contain parse openers/closers that RFN normally would use for parsing. An exclusion can contain commas but must be at least 2 characters long. (eg. The trigger "!Trigger :)" can be parsed correctly if :) is in the Parse Exclude Strongs.) Default is ":) ;) =)".
Find Triggers: Find triggers are used to search for files on people's Fserves. Commands are separated by comma. Default is "@find,@locator".
Other Triggers: Messages on the channel that contain one of these strings at the beginning are filtered out if the Suppress Triggers in Channels option is on. Possible triggers include: request,(request),[request],away. Default is empty.
Channels:
Open RFN after List: This sets whether the main interface window opens automatically after you use a recognized Fserve listing command in a channel. Default is on.
Auto-Join after List: This sets whether to automatically join the channel (if you're not on it already) after pressing the List button or double-clicking on a Channel in the Channel listbox. If the channel window opens within 5 seconds, the current Fserve listing command will be sent. Default is on.
Clear Fserves on List: This toggles whether the Fserves list is cleared when an Fserve listing command is used. Turn off if you're in channels that use more than one listing command (eg. !List and !Online). Default is on. The Clr checkbox in the Channels tab does the same thing.
Select Active Channel on Open: This toggles whether RFN automatically selects the active channel in the Channel list box (if available) when you open RFN. Default is off.
List Each Fserve as Single Entry: This sets whether RFN lists Fserves with multiple triggers as one entry in Channels tab. XDCC Fserve listings tend to clutter otherwise. Default is off.
Auto-Refresh Triggers List: This sets whether RFN will automatically refresh the Triggers list under the Channels tab whenever a listed Fserve joins/parts the channel or quits IRC. It can get annoying if you're in the middle of something and it refreshes. Default is off.
Notify and Keep Symbols: These are the two symbols (separated by a space) used to show who are on your notify list and whose Fserve information is not to be updated. Default is "» «".
Fserve Retention Time: This is the number of seconds RFN will remember an Fserve after it leaves the channel or quits IRC. Set to 0 if you want RFN to remember until you type a trigger (eg. !list) again or mIRC is closed. Maximum is 99999 (equivalent to 27.8 hours). Default is 900.
Fserve Info Keywords: This defines the type of information displayed in the Fserve information box under the Channels tab. Each heading is separated by a comma. This list does not include Triggers. Besides the default ones, TimeZone, Running, and On Server are also common. Default is "Online,Sends,Queues,[Sends],[Queues],Bandwidth,Note".
Fserve Sort Keywords: This modifies how the Fserves are sorted. The default is "Queues,[Queues]". With the default, RFN sorts the Fserves according to number of queue openings. Fserves on your notify list take precedent. Those that have full queues have the symbol "x", and those that cannot be determined have the symbol "?". The symbols are repeated as needed for spacing purposes. Sorting is not only for queues. You can enter keywords such as Record CPS, Sends, Online and so on. Set this option to blank or uncheck the checkbox to turn off the sort. This option can also be toggled by the Sort checkbox in the Channels tab.
For x/y formats, sort by: y - x, x, y: There are 3 methods by which RFN can sort Fserves for x/y formatted information (eg. Queues: 3/10). For y - x, Fserves are sorted by the second number subtracting the first (ie. 10 - 3). Sorting by x and by y sort the Fserves by the respective number. Default is x.
Fserves:
Use RFN for Navigation: This toggles whether RFN will be used for navigation of Fserves. Default is on. Cache is still created when off.
Auto-Focus to Fserves Tab: This toggles whether RFN will auto-focus to the Fserves tab when an Fserve is opened. Default is on.
Sort Files by Size: This toggles sorting of files on Fserves by size. Default is off.
Minimize Fserve Window: This sets whether the DCC Chat window is minimized when an Fserve is first opened. Default is on.
Close Fserve Window on Quit: This sets whether the DCC Chat window is closed when you quit the Fserve. Default is on.
Fserve Welcome Popup: This toggles whether a window pops up with the Fserve welcome message when connected. Default is on.
Anti-Idle: This sets whether to automatically use the CD command in an Fserve when the Fserve gives the "Closing idle connection" warning. It is recommended to leave this option off because it may annoy the Fserve owner. Default is off.
Auto-Stop Welcome Message: This sets whether RFN sends the S command (stop) rather than the C command (continue) when the Fserve sends a long welcome message. Default is off.
Keep Cache Between Sessions: This toggles whether RFN keeps the directory cache of an Fserve between Fserve sessions. The cache is lost when mIRC is closed. Default is on. You can also explore the cache in the Cache tab.
Single-Click Navigation: If this is on, single-clicks will change directories on Fserves rather than double clicks. Default is off.
RFN Message: This toggles whether RFN identifies itself when first connected to an Fserve. Default is on.
Fserve Recognition: This lists strings that RFN checks for when a DCC chat opens to determine if it's an Fserve. Default is "[Oßsidian] fileserver for X-Chat" and "Welcome to Brunnis".
Custom Fserve Commands: You can set up to 6 custom Fserve commands. These are commands that would be sent to the selected Fserve when you click on the command in the menubar (under Fserve). Note that custom commands are sent upon selection, regardless of whether the parameters described below return a value or not.
Example 1: The custom command to get the selected filename would be: get ‹file›
Example 2: For some Fserves that have multiple drives, the command would be: !drive‹prompt›
Files:
Log Queued/Received Files: This sets whether to track queued, failed and received files in Files History. Default is on.
Show Time in Files History: This sets whether to show the timestamps in Files History. Default is on.
Continuous IQueue: This sets whether RFN tries to get the next file in IQueue after the previous is queued on or being sent by an Fserve. Default is on.
Continue IQueue on Send: This sets whether RFN begins the IQueue again when the Fserve starts sending you a file, provided you are not currently browsing the Fserve. Default is off.
Save IQueues on Exit: This toggles automatic saving of IQueues when you exit mIRC. IQueues saved this way are automatically loaded when you start mIRC next time. Default is on.
Alert for Save IQueues on Exit: This toggles whether RFN shows a message when IQueues are saved during mIRC exit. Default is off.
Max Queue per Fserve: This sets the default number of queues allowed per Fserve. This can be set individually in IQueue tab.
Min Size to Continue IQueue on Send (Mb): If the file being sent is smaller than this minimum size, RFN will not trigger the Fserve to process the IQueue but will wait and check the next file being sent. This is to prevent flooding the Fserve and Channel with triggers when files are small. Minimum is 1 Mb. Default is 10 Mb.
IQueue Retry Timer: When an Fserve is closed with your Files History Queue empty but IQueue not empty, RFN will try to trigger the Fserve to get the file in a frequency set by this timer, up to a maximum of 8 times (a successful connection would reset the try count back to 0). Numbers lower than 900 would turn this option off. Default is 1800 (30 minutes).
Close Fserve Delay in IQueue: During automated IQueue processing, Fserves are closed in the specified number of seconds after the last Get command. 0 to turn it off. Default is 90 seconds.
Times to Retry Broken Sends: When a send from an Fserve drops, RFN can try to connect to the Fserve if it's available and queue the send again (The Fserve is closed automatically in 5 seconds). This option determines the number of times a send can be dropped and RFN would still retry getting the file. Default is 1. Set to 0 to turn off the option. Log Queued/Received Files option must be on for this feature to work. Close the File Get window within 5 seconds after the send was stopped if you want to cancel the send. Read RFN-Faq.txt for limitations to this feature.
Help:
The rfn-faq.txt file is loaded here.
About: Please email comments and suggestions. Even a simple "thank you" is nice if you find the script useful. The link with my page address opens my homepage (http://adrian.saxtus.gr). Come visit! The Help File link on the right launches the help file rfndoc.htm.
NOTES:
Please read RFN-Faq.txt for additional notes if needed.
Thank you for trying Ren-Ren's Fserve Navigator. Feel free to tell your friends about it. If you find a bug or think of a cool feature, you can send me an email at renx2@yahoo.com or tell me on DALnet IRC. I use the nick Ren-sleeping, not Ren-Ren. I lost the nick when I left IRC for some time earlier in the year.
For now, there is only one CTCP command the script responds to: RFN Version
The response is: RFN-Version [script name and version] [page address]
Big thanks to Michael Cohen from http://www.saxtus.gr for hosting my page! Thanks to the beta-testers for v3.3 (alphabetical order: bughunt, Saxtus, and Teleflip) who helped me track down many bugs and suggested improvements.
Special thanks to (by alphabetical order of surname if available):
LICENSE AND DISTRIBUTION INFORMATION:
License Agreement: RFN is released as freeware. RFN may be distributed freely only in its entirety and as long as the files remain unmodified. RFN may not be sold or distributed as part of any product or package without express permission from the author. RFN is provided as is without warranties of any kind, expressed or implied. The author cannot be held responsible for any possible damage from the use of RFN. The user must assume the entire risk of using RFN.
I spent an enormous amount of time and energy on this. Please don't copy the script or any of its portions and call it your own.
RFN and all materials included in the package Copyright© 2000-2001 by Adrian Au. All rights reserved.