[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!		August 16, 1998		volume 3, number 12
--------------------------------------------------------------------------
Copyright 1998		Falcon Networking  	ISSN 1203-5696

         "Over Three Quarters of a Million Satisfied Visitors!"


OPINIONS:

  Chris' Rant


DEPARTMENTS:

  the REXX Files
  How Do I?
  

REVIEWS:
  
  OBJECT DESKTOP 2 Early Experience: First Looks

  COMMAND LINE REPLACEMENTS

  Introduction - Chris Wenham
  4OS2 - Lief Clennon
  Take Command for OS/2 - Christopher B. Wright
  TCSH - Dr. Dirk Terrell
  YAOS - Chris Wenham

  First Looks and Nifty Gadgets

    Internet Junkbuster          InProTrack


READER SURVEYS:

Results from our August 1st Survey
  Find out what your fellow readers told us last 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:

  Top Software from Mensys


ADMINISTRIVIA:

* 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

The Grand Conspiracy

Summary: You're all victims of mind control! Or are you? Conspiracy theories usually amount to all a load of hogwash. But wait, what's this?

George Orwell's 1984 taught us several valuable concepts besides the usual "Big Brother" we've all come to know and love. It was such a hot seller not because it was brilliant and prophetic, but because it rolled up its sleeves and dug down into that delicious conspiratorial, things-are-not-how-they-seem kind of theories that has also made the X-Files such a rousing success too. People want to believe that there's something sinister The Man doesn't want you to know, not because they fear the loss of freedom in a dictatorship state, but because it tickles our sense of curiosity and flatters ourselves at the same time. "Ooohh! I'm not taken in by the non-news they try to push on me every night at 6 'o clock on the TV, I'm one of the special ones who knows its all a conspiracy to hide the real truth!"

But you've been caught at the same time you thought you were breaking free. Instead of really looking for the truth, you get mixed up in nonsense about little green men at Roswell, Area 51 and browser cookies. All a load of misplaced paranoia that efficiently wastes your time. If I was the government and I really wanted to cover up my ugliest secrets, I'd encourage TV shows like the X-Files. A brand new wild goose chase every week! How about that? And take Bob Dylan, he spends his entire career singing "Down with The Man!", and then he gets a Lifetime Achievement Award from none other than The Man himself - rendering everything he's ever sung about irrelevant. What a stroke of genius!

In the book 1984 this trick was used too, but there was no Bob Dylan type rebel to embrace there, so Big Brother had to invent one called Emanuel Goldstien. Mr. Goldstein was a manufactured public enemy, the leader of a fictional underground movement, a perfect snare to trap anyone like poor Winston who thought he was righteous enough to stand against the rule of the dictatorship. Fortunately for our modern day Big Brother, Microsoft, they didn't have to invent a Goldstein; he presented himself one day when he posted his (http://www.fsf.org/gnu/manifesto.html) manifesto to the Internet and called his movement the Free Software Foundation.

The Free Software Foundation is absolutely perfect for Microsoft. Here you have a loose confederation of rebel hackers chasing after an idealistic cause that is just radical enough to fly. And all Microsoft has to do is preempt them at the last minute with a Redmonian act of Embrace And Extend. They'll release Windows under a modified GNU license and all of a sudden the FSF doesn't matter anymore. Poof goes Netscape's advantage. Poof goes the rebellion as hackers worldwide have to admit that Microsoft has done the honorable thing. And poof go all those security holes as Microsoft inherits the fantastic bug-crunching power of peer review. 

Of course by this time it'll be too late to claim victory for Free software, because Microsoft will have a very firm grip on the distribution channels as well as a very special clause in the license which forces PC vendors to pay for the OS they install on each machine, even though its source code is downloadable for free. Hey, vendors are using the OS to add value to a product they're selling for profit, Microsoft would be completely and morally justified in asking for a remittance of $50 or so per machine. Plus, 99% of all software is written to the Windows API, so what else are they going to bundle? Microsoft has the lawyer-power to chase down any company that selfishly takes advantage of Microsoft's generosity.

So think about that next time you read Mother Jones or snicker quietly at the insider knowledge you found at (http://www.slashdot.org/) Slashdot. Because while I just spent five minutes of your time ridiculing the whole concept of silly crackpot conspiracy theories, I just slipped one of my own right under your nose. I gotcha, didn't I?

                         - * -

Heard any good ones lately? The Man ever arrive on your doorstep to take your computer away? Join the OS/2 Illuminati right here in our (http://www.os2ezine.com/forums/get/forums/rant/august16-1998.html) Hypernews forum and we'll rule the world.

                         - * -

(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]
[(http://www.ChipChat.com/os2ezine/) ChipChat]
[(http://www.indelible-blue.com/) Indelible Blue]
[(http://www.mensys.nl/indexuk.html) Mensys]
[(http://www.prominic.com/) Prominic Technologies]
[(http://www.prioritymaster.com/) ScheduPerformance]
[(http://www.stardock.com/) Stardock Systems]



(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.

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

Building Dynamic Web Sites Part III	- by Chris Wenham

Summary: Build a catalog on a web site using a poor man's database. Background: (http://www.os2ezine.com/v3n05/htmlpp1.htm) Building Dynamic Web Sites Part I and (http://www.os2ezine.com/v3n06/htmlpp.htm) Part II  

Foreword: I never imagined this series would be as popular as it turned out to be. It was quite unfortunate, then, when I lost my computer and all of the work on it. For about two months I had to manage with a borrowed laptop until my equipment was eventually returned. On it was my work and from there I was able to pick up this series again. One word of note, however, is that since Part II of this series was published, Dennis Bareis has updated his program considerably. Instead of being called HTMLPP it's now called PPWizard. Since its updated so often the download link at the bottom of each article kept breaking, and lots of readers wrote in to complain. So for now, we'll be linking to the web page where the program is downloaded, rather than the program itself. 

Suppose you've quit your job, sold your Harley Davidson and bought a year's worth of web space in order to jump-start your dream of running your very own storefront on the web. You're selling gorgeous handcrafted goods and need to put together an online catalog complete with photographs, descriptions, available varieties, the whole nine yards. However, advertising costs have taken up all of your budget, so you can't afford that copy of DB2. Drat. You need a poor man's database. 

For our purposes a "Poor Man's Database" means a simple text file that has been laid out in a structured way. In it, fields like the catalog item's name, description and price are defined using the methods I described in Part II of this series. For example, lets say you created a file called "database.it" and put this in it: 


#define Name Deluxe Ballpoint Pen 
#define Materials Oak, Paduk, Bubigna, Cherry 
#define Description A fine writing implement, takes standard refills 
#define Picture ballpen.gif 
#define Price $79.95 


Pretty simple, and if you've read Part II you'll know that in the template for a catalog page you can simply place each field where you want, with the upmost flexibility. For example, we'll create a file and call it item.it. Its contents are: 


#include database.it 
<HTML> 
<HEAD> 
<TITLE><$Name></TITLE> 
</HEAD> 
<BODY> 

<H1>Frank's World Of Handcrafted Goods</H1> 

<H2><$Name></H2> 
<p>Available in: <$Materials> 
<p><$Description> 
<p><img src="<$picture>"> 
<p><strong>Price:</strong> <$Price> 

</BODY> 
</HTML> 


When you type "ppwizard item.it" on the command line, the resulting item.htm file looks like this in a web browser: 

<hr>

<h1>Frank's World Of Handcrafted Goods</h1>
Deluxe Ballpoint Pen
Available in: Oak, Paduk, Bubigna, Cherry 
A fine writing implement, takes standard refills 
Price: $79.95 

<hr>

(I've omitted the picture to conserve space here) 

With that template, it's easy to stamp out page after page of catalog items that all have the same basic look and feel. It's also possible to create catalog pages of multiple styles but with the same information. For example, you might have a web site open to the general public with your usual look and feel, but say you also struck a deal with an exclusive club that wants a discount and needs a duplicate of the catalog to be customized for their web site's own look, feel and navigational structure. 

Trouble is, you want your catalog to have a separate web page for each item you're selling. You could put each catalog item's information in separate files (database1.it, database2.it) and laboriously tell the preprocessor to build each one, or, we could be sneaky... 

Being Sneaky

Introduced in a recent version of the HTML Preprocessor we've been using (see bottom of this article for a download link) is a new command called #output. It tells the preprocessor to temporarily suspend sending its output to the main web page file, and redirects it to a new file who's name you specify. To quote an example from PPWizard's documentation, say this is a page you've created: 


Line 1 of file 1 
Line 2 of file 2 
#output '2nd' 
	Line 1 of file 2 
	Line 2 of file 2 
	#output '3rd' 
		Line 1 of file 3 
	#output 
	Line 3 of file 2 
#output 
Line 3 of file 1 


When run through the preprocessor, it would create two additional files (called '2nd.htm' and '3rd.htm') in addition to the main one it was already working on (1st.htm). You can also see that these output files can be nested many levels deep (infinitely deep according to the preprocessor's documentation, since the program is careful to temporarily close any output file that its not directly working on), but that's something we won't need to take advantage of just yet. 

You can also see that #output on its own, with no file name after it, "closes" the file and goes back to working on the one before it. 

This little trick allows us to not only put the details of all of our catalog items into just one file, but to make the preprocessor automatically generate the separate, web-ready catalog pages for us. So now the "database.it" file looks like this: 


#output 'item1' 
#define Name Deluxe Ballpoint Pen 
#define Materials Oak, Paduk, Bubigna, Cherry 
#define Description A fine writing implement, takes standard refills 
#define Picture ballpen.gif 
#define Price $79.95 
#include item.it 
#output 

#output 'item2' 
#define Name Elegant Fountain Pen 
#define Materials Oak, Chak-De-Coke, Paduk, Bloodwood 
#define Description A magnificent compliment to your desk. Includes pump but also takes cartridges 
#define Picture fountpen.gif 
#define Price $99.95 
#include item.it 
#output
 


Not only do we change the output file at the top of each new database record (and close it afterwards) but we also #include the item.it file too. Because this time around, instead of telling the preprocessor to work on the template and have it #include the database, we tell it to work on the database and #include the template.  So the command line instruction this time around is "ppwizard database.it"

After the preprocessor has run we find three new files called database.htm, item1.htm and item2.htm. The first one, database.htm has nothing in it, but the last two are complete, ready-to-publish web pages for your catalog. By the way, the preprocessor will give several warnings because you're redefining fields like "Name" and "Description", but don't worry, these warnings are harmless.

Tying it all together

But we also want an index for visitors to locate the items they want to buy. This would usually be the first page of your catalog, or the "contents" page. We can generate this automatically too, because remember how the #output command can also close the new file and go back to working on the original? For a brief moment, before the preprocessor moves on to the next database record, all of the information for the last catalog item is still in memory - so we have the chance to use at least the title and the price to make a link on a contents page. 

First we add a new #define field called "File" that gives a unique file name both to create the catalog page with and to link to it with. This filename doesn't include the extension (.htm) since the preprocessor does that for us.

Next, just after the #output command that closes the catalog item page and before the next record begins, we put this line:


<li><a href="<$file>.htm"><$Name></a> - <$Price>


It adds a link to the new catalog page, but since that page's file has just been closed it gets added to the contents page instead, called contents.it and which looks  something like this:


<HTML>
<HEAD>
<TITLE>Frank's World Of Handcrafted Goods</TITLE>
</HEAD>
<BODY>

<H1>Frank's World Of Handcrafted Goods</H1>
<P>Choose from our wide range of quality handcrafted goods!

<ul>
#include database.it
</ul>

<p>Please make checks and money orders payable to Frank's World Of Handcrafted Goods.
<br>Mail your orders to: Frank, 187 Handcrafted Way, Woodtown, NY, 12345 or phone (555)555-2624
<br>E-mail frank@frankcrafts.com

</BODY>
</HTML>


The magic line is, of course, the "#include database.it" right between the <ul> (unordered list) tags. 

database.it is now starting to look a bit like this too:


#define File item1
#output <$File>
#define Name Deluxe Ballpoint Pen
#define Materials Oak, Paduk, Bubigna, Cherry
#define Description A fine writing implement, takes standard refills
#define Picture ballpen.gif
#define Price $79.95
#include item.it
#output
<li><a href="<$file>.htm"><$Name></a> - <$Price>

#define File item2
#output <$File>
#define Name Elegant Fountain Pen
#define Materials Oak, Chak-De-Coke, Paduk, Bloodwood
#define Description A magnificent compliment to your desk. Includes pump but also takes cartridges
#define Picture fountpen.gif
#define Price $99.95
#include item.it
#output
<li><a href="<$file>.htm"><$Name></a> - <$Price>


This time around, the command line to get the whole ball rolling is: "ppwizard contents.it". After running it you'll have three files: contents.htm, item1.htm and item2.htm (database.htm is not created this time because it was not processed as an individual file, but rather as a file #included into another). In short, you'll have a complete web catalog ready to go! 

Maintaining the catalog from that point onwards is simple, you just edit database.it and run "ppwizard contents.it" to generate a fresh, up-to-date set of files. To add more catalog items, you'd append database.it with a record based on this template:


#define File 
#output <$File>
#define Name 
#define Materials 
#define Description 
#define Picture 
#define Price 
#include item.it
#output
<li><a href="<$file>.htm"><$Name></a> - <$Price>


You can also (http://www.os2ezine.com/v3n12/franks.htm) visit the web site generated with the code from this article, to get a proper idea of how it all ends up looking. Remember that all the files on this example site were created with just one command: "ppwizard contents.it" typed in an OS/2 command line window. Also for your convenience, you can download a (http://www.os2ezine.com/v3n12/dyn3.zip) zip file (1K) of all the source files.

But even this method of storing the database is crude compared to another method made possible when Dennis Bareis added the #Import feature to PPWizard. With it, you could create and manage the database part with a spreadsheet instead, one that can export to coma delimited or tab delimited files. It's much more complicated, however, which is why I taught you this simpler method first. I'll discuss this new method in Part IV of Building Dynamic Web Sites.

                         - * -

PPWizard
     by (http://www.ozemail.com.au/~dbareis/) Dennis Bareis
     download from (http://www.ozemail.com.au/~dbareis/software.htm) Dennis Bareis' home page (ZIP, 164k)
     Registration: Free


(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.

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

Rexx Files	- by Dr. Dirk Terrell

Summary: Dirk shows how to write a program that automatically archives a list of files and directories while paying attention to what filenames are valid on different file systems.

This month a reader asked me about a Rexx program that could archive a specified set of directories with Info-Zip and give the zip file a name that indicated the date that the archive was made. So, let's put a Rexx program together that does this.

First let's deal with creating a name for the zip file that indicates the date it was archived. The DATE() function returns the current date in a variety of formats depending on the string you pass to it. Below is the list of examples from the online Rexx documentation that comes with OS/2:

DATE( )        ->    '27 Aug 1988'  /*  perhaps  */
DATE('B')      ->    725975
DATE('D')      ->    240
DATE('E')      ->    '27/08/88'
DATE('L')      ->    '27 August 1988'
DATE('M')      ->    'August'
DATE('N')      ->    '27 Aug 1988'
DATE('O')      ->    '88/08/27'
DATE('S')      ->    '19880827'
DATE('U')      ->    '08/27/88'
DATE('W')      ->    'Saturday'

Now, we have to be careful about filenames if we are writing to a FAT drive instead of an HPFS drive because of the 8.3 filename limitation. Let's make our program smart enough to detect which type of file system we have. If the file system is HPFS, let's make the filename of the form


1988_08_27.zip


and for FAT:


19980827.zip


We could make the HPFS version use names like 1988_August_27.zip, but that would mess up sorting in directory listings. So, we will call the DATE() function with the "S" parameter. Then we will pull the year, month and day out of it like this:


DateString = Date("S")
Year = SubStr(DateString,1,4)
Month = SubStr(DateString,5,2)
Day = SubStr(DateString,7,2)


and then create the HPFS filename using concatenation:


FileName = Year||"_"||Month||"_"||Day||".zip"


Next we must check to see what type of file system we have. We can do this by trying to open a file with a filename that violates the 8.3 convention. If successful, then we know we can use long filenames. If it fails, then we will have to use a filename that fits the 8.3 format. We can use the STREAM() function to open the file:


rc=Stream(FileName,"C", "Open")


and then check the return value (stored in variable rc above) to see if it was successful. Variable rc will contain "READY" if successful and something else if the open command failed. So, we test rc and if the open command failed, we create a legal 
filename:


If Pos("READY",rc)=0 then
   FileName=DateString||".zip"


To avoid problems with Info-Zip, we need to close the file after performing the test and delete it. So the section of code for getting the filename right should look like this:


/* Create a name for the zip file, FAT-compatible if necessary */
FileName = Year||"_"||Month||"_"||Day||".zip"
rc = Stream(FileName,"C", "Open")  /* Can we create this file? */
rc2 = Stream(FileName,"C","Close") /* Close the file */
/* Register REXXLIB functions and then delete the file */
call rxfuncadd 'SysLoadFuncs','RexxUtil','SysLoadFuncs'
call sysloadfuncs
rc2 = SysFileDelete(FileName)      /* Delete it so we don't mess up Info-Zip */

If Pos("READY",rc)=0 then
   FileName = DateString||".zip"


Granted, this isn't the most elegant method to deal with determining file system type, but it works. At this point we have a valid name for our zip file no matter which file system we're on. 

Now we need to interface with Info-Zip to do the archiving. (I'll assume we have Info-Zip properly installed.) We need to know what Info-Zip is supposed to archive. Let's give ourselves some flexibility and read the files from a text file that lists the things to archive. The format of this text file will be just a listing of files on one or more lines, with wildcards allowed. For example, let's say that we want archive all of the files in D:\DEV\PROJECTS\ and the C:\CONFIG.SYS file. Our text file would look like this:


D:\DEV\PROJECTS\*
C:\CONFIG.SYS


For now, let's assume that the * wildcard means all files in the stated directory and all files in its subdirectories, so that D:\DEV\PROJECTS\* would include all the files in D:\DEV\PROJECTS\JAVA\ for example. We now read the file one line at a time and execute Info-Zip for each one:


Do While Lines(SourceFile)
   Source = Linein(SourceFile)
   "zip -r" FileName Source      /* Execute Info-Zip, -r makes it recursive through sub-dirs. */
End
rc=Stream(SourceFile,"C","Close")


where SourceFile holds the name of the text file with the list of files to be processed. We will pass that to the program as a command line parameter and retrieve it at the beginning of our program:


Parse Arg SourceFile


At this point we have a functional program. There are some things that could be added, such as the ability to specify whether the '*' wildcard should be recursive through subdirectories (perhaps use '*' for non-recursive and '**' for recursive), or the ability to automatically FTP the zip file to another site as a backup (see the Rexx Files column in the 
(http://www.os2ezine.com/v1n11/rexx.htm) September 1996 issue for details), but this gives you a good start. You could combine this program with a 
(http://www.os2ss.com/archives/hobbes/os2/util/schedule/) scheduling program like cron ((http://www.os2ss.com/archives/hobbes/os2/util/schedule/cronrgf4.zip) ZIP,135K) and have this program run automatically everyday to back up important files. 

Download the (http://www.os2ezine.com/v3n12/dailyzip.cmd) source code for this month's Rexx Files.


                         - * -

(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.

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

How Do I?	- by Eric Slaats

Summary: More adventures with pop-up menus, as this time we look at subclassing and window words techniques.

I'm getting ready to leave for several weeks for vacation. The house is filled with all kinds of stuff (which my wife thinks she might need) that we're taking on our camping trip. This means no computer-stuff. I even got a prohibition on books about computer stuff (she thinks I'm a workaholic). Luckily I can take a guitar and a load of other books. 

(http://www.os2ezine.com/v3n10/howdoi.htm) Last month we looked at the inner workings of a popup menu. I had stated that in principle every control can have its own popup. This is as long as the context popup event (normally right-click) doesn't interfere with the button's native action. For example a left-click on a button will activate it, so it's unwise to have the context-popup-event defined as the same action. 

Before we can handle events on a control ourselves, we've got to take a brief look at a technique called subclassing. In the slipstream of this we'll take a short detour and look briefly at so-called window-words. I love both techniques and use them a lot. Smalled for example uses subclassing and window words to: add bubble help to the button-bar, add pop-ups to the statusbar, add extra controls to the frame window, and add a drag-n-drop facility to the titlebar icon. This example shows that both techniques have a lot going for them. I'm sure I will refer to them a lot more in future articles. 

What are window words? When we create a window, we pass along a number of parameters to define the way the window should look and behave. All this information is stored in a structure that is created at the moment a window is born. This information can also be queried by another application (In fact it's queried all the time by the OS to know how a window should look and react.) These elements associated with a certain instance of a window are called window words. The nice thing about window words is that they reserve 4 bytes for use by the user (more is possible, but that's beyond the scope of this month's problem.) The user contents of the window words can be filled with the WinSetWindowULong, WinSetWindowUShort and WinSetWindowPtr functions. These can store a Unsigned long, a Unsigned short or a Pointer. With the associating WinQueryWindowXXXX, the values in the window words can be queried (not just the user data, but also the data put there by your program or the OS.) Now 4 bytes may seem very little, but it's more that enough. You could store a pointer to a specific memory area in there. That pointer can point to a massive amount of data. So these window words are actually very flexible. 

We will look at what subclassing can do for us in this month's problem. In earlier columns we saw that every window has its events handled by a so-called window procedure. This was no more than a big case statement which handled all the WM_* messages. Until now we only bothered with the messages sent to our main window so that the menu events and such could be handled. It's only logical that every window (such as buttons and listboxes) also have a window procedure. The standard window procedures for these controls handle the way the controls function. If we could break into these window-procedures, we could add special functionality such as starting a special popup on the WM_CONTEXTENU message and adding a handler for the WM_COMMAND message. We could also interfere with the WM_CONTROL message etc. By using subclassing we can modify the behavior of virtually any control. For example, the MLE that Smalled uses is subclassed so that it supports Drag-n-Drop, several wrap modes etc.

Now how does this subclassing work? It's actually a very simple trick, in theory. Provide a custom window procedure for the messages you want to give special treatment. When the window procedure is needed, first call the custom procedure and when this procedure exits, call the default procedure. This means we need three things. 

1. A custom window procedure for the control we'd like to subclass
2. The default window procedure for the control so that it can be called after the custom procedure
3. A way to tell the control that after some event, it must first call the custom procedure

Item 1 isn't that difficult. We simply have to define a window procedure, the same as we've constantly done for our applications. Only this time this window procedure is used for the control. But the syntax for defining it is the same. We will be looking at such a window procedure in a moment. 

Item 2 is somewhat harder. A procedure is usually called by using a name (with some parameters, if required). Internally in the program this name represents a pointer to the memory area where the procedure resides. In a program we can use the PFNWP (pointer to a window procedure) type for this. The bottom line is that if we know the pointer, we can call the procedure. Now we need a way to extract this pointer from a window. Solving this is closely connected to Item 3.

Item 3. There is an API which will tell a window that it has to call a custom window procedure instead of the one that is assigned to it by default. It won't be a surprise to learn that this API is called WinSubclassWindow. This function accepts the window handle of the window we want to subclass, along with a pointer to the new window procedure. It's very convenient, but the function will return the pointer to the current windowprocedure. 

This seems to solve most of our problems. (The exact functioning will be explained in a minute) For this month's example, I reused last month's dialog and added three extra controls; an entryfield, an MLE and a listbox. As we've seen before, these controls have an ID in the RC file by which they are known (Check the rc file with this months example). If we want to be able to call the WinSubclassWindow API, we must have the window handle of the control we would like to subclass. If we get the ID, we can query the HWND by using the WinWindowFromID API. 

The code for this would look something like this:


PFNWP    pfnwOldProc;
HWND	 hwndControl;
//------------------------------------------------------------------
// Subclass the entryfield
//------------------------------------------------------------------
hwndControl = WinWindowFromID(hwndDlg, ENTRYFIELD);	  // Get Entryfield HWND
pfnwOldProc = WinSubclassWindow(hwndControl,NewEFProc); // subclass Statusbar


There are some problems left however. We now have the old window procedure, but how do we tell the new custom window procedure how to call it? Sure, we could use a global variable that is also known in the custom window procedure. This however, is far from elegant! Imagine a medium application that has about 50 controls that we all want to subclass. This gives us a boatload of global variables, which I hate, especially when a program gets more complicated. 

Well, you guessed it. I didn't mention Window words for nothing. We could store the pointer to the old window procedure in the user window word of the control. This way we can extract this pointer in the custom window procedure so that the old window procedure can be called as a default. Sounds difficult? Let's see what the code looks like.

The complete set that initiates the control can be placed in the WM_INITDLG message handler. We are sure this message is sent before any of the controls start generating events that we want to act upon. The thing missing from the above is storing the oldproc pointer in the user window word. This is done with the WinSetWindowULong API. The complete code in the WM_INITDLG for one control looks like this:


PFNWP    pfnwOldProc;
HWND	 hwndControl;
//------------------------------------------------------------------
// Subclass the entryfield
//------------------------------------------------------------------
hwndControl = WinWindowFromID(hwndDlg, ENTRYFIELD);	     // Get Entryfield HWND
pfnwOldProc = WinSubclassWindow(hwndControl,NewEFProc);    // subclass Statusbar
WinSetWindowULong(hwndControl,QWL_USER,(ULONG)pfnwOldProc);// Pointer to oldwinproc in winword


Now lets take a look at the window procedure. Two things have to be done: 

1. Extracting the pointer to the old window procedure.
2. Calling this procedure as a default action.

Item 1 is the reverse of putting data in a window word. The API through which this is done is called WinQueryWindowULong. This result can be put in a PFNWP variable so that we can use it to call the default window procedure. This will give us a subclass window procedure for a control that looks like:  


MRESULT EXPENTRY NewProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
	{
	PFNWP oldProc = (PFNWP) WinQueryWindowULong( hwnd, QWL_USER ); // Pointer from windowword
	switch (msg)
		{
		case ................. break;
		case ................. break;
		}	
	return oldProc(hwnd, msg, mp1, mp2);
	}


This takes care of all our problems, except that it doesn't do what we've started off with: a popup on the controls. Remember from the column last month that the popup can be best started by intercepting the WM_CONTEXTMENU message? It's in the eventhandler for this message that we can put the WinLoadMenu and WinPopupMenu calls. If we assign the control's window handle to the popup as owner and as parent, we can also put a WM_COMMAND message in the custom window procedure to handle the specific WM_COMMAND calls. 

For (http://www.os2ezine.com/v3n12/sample18.zip) this month's example (.ZIP, 16K) I created a procedure that starts the popup for all the controls if called. This makes the code a bit more lean. I also added a beep in the WM_COMMAND to prove that it's called. The popup on the client window of the dialog as we created last month is also still available (with the beeps). 

I hope this was clear since I've told a lot in a really short time. I will return to this material in later columns. But for now, I'm off on vacation!

                         - * -

(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.

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

Command Line Shells, Introduction	- by Chris Wenham

All right, all right, so they aren't as sexy as office suites or video games (that's next issue), but to power users the right command line shell can mean the difference between loving or loathing the computer he or she has to work on. Must Have features could include something as simple as automatic filename completion, a command aliasing capability, or perhaps just prettier colors!

As OS/2 users we're pretty lucky and well covered by alternate command line shells. First of all, thanks to the EMX libraries, there are a slew of popular shells that have been ported over. Ranging from BASH, CSH and Korn, to the one Dirk Terrell has reviewed for us this week: TCSH. 

There's also the commercial replacements, two of them coming from JP Software - the company famous for its award winning 4DOS program that released us from the horrors of Microsoft's command.com so many years ago. Our new staff writer -- Lief Clennon -- reviews their popular and all-command-line  4OS2 shell, while Chris Wright takes the easy street and plays with their graphical counterpart: Take Command.

Last but not least is the simple servant, a utility the author felt was entering such a crowded market he gave it an apologetic name, YAOS - which stands for Yet Another OS/2 Shell. With a name like that it's hard to take a program seriously, but Chris Wenham has a go at it anyway.

Editor's Choice

With its power, heritage and ease of use, OS/2 e-Zine!'s Editors Choice award goes to 4OS2. Being a complete command-line replacement that does not rely on CMD.EXE like YAOS does, it also requires less setup and learning than the Unix ports do.

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

4OS2 3.01A	- by Lief Clennon

Summary:JP Software's OS/2 equivalent of its famous 4DOS product manages to keep all the power its DOS product has, plus take advantage of OS/2's strength too.

4OS2 is, in a way, unique among the products being reviewed this week: of the various command shells available for OS/2, only 4OS2 is a complete replacement for the CMD.EXE supplied by IBM. YAOS/2 overlays CMD and can't run without it, and while the various Unix shells stand alone, they can't use REXX, and they require supplemental programs to perform even the most basic functions (e.g., dir or copy).  

Installation is simple if not entirely straightforward: after unzipping 4OS2 into a directory of your choice you just run 4OS2.EXE. It will automatically add itself to your config.sys and create a folder for itself on the desktop, prompting for confirmation on both actions. The folder will contain icons for a 4OS2 command prompt and the documentation in INF format. If you approved the config.sys modifications, you'll need to reboot to make 4OS2 your default prompt; however, the icon in the folder links directly to 4OS2.EXE, so it can be used immediately without rebooting.  

Basic features

The first thing one will discover while exploring 4OS2, is that many of the old commands have a bit of new functionality. For instance, move is no longer just an alias of ren; most notably, it will move files between drives now. The dir command sorts directory entries to the top of the list, for easier reading, and displays "allocated space" as well as file size in the summary info, allowing those using FAT file systems to know exactly how much disk space they're wasting.  

There are also a slew of new functions within the command line itself. The command history will match partial lines: if you type a few characters and press the up arrow, it will scroll through only the previous commands that started with those characters, rather than making you search through the entire list. Or, for the visually inclined, press Ctrl-PgUp: you'll be greeted with a small overlaid window containing every command you've given so far.  

Also handy is filename matching: at any point you can type a partial filename and press Tab to scroll through the files in the current directory that match what you've typed. If you do this at a blank command line it will only scroll through executable file types (EXE, CMD, etc.). Furthermore, this works with wildcards: r*.txt will match readme.txt and register.txt.  

Did I say wildcards? You're not limited to measly * and ? with 4OS2. Its wildcards will go the distance with Unix regular expressions. Just to give you an example of the functionality here: ?[!aeiouy]*[1-9].txt will match all text files that end with a number and do not have a vowel as the second character. To top it off, you can also exclude files from a command with equally complex wildcards.  

Aliases, etc.

Unix users know the power of aliases. JP Software does too. The concept is simple: take any given command line and define a single word that will execute it. As a simplistic example, an alias "ddir" could be created that executes "dir /ad"; then, any time you want to see a list of subdirectories, you would only need to type ddir. How many of us have several one-line .CMD files that do nothing but toss a couple of default switches onto an oft-used utility? Aliases remove the necessity for those little batch files, and speed up execution while they're at it since they're stored in RAM. Not only that, but 4OS2 allows you to assign aliases a key combination instead of a name: instead of ddir, you could assign that same function to Shift-F5.  

In a similar class is 4OS2's file type association feature. Want to load all of your text files with EPM (OS/2's Enhanced Editor)? Associate the .txt extension with epm.exe, and you can call text files on the command line as if they were executable programs. Type readme and EPM opens up with readme.txt from the current directory.  

Last but not least on the list of ways to redefine the way the shell works, is the 4OS2.INI file. In this file you can redefine just about everything: all the special characters and all the special key presses. Not only that, but you can define nifty things like colorized directory lists. If you want all of your text files to show up bright purple, this is the file to edit.  

Legacies of DOS

One final feature worthy of note is 4OS2's enhancement of the batch file language, and especially the BTM file. BTM stands for Batch-To-Memory: it is the same as any .BAT or non-Rexx .CMD file, except that before execution the file is loaded into memory, compiled to bytecode, and closed. This gives a small performance boost, and also allows a batch file to perform operations on itself, since the file is no longer open by the time it's executing.  

There are many other enhancements to batch files, but they really only serve to create compatibility between 4OS2 and its cousins, 4DOS and 4NT. OS/2's own Rexx is a far superior scripting language to batch, no matter how much improve the latter.  

Of course...

I've barely skimmed the surface here. 4OS2 has a wealth of features that can only truly be done justice by the half-megabyte .INF manual it comes with. It is a truly powerful product, a fact attested to by its endurance; I remember using 4DOS more than half a decade ago when I first switched to the PC from my trusty Apple II, and even then it had been around for a while. On the other hand, it is in some ways more daunting to configure than a Unix-style shell. It's definitely not for everyone -- but at the same time, I think that everyone should try it out.

                         - * -

4OS2 3.01A
     by (http://www.jpsoft.com/) JP Software
     download from the (http://www.os2ss.com/archives/hobbes/os2/util/shell/4os2301.zip) OS/2 Supersite (ZIP, 642k)
     Registration: US$69.95

(liefc@os2ezine.com) Lief Clennon is a computer hobbyist and Team OS/2 member currently residing in Albuquerque, NM. He can usually be found badgering his friends on IRC.

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

Take Command for OS/2 version 2.01A	- by Christopher B. Wright

Summary: Brilliant fusion of CLI power and GUI ease, or an unholy marriage that alienates both types of user? Take Command is JP Software's attempt to put 4OS2 in a graphical shell.

While one of the primary attractions of OS/2 is the Workplace Shell and its advanced drag-n-drop method of managing files and programs, there are also many advantages to bypassing it altogether and using the CLI (Command Line Interface) instead. From the CLI, OS/2 doesn't have to deal with the overhead of the PM and the Workplace Shell, so it can perform tasks faster with fewer resources. These advantages are often offset by their complexity, however, and if you're not careful you might wind up deleting something you didn't want to delete. 

Take Command for OS/2 is an unholy union between the command line and the graphical user interface. Created by the people who gave us 4DOS, 4OS/2 (see review in this issue), and 4NT, it's an attempt to integrate the command prompt with OS/2's graphical environment, and it works -- to a certain extent. 

User Interface 

When you open Take Command for OS/2, you don't see an OS/2 command prompt -- you see a program window with a toolbar at the top of the screen and a command prompt inside the program window. This command prompt behaves exactly like a command prompt in a normal OS/2 command line window, but the new GUI elements give it a few other interesting features you might not expect. 

In a normal command line session, you're usually restricted to an 80-character screen width. With Take Command for OS/2, the maximum width of its display depends upon the resolution of your monitor. For example, if you were to maximize Take Command for OS/2 and pump your 21" monitor up to the highest resolution it can display, you could theoretically have a command line session displaying at 1880x1440, which will put a LOT more than 80 characters on a single line on your screen. 

You can modify the colors of screen display and typed text separately. For example, I configured Take Command to paint all displayed text as bright green on a black background, while all text I typed in is bright cyan on a black background. This is not necessarily the most useful feature in the world, but it is nice to be able to tell the difference between what you typed and everything else on the screen.

Features 

One of my favorite features is the ability to scroll back and see what would usually be "lost" in a standard command window. This is a great feature. You can use the dir command to see a list of files without having to use the /p modifier to break it up, since you can just scroll back to the top of the page to see what you missed. 

Take Command for OS/2 is more than simply a new window for the command prompt, though. It comes with a complete set of tools that makes using the command line a little easier for people who just don't like it. For example, it comes with a search utility that seems to have built-in grep-like capability (the ability to search not just the names of files, but the text within those files as well). This search utility is modified through a standard dialog box, allowing you to avoid complex command line strings. 

Commands you use all the time can be added to the toolbar at the top of the screen. You choose a position on the tool bar (B1 through B24), create a label for the button and type in the command you want executed. Finally, you specify whether or not you want the command to simply appear on the screen (the command appears at the command prompt but doesn't execute until you hit the enter key), have it appear on the screen and execute (it appears at the command prompt and then activates as though you had hit the enter key), or have it simply execute, without appearing on the screen. 

Aside from common command line instructions, you can also add executable programs (and scripts) to the ToolBar for easy access. 

Other useful functions include the ability to define your user environment -- sort of like creating a mini config.sys file specifically for Take Command -- by modifying the Environment dialog box in the Setup menu. You can also run external programs via the "Run Program" dialog box (similar to the Run... command in Windows 3.1 and Windows 95). 

Documentation 

A big plus for Take Command is that it is very well documented and you can access its manual at any time. Simply press the "Manual" button on the toolbar and it will activate a full screen display of the user manual. It's very complete and even has information on the Windows 3.1 and Windows 95 versions of the program. It will take a little while to read through, though. 

Final Thoughts 

It's hard to say exactly where Take Command for OS/2 fits into the grand scheme of things. People very familiar with the command line won't necessarily need it -- they'll be used to the CLI environment and will have optimized their environment so they can do most of the things Take Command can do. They might like the way Take Command makes a command prompt more like a program window, however, and they'll certainly appreciate many of its features. Yet people who are not familiar with and don't like using the CLI environment probably wouldn't find it very useful.

                         - * -

Take Command for OS/2 version 2.01A
     by (http://www.jpsoft.com/) J P Software
     download from the (http://www.os2ss.com/archives/hobbes/os2/util/shell/tcos2201.zip) OS/2 Supersite (ZIP, 682k)
     Registration: US$69.95

(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.

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

TCSH v6.07.02	- by Dr. Dirk Terrell

Summary: A popular Unix shell comes to OS/2, carrying with it a lot of the power associated with the industrial strength operating system.

For me, one of the greatest attractions of OS/2 is the combination of a powerful graphical user interface and a powerful command line interface. Certain tasks are more easily done with the GUI while others are better suited to a CLI. The OS/2 command shell is not too bad, especially when combined with REXX, but it lacks some features that I find essential having worked on Unix machines for years. Fortunately, there are several (http://www.os2ss.com/archives/hobbes/os2/util/shell/) Unix shell ports available such as pdksh, bash, and zsh. My favorite is tcsh, a variant of csh, the C Shell.

The tcsh shell provides several features missing or cumbersome to use in the standard OS/2 shell. On a file system like HPFS where long filenames are the norm, command completion is a must. With tcsh all you have to do is type part of a filename and hit the Tab key. tcsh will then attempt to complete the filename. For example, if you have a file called My_Super_Important_File_for_the_Monday_Meeting.txt, all you have to do is type the first couple of letters and hit tab. tcsh will then type the rest for you. But what happens if you have another file called My_Super_Important_File_for_the_Friday_Meeting.txt? In that case tcsh will fill in all of the letters up to the point where the two filenames differ and beep. You then type the next letter and hit tab again to get tcsh to complete the rest of the name. Command completion is the most glaring omission in the standard OS/2 shell.

Command history is another feature that is very handy. The OS/2 shell has this feature. By issuing the command KEYS LIST you can see the list of commands that have previously been entered. You get the same list with tcsh using the history command, and the results look like this:


43  19:38   cd e:/
44  19:38   cd e-Zine/
45  19:38   cd Aug98/
46  19:38   ls
47  19:38   vi My_Super_Important_File_for_the Monday_Meeting.txt
48  19:39   vi My_Super_Important_File_for_the Monday_Meeting.txt
49  19:39   history


To execute a previous command again, you enter '!' and the number of the command in the history list (the number in the first column) as in '!46' or enter '!' and the first few characters of the command as in '!vi' (which would be the same as !48 for the history output above). The sequence !! executes the last command entered (similar to hitting F3 in the standard OS/2 shell).

Aliases are another valuable feature in shell. Sometimes you have commands that are long but used often enough that it becomes tiresome to type them frequently. Aliases solve that problem nicely. The ls command is used to do directory lists in Unix shells, but the command is known as dir to PC users. So I always alias dir to be "ls -la" with the alias command


alias dir ls -la


and then when I type dir I get a directory listing that is similar to the output of dir under the OS/2 shell.

One very cool feature of tcsh is the ability to read your mind. Well, ok, maybe not read your mind, but it does attempt to do what you mean rather than what you type, when what you type makes no sense (and that is not infrequent in my case). Suppose you have a directory os2apps/pov3/Objects that you want to go to. You type 


cd os2apps/POV3/Ojbects


Normally you would expect to get some sort of "No such directory" error. tcsh looks at the command and then sees that the directory doesn't exist, but sees that f:/os2apps/POV3/Objects does exist and offers to use it instead of the nonsense that you typed:


F:/>cd os2apps/POV3/Ojbects

CORRECT>cd os2apps/POV3/Objects (y|n|e|a)?


Pressing y completes the command correctly. (To enable this feature you must enter the "set correct=all" command.)

With tcsh under OS/2 you use the tcsh.rc (FAT) or .tcshrc (HPFS) file to specify settings such as aliases, prompt, and key mappings that you want to use every time you start up the shell. This makes customizing your shell very easy.

Although it lacks some features of tcsh on a Unix machine such as job control (the ability to press Ctrl-Z and suspend a running process), the OS/2 port of tcsh is solid and definitely an alternative shell to consider. If you have never used Unix, it will probably take a while to get used to something like tcsh.  If you are used to using tcsh on Unix machines, you will find that the combination of tcsh and the OS/2 ports of GNU utilities like ls, grep, etc. makes for a very comfortable CLI under OS/2. You get the command line power of Unix and the incomparable Workplace Shell for a GUI. That's about as good as it gets.

                         - * -

TCSH v6.07.02
     by (christos@ee.cornell.edu) Christos Zoulas (OS/2 port by (crh@purdue.edu) Charles Hunter
     download from the (http://www.os2ss.com/archives/hobbes/os2/util/shell/tcsh6072.zip) OS/2 Supersite (ZIP, k)
     Registration: Free

(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.

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

YAOS 1.8.1	- by Chris Wenham

Summary: The little one that could. Although a tiny program that depends on the existing OS/2 shell, YAOS adds a slew of conveniences.

While the three other command-line shells reviewed in this issue are large and complex, there is one that's small and implements most of the popular features that make command-line life so much more easy. It's called YAOS, and it stands for "Yet Another OS/2 Shell", as a meek admission from its author that maybe there are enough already. But funny enough, this one is actually quite likeable.

Installation and Documentation

YAOS takes up little more than 300K of your disk space. To install you merely unzip it into the directory of your choice and run the supplied Rexx script which adds an icon to your desktop. Since YAOS runs on top of OS/2's CMD.EXE command processor, you cannot add it to your config.sys as your default shell. 

The formal documentation is simple and short, being nothing more than a text file listing the features and a quick description of how to use them. But the program itself has a built-in help system, accessed by typing '?' on the command line. 

Making CMD a little bit easier

The primary purpose of YAOS seems to be simply to make OS/2's built-in command line just a little bit more comfortable to use. The most convenient feature it adds, and the one I installed YAOS for myself, was Tab filename completion. What this means is that you can type the first few characters of a file or directory path, hit the TAB key on your keyboard, and see YAOS fill out the rest with what it thinks is the likely match. 

So for example, say you had a directory called "C:\Experiments\". To navigate to it in YAOS you'd type: 


Exp<TAB> 


Where <TAB> is when you hit the Tab key. YAOS would fill out the remaining "eriments\" for you. In the case where there are two directories with the same beginning (for example, "C:\Experiments" and "C:\Exploration") YAOS can deal with the conflict in one of two ways. First it can display a pop-up list of possible directories and let you pick which one you want by using the arrow keys. Or you can keep pressing the Tab key to cycle through the possibilities right there on the command line until you find what you want. Personally, I prefer the latter method of cycling. 

As most of the other shell replacements do, YAOS handles aliases -- or the assigning of complex instructions to simpler names -- as well as filetype assignments, so that when you type the name of a file on the command line, YAOS will open it with the program you've assigned its type to. For this feature, YAOS uses the extension of the file (the '.txt' in 'readme.txt' for example) to determine its type, and not what you might have assigned it from the Workplace Shell. 

Different sets of aliases and file type assignments can be stored in files and loaded either as YAOS itself starts, or from any time you're at its command line. 

Changing directories is greatly improved in YAOS. With a built-in directory scanning utility, the first time you use the YCD command or try to "CD" to a directory not in the immediate path ("CD" becomes an alias for YAOS's YCD utility whenever a regular "CD" fails) , YAOS will scan your hard drive's directory tree and store the results in a file. From that point onwards, you can "CD" to any directory on the hard drive just by giving its name instead of its full path, no matter how deeply nested it is. If there are multiple directories of the same name, or the name you typed doesn't match up with anything it knows of, YAOS will present to you a pop-up list of alternatives to pick from.

Another quickie that's highly useful; typing "CD-" will zap you back to the last directory you were in before changing. This doesn't necessarily mean the parent directory of the one you're currently in though, so if you leaped across the directory tree using the enhanced "CD" described above, "CD-" will pull you right back to where you came from.

Borrowing From Unix

YAOS borrows a little bit of functionality and "style" from the Unix shells that have served as the base for so many other clone shells. Typing '!!' on the command line will run the last executed instruction (so if you'd just typed "DIR" at the command line, typing '!!' afterwards would run "DIR" again) and typing '!' followed by a number would execute the command that number of places back in the command history - so '!3' would run the third command in the command history. 

This command recall is fairly flexible too. Type "!d" and it will execute the last command that began with the letter 'd'. And if you type '!d file.ext' it will execute the last command that began with 'd', also appending 'file.txt' to it as well. 

Of course, if you ever wanted to see the history of previous commands, you just have to press Alt-H, and a pop-up window will appear, navigable with the cursor keys. 

Speaking of cursor keys and Unix, YAOS supports EMACS-like key combinations for cursor control. Ctrl-v and Alt-v are Page Up and Page Down respectively, Ctrl-p and Ctrl-n are previous and next line, and Ctrl-k is delete to end of line. Other key combinations are supported too, listed in the YAOS documentation. 

Conclusions

YAOS is not as powerful as the other shells discussed in this issue. It doesn't have its own batch language (arguably redundant with the presence of Rexx), it can't run on its own without CMD.EXE, but for all its shortcomings it does have the right stuff to make it very welcome on the machine of the casual command line user. And given its tiny size, it won't hurt much to add it to your collection even if you seldom need use the command line at all. 

                         - * -

YAOS 1.8.1
     by (http://www.iti.gov.sg/staff/cplee/) LEE, Cjin Pheow
     download from the (http://www.os2ss.com/archives/hobbes/os2/util/shell/yaos181.zip) OS/2 Supersite (ZIP, 136k)
     Registration: Free

(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.

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

First Looks: Object Desktop 2.0 Early Experience	- by Chris Wenham

Summary: Ride on the bleeding edge of Workplace Shell enhancers with the latest version of what Stardock claims is the "best selling" utility for OS/2.

What made previous versions of Object Desktop popular was the highly visual enhancements it made to OS/2's Workplace Shell. You could almost say it was sold on screenshots alone. What has been added to Object Desktop in its 2.0 release seems to suggest Stardock recognized this and wants to enhance its "Screenshot Sex Appeal" even more. Because by and large, this upgrade puts even more buttons, more status displays and more eye candy onto your desktop than ever before. 

In this First Looks I'll be discussing the new features to be found for those planning to upgrade from Object Desktop 1.5 or earlier. 

Enhanced "Enhanced Folders"

The moment you open a folder on your desktop, you'll see it. A big fat row of buttons along the top that look as if they've been copied from the Object Navigator. This toolbar consists mostly of shortcuts to the usual menu options and does a lot to speed up icon arrangement, creation and deletion of objects, and the usual copy and move functions. This is nice because it's faster than going through the menus, but its bulk also means that the default folder height leaves too little space for the icons.

What's also present is a drop-down list of the folder's parent directories (all the way back to the root or drive object), other drive objects and four of the main System folders (System Setup, OS/2 System, Network and Printers). But while this drop-down list is in the same place as the "Favorite Folder" list is in the Object Navigator, it does not appear to let you add your own folders. I wasn't exactly convinced I needed ultra-fast access to my System Setup from every folder on my desktop. 

But be that as it may, in this Early Experience release you do have the power to set your cursor on this list box and simply start typing in the path of the folder you wish to jump to, or, a web page URL. Object Desktop will start whatever browser is set as the URL Object default. This is something I definitely found useful. 

Control Center and the Object NetScan

This central part of Object Desktop has earned several new widgets that are bound to please. The first two are designed to make it act more like the WarpCenter toolbar that comes with Warp 4. These are a proper Tasks button which presents a drop-down list of all running programs on the system, plus a new behavior in the fly-out folder content menus: It can now keep track of file activity such as additions and deletions.

The third major addition is the Object NetScan monitor, and boy is it a beaut. Looking a little like a CPU activity graph with a pair of modem lights, the Object NetScan will show a graph of your Internet activity (sending and receiving) as well as optional text statistics such as bytes sent and received, averages and throughput. It uses Warp's TCP/IP stack, so it'll work for modem and network users alike. 

What I really like about the NetScan is that you can tell at a glance if a big download (or upload) is still going and what kind of bandwidth its using. Little pips will tell you your mail client is checking the server, and of course a little bip followed by a big one will tell you there was new mail downloaded too. 

Lastly, the Virtual Desktop manager in the Control Center has gained the ability to record and apply window layouts. Say you've set up your mail client, browser and word processor in your desktops the way you like, and want them to always start up that way. By recording a layout and then applying it later, Object Desktop will snap your windows into the positions you set. From Stardock's PR I infered that this meant Object Desktop would automaticly move windows into their preset positions as you started them, but unfortunately this does not seem to be so yet. You'd start your applications normally, and then tell OD to snap them into place.

Eye Candy

They just couldn't resist. 

Object Desktop 2.0 does more than any other version did for adding plain ol' non-functional, vanity serving eye candy. Although you can switch it off, who'd want to? What will hit you the first time you reboot after installation are the titlebar enhancements. Object Desktop ads Macintosh-style texture lines that run in the remaining space between the window title and the window control buttons. And speaking of which, they went and made those completely gorgeous too (which paradoxically pop out when you click on them, rather than in.) 

In the Master Setup notebook you can switch between a number of looks, everything from the droolacious OD 2.0 look to the classic Warp 4 look and even a contemptible Windows 95/NT look-alike. We wonder if Stardock might add more. 

What, no Pro?

OD 2.0 seems to end the short lived practice of separating Object Desktop into a regular and "Pro" version. All of OD Pro's features have been tied into Object Desktop 2.0, creating an artificial bloating of the new feature list. To refresh your memories, these features include Object Security (Superficial password protection for folders, programs and other objects), Object Viewers (file viewers that support several hundred file formats and are nicely integrated with the Object Navigator), Object Advisors (customizable, HTML-based help windows that pop up and assist the user with directions), Object Inspector (a tool for viewing the internal settings of your desktop objects), Object Scheduler and Object Backup. 

These features have not been refreshed as much as the core Object Desktop components though. While its said that the Object Viewers have been updated (one of the most extremely practical features of the whole suite, by the way), Stardock could not give us a list of which ones. They also regret to inform us that the company who made these viewers for them has ceased to support OS/2. 

Can I get one, mom?

But beware, although Stardock is currently selling copies of the Early Experience to anyone who pays up, this is NOT a shipping-level product. "Early Experience" is Stardock Speak for "beta", so I recommend that you wait until the "Late Experience" rolls around before you spend your money. Trust me, if WordPro didn't have an automatic save feature, this review wouldn't have been written. Suicidal hobbyists and companies with a spare computer who need time to prepare are the only ones who should be spending time with this release. 

And also in light of this beta status, I'm going to reserve full judgement on OD 2.0's worthiness as an upgrade. But for owners of OD Professional, it's not going to be as big a leap as it was from 1.0 or regular 1.5. Expect a full review and evaluation of Object Desktop 2.0 here in OS/2 e-Zine! once it has passed into final release. 

                         - * -

Object Desktop 2.0 Early Experience
     by (http://www.stardock.com/) Stardock Systems Inc.
     MSRP: US$35 for owners of OD Professional, $65 for OD 1.5 owners

(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.

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

First Looks and Nifty Gadgets	- by OS/2 e-Zine! Staff

First Looks and Nifty Gadgets brings you reviews of the new and novel.  In each issue 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.

     In this issue we look at: Internet Junkbuster | InProTrack

Internet Junkbuster

We really shouldn't be telling you about this. It's one of those things that we're supposed to file along with stuff like where the moon landing was really filmed, who was on the grassy knoll, what was unofficially recovered at Roswell, and who really shot J.R. Because being an advertiser supported publication, it's not really in our best interests (nor our advertisers) to tell you that there is a program which can wipe away all of those bandwidth sucking banner advertisements that always take so long to load.

Internet Junkbuster, first released for Unix workstations, has been ported to OS/2. It's a utility that helps you not only cut down on the glitter and the blitz of Internet advertising, but also blocks cookies and header information that might compromise your privacy. Now, we'd love to get into a debate over the virtues and dangers of cookies, but the program really does give you control over what sites you do or do not want to give you a cookie (an Internet term for an identifying tag stored by the web site with your browser).

Internet Junkbuster is not easy to set up, it needs a set of libraries called EMX (easily found on most OS/2 download sites) as well as a loopback interface configured on your computer. But comprehensive instructions for setting up Junkbuster can be found in the Read-Me files. It works by setting itself up as a proxy, filtering the stream of HTML code before it reaches your browser. It won't work on all banner advertising (it won't block OS/2 e-Zine!'s banner ads, for example, so har har har!) but it will nail the typical suspects like Double-click -- one of the largest banner advertising networks on the Web.

Internet Junkbuster 2.0.1
     by (http://www.junkbusters.com) Junkbusters (OS/2 port by Gerd Flender)
     download from the (http://www.os2ss.com/archives/hobbes/os2/apps/internet/www/util/ijb201os2.zip) OS/2 Supersite (ZIP, 313k)
     Registration: Freeware

                         - * -

InProTrack

Short for "Installed Product Tracker", this tiny gadget doesn't do much, but could be useful for anyone seeking to update a program they own and who need to know what level the currently installed version is at. It gathers this information for as many installed products as possible by scanning your syslevel files, then displays its results in a neat PM window and a Rolodex-like style of flipping through programs.

It has three different scanning modes; "All", "Fast" and "Turbo" which increase in speed but decrease in accuracy as you go up. Very quick and dirty, but it might just save you a big download if you discover you really do have the latest version of something after all.

InProTrack 1.08
     by (http://www1.stuttgart.netsurf.de/~kevers/) Kai Evers
     download from (http://www1.stuttgart.netsurf.de/~kevers/ipt108.zip) Kai's home page (ZIP, 85k)
     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.

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

August 1, 1998 Reader Survey Results

Warpstock is the yearly event that attempts to bring the OS/2 community together in a weekend celebrating all things OS/2-ish.  Lately Warpstock has been in the news in ways its organizers probably didn't want it to be.  Regardless, it is the best chance for those who know a good OS when they see one to get out and enjoy themselves in a crowd of like-minded individuals.

Are you going?  Is the price too high?  The distance too great?  Has the innuendo been too much?  To find out, in our last issue we asked you about "Warpstock".

Answers to our survey were accepted from August 1st until August 16th.  We had a total of 760 replies to our questionnaire with 85 "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 675 valid replies.  The results were as follows:

Are you going to (http://www.warpstock.org/) Warpstock '98?

Unfortunately, the reality of most of our lives is that any given location has a greater chance of being too far for us to get to rather than right next door.  This is probably the case with Warpstock.  The majority of our readers are not planning to attend this year's event in Chicago.

However, there are a significant number of people who are planning to go (11.6%) and an equal group who are not yet sure (11.4%).  And of course, many of those that are not attending this year's Chicago conference may be considering (http://www.buntspecht.de/warpstock/en/warpstock_en.html) Warpstock '98 Europe.

A surprising 19 people (2.8%) had never heard of Warpstock.  Apparently there is still some advertising needed...

What type of pass did you buy / are you buying?

For those of us who are going to Warpstock, the preference seems to be for the "full enchilada".  A total of 8.1% of all readers (67.9% of those who plan to attend) have purchased or will purchase a "Platinum" pass while only 3.2%  of all readers bought all other end-user passes combined.

Was your decision to attend or not attend Warpstock affected by the recent (http://www.os2ss.com/warpcast/wc1517.html) Warpstock problems?

A few months ago many feared Warpstock '98 would be the event that never was.  With the resignation of the original group selected to host this year's event, the OS/2 community held its breath, picked sides, or scoured the 'net for rumours.  Now, after all the gossip has been sifted through, did it really affect anyone's plans?  In a word, no.  Most people (81.6%) told us that they didn't care about the fuss.  Approximately an even number told us either that it convinced them to attend (1.0%) or to not attend (1.2%).  Thankfully, we can report that all the worry was groundless and that this year's event doesn't look like it will be harmed by its early shakiness.

How far are you travelling to get to Warpstock '98?

Of those who are going to Warpstock, we wondered how far their travels would take them.  We allowed people to enter their distances in miles or kilometers and converted all values to miles, rounding to the nearest mile for comparison.  (Although most of the civilized world uses the metric system -- including Canada -- we realize that most Internet users are in the USA, hence our decision.)

As one would expect, the vast majority of those currently planning to attend are within a few thousand miles, probably in the continental US or central Canada.  There were a few people telling us they would be travelling over 10,000 miles though!

Rather than deliver the raw numbers of the answers to this question, we graphed the distances.  The results are shown below.

                         - * -

That's it for this issue.


                     Complete August 1, 1998 Survey Results

     Are you going to Warpstock '98?

                     Category                Count Percentage
      Yes, I have bought a pass                 46       6.8%
      Yes, I will buy a pass before Oct. 16th   22       3.3%
      Yes, I will buy a pass at the door        10       1.5%
      I am not sure                             77      11.4%
      No                                       501      74.2%
      I don't know what Warpstock is            19       2.8%
      TOTAL                                    675     100.0%


     What type of pass did you buy / are you buying?

                    Category              Count Percentage
      Platinum                               55       8.1%
      Gold                                    8       1.2%
      Silver                                  3       0.4%
      Bronze                                 11       1.6%
      I told you, I'm not going             498      73.8%
      I told you, I'm not sure               76      11.3%
      I still don't know what Warpstock is   20       3.0%
      Exhibitor's pass                        4       0.6%
      TOTAL                                 675     100.0%


     Was your decision to attend or not attend Warpstock affected by the
     recent Warpstock problems?

                        Category                  Count Percentage
      Yes, it convinced me to attend                  7       1.0%
      Yes, it convinced me not to attend              8       1.2%
      No, it did not affect my decision in any way  551      81.6%
      I'm not sure if it affected my decision        27       4.0%
      I have never heard of any Warpstock problems   62       9.2%
      I still don't know what Warpstock is           20       3.0%
      TOTAL                                         675     100.0%


     How far are you travelling to get to Warpstock '98?

     See http://www.os2ezine.com/v3n12/survey1.htm for graph.

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


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 vendor(s):

 o Mensys

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.

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

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.

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

July's Top Selling Apps from Mensys


       This  Last
      Month  Month               Product                   Developer

        1     --   BackMaster Upgrade                   MSR Development
        2     --   Drive Image V2                       Powerquest
        3     --   DriveCopy V2                         Powerquest
        4      2   Hobbes CD                            Walnut Creek
        5      1   OS/2 Fixpack CD                      Mensys
        6      7   BackMaster                           MSR Development
        7      9   BMT Micro CD                         BMT Micro
        8     --   Drive Image Professional V2          Powerquest
        9      4   Impos 2.1 Upgrade                    Compart
        10     8   Lotus Smartsuite for OS/2 Upgrade    Lotus


Developers' names highlighted with links are OS/2 e-Zine! Sponsors or Advertisers.

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

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.

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