[Please note: this is a text only version of the on-line magazine, OS/2 e-Zine!.  OS/2 e-Zine! is a graphical, WWW OS/2 publication and, if possible, should be viewed in its HTML format available on-line at http://www.os2ezine.com/ or zipped for off-line reading.  Some graphically oriented articles have been removed from this document.]


OS/2 e-Zine!		May 16, 1998		volume 3, number 6
--------------------------------------------------------------------------
Copyright 1998		Falcon Networking  	ISSN 1203-5696

         "Over Three Quarters of a Million Satisfied Visitors!"


         ****************************************
         Hot News: OS/2 e-Zine! goes bi-weekly --
              our next issue on May 30th!
         ****************************************


OPINIONS:

  Chris' Rant
  The Flaw

DEPARTMENTS:

  Answers from e-Zine!
  The OS/2 Project
  the Rexx Files
  How Do I?


REVIEWS:

  InterFTP v1.14 - Christopher B. Wright
  NcFTP v2.3.0 - Trevor Smith
  EmTec FTP v5.0.1 - Dr. Dirk Terrell

  Spaniel News Server - Jon Winters

  First Looks and Nifty Gadgets
    tWave 1.23     pm123 beta 2


READER SURVEYS:

Results from our May 2nd Survey
  Find out what your fellow readers told us last month! 

Your Hardware and Software
  Answer these simple questions and find out how you compare to
  other OS/2 users.  Results will be printed next month!


ARTICLES:

Building Dynamic Web Sites In OS/2 - Chris Wenham
  Learn how to create a web site that is flexible, easily updated and
  not a nightmare to maintain.


END NOTES:

  Hot Sellers - the top 10 selling OS/2 apps from Mensys.


ODDS & ENDS:

* How to Subscribe to OS/2 e-Zine! for FREE.
* How YOU can Sponsor OS/2 e-Zine!
* The Sponsors that Make this Issue Possible


Copyright 1998   -   Falcon Networking
ISSN 1203-5696

***********************************

Chris' Rant	- by Chris Wenham

Shah Guido G

Copyright 1998 Chris Wenham
With apologies to Isaac Asimov

Have you ever wondered, with all that's bundled with Windows today, if that thing should ever capsize, collapse or implode upon the weight of its own self? If you have, then for a fleeting moment you were on the right track. The key to breaking the Windows monopoly is not to do anything at all to Microsoft. Let them "integrate" it with Internet Explorer, let them chuck as many dumb, fat and pointless extras with it, and let them force PC makers to take it all as a condition to licensing Windows. And also, let the Department of Justice keep tickling them with threats and lawsuits for a while -- so Microsoft keeps doing exactly what it's doing the way that it's doing it. Confused? I'll explain...

"You can't uninstall Internet Explorer!"

When Microsoft said that the two products, Windows and IE, were integrated together, they were sorta telling a half truth. To make themselves look as if they were being completely honest with the DOJ and the rest of the world, Microsoft took some routine updates for Windows -- bug fixes, new features etc. -- and put them in the same DLLs (Dynamic Linked Libraries, the primary method of sharing code in modern operating systems) as Internet Explorer, and vice versa. So deleting any file that contained Internet Explorer functions in it would certainly guarantee deletion of files needed by the rest of the operating system -- rendering the whole system inoperative. 

This was the nonworking version of Windows that Microsoft initially made available after the court order to ship a version of the operating system without the browser. A proverbial "See! We told you so," and slap in the face of intelligent spectators everywhere.

Trouble is, from an engineering standpoint, it was a jaw-gapingly stupid thing to do.

"Millions of lines of code..."

...will be in Windows 98 and Windows NT 5.0, but just what kind of manpower does it take to maintain that monster? "Too many cooks spoil the broth" doesn't even begin to describe the problem facing Microsoft today. 

Hundreds of programmers, millions of lines of source, and an approach to programming (placing everything into one giant product) that is the most ill suited for large numbers of coders to handle. How can they really do anything more to it now than to simply tack on more features - a job easier than fixing problems inherent in the structure itself? How loud do you think the bang is going to be, come January 1st 2000?

"Microsoft must be allowed to innovate"

And surely they will be, should they ever want to take advantage of that liberty. But bundling one program with another is not innovation. Acquiring a corporation to get your hands on a new technology is not innovation either. As can be seen on OS/2 today, in a comparison between the mostly-acquired products of Lotus SmartSuite and the homegrown ingenuity of StarOffice's components, the best results come when products were designed from scratch to integrate together. Internet Explorer is based on code licensed from SpyGlass, and they acquired the browser in a deal with Marc Andreessen's old school. How can they possibly hope to have a stable product when combined with an operating system that also has its roots in an eons old source code purchase? 

Is there anyone really left who understands what's in there?

Waiting for a White Knight

Outside the hell that's to be endured by those who feel they have no choice but to subsidize a patchwork OS, OS/2 users might not feel the same pressure of Microsoft's crushing weight on them. And that might make it hard to understand what's to come next.

The integration, relative speed and lightweight footprint of StarOffice, compared to SmartSuite, would probably have mopped up the floor with Lotus had the company behind it not been so frustratingly hesitant to enter the market. Now Lotus has e-Suite, and is almost ready to head StarDivision off at the pass with it.

The same equivalent of StarOffice is needed in the Operating System market. The time is ripe, the opportunity is there, one more push and the combined weight of years of general protection faults, WinNukes, kernel errors, file system corruption and more will bring the whole plate of food tipping off the table and onto the floor below. Leverage the frustration evident in scores of Windows users, and the conversion to a new platform could move like a chain reaction.

Could OS/2 be candidate Number One for this job, is another OS better suited to pull the wool off the eyes of Windows users everywhere? Then tell me so, in our (http://www.os2ezine.com/forums/get/forums/rant/May16-1998.html) Hypernews forum.

                         - * -

(chris@os2ezine.com) Chris Wenham is the Senior Editor of OS/2 e-Zine! -- a promotion from Assistant Editor which means his parking spot will now be wide enough to keep his bicycle and a trailer.

***********************************

Corporate Sponsors

(http://www.bmtmicro.com/) BMT Micro
Your complete source for over 175 of the best OS/2 shareware applications available.  Drop by today and check out our WWW catalog or download the .INF version.

(http://www.ChipChat.com/os2ezine) ChipChat Technology Group
ChipChat produces excellent 32-bit OS/2 software for wireless text paging and state-of-the-art multimedia Sound Cards for Micro Channel PS/2 computers.

(http://www.indelible-blue.com/) Indelible Blue
Indelible Blue, a mail order company, provides OS/2 software and hardware solutions to customers worldwide.

(http://www.mensys.nl/indexuk.html) Mensys
The one place to go in Europe for all OS/2 Warp software.

(http://www.prominic.com/) Prominic Technologies, Inc.
On-line sales & solutions for VisualAge, DB2, OS/2 Warp, Workspace on Demand, Notes/Domino, AIX Firewall, and Net.Commerce (design/hosting).  The best deals on IBM and Lotus software and hardware (PCs, Servers, and RS/6000s) -- with OS/2 preloads!

(http://www.prioritymaster.com/) ScheduPerformance, Inc.
Dramatically improve performance on your OS/2 system now with the patented priority scanning logic and visual priority identification of Priority Master II.

(http://www.stardock.com/) Stardock Systems
Providing quality software for the home and office.

(http://www.warpspeed.com.au/) WarpSpeed Computers
Developers of The Graham Utilities -- the largest, most comprehensive suite of disk, file and general utilities specifically written for OS/2.

***********************************

The Flaw	- by Richard R. Klemmer

We've all been hearing for a while now that IBM is aiming OS/2 at Large Enterprises, and not concerned with SOHO (Small Office/Home Office) or Home users. I actually can understand what their strategy is, but I believe there are some flaws in it that could be detrimental not only for OS/2, but for IBM as well.

Many Information Systems Managers in large corporations these days have worked their way up from positions outside of the technology fields. There seems to be an emphasis on administrative experience. Most of their experience with computers comes from home use, if anything. As such, the only products that they have any familiarity with are those that are marketed to home users or perhaps small offices. When they do reach the enterprise level, they want to stay with something that is familiar. Sometimes they are not even aware of any alternatives there may be. Because of this, they end up removing existing OS/2 networks for less efficient networks running Windows NT. 

I realize the IBM plans on making a great deal of money providing support and solutions for companies with Windows NT networks, but I see a flaw in this plan as well. This brings me to my second point; there is a perception in some parts of the industry that IBM does not really want to sell OS/2, is out of touch with its clients, can not market to save their lives, and that the separate divisions in IBM are working counterproductively.

If this perception continues and increases (especially in respect to their attitude toward OS/2), many organizations will lose whatever confidence in IBM they have left. I've actually heard an IS manager say something to the effect, "If IBM can't even sell their own products (OS/2) properly, why should I go with them for a solution involving someone else's?" This attitude could potentially hurt them in many areas, not just sales of OS/2. There is also the history of IBM dropping development of a technology or product before it is completed. This is another reason why people are losing confidence in IBM. I'm not just talking about OS/2 users here, but also about the IS community in general.

Lastly, I would like to discuss IBM's responsibility to our society. Whether this is right or wrong, there are those that feel IBM has a responsibility to create choice and diversity in the operating systems market. In light of recent events, IBM has one opportunity to lessen the monopoly that Microsoft has in the desktop OS arena. This could only help sales of their other software products as well as hardware. It again comes back to a matter of perception. There are many IS people and independent consultants who feel this way and could become frustrated with IBM for not taking this opportunity. Perhaps it is unfair to expect this from IBM, but I believe that this backlash could occur.

Of course IBM has to fight the media, who seem to miss-construe all of their actions, and declare that "OS/2 is dead!" whenever an IBM CEO opens his mouth. If Lou Gerstner were to declare it's spring cleaning time and have his employees wash the windows in their offices, the headline would be something like "Lou Gerstner forces employees to work on Windows! OS/2 is dead!" Unfair, unfortunate, but commonplace. It's something IBM must deal with.

Just to clarify that I am not pulling these ideas out of the air, I've worked with Large government organizations such as the U.S. Army, the Department of Agriculture, and commercial companies that range from small local offices to national corporations. I'm also involved with some small and large computer technology organizations. I have seen and heard these attitudes toward IBM in all of these areas.

While not trying to unduly criticize or bash IBM, I offer these comments to help them. As I see it, no matter how IBM really feels about OS/2, it is the perception that could hurt them. I appreciate what they have done with OS/2 so far, and I hope that they continue to improve the product as well as the perception of it by the world at large.

But I am not trying to paint a gloomy picture for OS/2. Actually, with events like Warpstock, organizations like V.O.I.C.E. and the incredible amount of recent shareware programs being developed, there are many things to be happy about. In fact -- and this may be stretching things -- I can see a future where IBM as a company is struggling, yet OS/2 as an operating system is still going strong with continual support by the user community at large. It's happened before, it could happen for us.

                         - * -

Richard R. Klemmer has been an OS/2 user since January of 1995.  He is a computer programmer for the Department of Agriculture during the day, and a partner with (http://www.webtrek.com/) WebTrek L.L.C., a Internet Consultant and Web provider, during the rest of his waking moments, and some of his sleeping ones.

***********************************

Answers from e-Zine!

Welcome back to "Answers from e-Zine!", your source for answers to all your OS/2 questions!  In each issue we bring you tips, tricks, questions and answers from our readers and contributors.  If you've got a question or tip you would like to share with us, (feedback@os2ezine.com) send it in!

                         - * -

TIP --  Regarding (http://www.os2ezine.com/v3n05/answers.htm) last issue's Answers from e-Zine! column, your explanation on how to cause Boot Manager to boot the last used partition was too cumbersome.  You can accomplish this with Boot Manager using SETBOOT rather than FDISK.  This method is a lot less nerve-wracking.

From an OS/2 command window, type:

   setboot /0

to remove any default partition setting in Boot Manager.  No FDISK or FDISKPM needed! 

 - Rob

                         - * -

TIP --  In (http://www.os2ezine.com/v3n05/answers.htm) last issue's Answers from e-Zine! column, you said that the PAUSE.SYS driver is needed to pause the boot process so details of the IBM1S506.ADD driver can be read.

In fact, the latest IBM1S506.ADD allows you to add a switch /W in your CONFIG.SYS which will make it pause after displaying info on each controller.

   IBM1S506.ADD /W

will do the trick.  You will need an updated IBM1S506.ADD file though; the one included on the Warp 3 and Warp 4 CDs does not allow this switch.

 - (eburgin@ibm.net) Eric W. Burgin

                         - * -

Q --  I have been trying to upgrade from Warp 3 to Warp 4.  One file keeps causing the install to fail: aha152x.add.  This is an Adaptec SCSI driver that causes the problem.  What can I do?

A --  Duplicate diskette one of your installation disks.  Edit the CONFIG.SYS and place 'REM' in front of any of the devices like the AHA drivers you do not use or have like the Adaptec SCSI card.  Make sure you place a semicolon in front of the matching lines in the SNOOP.LST file as well.  This should help you get past the hang-ups that occur when OS/2 goes through trying to identify your hardware system configuration.  Of course, it also means that support for the Adaptec SCSI card will not be installed.

 - (os2doctor@yahoo.com) Randy Van Heusden

                         - * -

Q --  Each time I open a Netscape Navigator bookmarks window the window moves to a slightly different spot on the screen.  I would like it to always open in one place.  Is there any way to stop windows in OS/2 applications from charging all over the screen from one run to the next?

A --  Unfortunately, this is something that is different for each program.  If you are working with OS/2 Command Windows, you can hold down the Shift key, click the maximize button at the top right of the Command window, drag the window to where you want it to be, then release.  Now future Command windows will always appear exactly in that spot.

With some PM applications, the author of the program was smart enough to include an ability to save window positions (for example, PMMail, PMView and many others have this feature).

However, some windows of some applications -- for example, Netscape Navigator for OS/2's bookmark window -- can not be set to open in one place.  I'm afraid the Navigator bookmark window will always shimmy around a bit each time you open it.

The reason people might want windows to behave like this is to allow multiple windows to open and have each one overlapping the last, or "cascading" as it is often called.  This easily allows one to see part of and click on any of the open windows.  However, it's annoying if you are only opening one window at a time and you want it to stay put.

 - (feedback@os2ezine.com) OS/2 e-Zine! Staff

                         - * -

That's it for this month.  If you have a tip or question that you don't see covered here, don't forget to (feedback@os2ezine.com) send it in!

***********************************

The OS/2 Project

If you're looking for interesting and innovative ways to take advantage of OS/2's power, or if you just want a neat trick to impress you're friends, this is the place to look!  "The OS/2 Project" chronicles small endeavours intended to improve our systems, make us more productive and just generally make our lives easier.

This issue, we take a look at how to create a Desktop object to check HTML files with "Weblint".

                         - * -

Purpose

As the world has become addicted to the Internet, so have we become fascinated with tinkering with our own web sites.  Many of us have thrown our digital etchings up on the web for the world to see.  Whether it is a corporate intranet site, a mom and pop storefront on the web or your family's home page, it has become common for us to present ourselves to the world with HTML.

There are various tools to assist beginners with finding and correcting errors in HTML pages, including the granddaddy of them all, "Weblint".  There are many Weblint "gateways" on the Internet which allow you to enter a URL and check a page already on the 'net, but some people prefer to check pages on their local hard drive before uploading them to the WWW.  Luckily Weblint works just as well from a local hard drive as it does on the 'net.  Unfortunately, the basic program is not quite as pretty.

Since Weblint is primarily a command line program, we set out to create an OS/2 Desktop object that would allow us to drag and drop HTML text files on it to auto-check them.  Ideally, we wanted our object to open a window which would display any errors Weblint found in the file and then wait for us to dismiss it.

The Basics

For this project, we need to download Weblint, a programming language called Perl (because Weblint uses it) and the EMX runtime DLL (because Perl uses it).  While you will likely find that older versions of these programs will do the job, we suggest grabbing the latest versions of each just to be sure.  (See below for download details.)

Everything else you will need is already built into OS/2.

Setting It Up

Our first step is to download and install the EMX runtime DLLs.  The EMX runtime DLLs are a set of add-on DLLs for OS/2 that allow some ported Unix programs to work on an OS/2 machine.  Chances are, if you download much OS/2 shareware or freeware, you may have already downloaded and installed them.  If not, grab a copy from the link below and follow the simple installation instructions included.  Don't forget to reboot!

Next, download and install (http://www.os2ss.com/archives/hobbes/os2/unix/dev/perl502b.zip) Perl v5.002 Beta 3 (ZIP, 1.4meg) for OS/2.  As noted above, Perl is a programming language.  Versions of Perl are available as freeware for various operating systems and will allow you to do a great deal more than we will describe here.

The installation of Perl v5.002 may seem a bit tedious and complicated, but here is a quick tip: for this project, you only need four files out of the many in the archive:

o  perl5.exe
o  perl5.dll
o  find.pl (found in the \lib folder in the Perl archive)
o  newgetopt.pl (found in the \lib folder in the Perl archive)

Also, for our project, you do not need to worry about putting these files in directories referenced in PATH or LIBPATH statements in your CONFIG.SYS.  Just create a directory wherever you prefer called "Weblint" and stick the four files above in it.  If you do the above, no reboot is required to get our Weblint project running.

But remember, if you want to take full advantage of Perl for other projects, you'll probably want to properly install the full package.

Next, download and install the latest version of (ftp://ftp.cre.canon.co.uk/pub/weblint/weblint.zip) Weblint (v1.020) (ZIP, 43k).  Weblint is a Perl script (as opposed to a Rexx script) so we need to do a little modifying to be able to run the "weblint" file included in this archive.  Again, for this simple project we don't need all the bells and whistles that are included in weblint.zip.  If you want to do a quick and dirty installation you can just follow these instructions:

1. unzip weblint.zip to a temporary directory
2. rename "weblint" to "weblint.cmd"
3. delete the first three lines in "weblint.cmd":

: # use perl                                -*- mode: Perl; -*-
	eval 'exec perl -S $0 "$@"'
		if $runnning_under_some_shell;

4. add the lines:

   extproc perl -x
   #! perl

at the very TOP of "weblint.cmd"
4. move "weblint.cmd" to the Weblint directory you created earlier
5. delete all the other files that were in weblint.zip -- you won't need them for this project

At this point you should have EMX, Perl and Weblint all installed and working.  If you open an OS/2 command window and switch to the "Weblint" directory where all these files reside, you should be able to run Weblint with commands similar to:

   weblint \Files\HTML\test.html

But this is not a very convenient way to check our HTML files.  For one thing, the error and warning messages Weblint displays may be so long that they wrap in a "normal" sized OS/2 command window.

To do fix this, create a command file with the following contents:

   mode 100,24
   weblint -s -x Netscape %1 | more

name it "checkhtm.cmd" and save it in your "Weblint" directory.  The first line, "mode 100,24" will change the dimensions of the active OS/2 command window to 100 characters wide by 24 lines high (the standard dimensions are 80 x 24).  This extra width should allow error and warning messages to be printed completely on one line.  The second line above, "weblint -s -x Netscape %1 | more", does a few things.  First, it calls Weblint with two switches: '-s' tells Weblint we don't need it to print the filename it is working on; '-x Netscape' tells Weblint to allow Netscape extensions to HTML (if you want to check files with Internet Explorer extensions, you could use '-x Microsoft').  The '%1' in this line tells our command file to pass whatever file name we give it, to Weblint.  The '| more' tells the program to pause if there is more than one screenful of error/warning messages.

So, if you now run the command file by typing:

   web \Files\HTML\test.html

It will change the size of the window and call Weblint like this:

   weblint -s -x Netscape \Files\HTML\test.html | more

That's it.  All the files you need should now be in the "Weblint" directory.

Now all you need to do is create a program object.  Open your Templates folder (found in your "OS/2 System" folder) and drag a copy of the "Program" template to your Desktop to create a new program object.  A Properties notebook will pop up.  In the "Path and file name" entry field, enter the path to your "Weblint" directory and the name of your file, "checkhtm.cmd".  In the "Working directory" entry field, enter just the path to your "Weblint" directory.  For example, if the directory you created is E:\Util\File\Weblint, enter:


   Path and file name:    E:\Util\File\Weblint\checkhtm.cmd
   Working directory:     E:\Util\File\Weblint

If you prefer, you can add a nifty icon to the program object while you have the Properties notebook open.  (I got one displayed from (http://www.thinknow.com/) think::xels! by (http://www.wimmers.com/) edv-beratung wimmers.)  And don't forget to give your program object a name (how about 'Weblint'?).

There is one last (very important) thing you must do to your new object to make it useful: make sure "Close window on exit" is not checked (or the window that appears to display Weblint reports when you drop files on the object will close before you get a chance to read it).  In the second page of the object's Properties notebook (the "Session" page) click the "Close window on exit" button to uncheck it.

Using Your New Object

Now, when you want to check the validity of an HTML file, just open the folder containing the file, drag the file and drop it on your Weblint object.  An OS/2 Command window will pop up, resize itself to 100 x 24, and display any error messages Weblint finds.  If you have multiple files you want to check, highlight them all and drop them on the Weblint object all at once.  A separate window will open for each file (each window will display a command line indicating which file is being checked).  When Weblint is finished checking the files, the window will display "Completed: Weblint" in the title bar.  When you drop files on your Weblint object, after you finish reading the error and warning messages (if there are any), just close the window by clicking its close button (for Warp 4) or double clicking its system icon button.

If you have questions or suggestions for improvements to this project, (feedback@os2ezine.com) let us know.  Until then, enjoy!

                         - * -

Tools used in this project:

Weblint v1.020
     by (http://www.cre.canon.co.uk/~neilb/weblint/) Neil Bowers
     download from the (ftp://ftp.cre.canon.co.uk/pub/weblint/weblint.zip) Weblint FTP Site (ZIP, 43k)
     Registration: FREE

Perl v5.0023
     by Larry Wall
     OS/2 port by (ak@ananke.s.bawue.de) Andreas Kaiser
     download from the (http://www.os2ss.com/archives/hobbes/os2/unix/dev/perl502b.zip) OS/2 Supersite (ZIP, 1.4meg)
     Registration: FREE

EMX v0.9c
     by (mattes@windhager.de) Eberhard Mattes
     download from the (http://www.os2ss.com/archives/hobbes/os2/dev/emx/v0.9c/emxrt.zip) OS/2 Supersite (ZIP, 538k)
     Registration: FREE

think::xels!
     by (http://www.wimmers.com/) edv-beratung wimmers
     download from (ftp://ftp.bmtmicro.com/bmtmicro/thxls001.zip) BMT Micro (ZIP, 1.2meg)
     Registration: US$36.00

***********************************

the Rexx Files	- by Dr. Dirk Terrell

In last month's column we wrote the code that creates the query that we need to send to the AltaVista web server. Now we need to write the code that talks to the server, sending the query and getting the response. Rexx itself does not contain the necessary functions for doing TCP/IP communications, but there is a freely available library that enables us to do just about anything we need to do involving socket programming.

Sockets are a way of virtualizing the underlying details of TCP/IP communications which are the heart of the Internet. Basically, a socket is a connection between two machines that enables them to send data back and forth to one another. With a library like RxSock, you create a socket connection and write to it like you would a file. The library handles all the gory details and saves you a lot of time.

If you've messed around with web servers or FTP daemons, you know that sockets are created on ports identified by numbers, and certain numbers are reserved for various functions. For example, web servers listen on port 80, telnet daemons on port 23, POP3 servers on port 110, and so on. (If you're curious, look at the services file in your \MPTN\ETC directory if you have a TCP/IP networking installed.) So, since we want to talk to the AltaVista web server, we will contact it by sending a message to port 80 via a socket connection.

The first thing we need to do is load the RxSock library. You can (http://www.os2ss.com/archives/hobbes/os2/dev/rexx/rxsock.zip) download it from the OS/2 Supersite. To load it, make sure that rxsock.dll is available in your LIBPATH somewhere and execute these two instructions:

   rc = RxFuncAdd("SockLoadFuncs","RxSock","SockLoadFuncs")
   rc = SockLoadFuncs()

There are five basic steps we need to perform:

1. Create a socket using the SockSocket() function
2. Connect the socket to the AltaVista server using SockConnect()
3. Send the query to the server using SockSend()
4. Receive the results from the server using SockRecv()
5. Close the socket using SockClose()

Step 1 - Create the Socket

Since we are identifying out server by its domain name "www.altavista.digital.com" we need to convert it to the dotted decimal IP address (204.74.103.37 for example). The RxSock library has a function for doing just this: SockGetHostByName(). By passing the domain name and a stemmed variable for the return values, we can get the IP address corresponding to that domain name:

   rc = SockGetHostByName("www.altavista.digital.com","host.!")

The stemmed variable passed as the second parameter uses the exclamation mark to avoid problems with stem tails having the same name as previously defined variables since the exclamation mark isn't commonly used to start variable names. You could use any valid character you like. Upon returning from the function call, the variable host!.addr will contain the IP address of the server.

To create our socket, we call SockSocket():

   socket  = SockSocket(domain,type,protocol)

The first parameter, domain is always "AF_INET" for the RxSock library. The second, 
type, can be "SOCK_STREAM", "SOCK_DGRAM", or "SOCK_RAW" and in our case we will
use the "SOCK_STREAM" type. The third parameter, protocol, can be "IPPROTO_UDP", 
"IPPROTO_TCP", or "0" and we will use "0". 

The SockSocket() function returns a value of -1 and sets the variable errno if there was a problem creating a socket. The SockGetHostByName() function returns a value of 0 if an error occurred. (See the RxSock documentation for the return values of various functions.) It is always a good idea to check the return value from a function call to make sure that things went smoothly and take appropriate action if not. So, our code to get the IP address and create a socket looks like this:

Say "Resolving hostname:" Site
rc = SockGetHostByName(Site,"host.!")
If (rc = 0) Then
      Do
         Say "Could not resolve hostname:" Site "Is the network down?"
         Return
      End

server = host.!addr;

/*  Open the socket */
Say "Opening socket..."
socket  = SockSocket("AF_INET","SOCK_STREAM",0)
If (socket = -1) Then
   Do
        Say "Error creating socket:" errno
        Return
   End

Step 2 - Connect the Socket to the Remote Server

Now that we have a socket, we need to connect it to the remote server with the SockConnect() function. The calling form is:

   rc = SockConnect(socket,address)

where socket is the socket we just created and address is a stem variable containing the address and port to which we will connect. The address stem must have a .port tail giving the port, a .addr tail containing the IP address of the server, and a .family tail set to "AF_INET". Once we have the address tail properly constructed, we can connect the socket, again looking at the return value from SockConnect() to see if any problems were encountered. (This function returns a -1 if an error occurred.) Thus, our connection code looks like this:

/* Connect the socket */
Say "Connecting to socket..."
server.!family = "AF_INET"
server.!port   = port
server.!addr   = server

rc = SockConnect(socket,"server.!")
If (rc = -1) then
   Do
        Say "Error on connecting socket:" errno
        Call CloseSock
        Return
   End

Notice that we call CloseSock to close the socket if an error occurs. Sockets do consume resources, so you need to ensure that you close them when you are finished with them. As you might guess, the SockClose() function performs this duty. Our CloseSock routine makes sure we close the socket properly:

CloseSock: 
/* Close the socket */

rc = SockSoClose(socket)
If (rc = -1) Then
   Do
        Say "Error closing socket:" errno)
   End
Return

Step 3 - Sending Our Query to the Search Engine

Having successfully connected to the server, we can now send it the query that we created in the last two articles. The SockSend() function sends data to the remote server. The calling form is:

   rc = SockSend(socket,data)

where socket is our socket and data is the data that we want to send to the server, namely our search query. Again, this function returns a -1 if there was a problem transmitting the data such as your dialup connection's dropping. To send our search query to AltaVista, we use this code:

/* Send the data to the remote server */
Say "Sending data to remote server..."
rc = SockSend(socket,Query)

If (rc = -1) Then
   Do
        tmp="Error sending data to server:" errno
        Call CloseSock
        Return
   End

Steps 4 and 5 - Receiving the Response from the Server and Closing the Socket Once we send the data to the server, we wait for it to send a response to us. To capture the response we use the SockRecv() function whose calling form is:

   rc = SockRecv(socket,var,len)

where socket, once again, is our socket, var is a variable that we will use to store the data, and len is the maximum number or bytes to accept at one time. Since we don't know ahead of time how many bytes the server will return, we will call SockRecv() multiple times until all of the data have been read. The function returns a number greater than 0 as long as there are more data to be read. At each invocation, we will write out the results to a file for later analysis. 

To give the user some indication that things are happening, we will print a # symbol to the screen every time the function is called. (This could, of course, be more sophisticated and print the symbol for every kilobyte of data received by keeping track of the number of bytes received during each read. Hint: Use the Length() function to get the number of bytes returned and then use the integer division operator %% to tell when a 1024-byte boundary has been crossed.) Once we have received all of the data, we will close the socket. The code to receive the data looks like this:

/* Receive the result from the server */
Say "Receiving data from remote server..."
File="results.html"
rc=SysFileDelete(File)
Do while SockRecv(socket, 'newdata', 1024) > 0
   Call Charout File,newdata
   Call Charout ,"#"
End
Call Charout crlf

If (rc = -1) then
   Do
        Say "Error receiving data from server:" errno
        Call CloseSock
   End
Else
   Call CloseSock

rc=Stream(File,"C","Close")

Conclusion

And there you have it: the code necessary to send a request to a web server and receive its response (see below). What you do with it at this point is determined by your needs. You could parse the results and present a list to the user, or connect a socket to the web servers listed in the response and grab the documents that matched your search query. There are probably endless possibilities for this program. If you come up with any, (admin@os2ss.com) let me know.

                         - * -

(http://www.gnv.com/HTMLWizard/) Dr. Dirk Terrell is an astronomer at the University of Florida specializing in interacting binary stars.  His hobbies include cave diving, martial arts, painting and writing OS/2 software such as HTML Wizard.

***********************************

/* Search engine query program */

/* Load the RxSock and RexxUtil libraries */
rc = RxFuncAdd("SockLoadFuncs","RxSock","SockLoadFuncs")
rc = SockLoadFuncs()

Call RxFuncAdd 'SysLoadFuncs','RexxUtil','SysLoadFuncs'
Call SysLoadFuncs

crlf=d2c(13)||d2c(10)          /* Carriage return - linefeed pair */
Site = "www.altavista.digital.com"
Port=80
SiteCommand = "GET /cgi-bin/query?pg=q&what=web&kl=XX&q="
SearchString = '"OS/2 Supersite"'
UserAgent = "User-Agent: OS/2 REXX Query Program 1.0"  /* The name of our program */

Call CreateQuery /* Create the query */
Say Query
Call SendQuery
Say " "
Say "All done."
Exit

/* Send the query to the remote web server */
SendQuery:
Procedure Expose Query Site Port crlf
Say "Resolving hostname:" Site
rc = SockGetHostByName(Site,"host.!")
If (rc = 0) Then
      Do
         Say "Could not resolve hostname:" Site "Is the network down?"
         Return
      End

server = host.!addr;
/*  Open the socket */
Say "Opening socket..."
socket  = SockSocket("AF_INET","SOCK_STREAM",0)
If (socket = -1) Then
   Do
        Say "Error creating socket:" errno
        Return
   End
/* Connect the socket */
Say "Connecting to socket..."
server.!family = "AF_INET"
server.!port   = port
server.!addr   = server

rc = SockConnect(socket,"server.!")
If (rc = -1) then
   Do
        Say "Error on connecting socket:" errno
        Call CloseSock
        Return
   End

/* Send the data to the remote server */
Say "Sending data to remote server..."
rc = SockSend(socket,Query)

If (rc = -1) Then
   Do
        tmp="Error sending data to server:" errno
        Call CloseSock
        Return
   End

/* Receive the result from the server */
Say "Receiving data from remote server..."
File="results.htm"
rc=SysFileDelete(File)
rc = 1
Do while rc > 0 
   rc = SockRecv(socket, 'newdata', 1024) > 0
   Call Charout File,newdata
   Call Charout ,"#"
End
Call Charout crlf

If (rc = -1) then
   Do
        Say "Error receiving data from server:" errno
        Call CloseSock
   End
Else
   Call CloseSock

rc=Stream(File,"C","Close")

Return

CloseSock: 
/* Close the socket */

rc = SockSoClose(socket)
If (rc = -1) Then
   Do
        Say "Error closing socket:" errno)
   End
Return


/* Create the query string to be sent to the web server */
CreateQuery:

/* Only allow the routine to see the necessary variables */
Procedure Expose SiteCommand SearchString UserAgent Query crlf

/* Create a list of the types of responses we can handle */
Accept = "Accept: text/plain"||crlf||"Accept: text/html"||crlf

SearchStringEncoded = Encode(SearchString) 

Query = SiteCommand||SearchStringEncoded "HTTP/1.0"||crlf||Accept
Query = Query || crlf

Return

/* Encoder routine for URLs */
Encode:
Procedure
Parse Arg AString
OkayChars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
NewString=""

Do i = 1 to Length( AString)
   Test = SubStr( AString, i, 1)
   if Pos( Test, OkayChars) > 0
      Then NewString = NewString || Test
   else Do 
      If Test=" "
         Then NewString=NewString||"+"
      Else NewString = NewString || '%' || c2x( Test)
   end
end
Return NewString

***********************************

How Do I?	- by Eric Slaats

Hi. I had some free days this month and decided (amongst firing up my studio) to look deeper at some of the more difficult OS/2 stuff. I covered EAs and am looking at hooks right now. Intriguing matter. Although I really don't understand why the EA stuff has to be so complex. I used EAs in Smalled, but that was coded over a year ago and I've found that I've lost most of my knowledge about it. Hooks are another matter. Hooks allow you to interfere with the way the system operates. It enables you to intercept messages from programs, capture keyboard input before it is sent to a program etc. I've decided to do something more with hooks. (They are used by SmallHtm to work with MLE editors.) I'll keep you all posted on the projects that may evolve from this.

Last month when we rounded up the calculator sample application I promised to take a look at smaller code. One of the things I hate are bloated programs. Large program blobs are becoming more and more like a normal thing. Simply take a look at a run of the mill word processor: It's eating megabytes of your hard drive and can be tediously slow on a 486 to a Pentium 133. But even the shareware and freeware programs are becoming larger and larger too. Where is this large code coming from? Well there are some causes:

1. Object Technology. If your using Object Oriented Programming then there is a slight overhead. The OOP extensions to a programming language, like exception handlers, also need memory space. Don't get me wrong, I love the OOP principle, but it often causes fat programs. If you use an OOP add on, for example ObjectWindows, then a very simple program that just displays a window and writes something in it will become very large. 

2. In the slipstream of OOP, visual programming has emerged. Right now most of the main culprits of bloat are written in visual programming tools like Delphi, Visual Age etc. I really like the way you can program in these tools, but I hate the code bloating. It gives me the feeling that I simply don't know a very large part of the code that is placed in the .EXE I create.

3. Code that isn't designed very well. It's amazing how much code can be reduced by designing your program right. A lot of programs can be reduced in code load if reviewed thoroughly. More about that later on.

Well most of this is obvious. (I left out obvious causes as leaving debugging code or debuggers info in your exe.) What can we do to make code as small and effective? Well here are some pointers I always use. In my experience these points usually pay off. Since this column isn't intended to be very technical I try to keep things as simple as possible.

1. Design, Design, Design. This is the most important point. A badly designed program won't perform well and will usually end up bloated. Design your functions as clever as possible and use decomposition to do this. In most of the programs of students I review, there is a lot of redundant code. Create functions so that they may be reused. If a function (or an event handler) has more that 25 lines of code (of course this is subjective and not a rule of thumb) it is way too large. Chances are you're redoing something you've already done. 

2. Object Oriented Programming is arranged around the concept of reusability. One of the problems is that you've got to know or find an object to reuse it. So before creating a new object, check if an object exists that does the work for you. This also goes for the use of non-OO functions. Check out the standard C-functions and the load of functions that the OS/2 PM has on-board.

The next points address more technical ways to write optimal code. Compilers and linkers have a number of switches on board that make them create smaller code. Besides that, code load may vary from compiler to compiler. So if you've got the time, try more compilers. At least one of them is free (as far as I know). The EMX compiler. (check out hobbes for this package).

3. Use a base address. This is a very simple though very effective way to create smaller code. (There is no down side to this. It will make your code faster and smaller, so DO IT!) In a multitasking environment like OS/2, you don't know were a program will be loaded. In most cases there will be more programs active and all can be loaded on different places. Now OS/2 guarantees a load address at 1000H. If you tell your linker this, all internal relocations will be removed. This will result in a smaller, faster loading and faster running executable. (Also to this for the DLL's if you're creating any.)

4. Use your compiler and linker switches. Most compilers these days make it fairly easy to select the switches to use. For example The Borland C++ 2.0 compiler let's you choose between fastest code, smallest code, or minimal options. Besides that, all the compiler settings can of course be hand tuned. (Look at the -O (optimize) parameters for the compiler in most cases.) We'll take a look at one set of switches to underline the point that size can be a trade-off with speed.

Most compilers let you choose if your code has to be optimized for 386/486 or Pentium. Since the Pentium is optimized for code that is built in a RISC like manner (simple one word instructions), the code for a Pentium will, in general, be bulkier. The 386/486 code will use a lot of instructions that do more work per-instruction. So this code will be smaller, but not as fast. In a lot of cases we are not really interested in speed of a program. For example the Calculator. I doubt it very much if anyone would notice the speed change between these two compiler settings. 

5. Compress your code. Everybody uses utilities like Zip, ARJ and RAR and we're fairly used to them. Now why not simply compress an exe file and run it straight from the compressed form? The advantage in this is that the load time to fetch a file from disk is much longer than the time the computer needs to decompress the file. This means faster startup as well as smaller code. (Note that the faster startup goes for all the smaller code methods.) OS/2 has the capability to run compressed executables. Well, that statement is not entirely true -- it can run executables with compressed resources (the resources have to reside in the executable). So the more resources like bitmaps, dialogs, fonts, etc. the executable has, the more effect the compression has. Compression is fairly simple to use. You can bind the resource file to the executable by using the -x switch in the resource compiler, like this:

   RC -x prog.rc prog.exe

Warp (since version 3.0) has even better compression. An "x2" has been added since then. The drawback for this is that the executables can only run on a OS/2 warp system. OS/2 2.x can't execute exepack 2 programs. But compression is really something you should try. The results are rather dramatic (as we will see in a minute).

There are more techniques like using Wrapper functions and realigning code pages. We'll look at those some other time because they need a lot more explaining. Right now we'll take a look at the effects of some of the settings. As an example program I used the calculator we build last months.

First we compile the Calculator code with minimal settings and slowly build it up to the smallest possible version that is compressed, based etc. This testing is done with Borland C++ 2.0. So if you're using another compiler this might vary.


1) Normal				38416 bytes
2) Based				34832 bytes
3) Based and x1 compression		33296 bytes
4) Based and x2 compression		27664 bytes


Now one last tip, and this is a great one. There is a tool out there written by Mike Ruddy. (check also EDM/2 3.6) It's called LXOPT. This tool contains the x1 and x2 compression as well as something this tool is unique in: code page aligning and elimination of dead code. This is really a great tool, besides that it's free. If LXOPT is used with the calculator is makes the executable even smaller:


5) LXOPT				25340 bytes.


As you can see the total reduction is rather dramatic. The code shrank one third and with hardly any effort on our side. For larger executables this effect is even more dramatic. So at least use Based and "x" compression. Although I would advise everybody to check on LXOPT and, of course, use good programming techniques.

That's it for this month.

                         - * -

LXOPT 1.22
     by Mike Ruddy (Functional Software Ltd.)
     download from the (http://www.os2ss.com/archives/hobbes/os2/dev/util/lxopt122.zip) OS/2 Supersite (ZIP, 466K)
     Registration: Freeware


(eric.slaats@pi.net) Eric Slaats holds a degree in Computer Science and teaches computer technology in Eindhoven.  He is the creator of the (http://www.bmtmicro.com/catalog/smalled/) Smalled utilities.

***********************************

EmTec FTP v5.0.1	- by Dr. Dirk Terrell

Many things have changed in the OS/2 world since (http://www.os2ezine.com/v1n3/neologic.html) I originally reviewed the Neologic FTP client and it too has seen some changes. Last year the program was bought by EmTec, the makers of ZOC, and renamed EmTec FTP. The program has retained its solid nature and has gotten several new features that make it one of the best FTP clients around. The current version is 5.0.1.

Installation

The first difference you will notice about EmTec FTP if you have used it before is that the program can now be downloaded and installed by itself. Previously you had to download the entire suite of Internet tools, even if you only wanted one of the components. The program uses its own installer, but there were no surprises lurking therein. You simply unzip the archive, run install.exe and specify where you want it installed and away it goes. No reboot is necessary since the program doesn't need any entries in CONFIG.SYS to run. This also makes uninstalling easy -- just delete the directory that contains the program and it's completely gone.

Using the Program

I have used this FTP program for several years now, dating back to the OS/2 2.1 days and it has never performed less than flawlessly. The interface is clean and laid out well. Buttons on the toolbar make quick work of setting binary or ASCII mode and then transferring one or multiple files. An extremely welcome addition recently made to the program is the ability to select a directory and transfer all its contents with one click. 

You can also create a Download List which allows you to select files in multiple directories. Once you have all of the files you want to download, you can start the download of the files in the list with a click of a button. A progress bar at the bottom of the window shows how the transfer is progressing in terms of speed and percentage completed as well as the time remaining for the transfer to complete.

A GUI FTP client should make it easy to access commonly used servers and EmTec FTP has a functional server list that lets you quickly access a particular server. In addition to the obvious things like server address and port, you can set the local and remote directories to change to when you connect. You can specify the username and password to use which is nice for anonymous ftp sites. For sites where you need to be more secure, you can have the program prompt you for username and password before connecting.

Sometimes it is convenient to see what is going on behind the scenes. EmTec FTP allows you to toggle a console window that shows the communications between the remote server and your machine. You can see the commands that are being sent and the responses of the remote server.

The program also allows you to view, edit, delete and rename files, local or remote (assuming you have proper permissions for doing so). Double-clicking a file brings up a dialog asking whether you want to view or download the file. You can also create directories. These commands are available in the main menu or by  right-clicking on the file and choosing the appropriate item from the pop-up menu.

Making it even Better

As good as it is, I think EmTec FTP could be even better. Unfortunately, the suggestion in my first review of this program to make the server list hierarchal has not been implemented. The current one-dimensional list is a bit unwieldy if you have more than a few sites entered. It would be much nicer if the list were capable of having folders into which you could place server entries (or more folders).

Another thing that would be nice to see is better use of multithreading. If you start a file transfer you cannot start transferring another file or change directories. You get a message that "the network process is busy." It would be nicer if downloads were relegated to separate threads and displayed in small windows the way they are in Netscape Navigator, although this would probably require considerable reworking of the program's innards.

Conclusion

Like OS/2 itself, EmTec FTP isn't some flashy piece of software with lots of flying paper animations that seem to make our Windows friends happy. It's a rather plain-looking program that is nonetheless solid on the inside and has just what it needs to get the job done quickly and efficiently. If you are looking for a graphical FTP client, this program probably has everything you are looking for. It is distributed as shareware and can be registered at (http://www.bmtmicro.com/) BMT Micro for US$30.

                         - * -

EmTec FTP 5.0.1
     by (http://www.emtec.com/) EmTec
     download from the (http://www.os2ss.com/archives/hobbes/os2/apps/internet/ftp/client/eftp501.zip) OS/2 Supersite (ZIP, 366K)
     Registration: US$30

(http://www.gnv.com/HTMLWizard/) Dr. Dirk Terrell is an astronomer at the University of Florida specializing in interacting binary stars.  His hobbies include cave diving, martial arts, painting and writing OS/2 software such as HTML Wizard.

***********************************

InterFTP v1.14	- by Christopher B. Wright

FTP programs are not the flashiest applications in the world. There doesn't seem to be anything inherently "gee-whiz" about moving a file from one place to another, even if its destination is on the other side of the planet. And some people will spend their entire lives never needing to directly interact with the File Transfer Protocol, instead relying on their web browser to download files for them.

But if you are a shareware author, or if you maintain a web site, FTP is very important. Think of it as kind of an Internet-based "file manager", where you can move files back and forth from your machine to an Internet server in much the same way as you would move files from your C: drive to your D: drive.

As far as FTP applications go, InterFTP is nothing spectacular, but it does the job, does it reliably, and doesn't make you jump through too many hoops. It lacks features I'd like to see in an OS/2 PM application, but it's intuitive enough for someone unfamiliar with FTP to use most of its features without resorting to the help menus.

First Looks

The first time I fired up InterFTP I thought that it looked a lot like an old Warp 3 settings notebook turned on its side. It plays the spiral notebook motif to the hilt, with different FTP sites being different tabbed "pages" in the spiral pad. The top of the application is split between a view of your computer's directory tree, and the remote site's directory tree. Below your computer's directory tree is a bar labeled "shredder" -- you can drag files onto it to delete them. Below that is a message window giving you information on what exactly the program is doing and when.

There is no one-button, quick-connect method of logging on to an FTP site in this program. All FTP addresses are stored in the address book, which must be opened to choose the site you want to connect to. On the other hand, InterFTP has an impressive number of pre-programmed sites already stored in its address book -- though I'm not sure at this point how many of those addresses are still accurate -- and adding new addresses is a pretty straightforward process, as long as you know the specifics of the site (FTP address, logon and password information, etc.).

Usability

You can log on to more than one location simultaneously. The different locations are organized by tabs at the bottom of the application. Clicking on a tab makes that location "active" -- you can move files around, whatever. The disadvantage to this method is that there's no direct way to move files from server to server. For example, if I wanted to log on to my web site, and move a graphic I'd created from there to another FTP site, I wouldn't be able to simple drag it from one server to the other.

To get around this problem, InterFTP has a folder named "FXP" where you can cue files to be transferred from one server to another. Just drag the file you want moved to the FXP folder, switch to the other site, and drag the FXP folder into the location you want the file transferred to. I found this a bit awkward, but it works.

Pluses and Minuses

My biggest complaint with the program is that it is not WPS enabled. You can drag files from one place to another from within the program, but you can't, for example, drag a folder from your Desktop to a remote site -- you have to use the file directory structure within the program itself. This is disappointing -- Workplace Shell integration is something I like to see in all my applications, and FTP seems like a natural candidate for it.

The biggest plus of this program, on the other hand, is its speed. InterFTP seems to suffer from little overhead and was able to log in to FTP sites with little waiting. Change directory and directory refresh commands were very responsive as well.

Conclusions

InterFTP is a serviceable program, but its no nonsense manner and lack of WPS integration makes it seem kind of dated for a PM application. Many people will probably not mind its limited interface, and will certainly like its responsiveness, but I found it too limiting for regular use.

                         - * -

InterFTP v1.14
     by (http://www.ixworld.com/iftp/) Revolutionary Software
     download from the (http://www.ixworld.com/iftp/iftp114.zip) InterFTP Home page (ZIP, 280K)
     Registration: US$29.99

(wrightc@dtcweb.com) Christopher B. Wright is a technical writer in the Richmond, VA area, and has been using OS/2 Warp since January 95.  He is also a member of Team OS/2.

***********************************

NcFTP v2.3.0	- by Trevor Smith

Most modern computer users gravitate toward graphical applications for most of their needs.  At the other end of the spectrum, many operating systems (such as OS/2, Linux and Windows) come with a built in "command line" FTP application, usually called FTP.EXE.

Somewhere between the plain command line and a full graphical application, lies NcFTP.  The developers of this program claim it is, "a highly-enhanced version of the 'standard' FTP program," and it lives up to this billing.  With a plain but efficient interface, NcFTP allows the average and advanced user to get his or her files to or from where they're going with minimum effort.

Originally a Unix program with freely available source code, NcFTP has been ported to many operating systems, including OS/2.  I have been using version 2.3.0 release 1 for OS/2 for over a year.

Installation

Possibly because of its Unix heritage, NcFTP does not come with any installation program.  To "install" it, all that is required is to unzip the archive it comes in and put the files wherever you prefer them.  If you want a program object to double click on from the Desktop or another folder, you will have to create it yourself.

There are some installation instructions in the included documentation (see below) which should be followed to properly set NcFTP up, but for basic functionality, you can just unzip and type 'ncftp.exe' to run the program.  I have found that just copying the 'ncftp.exe' file to a directory in my path allows me to run NcFTP from any directory.

However, you should note that you will need a copy of the EMX runtime DLLs (v0.9b or later) installed to use NcFTP.

Interface

As you have probably gathered, the interface to NcFTP is spartan, to say the least.  Basically you see an OS/2 command window; information from the remote host is displayed in the top portion of the screen and the bottom line is for typing in your commands.  This means you must know the commands to connect to and disconnect from remote hosts, get and put files, list local or remote directory contents, etc.  All interaction is done by typing in commands via the keyboard.

Documentation

The documentation that comes in INF format with the OS/2 port of NcFTP is comprehensive.  It covers installation, usage, and other interesting material.  This INF file, combined with NcFTP's built in help (typing 'help <command>' from within the program displays quick help on a topic), should provide all the training you will need to use the program.

Features

NcFTP's command line nature may be a drawback when it comes to ease of use but it is a definite advantage in terms of power.  With NcFTP, users can receive and send files to remote FTP sites with total flexibility.  In case of interrupted downloads, NcFTP supports "regets" so you don't need to re-download the whole file.  A variety of progress meters indicating download status are available.  Multiple file downloads and uploads are possible with wildcard notation (for example, 'get pmma*' will get all files starting with 'pmma').  "Recursive gets" are supported, meaning you can download all files and subdirectories from a remote site with one command.  And NcFTP can even retrieve only files you don't already have or only files that are newer than a specified date.

Viewing text files on remote sites without saving them to your local drive is supported and NcFTP can be configured to use different command line programs to do this.  The default setting is to use OS/2's "more.com" command which will display one screenful of information from the remote file at a time and then pause until a key is pressed.  Other, more useful programs, such as the (http://www.os2ss.com/archives/hobbes/os2/unix/util/less321-2.zip) OS/2 port of the Unix "less.exe" (ZIP, 288k) program can be used instead.

NcFTP also sports a competent bookmarks feature and, in fact, NcFTP will add bookmarks to sites automatically when you first visit them.  All the standard settings are available, including preferred remote and local directories to view, user name and password, transfer type and more.

Performance

In terms of responsiveness, programs don't get much better than NcFTP.  Because there is no graphical interface to deal with and, really, almost no overhead at all (ncftp.exe is only 207k) NcFTP will be snappy on any system, no matter how memory constrained it is.  I have never encountered anything I consider to be a bug in this version of NcFTP (although the documentation does list one known problem).

Conclusions

Despite its sparse interface, NcFTP is a very capable FTP client.  Even with the learning curve, beginners should be able to get up to speed quickly, and experienced Internet users will love the flexibility and power of this program.  Overall, NcFTP is a great FTP workhorse.

                         - * -

NcFTP v2.3.0
     by Mike Gleason
     OS/2 port by (mevans@ecsnet.com) Mark R. Evans
     download from the (http://www.os2ss.com/archives/hobbes/os2/unix/apps/internet/ncftp2r1.zip) OS/2 Supersite (ZIP, 447k)
     Registration: Freeware

(editor@os2ezine.com) Trevor Smith is the Editor-in-Chief of OS/2 e-Zine!.  While he spends substantial amounts of time looking at FTP screens, he would prefer to spend his time in Vegas watching Tom Jones or hiking in the woods.

***********************************

Spaniel News Server v1.003c	- by Jon Winters

For the last several years I have been hosting web sites from my OS/2 based web server.  I have also installed an (http://www.obscurasite.com/ceilidh/ceilidh.htm) HTML Forum similar the one OS/2 e-Zine uses. Interactive discussion forums are great for getting feedback and promoting a sense of 'online community' amongst my web site visitors. People posting to the discussion forums have added a lot of valuable information and created a reason to return. 

Knowing that OS/2 has a good Java Virtual Machine, I regularly check the Java Directory over at (http://www.developer.com) Developer.Com for things that I might want to try out. Recently I was surprised to find a News Server written in Java.

What is a News server?

If you have used the Internet for any length of time you have probably read news articles posted in newsgroups. Newsgroups allow like-minded users to discuss topics on almost any subject; there are currently upward of 40,000 topics. Before you can read these articles you have to connect to a News Server - a program that supplies the news to you. As well as allowing you to read articles, the News Server usually lets you post your own articles. One further role of the News Server is to pass your messages on to other News Servers allowing other users around the world to read your articles. A News Server supplying the most common newsgroups needs masses of disk space.

What is the Spaniel News Server?

The Spaniel News Server empowers your web site or Intranet with newsgroups. Using any standard news client (such as Netscape News, ProNews/2, PMINews and so on) your users can access the newsgroups YOU create. This news server is special because it works in isolation - it does not connect to other news servers and therefore you only need disk storage capacity for the messages posted by your users.

I was very excited by this!  For years I have been reading different newsgroups on Usenet and I was aware of how powerful the NNTP protocol could be as a communications tool.  

I chose the Spaniel News Server for the following reasons:

o  OS/2 compatible (100% pure Java) 
o  Easy to set up and administrate my own newsgroups 
o  Isolated from (http://digital.net/~gandalf/spamfaq.html) Spam
o  Compatible with all Newsreaders

Confession: I went into this thinking that a server in Java would be buggy, slow, and difficult to install and configure.

I am happy to report that the developers at Spaniel Software have delivered a fantastic product. Installation was straightforward and took less time than downloading the latest version of (http://www.software.ibm.com/os/warp/solutions/java/) Java 1.1.4 for OS/2.

I did need to write a little REXX script to start the server, however. My server needs to run all the time so I put a shadow of newskicker.cmd in my startup folder

Making newsgroups is as easy as making new directories. NOTE: New groups are not recognized until the server is restarted.  I have created a group called (news://198.64.226.104/spaniel.news.test) spaniel.news.test so you can see how the server is working on Obscura.

Spaniel News Administrators have the option of setting messages to expire after a set number of days or leaving them on the server as an archive.  Currently I am archiving everything.  If I get a really popular group I will probably start expiring articles over one year old.

I have not found any problems with Spaniel News Server, and as a result it has changed my opinion of software written in Java. In addition, I have received several 'thank you' letters from users who like it better than the old HTML based system.  Testers on the west coast have commented that it is "a lot faster" than The Ceilidh or Hypernews, plus I like knowing that my users are free to choose the newsreader that they are comfortable with. 

Therefore, if you are running a web server on an OS/2 machine and you would like to host your own newsgroups, I recommend the Spaniel News Server.  

                         - * -

Spaniel News Server v1.003c
     by (http://www.searchspaniel.com/newsserver.html) Spaniel Software
     download from the (http://www.searchspaniel.com/spanielnews.zip) Spaniel Software Web Site (ZIP, 14k)
     Registration: Freeware

Jon Winters is the owner and operator of (http://www.obscurasite.com/) Obscura! With the help of a few good friends he is up to all kinds of mischief on the web.

***********************************

First Looks and Nifty Gadgets

First Looks and Nifty Gadgets brings you reviews of the new and novel.  Every two weeks we take a look at what's just hitting the streets and some tiny, but tried and true products that are still helping people be as productive as possible.

                         This month we look at: tWave 1.23 | pm123 beta 2

tWave 1.23

tWave is a collection of audio utilities and players for OS/2 from 40th Floor software. Most are command line applications, but one, called gWave, is a Presentation Manager (GUI) MP3 player with a pair of real-time graphical displays.

While being a bit on the ugly side (compared to pm123 below), it features both graphical VU meters for the left and right channels, and a real-time frequency monitor. For non technical people, this means it has those cool displays with the needles that kick back and forth and the bars than flow up and down in time with the music.

A little disappointing is the lack of polish in features as well as appearance. gWave has no "File open" dialog or drag-n-drop support for loading the playlist. If the Audio MPEG (or "MP3") files are not in the current directory from which it's launched, gWave won't find them. gWave is also murderous with its CPU demands, more so than other MP3 players, mostly due to its real-time displays. (These can, however, be switched off.)

The remaining utilities, which work from the command line, are a WAV file player and recorder, MP3 decoder, CD Direct Audio Extractor (pull tracks off a music CD direct to .WAV file -- no jitter correction though), and a CD player. All utilities use the DART (Direct Audio Real Time) extensions that already come with Warp 4.

tWave 1.23
     by (http://40th.com) Cornel Huth / 40th Floor
     download from the (ftp://ftp.mindspring.com/users/chuth/dl/twave123.zip) tWave home page (ZIP, 284K)
     Registration: US$20

                         - * -

pm123 beta 2

Beating gWave's homely look by far, but without the cool real-time displays, is the second beta of pm123, another audio MPEG (MP3) player for OS/2. Its major new feature, and what will undoubtedly win it top marks in the beauty contests, is support for skins. What are "skins" you ask? They're collections of bitmaps, fonts and color arrangements that redefine the look of pm123's interface. You can leave its default look, which is a plain gray texture, or you can hop over to the (http://www.teamos2.sci.fi/pm123/skins/index.html) Skins Archive and download a new one (15 already available, at the time this was written), or even crack open an editor and make your own. Skins can be loaded on the fly, even while you're currently playing a song.

Other functional improvements over the first beta are a slider progress bar that can be grabbed and moved to reposition the point in the song, plus improved forward/backward scanning within a song.

pm123 beta 2
     by (http://www.teamos2.sci.fi/pm123/) Taneli Lepp / Samuel Audet
     download from the (ftp://www.teamos2.sci.fi/pm123/pm123b2.zip) pm123 home page (ZIP, 353K)
     Registration: Freeware

                         - * -

That's it for this issue.  Tune in next time for more reviews of neat gadgets and first looks at new OS/2 tools.

***********************************

May 2, 1998 Reader Survey Results

OS/2 users are said to be very attached to their operating system, even more so than other "zealous" computer users.  We wondered just how loyal to the platform the average OS/2er is, and what other platforms he or she tinkers with.  To find out, last issue we asked about "You and Your Computer".

Answers to our survey were accepted from May 2nd until May 13th.  We had a total of 1,657 replies to our questionnaire with 103 "spoiled" entries (replies were considered "spoiled" if they did not contain an e-mail address, if all questions were not answered or if they were duplicates).  This left 1,554 valid replies.  The results were as follows:

What operating systems do you use?

We weren't surprised to find out that virtually everyone replying to our survey uses OS/2 (90.5% using Warp 4; 29.3% using some other version) -- we had assumed as much before the first results even came in.  And well more than half our readers use some form of Windows (58.2% Win95) -- another no-brainer.

More interesting statistics are the ones relating to DOS and Linux.  A surprising amount of our readers (41.1%) still use good old DOS on their computers, and almost a third (29.2%) are Linux users.  Obviously OS/2 users are not loyal to OS/2 to the point of excluding other OSs from their computers.  It seems likely that Boot Manager is a very valuable tool to most OS/2ers.

What operating system do you currently use most?

Again, we expected no surprises when we asked our second question, and we got none.  Obviously the majority of OS/2 e-Zine! readers (84.9%) use OS/2 more than any other operating system.  If anything, this number is interesting because it was not higher.  No other OS was reported as the primary operating system by significant numbers of users, although Win95 and WinNT (with 6.0% and 5.1%, respectively) were far ahead of any other options as second and third place contenders.  While some readers told us (in answer to our first question) that they use platforms like the Amiga or BeOS, absolutely no one told us they use either of those operating systems the most.

What operating system would you use most if you stopped using OS/2?

Perhaps our most interesting question last time was what OS our readers most preferred after OS/2.  We have received many letters over the years telling us stories of readers moving on to Win95, WinNT or Linux and we were curious which was the real "future of computing".

Unfortunately for Microsoft, even if OS/2 were to disappear tomorrow, it seems that they still would not be able to claim its users back into their market.  In fact, Linux slightly edged out Windows NT as the most likely runner-up OS for our readers.  However, Windows in general was the real winner, with 48.8% of readers saying they would choose either Win3.x, Win95 or WinNT if they had to leave OS/2 behind.

Would you continue to use OS/2 even if IBM "officially" ceased updating it?

Since IBM has often seemed indifferent or even hostile toward OS/2 users, we wondered how important their commitment is to the OS/2 community.  And apparently the answer is: not too important.  Over three quarters of our readers (75.5%) told us they would either definitely or probably still use OS/2 even if IBM officially stopped all support of the product.  Only 14.0% thought they definitely or probably would not continue using OS/2.  Overall, it seems clear that OS/2ers are committed to OS/2. 

                         - * -

That's it for this month.  Don't forget to fill out this month's questionnaire and check back on May 30th for complete results.


                         Complete May 2, 1998 Survey Results

What operating systems do you use?

Category					Count	Percentage
Amiga					24		1.5%
BeOS						42		2.7%
DOS						639		41.1%
Linux					453		29.2%
Macintosh				117		7.5%
OS/2 (Warp 3 or earlier)	455		29.3%
OS/2 Warp 4				1,407	90.5%
Windows 3.x				466		30.0%
Windows 95				905		58.2%
Windows NT				557		35.8%
Unix (other than Linux)	249		16.0%
Other					80		5.1%


What operating system do you currently use most?

Category							Count	Percentage
Amiga							0		0.0%
BeOS								0		0.0%
DOS								2		0.1%
Linux							20		1.3%
Macintosh						8		0.5%
OS/2								1,320	84.9%
Unix other than Linux				18		1.2%
Windows 3.x						10		0.6%
Windows 95						94		6.0%
Windows NT						79		5.1%
Other							2		0.1%
I don't know						0		0.0%
I don't understand the question		1		0.1%
TOTAL							1,554	99.9%


What operating system would you use most if you stopped using OS/2?

Category							Count	Percentage
Amiga							1		0.1%
BeOS								32		2.1%
DOS								36		2.3%
Linux							454		29.2%
Macintosh						35		2.3%
OS/2								16		1.0%
Unix other than Linux				57		3.7%
Windows 3.x						44		2.8%
Windows 95						295		19.0%
Windows NT						419		27.0%
Other							11		0.7%
I don't know						150		9.7%
I don't understand the question		4		0.3%
TOTAL							1,554	100.2%


Would you continue to use OS/2 even if IBM "officially" ceased updating it?

Category							Count	Percentage
I definitely would				566		36.4%
I probably would					607		39.1%
I don't know						163		10.5%
I probably would not				157		10.1%
I definitely would not				60		3.9%
I don't understand the question		1		0.1%
TOTAL							1,554	100.1%

***********************************

May 16/98 Reader Survey

Have you ever wondered what your fellow OS/2 users are doing with their computers and how they're doing it?

Each month, OS/2 e-Zine! takes the pulse of the OS/2 community on a different topic and presents you with the results.

Just fill in the form at http://www.os2ezine.com/v3n06/survey2.htm and check our next issue to find out how "normal" you really are!

                         - * -

Do you have an idea that you think would make a (feedback@os2ezine.com) good survey question?

Don't forget to check out the complete results of last month's survey, in this issue!

                    This month's topic: Your Hardware and Software


Notes:
1. Only one entry per reader will be counted.
2. All questions must be answered to be counted.
3. Information must be received on or before May 28, 1998.

Complete results of this survey will be printed in our next issue (May 30, 1998).

***********************************

Building Dynamic Web Sites in OS/2	- by Chris Wenham

Part 2

Soon after (http://www.os2ezine.com/v3n05/htmlpp1.htm) Part 1 of this series was published I received a couple of e-mails pointing out the existence of other HTML Preprocessors for OS/2. One is (http://www.cinenet.net/users/cberry/orbinfo.html) Orb, a cross-platform preprocessor available for DOS, OS/2 and Solaris. Another is the (http://www.yoursite.co.uk/os/2/webwriter/) Advanced Web Editor - an HTML editor with built in support for adding an HTML preprocessor. I didn't have time to look at these closely enough to talk about them this week though.

In this article I'll step you through the task of creating two web pages that have the same content, but represent two different varieties: One with lots of gee-gaws and widgets and Netscape optimizations designed to impress the socks off your boss, and another optimized for Lynx or other unsophisticated browsers. 

I'll be honest up front and say that it is your job to figure out what those gadgets and gee-gaws are and how they're implemented. I see plenty of people have already figured out how to make ghastly monstrosities without my help, and there's always (http://www.builder.com/) Builder.Com. My job is to show you how to manage that beast, once created. 

We'll do this by making two templates, one for each design. The preprocessor will do the work of filling the templates with the real content for you, so you don't have the chore of making the same alterations in two different files at the same time. By the end of this you'll only need to edit one file and double-click an icon to make the changes globally. If you've ever used the mail merge function of your word processor, then you'll already be familiar with the concepts we're dealing with here.

I should make it clear that the technique of using a preprocessor is really only useful if the content of the page in question is going to change a lot, or is one of a series of pages that need a common design. If you're making a personal web page with photos of your cat, maybe you shouldn't bother with all this fuss.

Three Steps

The job of making the templates is divided into about three steps, which are:

	1. Make a prototype, using a sample of the content you're packaging
	2. Identify what's content and what's part of the page's design or structure.
	3. Snip out the content, replacing it with markers.

The first step is easy enough, just grab an HTML editor of your choice and make your two versions of the page with a sample of the content you'll be using. At this point it doesn't really matter what you use in the production, Homepage Publisher, e.exe, or (the more evil) FrontPage, just as long as the HTML code it saves is readable enough for you to work with it later.

When you save the files, put them in the same directory (a nice new empty one is good) but with names that reflect what version they are, like "example-p.it" for the plain version, and "example-e.it" for the enhanced one. The ".it" extension stands for "Internet Template" and doesn't really belong to any formal specification. You could use ".template" if you want and you're working on an HPFS partition. It won't make any difference to the preprocessor, but it will make it easier to tell at a glance what kind of file it is.

In the second step you'll identify what part of the page will be changing regularly and needs to be identical in each version, i.e.: the real content. If it's a bulleted directory of links or list of headlines then it's probably whatever appears between the <UL> and </UL> tags. If it's an essay then it'll be whatever's between and including the first and last paragraphs of it. In our example we'll assume it's a news page, with news bursts separated by a bulleted list. It might look something like this:

Tuesday June 21st, 2008. 5:45pm. Visa Micropayment: $0.85. Outside Redmond, WA: $6.00

	o  Life discovered on Mars, not interested in Windows. Extermination plans commence.
	o  Grand High Poobah of Quadrant 18 acquires Dogs Playing Poker for $30 million.
	o  Trafficking of illegal "Tickle Me" Beanie Babies on the rise.
	o  Wired Magazine swimsuit issue hits the stands.
	o  8th attempt to clone Walt Disney using DNA extracted from cells of cryogenically stored "father" successful. Clone expected to resume helm of media empire in 2009.
	o  Self named "Equality 0-0001" wins seat on Congress for the Collectivist Party. Lays out plans for new world order by 2112.

Questions, comments and pizza may be delivered to news@newsburst.news.

                   --------

This is our "plain" and Lynx friendly version. The enhanced version is far too evil to include here.

What we can see easily are the areas of volatile content that need to be separated from the page's structure. There's: 

	o  The title image
	o  The date
	o  The Micropayment price
	o  The "Outside Redmond" price
	o  The headlines themselves
	o  The feedback e-mail address

In our prototype, now opened up in a text editor (or at least an HTML editor that can work on the code level and won't mess up any of our special tags,) we locate these elements and replace the sample data we used in the prototype with some place marker tags. These tags themselves look a bit like this:

<$TitleImage>, <$VisaPrice>, <$ORPrice>, <$Headlines> and <$Feedback>

The dollar sign ($) beginning each tag is important, but doesn't have anything to do with money. It tells our preprocessor that it's a custom designed tag that needs to be dealt with. Otherwise it'd ignore the tag and assume it's part of the HTML specification.

After going through step 3 of the process, finding the content that our tags correspond to and replacing it with them, we have a complete template ready for use:

#include STANDARD.IT
<HTML>
<HEAD>
<TITLE>News Bursts</TITLE>
</HEAD>
<BODY>

<p><img src="<$TitleImage>" alt="News Bursts">

<p><?CompileTime>. Visa Micropayment: <$VisaPrice>. Outside Redmond, WA: <$ORPrice>

<ul>
#include <$Headlines>
</ul>

<p align=center>Questions, comments and pizza may be delivered to <$Feedback>

</BODY>
</HTML>

In strong emphasis you can see where I've snipped out the sample data used to build the prototype and substituted it for the place markers instead. You'll also notice the two "#include" lines, one at the top and one halfway through, and a <?CompileTime> tag. I'll get to those later, although you're probably smart enough to have figured most of it out already. 

Working with the "Netscape enhanced" version will probably be a little harder, since there'll be a lot of other code getting in the way. But if you know what sample data you used when building the prototype you should be able to search for and find it easily. Remember, only replace that which you know is the real content, not any surrounding tags that are part of the template's structure. For example, don't delete the <UL> and </UL> tags when replacing the headlines section with <$Headlines>.

As you can also see from the example, it's safe to nest our place holders in the middle of other tags, as can be seen in the IMG tag. The HTML preprocessor is like a big automated global search and replace engine; location of the tags doesn't matter, and they don't have to be surrounded by spaces. You can build filenames out of them (imagine linking to a page with "http://www.yourdomain.com/<$MajorCategory>-<$MinorCategory>/<$Product>.html") and get as creative as you like.

The "#include" lines tell our preprocessor to include the contents of two different files. This is very important because the first one tells the preprocessor what all those custom place holders mean, and the second one imports the bulk of the content itself. The first one, STANDARD.IT, looks like this:

#define TitleImage title.gif
#define VisaPrice $0.85
#define ORPrice $6.00
#define Headlines headlines.txt
#define Feedback news@newsburst.news

And the second one, first pointing to <$Headlines>, which as we can see above resolves to "headlines.txt" contains this:

<LI>Life discovered on Mars, not interested in Windows. Extermination plans commence.
<LI>Grand High Poobah of Quadrant 18 acquires Dogs Playing Poker for $30 million.
<LI>Trafficking of illegal "Tickle Me" Beanie Babies on the rise.
<LI>Wired Magazine swimsuit issue hits the stands.
<LI>8th attempt to clone Walt Disney using DNA extracted from cells of cryogenically stored "father" successful. Clone expected to resume helm of media empire in 2009.
<LI>Self named "Equality 0-0001" wins seat on Congress for the Collectivist Party. Lays out plans for new world order by 2112.

Ah ha! Now we start to see where our content has been moved to. The STANDARD.IT, as its name implies, contains standard data such as the title image, prices, feedback address and the name of the file with all the headlines in it. It could also contain lots of other definitions not used in that particular template, such as animated GIFs and gadgets for the enhanced page. Anything #DEFINEd that isn't used in the template will simply and harmlessly be ignored, so definitions for fancy graphics intended for the enhanced version won't cause any problems when you use the same file to make the plain version.

These two #INCLUDE lines are also present in the gadget-enhanced version of the page too, once you've turned it into a template, since the content is all the same. 

By now you might be noticing the simple syntax of those #DEFINE statements. It's just:


	#DEFINE Keyword_name Keyword value.



You'll see that the Keyword name must be all one word, with no spaces or tricky characters like quotes. It also doesn't need the brackets ("<" and ">") or the dollar sign ($). The Keyword value, however, can be many words and symbols, as long as it all fits on one line.

You've also probably guessed the purpose of <?CompileTime> too. It's a special internal tag, or macro, to the preprocessor that gets substituted with the full date and time that the page was built. It's designated with a question mark (?) instead of a dollar sign ($) to separate it from user defined tags. There are more such tags as these, but we'll get to them later.

Putting it into practice

You now have your templates all defined. You have one version that's decked out in the most vile, evil, gratuitous whiz-bang plug-ins and applets and Javascript and whatnot that your miserable mind can conceive. You've got hit counters, you've got drop down menus, you've got style sheets and animations and mouse rollovers and everything. It's the bee's knees. The wasp's nipples. Your site is it! But it's also inhospitable to any living creature on Earth, so you have a tame version too. It's low on graphics, it doesn't use any nested tables, and it takes about five seconds to load.

With the magic of the preprocessor you're maintaining two different versions of the same page, but you're only editing one file. But which file? Headlines.txt of course! It's usually best to edit this in a plain text editor, so the contents aren't messed around by superfluous tags inserted by well meaning WYSIWYG editors and word processors.   

If you insist on editing it in a word processor that saves in HTML format, open it in a text editor later and snip out all the extra tags it puts in, such as the <HTML>, <TITLE> and <BODY> tags etc. This is because the word processor is expecting it to be a stand-alone page rather than something included in a larger design. A bit of a pain, yes, and a bit purpose defeating. But in a later column I'll show you a simple program that strips them out for you and prepares a page for simple, clean inclusion into another.

The last step, and almost neglected in this article, is running the template through the HTML preprocessor itself. As described in Part 1 of this series, you open a command prompt, change to the directory that you saved all your files to, and type:

HTMLPP *.it

It'll search for any file that ends in .it (example-p.it and example-e.it), processes them and saves the results as example-p.html and example-e.html. With the title, date, prices, headlines and everything all in their proper places, as set by the templates. All you have to do is upload them to the server. To simplify this step even further, create a program object on your desktop that runs the same command. Now you just have to edit the headlines file and double click on the icon. Easy peasy.

In Part 3 I'll start explaining how to use this to build a simple catalog site, using a "poor man's database". 

(Editor's Note: Since the HTML Preprocessor by Dennis Bareis is updated so frequently, many people have written to tell us the link in last month's article was no longer functional.  We have included a new link below to the page on which the file is located.)

                         - * -

HTML Preprocessor
     by (http://www.ozemail.com.au/~dbareis/) Dennis Bareis
     download from (http://www.ozemail.com.au/~dbareis/freeos2.htm) Dennis Bareis's home page (ZIP, ~100K)
     Registration: Freeware

(chris@os2ezine.com) Chris Wenham is the Senior Editor of OS/2 e-Zine! -- a promotion from Assistant Editor which means his parking spot will now be wide enough to keep his bicycle and a trailer.

***********************************

OS/2 Top Sellers Lists

Each month OS/2 e-Zine! gathers data from various OS/2 retailers on the hottest selling OS/2 applications from around the world and presents the findings right here.  Because of the unique on-line OS/2 community, these lists may represent shareware, commercial software or a combination of the two.

We are pleased to bring you the top selling software lists from the following vendors:

o  BMT Micro

Note: These lists represent only the monthly sales figures of the respective retailers.  The list above is presented in alphabetical order.  It is not OS/2 e-Zine!'s intention to recommend one retailer over another.  Please see our disclaimer below for more information.

***********************************

April's Top Selling Apps from Mensys

This		Last		Product					Developer
Month	Month
1		5		Entrepreneur				Stardock Systems
2		--		OS/2 Fixpack CD			Mensys
3		1		Partition Magic			PowerQuest
4		--		Lotus Smartsuite Upgrade	Lotus
5		7		Warp Connect No-Windows US	IBM
6		--		System Commander de Luxe	V-Com
7		--		System Commander			V-Com
8		--		Wordpro/Freelance			Lotus
9		3		DriveCopy				PowerQuest
10		2		DriveImage Professional	PowerQuest

                         - * -

Compiled by (http://www.mensys.nl/indexuk.html) Mensys - The one place to go in Europe for all OS/2 Warp software.

***********************************

Top Sellers Lists Disclaimer

Our "top sellers lists" represent sales figures compiled for OS/2 e-Zine! by (http://www.bmtmicro.com/) BMT Micro, Inc., (http://www.indelible-blue.com/) Indelible Blue, Inc., (http://www.os2store.com/) J3 Computer Technologies and (http://www.mensys.nl/indexuk.html) Mensys.  Falcon Networking does not verify these lists and makes no guarantee of their authenticity.  All inquiries regarding products appearing or not appearing on these lists should be directed to the relevant retailer.

The publication of these lists is not meant to indicate an endorsement by Falcon Networking of any of these companies or of the products featured on the lists.

Readers should note that the rankings indicated in each of these lists represent only the sales of each individual retailer.  They do not, necessarily, represent sales across the entire OS/2 industry.

There are many different sales channels in the OS/2 industry and different software vendors rely heavily on some while other vendors rely more heavily on others.  Also, not all retailers carry all existing OS/2 products.  Readers should take these facts into consideration when interpreting the "top sellers lists".

The BMT Micro "top sellers list" represents only the top selling OS/2 shareware applications available through BMT Micro, Inc.  The BMT Micro CD is excluded from the figures to avoid distorting the results.

The Indelible Blue "top sellers list" represents only the top selling OS/2 applications sold by Indelible Blue, Inc.  OS/2 Warp and OS/2 Warp Connect are not included in these rankings.

***********************************

Subscribe for FREE

If you would like to receive notification when new issues of OS/2 e-Zine! are posted or remove yourself from our notification list, use our on-line subscription form at http://www.os2ezine.com/subscrib.htm -or- send an e-mail to subscribe-request@os2ezine.com with only the word:

     subscribe 

in the body of the message. 

Please make sure your software is properly configured with your e-mail address! 

If you have problems please (feedback@os2ezine.com) e-mail us or contact us at:

Falcon Networking
4302 NW 25th Terrace
Gainesville FL, 32605
U.S.A.

(902) 461-2266

***********************************

Sponsor OS/2 e-Zine!

* Corporate Sponsors

OS/2 e-Zine! has space for a limited number of corporate advertisers.  A variety of affordable advertising options are available including high impact, inline graphical advertising.  Arrangements are available for multiple issue insertions.

For more information please e-mail admin@os2ss.com or phone at (800) 595-1974 (Toll free - US & Canada) or (352) 335-9693 (Outside US & Canada).

* Readers Can Sponsor Too!

If you feel OS/2 e-Zine! is useful, entertaining or educational, please send what you feel a one year subscription is worth.  Even sponsorship of a few dollars is appreciated.  Individuals sponsoring US$15 or more will be listed in our Sponsors Page (with an optional link to their home page).

Just send your cash, cheque or money order (made payable to Falcon Networking) along with:

o  a note stating that it is for OS/2 e-Zine! sponsorship
o  your name
o  your address (city, state/province and country)
o  your e-mail address
o  your web URL if applicable

Alternatively, you may choose to sponsor OS/2 e-Zine! by credit card through BMT Micro, Inc. (http://www.bmtmicro.com/).  BMT Micro acccepts Visa, Mastercard, Discover, American Express, Diner's Club and many other credit cards.  Just call:

o (800) 414-4268 (Voice) 9:00am - 7:00pm EST
o (910) 791-7052 (Voice) 9:00am - 7:00pm EST
o (910) 350-2937 (Fax) 24 hours a day
o (910) 350-8061 (Modem) 10 lines, all 14.4K, or
o (910) 799-0923 (Modem) Direct 28.8K line

o Or, use BMT's (https://secure.falcon-net.net/BMT/order0261.html) Secure Order Form.  It's safe, fast and simple!

Any amount is appreciated and whether you choose to sponsor or not, you will still be able to enjoy every issue of OS/2 e-Zine! on the WWW!

For more information or any other questions please (feedback@os2ezine.com) e-mail us or contact us at:

Falcon Networking
4302 NW 25th Terrace
Gainesville FL, 32605
U.S.A.

(902) 461-2266

***********************************

Corporate Sponsors

(http://www.bmtmicro.com/) BMT Micro
Your complete source for over 175 of the best OS/2 shareware applications available.  Drop by today and check out our WWW catalog or download the .INF version.

(http://www.ChipChat.com/os2ezine) ChipChat Technology Group
ChipChat produces excellent 32-bit OS/2 software for wireless text paging and state-of-the-art multimedia Sound Cards for Micro Channel PS/2 computers.

(http://www.indelible-blue.com/) Indelible Blue
Indelible Blue, a mail order company, provides OS/2 software and hardware solutions to customers worldwide.

(http://www.mensys.nl/indexuk.html) Mensys
The one place to go in Europe for all OS/2 Warp software.

(http://www.prominic.com/) Prominic Technologies, Inc.
On-line sales & solutions for VisualAge, DB2, OS/2 Warp, Workspace on Demand, Notes/Domino, AIX Firewall, and Net.Commerce (design/hosting).  The best deals on IBM and Lotus software and hardware (PCs, Servers, and RS/6000s) -- with OS/2 preloads!

(http://www.prioritymaster.com/) ScheduPerformance, Inc.
Dramatically improve performance on your OS/2 system now with the patented priority scanning logic and visual priority identification of Priority Master II.

(http://www.stardock.com/) Stardock Systems
Providing quality software for the home and office.

(http://www.warpspeed.com.au/) WarpSpeed Computers
Developers of The Graham Utilities -- the largest, most comprehensive suite of disk, file and general utilities specifically written for OS/2.

***********************************
Copyright 1998   -   Falcon Networking
ISSN 1203-5696