Home Contact Site Map Privacy Policy Rev Search
Volume 2 Issue 5
 

Up
Volume 1 Issue 1
Volume 1 Issue 2
Volume 1 Issue 3
Volume 1 Issue 4
Volume 1 Issue 5
Volume 1 Issue 6
Volume 1 Issue 7
Volume 1 Issue 8
Volume 1 Issue 9
Volume 1 Issue 10
Volume 2 Issue 1
Volume 2 Issue 2
Volume 2 Issue 3
Volume 2 Issue 4
Volume 2 Issue 5
Volume 2 Issue 6
Volume 2 Issue 7
Volume 3 Issue 1
Volume 3 Issue 2
Volume 3 Issue 3
Volume 4 Issue 1
Volume 4 Issue 2
Volume 4 Issue 3
Volume 4 Issue 4


 

 

 S/ENL - The Sprezzatura Electronic Newsletter

(All the RevSoft News That's Fit To Print (And bits that probably aren't as well...))

Contents

Welcome

Feedback

MYKL'S JOKE SECTION (Supplied by an imposter this month)

Tech Tips For AREV – Andrew P McAuley

Setting up the CGI Gateway for Internet Information Server on an NT Server – Greg Helland, T L Creates

Breaking the Combination – C Pates

Twin Conferences – Aaron Kaplan

ERIC THE EMU'S AREV TIPS

Peripheral Trivia

30th November 2003

S/ENL Volume 2 Issue 5

Welcome

WELCOME - to this issue of S/ENL, the Sprezzatura Electronic Newsletter.

Welcome to this the latest issue of SENL – back in the UK office again! Thanks to Sprezz Inc for stepping in there at such short notice.

Needless to say we had a great time in France. We stayed in Epernay and bought out the entire promotional stock of vintage champagne from the producer we visited. Several cases have now disappeared back to the US and the rest are finding homes in the UK. The food was superb, the company delightful and the vignette which sums up the space we occupy in the time space continuum occurred outside of Reims Cathedral (13th Century and awesome).

Noted RevSoft Lab Personage – "This is just so beautiful – I wish my wife could see it"

Editor – "Here’s my mobile – call her…"

So as the two principals surveyed the spectacular grandeur of an edifice that took upwards of 150 years to construct, a technology barely a decade old allowed one of them to stand in a square in France, describing it to his spouse at home, just waking up in the USA.

Well, it impressed me….

We seem to be getting busier and busier which is no bad thing. Kate’s replacement is slowly settling in and though no one could actually replace Kate (they broke the mould) Nikki is stamping her own personality on the job. A lot has happened in the RevSoft community since the last missive so now is our chance to update you!

In this issue you’ll find an article by Aaron on the UK and Texas conferences along with one or two supporting photographs (scratch that – I can’t get the scanner to work!). After the conference a pile of us went out to see a UK comedian – Steve Coogan. This was so successful that Sprezz are pleased to announce another social event for the UK RevSoft community – a trip to see the Donmar Warehouse production of Sondheim’s "Into the Woods". This just happens to be my favourite musical of all time and is playing in the West End of London for a limited time. We expect to go en masse some time in late January so register interest with Nikki now (ng@sprezzatura.com). We’ll probably go on a Friday to leave you free to enjoy London at the weekend.

The Texas conference marked a first – the unveiling of jREV itself! Needless to say excitement was high, and that combined with so many familiar faces lent the event an almost party like atmosphere. Mike and Bob from Win-Win were there showing their Internet work and afterwards the drinking continued on for quite a while – thanks Jim for picking up the bar tab! Unfortunately the RevSoft crowd had to leave before the night grew too old but there was still adequate chance to buttonhole your favourite developer and plead for extra features!

The longer time goes on the more sensible RevSoft look in their Java decision. The Microsoft marketplace continues to fragment as MS decides where to go and the promise held out by Java just gets more real by the month. Recent releases through Works have concentrated on stabilising the product yet further and new developments on the Web Site continue to strengthen the community.

Interest in S/List continues to grow so we’re starting to look at developer style enhancements to bring you more of an IDE (integrated development environment). The latest additions are a link to Sprezz’s Sysknowledge window and two new custom add-ons S/Index and S/Dict. For details of these see our separate article in the next issue – and let us know what add-ons you’d like to see!

On a completely separate issue, people have been seeing our postings on the web discussion database (during a recent week, Sprezz replies made up over 50% of the total replies on the board) and have asked whether they can get a more personalised or a more in-depth response directly from Sprezzatura.

So in answer to the question, can we get direct response from Sprezz – the answer is "Yes". We can provide either support contracts or pay per call services, where we bill just for the time you use at a very reasonable rate. If you’d like details of any of these services then just mail sales@sprezzatura.com with subject "support".

We’ve been doing a lot of work with T L Creates lately – an ambition we’re proud to be fulfilling, they’re such great guys to deal with. The project is a Web enabling one for a small company called 20th Century Fox. TLC have a client base to die for (and they work with the licensors for South Park merchandise… gimme gimme gimme!) – just check out their user story on http://www.revelation.com/WebSite/vipweb.nsf/etc... Anyways, setting up a web server with IIS can be a PITA but with a lot of input from the lab and the boys at TLC, they’ve managed to put together a definitive document for those who are struggling. We’re pleased to have been given permission to include it later in this issue. Thanks guys!

