Review of Chameleon
Shawn M. Gordon
S.M.Gordon & Associates
Back around the time that HP introduced the 900 series of 3000 computers to the general public, a company called Taurus Software started marketing a product called Chameleon. This product was supposed to emulate the XL command interpreter on the older MPE V machines. I believe at the time the product was priced in the $3,000 to $5,000 range. Given that MPEX from VESOFT did XL emulation as well as giving you all the benefits of having MPEX for about the same price I could never see myself looking at it.
Recently Taurus drastically reduced the price of the product, and I found out a couple of things about it that made it a lot more interesting, like giving you the ability to call the XL intrinsics HPCICOMMAND, HPCIPUTVAR, HPCIGETVAR and HPCIDELETEVAR from within your CM programs by using their supplied SL or USL. When I stopped to think about it I realized how much of a migration aid this could be. You would be able to actually test your programs and environment for XL very accurately on your MPE V machine.
So anyway I got the demo and did the review, here is what I found out both good and bad. I was running the software on an HP3000 series 70 running MPE V Platform 1P release 21. Probe from SSI was used to monitor performance of the product. The software emulates MPE/XL version 1.1, so don’t expect to get a cheap NM Spooler out of it.
This product is going to inspire a lot of comparisons with MPEX since they are the only products I know of that give MPE/iX command compatibility on the HP 3000 Classic. You might even want to look at Chameleon as a low cost alternative to MPEX if you don’t need all the functionality.
There is a kind of walk through demo that is supplied with the software. You can spend as little as 5 minutes in this, or up to 30, depending on what your level of XL experience is. The demo is impressive because all of the menu’s and functions are done completely in Chameleon command files. There is an option in the demo to have it print out all of the command files that were used in the demo. This is handy because then you can see how to do the different functions.
At it’s most basic level the software does a very good job of emulating the MPE/XL 1.1 command interpreter. The first thing you do is RUN XL.PUB.TAURUS this will display the contents of the file WELCOME.PUB.TAURUS and you are in. The software loads up very quickly, so you could have a logon UDC that ran it and your user’s would never know the difference.
So we have all the variable commands:
Logic and looping constructs:
WHILE expression [DO]
IF expression THEN
All of these commands work like their MPE/XL counterparts, the exception being the PAUSE command. Since TAURUS implemented PAUSE before HP did, their’s accepts REAL numbers, so you could say PAUSE 10.7 to pause for 10.7 seconds. Hopefully you are already familiar with these commands since I don’t won’t to reiterate the manuals for MPE/XL. What I would like to focus more on is the commands that are included with Chameleon that aren’t a part of MPE/XL.
There is a variable that you can set that controls what level of XL emulation you get. The different permutations are listed below;
SETVAR XLLEVEL,-1 disables ALL Chameleon features not available on XL
SETVAR XLLEVEL,0 default – Chameleon commands are available
SETVAR XLLEVEL,1 Chameleon features are active but warning is issued when used
This is how you can test to make sure you are 100% XL compatible or not.
Ok the first thing I want to go over is Chameleon’s ability to file I/O from the command line. This means you can fopen, fread, fwrite, etc.. files without having to write a whole program in a conventional language. I have used this similar feature in MPEX many times so I was quite excited to see it in Chameleon.
With the use of STDLIST redirection and file I/O commands you can build all sorts of wild card types of commands easily. For example, if you wanted to build a command file that would purge a file set you could do something like;
SETJCW CIERROR,0 LISTF fileset,6;TEMPFILE IF CIERROR = 0 THEN FOPEN TEMPFILE WHILE CIERROR = 0 FREAD TEMPFILE,FILENAME IF CIERROR = 0 THEN PURGE !FILENAME ENDIF ENDWHILE FCLOSE TEMPFILE,4 ENDIF
What you see here is an example of redirecting the output of a LISTF command into a file. Then FOPEN the file, now read each record until we get a CIERROR. We then issue the PURGE command, de-referencing the variable FILENAME which will contain the name of the file to purge. Pretty neat huh?
Just about all the file I/O intrinsics are supported, even some more esoteric ones like FCONTROL, FSETMODE and FUPDATE. You are even given a command that will list all the files that you have open, LISTOPEN. What I like better about the Chameleon file I/O handling from the MPEX one is that I use the file name to reference the file in all the calls instead of the file number. Strictly speaking using the file number is more in line with how you would use the intrinsics in a program, but I like the file name better. MPEX also doesn’t have the LISTOPEN command, they give you now way of knowing what files you have open or what their file numbers are so you can close them, if you didn’t save them in a variable.
The only other thing that I really wanted to talk about was the ability to do parameter replacement in job streams using Chameleon. The first thing to be aware of is the SUBCHAR parameter that they added to the STREAM command. This tells Chameleon what character to look for when doing parameter replacement. So you could say, STREAM MYJOB;SUBCHAR=^. Here is an example that shows combining a command file with a stream file to do parameter replacement.
<< Dialog >> :GLREPT Please enter GL acct password? GLPASS Enter starting report date in MM/DD/YY? 01/01/92 Please enter GLDB database password? READ << Command file >> 1 INPUT ACCTPASS, 'Please enter GL acct password? ' 2 INPUT RPTDATE, 'Enter starting report date in MM/DD/YY? ' 3 INPUT DBPASS, 'Please enter GLDB database password? ' 4 STREAM TRIALBAL.JOB.GL;SUBCHAR=^ 5 DELETEVAR ACCTPASS,RPTDATE,DBPASS << Actual job stream before streaming >> !JOB TRIALBAL,MGR.GL/^ACCTPASS !RUN XL.PUB.TAURUS !SETVAR TODAY,"!HPMONTH/!HPDAY/!HPYEAR" !RUN TRIALBAL.PROG.GL;INFO="^DBPASS;^RPTDATE;!TODAY" !EOJ
So as you can see we have created a command file that prompts for input and stores it in variables. It then streams a job and specifies what character to use for parameter replacement while the stream file is being parsed. We then DELETEVAR the variables we used just to clean up after ourselves. In our job stream we see where the variables that were prompted for in the command file are dereferenced using ^ and the variables that are created in the job stream are dereference using the standard !.
I’m not going to get into all the different things you can do, but hopefully this will give you an idea of the possibilities. I didn’t show any examples of the intrinsics because it’s pretty much just like calling intrinsics. The documentation for the intrinsics is very complete and well layed out. You should have no trouble understanding and using them based on the documentation.
Usability (also installation)
The installation is a piece of cake, you restore a program file and then run it. It will ask you to re-mount the tape and will then restore everything to the directory that it just created. The program is restored to PUB.SYS and I didn’t care for the fact that they made no provision of purging the program at the end of the installation. I hate all this little files that seem to propagate themselves every time I install some piece of software. Ok that’s enough about my pet peeves.
Well in general the software worked very well. The intrinsics from COBOL worked as advertised and all the commands in Chameleon seemed to work. I was able to issue the RUN command from the HPCICOMMAND intrinsic and have it work. The command was even able to execute UDC files. Makes me wish I had this a long time ago. I did have a problem with the LISTF command blowing up because my file set was larger than the file that they built to do re-direction and parsing. Even after I used the command SETVAR XLOUTPUT,FALSE. This only caused it to not do re-direction for MPE compatible LISTF modes, it didn’t stop it from trying with modes 6 and 7. They use the re-direction so you can use
I did find out that the file they use for redirection was built at the default of 1023 records and there was no way to issue a file equation to override it because the file name was also based on your PIN number. The sequence of events is such that you can’t even tell what the temp file was unless you do a BREAK and LISTFTEMP while it is listing out. Their tech support told me that no one had ever run into the problem before which is way it is the way it is.
I was really expecting to see the program run a lot faster than MPEX, but the LISTF’s is where it really falls down. I hate to belabor the point, but it is pretty damn slow to have the program process your LISTF into a file and then read it back, not to mention being a bit CPU intensive. Since a LISTF is a pretty common command I wish they would improve it. I understand that making the software compatible with a more current version of XL is high on the request list, but low on the priority list. All the other commands seem to work just fine however.
The product used less than 10,000 sectors of disk space, and about a third of that is used by the demo, contributed command files and utilities. So it’s pretty forgiving on the disk space.
Supportability (including Doc)
Everyone at Taurus was very nice and generally responsive. I had a little trouble getting some questions answered at first because the main support guy’s wife had just had a baby and he was justifiably with her for a couple days. Aside from that all my questions were answered in a very timely fashion.
The manual is very good at walking you through the product. The demo is fully described and each of the functions in the program is fully described, with plenty of real world examples. They even document whether the command is XL, Chameleon or both so you won’t go doing stuff that won’t work under strict XL. There is even a whole chapter devoted to showing you different real world examples of how to put together and use command files. I was very impressed with the documentation.
While I wouldn’t say this product is a replacement for MPEX, which by the way it isn’t trying to be. I will say that it does very good emulation of MPE/XL 1.1, and with the addition of file I/O and the more important XL intrinsics, you have a very nice environment. At the price they are currently quoting it would be worth getting just to have the intrinsics.
Even if a Spectrum isn’t in your immediate future you may want to consider getting this product so you can take advantage of at least some of the programming capabilities. Even if you own MPEX I would say it’s a good thing to get since you can’t get to any of the MPEX functions from your programs.
Chameleon version B.01.0420
1032 Elwell Court Ste. 245
Palo Alto, CA 94303
Price is currently $195 a copy and support is free – subject to change
Call, write or FAX to get info or arrange demo.
One 150 page manual, one 16 page demo guide and one Command Reference card are included.
Custom LISTF modes do I/O redirection to parse output, which is slow
Addition of the most commonly used XL intrinsics
Very good XL emulation
Addition of file I/O intrinsics from the ‘command’ level