Nice to see some old familiar names from the past rejoining us on the discussion database! Welcome back Ray Chan, Larry Wilson and others besides. It’s a real shame that this is likely to be caused by the imminent closure of the Compuserve forum (see http://www.revelation.com/WEBSITE/VIPWEB.NSF/etc... for details) – the end of an era. The forum definitely had more of a community feel than the discussion database – which despite its efforts just remains not as easy to navigate as the forum. And somehow the atmosphere is less relaxed up on the Web. Perhaps we should all josh around a bit more?

OK – time for the issue to go to press (or to pre-release editorial checking!). By the time you see this I’ll be on vacation trusting the posting of this to my 2IC in the UK, Carl. It just remains for us to wish you a belated "Happy Thanksgiving" – see you on the Web!

Andrew P McAuley

Publisher

Feedback

An abbreviated section this time – feedback has been slower than usual!

Glenn Bryant of BitMarine who politely out just how sloppy our web-site has become in the interim between Kate leaving and Nikki coming up to speed.

"didn't see any links to this on your web pages - fortunately I remembered your email and went directly to the URL. Web skips from 2.2 to the newly released 2.4.

Glenn Bryant"

Well we’ve fixed it for now and we’re trying to keep on top of it but it’ll be the New Year before it’s really cooking. Sorry!

Meanwhile, VG writes, "I downloaded sysknow.zip then installed it. I started OI 3.6.1. Now what? How do I "execute the sysknowledge window" ??"

Well, like all of the Sprezz executables, they live in OpenInsight, Executables, Form Executables – so just expand this, find SYSKNOWLEDGE, Shift-DblClk and you’re away! We really must build it into the help menu for S/List now that I think about it… Carl? <g>

One of my favourite SIGs of the past month or so… "Goddess, grant me the Serenity to accept the things I cannot change, The Courage to change the things I can, and the Wisdom to hide the bodies of those people I had to kill because they p****d me off."

Hmm – on one of the projects we’re familiar with, we recently received a memo that contained the following gem: -

"May I also take this opportunity of reminding you all of the necessity to virus check any disc before using it on your PC. This applies to all discs, whether being brought in by someone from outside, i.e. IT Department, IBM or perhaps an authorised software consultant, or disc you are using as part of your daily work. We have recently had a number of incidents of viruses being discovered on discs and PC's and we have been advised by ***** ******** that every time you are about to insert a disc in your PC (even if it has only been out of the PC for 5 minutes) you must virus check the disc first. Even if the disc has not been out of your possession and you are confident it has been kept locked away, a speck of dust is enough to cause a virus. This is a serious matter and any abuse of the rules will result in disciplinary action being taken."

Michael Moran (our MV issues consultant in Australia) points out that the name of the S/List file on the web site can be a little daunting as it seems to be a zero user version (it has a 0 appended rather than a 1). Fortunately this is easily explained. The version on the Web site IS a zero user version (a demo) BUT if installed over an N user version will keep the N user count. So if the version on the Web Site is more recent than yours just download and install!

Fellow divers might be amused to read the following from Terry Barnes, working with PADI in Oz –

"AREV is used here in the Australian office. Used for Integrated Accounting, Order Processing, Inventory Control etc. as well as Professional Membership and Diver Certification processing"

Cool – now I can try to hack myself a Dive Master Qualification! <g>

Meanwhile back in the "oh no, are they plugging S/List AGAIN" department, we have this from LR in the US

"We are making good use of S/List and are migrating all of our reports to it, because unlike Reporter, it actually works and looks good!

Thank you."

Our pleasure – although the Reporter dig is a teeny bit unfair! It has come on in leaps and bounds over the past year. Just wish it could leave all DLLs and the EXE in memory so we could launch reports quicker!

Greg James from ISIS, another discussion database regular writes

"I recently read your article, 'The X Events', that was published in the S/ENL. The article was informative and I enjoyed it very much. I do have one question that I was hoping you could answer. Once you have a promoted event, how do you get rid of it?"

Well that’s the $64K question! The answer’s easy, but a pain! From the System Editor

Run Delete_Row "SYSREPOSEVENTEXES","MYEVENTNAME"

then RECOMPILE all Windows.

Then there’s more for Office 97 junkies from our favorite Den Haag correspondent, Adrie Helmich. Adrie is a cool dude who is not only fun to party with, but he wastes more Sprezz time with joke mails than anyone else including Mykl!!! Keep up the good work Adrie. Anyway here’s his Office 97 tips.

Word

Open a new document

1.Type: Blue

2.Select the word

3.Format it as bold and colour blue

4.space after the word

5.click on Help and About Microsoft Word

6.click on the Word icon

7.Rolling credit + pin ball

8.Flippers: Z and M keys

Excel

Open excel

press F5

type L97:X97

press enter

press tab

press ctrl + left shift + click Chart Wizard icon

This is an old message (August) so I can’t even remember what it was about but it warmed my cockles – so here it is in it’s entirety –

"YOU'RE A LIFESAVER. GOD BLESS YOU. YOUR SOLUTION WORKED BEAUTIFULLY!"

Aw shucks….

‘Til next time – keep those emails rolling in!

MYKL'S JOKE SECTION (Supplied by an impostor this month)

Sherlock Holmes and Dr Watson went on a camping trip. After a good meal and a bottle of wine they lay down for the night, and went to sleep. Some hours later, Holmes awoke and nudged his faithful friend.

"Watson, look up at the sky and tell me what you see."

Watson replied, "I see millions and millions of stars."

"What does that tell you?"

Watson pondered for a minute. "Astronomically, it tells me that there are millions of galaxies and potentially billions of planets. Astrologically, I observe that Saturn is in Leo. Horologically, I deduce that the time is approximately a quarter past three. Theologically, I can see that God is all-powerful and that we are small and insignificant. Meteorologically, I suspect that we will have a beautiful day tomorrow. What does it tell you?"

Holmes was silent for a minute, then spoke. "Watson, you idiot. Some bastard has stolen our tent."

Tech Tips For AREV – Andrew P McAuley

At a client site recently I had the bug from hell – three days of solid debugging and I still couldn’t nail the b******. Desperation set in and I developed all manner of utilities to try to see what the problem could be. Essentially what would happen is that the system would crash to the debugger in SCRIBE/WINDOW/WIN.PAN with a "non-numeric when numeric required. ".

I put break points into the code, starred out entire sections, reverted to older copies and still it would not go away. Brute force hacking eventually revealed that the seventh parameter being passed to Scribe was a portion of a user defined conversion string when it should have been a number. As this number equated to VSP_VLEN I grepped all of our code looking for code which might modify VSP_VLEN but no joy.

Madness set in and I called Aaron on his mobile. The mobile died. I called back on a land line and started talking through it. We looked at all of the really obscure possibilities when it suddenly struck. I had modified a user defined conversion to modify WC_Si% (I know, I know, terribly bad practice but….) and UDCs are stored a couple of fields above VLEN in WC_SI%.

I debugged the UDC and sure enough, the variable I was inserting into WC_SI% contained field marks – the original developer had converted "*" To @Fm earlier in the code and I hadn’t noticed. So when I updated one field I was in fact updating three. D’oh!

Anyway out of this comes some good – I had to write a mapping routine to show what program calls what program and it is presented below. Usage is simple, at TCL

MAP PROGRAM Flag

Where flag determines how MAP works. If not set the program will simply print a list of all unique routines called by the main routine (along with subroutines etc). If set the program will provide a tree showing all of the calls – but only expanding a branch once and only including a branch once per program (so we don’t get piles of the same stuff repeated.)

Just copy this into BP, then compile and catalog and you’re away!

Subroutine Map(Source, Level, Tree)

Common /Map/ FoundAlready, ValidRows, Different

Declare Subroutine Source, V119

Declare Function Unassigned

Sent = Trim(@Sentence)

If UnAssigned(Source) Then

Source = Field(Sent, " ", 2)

Tree = Field(Sent, " ", 3)

If Len(Tree) Then Tree = 1 Else Tree = 0

Level = 1

FoundAlready = '' ; ValidRows = ''

If Tree Then

Printer On

Print Source

Printer Off

Call Map(Source, Level, Tree)

End Else

Call Map(Source, Level, Tree)

GoSub Report

End

End Else

Print @(0,0) : @(-4) : Source

TempSource = Source

Convert @Lower.Case To @Upper.Case In Source

Row = Xlate("BP", Source, "", "X")

If Len(Row) Then

TempRow = Xlate("TEMP_BP", Source, "", "X")

If TempRow # Row Then Different<-1> = Source

Locate Source In ValidRows By "AL" Using @Fm Setting GotIt Else

ValidRows = Insert(ValidRows, GotIt, 0, 0, Source )

End

DoneInThisProgram = ""

Ptr = 1

TotLength = Len(Row)

Comments = 0

Loop

NextLine = Row[Ptr, @Fm]

Ptr = Col2() + 1

While Ptr < TotLength

NextLine = Trim(NextLine)

Begin Case

Case NextLine[1, 2] = "*/"

Comments = 0

Case NextLine[1,2] = "/*"

Comments = 1

Case NextLine[1,1] = '*'

Case Comments

Case 1

If NextLine[1, " "] _eqc "DECLARE" Then

Words = Field(NextLine, " ", 3, 9999)

Convert "," To " " In Words

Words = Trim(Words)

Convert " " To @Fm In Words

Pos = 0 ; Mark = 0

Loop

Remove Word From Words At Pos Setting Mark

TempWord = Word

Convert @Lower.Case To @Upper.Case In TempWord

Locate TempWord In DoneInThisProgram Using @Fm Setting DoneHere Else

DoneInThisProgram = Insert(DoneInThisProgram, DoneHere, 0, 0, TempWord)

If Tree Then

Locate Word In ValidRows Using @Fm Setting DoneAlready Then

Printer On

Level += 1

Print Str("³ ", Level -1 ) : "ÀÄ " : Word : " (" : Level : " - " : NextLine

Level -= 1

Printer Off

End Else

ValidRows = Insert(ValidRows, DoneAlready, 0, 0, Word)

Locate Word In FoundAlready Using @Fm Setting Dont Else

FoundAlready = Insert(FoundAlready, Dont, 0, 0, Word)

Printer On

Level += 1

Print Str("³ ", Level -1 ) : "ÀÄ " : Word : " (" : Level : " - " : NextLine

Printer Off

Call Map(Word, Level, Tree)

FoundAlready = Delete(FoundAlready, Dont, 0, 0)

End

End

End Else

Convert @Lower.Case To @Upper.Case In Word

Locate Word In FoundAlready By "AL" Using @Fm Setting Found Else

FoundAlready = Insert(FoundAlready, found, 0, 0, Word)

Level += 1

Call Map(Word, Level, Tree)

End

End

End

While Mark

Repeat

End Else

Found = Indexc(NextLine, "CALL ", 1)

If Found Then

Word = Trim(NextLine[Found + 5, "("])

If NextLine[Found - 1, 1] = " " Or NextLine[Found -1, 1] = '' Then

TempWord = Word

Convert @Lower.Case To @Upper.Case In TempWord

Locate TempWord In DoneInThisProgram Using @Fm Setting DoneHere Else

DoneInThisProgram = Insert(DoneInThisProgram, DoneHere, 0, 0, TempWord)

If Tree Then

Locate Word In ValidRows Using @Fm Setting DoneAlready Then

Printer On

Level += 1

Print Str("³ ", Level -1 ) : "ÀÄ " : Word : " (" : Level :" - " : NextLine

Level -= 1

Printer Off

End Else

ValidRows = Insert(ValidRows, DoneAlready, 0, 0, Word)

Locate Word In FoundAlready Using @Fm Setting Dont Else

FoundAlready = Insert(FoundAlready, Dont, 0, 0, Word)

Printer On

Level += 1

Print Str("³ ", Level -1 ) : "ÀÄ " : Word : " (" : Level : " - " : NextLine

Printer Off

Call Map(Word, Level, Tree)

FoundAlready = Delete(FoundAlready, Dont, 0, 0)

End

End

End Else

Convert @Lower.Case To @Upper.Case In Word

Locate Word In FoundAlready By "AL" Using @Fm Setting Found Else

FoundAlready = Insert(FoundAlready, found, 0, 0, Word)

Level += 1

Call Map(Word, Level, Tree)

End

End

End

End

End

End

End Case

Repeat

End

End

If Level > 1 Then Level -= 1

Return

Report:

* Call Msg(FoundAlready, "", "", "")

Swap @Fm With \0D0A\ In ValidRows

Printer On

Print ValidRows : \0C\ :

Printer Off

Return

Setting up the CGI Gateway for Internet Information Server on an NT Server – Greg Helland, T L Creates

Remove administrator rights for the anonymous Internet user in the User Manager if they have been applied.

Go into the Internet Information Server (IIS) and highlight the cgi-bin directory and right-click and go into the properties dialog and choose the security tab.

Set up the INET user for Anonymous logon and fill in all of the necessary fields and then close down the properties dialog box.

Go into User Manager and create a new group for your INET_USERS and add the INET_USER and IWAM_USER to this group.

From the User Manager, click on the Policy menu and choose User Rights. In the lower left corner there is a check box called "Advanced Services", check this box.

Next, go through the following items on the drop down box and add the INET_USERS group to each of them. To do this, click on the rights and the edit box will display all of the users/groups that have that right. If the INET_USERS is not in this list, click the ADD button and add the group to the right. Following is a list of the rights that must include this group:

Access this computer from network
Create a token object
Create permanent shared objects
Log on as a service *
Log on locally
Replace a process level token
Take ownership of files or other objects

Note: Some of these may not be required on your system. (The items with asterisks are required.)

You do not want other users in the INET_USERS group since you are set up for anonymous access to the OICGI gateway.

Reboot your NT Server

Now start up your copy of OpenInsight and activate the INET_GATEWAY form. You should now be able to access your data via the web server.

Breaking the Combination – C Pates

We recently came across the situation where we needed to set the TOPPOS property in a ‘Simple’ Combo Box control, but of course, this property only exists in OI for Edit Tables and List Boxes. Therefore we had to find a way to access the List Box in the Combo Box directly and set it using the correct Windows message.

Well, a Simple Combo Box is actually just that. A control formed from the combination of two separate Windows controls:

A LISTBOX control, and

An EDIT control.

These are bound together and referenced as one control, with each separate part becoming a child control with the Combo Box as the parent.

However, to utilise these we also need the handle of the List Box in question, to use with the SendMessage function, and this is where another problem arises. A Combo Box’s HANDLE property in OI only refers to the handle that references the entire group of controls, so some method of finding the individual handles of each of the controls is also required.

Fortunately, Windows provides us with a way of accessing handles based on parent-child relationships via the GetWindow API function. This function retrieves the handle of a window that has a specified relationship to a given window, hence if we pass it the handle of the Combo Box and ask it to return the handles of its children we should get what we want.

It is defined in the Windows 3.1 SDK as:

HWND GetWindow(hwnd, fuRel)

HWND hwnd Identifies the original window.

UINT fuRel Specifies the relationship between the original window and the returned window.

This parameter can be one of the following values:

Value Meaning

GW_CHILD Identifies the window's first child window.

GW_HWNDFIRST Returns the first sibling window for a child window; otherwise, it returns the first top-level window in the list.

GW_HWNDLAST Returns the last sibling window for a child window; otherwise, it returns the last top-level window in the list.

GW_HWNDNEXT Returns the sibling window that follows the given window in the window manager's list.

GW_HWNDPREV Returns the previous sibling window in the window manager's list.

GW_OWNER Identifies the window's owner.

Returns The return value is the handle of the window if the function is successful. Otherwise, it is NULL, indicating either the end of the system's list or an invalid fuRel parameter.

The GetWindow function is exported from USER.EXE, and should have already been prototyped in your OI system. If it hasn’t it should be prototyped in the normal way in DLL_USER as:

USHORT PASCAL GetWindow( USHORT, USHORT )

The first parameter is the handle of the original window from which we are ‘starting’, so in our case this would be the handle of the Combo Box. The second parameter specifies what particular relationship we are interested in. As we are trying to find child controls we need to use the GW_CHILD value, which is defined in the Windows SDK as 5.

Armed with this we can now attempt to set the TOPPOS value if the List Box component in the following way.

Example 1. Getting the TOPPOS value of MyComboBox and setting it to a new value of 6

Declare Function SendMessage, GetWindow, Get_Property

Equ WM_USER$ To 1024

Equ LB_GETTOPINDEX$ To WM_USER$ + 15

Equ LB_SETTOPINDEX$ To WM_USER$ + 24

Equ GW_CHILD$ To 5

NewToppos = 6

OldToppos = 0

hwndComboBox = Get_Property( MyComboBox, "HANDLE" )

hwndListBox = GetWindow( hwndComboBox, GW_CHILD$ )

/*

Virtually all index values in Windows are zero-based so remember to

account for this!!

*/

OldToppos = SendMessage( hwndListBox, LB_GETTOPINDEX$, 0, 0 )

OldToppos += 1

NewToppos -= 1

Unused = SendMessage( hwndListBox, LB_SETTOPINDEX$, NewToppos, 0 )

However, one slight problem that could arise with this code concerns the use of the GetWindow function. The GW_CHILD argument only fetches the first child handle of the parent window, so to be really safe you should check to see that the control referenced by this handle is a List Box. (However, all the Combo Boxes I’ve used this technique on have the List Box as their first child, which is quite fortunate really!)

If this is not the case then you will need to call GetWindow again, but this time using a different argument to loop though each child in turn. This argument is GW_HWNDNEXT, which returns the sibling window that follows the specified window in the window manager's list.

i.e. Once we have got the first child’s handle we use that as the first argument in GetWindow and find the next one along at the same ‘level’.

To see what type of control we are dealing with we need to check it’s class via the GetClassName API function, which takes a window handle passed to it and returns a string with the class name.

It takes three parameters; the window handle, a pointer to the buffer to hold the Class Name, and the length of this buffer. The value it returns is an integer denoting the length of the Class name.

It’s full definition is:

int GetClassName(hwnd, lpszClassName, cchClassName)

HWND hwnd Identifies the window.

LPSTR lpszClassName Points to a buffer that receives the null-terminated class name string.

Int cchClassName Specifies the length of the buffer pointed to by the lpszClassName The class name string is truncated if it is longer than the buffer.

Returns The return value is the length, in bytes, of the returned class name, not including the terminating null character. The return value is zero if the specified window handle is invalid.

Again it is exported from USER.EXE and should be prototypes in DLL_USER as:

USHORT PASCAL GetClassName( USHORT, LPCHAR, USHORT )

So now our more bullet-proofed function could look something like this:

Example 2. Getting the TOPPOS value of MyComboBox and setting it to a new value of 6 with Class checking

Declare Function SendMessage, GetWindow, Get_Property, GetClassName

$Insert Logical

Equ WM_USER$ To 1024

Equ LB_GETTOPINDEX$ To WM_USER$ + 15

Equ LB_SETTOPINDEX$ To WM_USER$ + 24

Equ GW_CHILD$ To 5

Equ GW_HWNDNEXT$ To 2

NewToppos = 6

OldToppos = 0

FoundListBox = False$

hwndComboBox = Get_Property( MyComboBox, "HANDLE" )

/*

Get the first child and see if it’s what we want. Note a List box control in a

Combo box has a class name of ‘ComboLBox’

*/

hwndChild = GetWindow( hwndComboBox, GW_CHILD$ )

If hwndChild Then

GoSub CheckClass

If FoundListBox Else

/*

It wasn’t a List box so loop through the other children

Note the use of GW_HWNDNEXT

*/

Loop

hwndChild = GetWindow( hwndChild, GW_HWNDNEXT$ )

While hwndChild

Gosub CheckClass

While Not( FoundListBox )

Repeat

End

End

If FoundListBox Then

/*

Virtually all index values in Windows are zero-based so remember to

account for this!!

*/

OldToppos = SendMessage( hwndListBox, LB_GETTOPINDEX$, 0, 0 )

OldToppos += 1

NewToppos -= 1

Unused = SendMessage( hwndListBox, LB_SETTOPINDEX$, NewToppos, 0)

End

Return

CheckClass: ; * ( hwndChild, FoundListBox ) -> ( FoundListBox )

LpszClassName = Str( \00\, 128 )

ClassLen = GetClassName( hwndChild, lpszClassName, 123)

If lpszClassName[1, ClassLen] = "ComboLBox" Then

FoundListBox = True$

End

Return

Twin Conferences – Aaron Kaplan

Well, what can I say? jRev really exists, at least partially, at any rate. I’ve seen it, and so did everyone that showed up at the UK or Texas Revelation Conferences. For the most part they were similar, so as we run through the conference, I’ll just highlight the differences.

It started off with Jim Acquaviva, President & CEO of Revelation Software (like I had to tell you who he was) giving the basic state of the company. Jim talked about Revelation Software and what it is and where it’s going and how it envisions the future and why. Jim, always a dynamic speaker, clearly explained the goals with a level of excitement I haven’t seen from him in years.

As many of you know, Revelation had a management buyout of the investors a year or so ago, and is now completely self-supporting. With that, both profits and revenues are up (there is a difference). They’ve stabilised at 40 employees, which seems to be a great number for them. Revelation was always at it’s best at this number and they’ve integrated the office into their new Andover digs.

It all can be summed up in a slide from their presentation:

"Revelation Software delivers a portfolio of application development tools, deployment products and companion services that enable developers to successfully implement robust, network-based applications. The company's strategy of ensuring the preservation of information systems and application investments while delivering market leading and innovating new products has enabled its customers to reuse, extend, enhance, and leverage their investments in skills, and to successfully protect their investments in business applications."

As Jim points out, portfolio is the key word. This portfolio is more than just OI and jRev but it’s ARev as well. While we all know there probably won’t be any more ARev maintenance releases, there are still updates to the Network products, which require special ARev code. There will also be updates to the network products to ensure continued running of ARev under all versions of Windows. Revelation is also shipping example code on how to place your ARev data on the web without forcing an OI conversion.

He also talked about the future of the network products in general. They’re going TCP/IP as the native mode protocol in all future releases. However, due to the impracticality of delivering effective DOS support for TCP/IP, there will be no TCP/IP clients for ARev. Because of this, the new products will continue to support IPX or Named Pipes to allow for sharing between your ARev and OI apps.

There was a lot of talk about jLH. jLH is a Java implementation of Linear Hash. jLH is being tested and supported under Novell, Solaris, NT and Linux. It was fascinating, especially after all these years, to listen to Jim rave about Linux. He didn’t come right out and say it, but he certainly seemed to imply that Linux was giving performances that blew the others straightaway. It almost sounds like Linux is the RevSoft future. Since it’s a free OS, there should be plenty of money left over to pay for all those licenses, right?

An important thing about jLH that was glossed over in the conference, but boldly stated in the reference materials: jLH will be Available as a component to other tools and applications through the data model. More on this when we get into jRev itself, but hopefully I’m not reading too much into this.

Before we leave Jim, I’d like to leave you with two thoughts. The first is the new data model everyone is talking about. Browsers to web servers to application servers to your data servers. Remember all the ads for OE 1.0 and all the laughter about middleware? Once again, Revelation was playing years ahead of the crowd.

The second thought is a quote from Jim:

"We have to work on retaining our customer base, to reward them for sticking with us for so long. We don’t want them to think they’re being taken them for granted"

The US show went on with Kurt Baker showing us how to extend our applications through to the web and how we can convert ARev apps into OI. The UK show went right into Cameron’s talk, so we’ll get into that when the time comes.

Most of Kurt’s bit is available on Revelation’s web site, but it’s still pretty cool to watch a browser update your ARev LH data.

Now, we move onto the part that everyone really wants to hear about, jRev. In one slide, jRev was described as

"An integrated tool set written in 100% pure Java for application developers and component creators to design, assemble, deploy and maintain component-based, dynamic Internet applications."

Jim seemed to stress the dynamic Internet applications section, but this is the sizzle, the stuff the end-user sees. It’s all-important, but the really cool stuff is based on the components.

Components are going to be a huge word in jRev and in the outset, it could be really confusing. Just like in ARev and OI, everything is a field in a record in a file (or a column in a row in a table), everything in jRev is a component. Everything. Everything is a component. Components can be class libraries or screens, select scripts or event scripts. Keep this in mind as you read and hear about jRev in the coming weeks and months.

There are component definitions, which are things you design, like windows and messages, which form the rules of the application.

There are component integrations, which bring in and integrate any 3rd party Java bean class.

There is the component application model, which defines the type of the application as a servlet, applet, or application.

There is the data component, which treats your data as a component.

There is the component storage model, which handles updates and versioning and customizations.

Components are completely inheritable. Components are made up of other components. Components have designable properties. Components have user-defined events and methods. Components can be organised as records and sets. Components are auto-resolvable, from changes through to inheritance. Components support multiple languages through pluggable scripting. Components deploy as Java classes. Components are everything.

Essentially, this is it, this is all jRev really is. We can go into more details about how jRev works another time and some of the practical applications, since this is a topic in itself. If jRev seems simple, that’s because it is. Its simplicity is elegant, and it’s concept and vision is pure. jRev itself will be like ARev, written in itself, so jRev is simply just a component.

In the US, as Cameron was explaining all this, Gene Gleyzer was giving practical examples of how each item works. We watched him create windows and watch changes to properties move its way through the system. It was a beautiful site to see.

The night before the conference, the Revelation staff was in the auditorium setting up. Andrew and I were there along with Mike Ruane and Bob Carten from WinWin. As Gene was doing his final prep work, making sure there were no surprises, he was running through various routines, making small changes to some base line code. The computers were already setup so the four of us stood there watching him code on the projectors. None of us said a word, we were so enraptured in watching someone else program in a language we don’t know, in a product we have never seen, writing a product that’s still in the embryonic stages. We don’t know if this is a testament to our respect and admiration of Gene or if the four of us are just sad b*****ds.

In the UK show, Andrew gave his yearly "what has RTI done for us" lately talk. As someone said, he’ll get up and make a few jokes at Clive’s expense, plug the network products and the works program, talk about what’s been in the readme’s for the past year, show a couple of things using them, break to the debugger about 3 times then tell a really bad joke. That was close. This time, he also managed to break the microphone.

The UK also followed with some guy from IBM and for the life of me I can’t remember his name, (Simon Phipps, a Java Evangelist – ed) but he heads up all of IBM’s Java work. He mostly talked about Java, and how great it is and how it will change the world. He pretty much validated everything jRev was about, at least about 90% of it. Mostly, he talked about the advantages of Java and how it can work to integrate vast systems under one roof. As the write once, run anywhere starts to take hold, and IBM starts releasing JVM’s on all their platforms, mainframes and minis, a huge portal of opportunity comes alive in linking and maintaining and giving new life to old systems. Even though we’ve seen it with Smalltalk, Java seems to be close to fulfilling the dream.

Finally, in the US, Revelation was kind enough to allow Sprezzatura to give a little dog and pony, sales and technical briefing after the main show. For that, we doff our hats and say thank you.

All in all, the shows were a resounding success. Revelation seems to be of one mind, one direction, one goal, and one purpose.

ERIC THE EMU'S AREV TIPS

The enigmatic emu has been recently engaged in some Year 2000 assurance for clients, and has come to realise that many 386 class PC's and earlier are perfect for AREV or even REVG applications, under DOS or Windows 3.x .

Most clients have offered the non-compliant PC's to employees, who are only too happy to take them home. What then does the employee do about Y2K? BIOS chip upgades to an eight-year-old BIOS may be expensive, or just too difficult and problematic.

The emu realised that New Zealand will be the first market to encounter problems with year 2000, being just west of the international date line.

Given that Australia is 3 hours behind New Zealand (and until the GST is adopted in Australia, 16 years ahead culturally), Eric decided that it would be a good idea to wind all PC hardware back from 1998 to 1982, when the air was fresher, the grass greener, sheep less nervous, and REVG was tool of choice among serious developers.

To extend this idea further, the Emu suggests a hardware level ICONV/OCONV over all DOS date handling, so that the PC hardware/BIOS runs happily in 1982, and the operating system runs OK in 1998. When the PC BIOS makes it to 1984, the operating system will happily report year 2000, and we can then worry about Year 2000 hardware upgrades in 2015 or so. Plenty of time to fill up your 30 MB hard disk on your brand spanking new 80286 IBM AT, holding pride of place in your home office next to your collection of 1970's style executive toys, the purple vinyl beanbags, the ABBA records and the orange shag-pile carpet.

This technique of DOS deception is not new. SETVER.EXE basically does the same thing for the reported DOS version. It would seem, not honesty, but lying through one's teeth, is the best DOS policy. The emu tends to agree.

To this end, the following RBASIC program creates ADD16YRS.COM, a TSR which can be loaded from the first line of autoexec.bat. Simply put the TSR in the C: root directory, put ADD16YRS as the first statement in autoexec.bat, and reboot the PC, using its setup program to pull the BIOS calendar back to 16 years before the present year. ADD16YRS is only good for DOS or Windows 3.11 running in 16 bit mode - anyone who can afford Windows 95 or a Pentium class PC or later is not worthy of your efforts. OK so it doesn't do time/date stamps. It only handles DOS date calls, and not BIOS date calls. You think I really care that much?

Sit back, open a cool one, and divert your clients' PC budgets to higher consultancy fees, rather than towards new hardware. At least your homely 386 will be good for a few more AREV GFE's yet.

Eric

a =\E93D020D4144443136205665722E2031\

a:=\2E30202D204164647320313620796561\

a:=\727320746F20796F757220504320636C\

a:=\6F636B240000000000000000002E803E\

a:=\3C0101743C80FC04740B80FC037403EB\

a:=\3090EB2D90FAEB039000002E89265901\

a:=\2EFF1E380181F98319770680C116EB08\

a:=\90B020B52080E9842E8B265901FBCA02\

a:=\002EFF2E380180FC2A740B80FC2B7503\

a:=\EB7A90E9CF00FAEB0F90000000000000\

a:=\00000000000000009C2EC6063C01012E\

a:=\8C069A012E8C1E9C012E8C169E012E89\

a:=\26A2012E892EA4012EFF1E34012EA3A0\

a:=\012EA19C018ED82EA1A4018BE82EA19E\

a:=\018ED02EA1A2018BE02EA19A018EC02E\

a:=\A1A00183C1103C007505B006EB03902C\

a:=\012EC6063C01009DFBCA02009C2EC606\

a:=\3C01012E8C069A012E8C1E9C012E8C16\

a:=\9E012E8926A2012E892EA40183E9102E\

a:=\FF1E34012EA3A0012EA19C018ED82EA1\

a:=\A4018BE82EA19E018ED02EA1A2018BE0\

a:=\2EA19A018EC02EA1A0012EC6063C0100\

a:=\9DFBCA02002EFF2E3401244D656D6F72\

a:=\7920416C6C6F636174696F6E20457272\

a:=\6F720D0A244E6F7420496E7374616C6C\

a:=\65640D0A2443616E277420556E696E73\

a:=\74616C6C0D0A24416C72656164792049\

a:=\6E7374616C6C65640D0A244E6F742045\

a:=\6E6F756768204D656D6F72790D0A2449\

a:=\6E7374616C6C65640D0A24556E696E73\

a:=\74616C6C65640D0A240D0A6279204572\

a:=\696320456D7520FE2028632920313939\

a:=\362E20416C6C20726967687473207265\

a:=\7365727665642E0D0A55736167653A20\

a:=\414444313620207B2F557D0D0A2F5520\

a:=\3D20756E696E7374616C6C0D0A0A241A\

a:=\2EC6063C0100FCBB0001F61733D28CC8\

a:=\428EC23BD0740B8BF38BFBB91000F3A6\

a:=\75EEBA0301E8F700BAE902E8F100BE81\

a:=\00AC3C0D7410245F3C5575F5E8D900BA\

a:=\85027462EB69E8CF00740832C0BAA702\

a:=\EB5490BD6A0283C50F3B2E0600BABB02\

a:=\7744B82135CD21891E34018C063601BA\

a:=\8601B82125CD21B81A35CD21891E3801\

a:=\8C063A01BA3D01B81A25CD21A12C008E\

a:=\C0B449CD21BACF02E884008BD5B104D3\

a:=\EAB80031CD21E87600B001B44CCD218C\

a:=\C1B82135CD2181FB860175558CC33BD9\

a:=\754FB449CD21BA6B0272DB268B163401\

a:=\268E1E3601B82125CD218CC1B81A35CD\

a:=\2181FB3D01752A8CC33BD97524B449CD\

a:=\21BA6B0272B0268B163801268E1E3A01\

a:=\B81A25CD210E1FBADB02E812000AC0EB\

a:=\9A8EC1BA9502EB8E8CC08CCB3BC3C3B4\

a:=\09CD21C3\

oswrite a to "add16.com"

Peripheral Trivia

As this issue of S/ENL was put to bed we fed the inner man with:

TV : South Park – still!
Book: The Happy Hacker – Carolyn Meinhar
CD: Black Sabbath – Reunion (and I was there!! – Carl)
WEB http://www.neuticles.com

[top]

Join us :Send Mail to Admin@Sprezzatura.com with subject SUBSCRIBE SENL
Leave Us:Send Mail to Admin@Sprezzatura.com with subject UNSUBSCRIBE SENL
Change of Address: Leave at the old address & join at the new one
Web Info:http://www.sprezzatura.com/
Tell us what you'd like to see in S/ENL:Ask_Sprezz@sprezzatura.com

S/ENL - (c) Copyright 1998, Sprezzatura Ltd. All rights reserved. REDISTRIBUTION is allowed only with permission. You may circulate copies of S/ENL by manually forwarding it, providing (1) you forward the issue in its entirety, (2) no fee is involved, and (3) you forward no more than three issues to any one individual. After that, please encourage your correspondents to send e-mail to admin@sprezzatura.com with SUBSCRIBE SENL in the subject line to get their own free subscription. Everyone is welcome! Tell your friends about S/ENL.

[top]

Copyright © 2005 The Sprezzatura Group. All rights reserved.