POMPANO BEACH, Fla. -- Advanced Promotion Technologies Inc. said six supermarket organizations have committed to joining its Vision Value Network, a frequent shopper system tied in with a credit card from Banc One Corp.
Advanced Promotion said Dahl's and two other undisclosed companies have signed contracts to install the Vision Value Club checkout terminals, which track shoppers' points and tailor coupons and promotional offers to individual preferences.
Advanced Promotion built the system to include point of sale financial services. The Banc One credit card is the first mass-issued card in the United States to incorporate computer chip, or smart card, technology.
The Florida-based technology company said it also has received letters of intent from three other retail organizations for pilot installations, with the expectation of adding up to 250 stores to the network.
Efforts are under way to convert the letters of intent into contracts, which would increase the number of Vision Value-contracted stores to approximately 1,050.
Dahl's, a 14-store, three-state chain based in Des Moines, was a charter participant in the Vision Value Network market test and the first retailer to launch the Vision Value Club rewards program.
In related developments, Advanced Promotion Technologies said:
* Kroger Co. will install the Vision Value Network at a new store near Hunstville, Ala., where seven Kroger stores are testing the system.
* Several leading consumer product companies have joined the program to promote brand loyalty, including Keebler, Jimmy Dean Foods, Pet Inc., Lever Brothers, Kimberly-Clark, and Scott Paper.
* Roger E. Stangeland, chairman of the Vons Companies Inc., a California-based supermarket chain, and chairman of the Food Marketing Institute, was elected a director of Advanced Promotion Technologies. Vons is a shareholder in the company and was one of its development partners.
this function is called, the CBMgr object traverses its list, invoking the callbacks one by one and passing to each the eventData parameter. The eventData is for-matted by the owner object, and may be as sim;le as single discrete value or as complex as a pointer to an elaborate structure. In any case, it should not be unexpected by the callback function, since the format of the eventData should be published in the owner-class interface.
Listing Three (page 97) is an example program which demonstrates the use of the callback classes. It defines a class, NumContainer, which will be given integers one at time using the AddNumber method. Each time AddNumber is called, NumContainer will inoke the callback list.
After the program creates an instance of NumContainer, it registers four callbacks on the container (actually all four callbacks are the same function, but they have different clientData). The program then generates 100 random numbers, putting them into the NumContainer. Finally, the program prints the results. The count of numbers and the average are obtained by calling methods on NumContainer. The results of the callbacks can be observed by examining the clientData of the callbacks, which are in the global variable aCData (an array of structures, one for each callback). The output from a typical run is shown in Figure 1.
This example shows how to add callbacks to your own classes. Notice that adding callbacks to a class involves very little overhead, Both the Register and Deregister methods on NumContainer were implemented as single-line inline function, and the AddNumber method had one extra statement to invoke the callback chain.
Once you begin to use callbacks, you'll find many uses for them. They're especially suited for configurable, eventdriven systems that can change configuration during run time. Since associations can be added/removed at run time, they need not be hardcoded. Callbacks are also very useful in applications requiring "watchdogs" to monitor the value of certain parameters. These watchdogs can be installed (as callbacks) without disrupting the primary design of the system.
Another use is in the design of GUIs. If, for example, you'd like a certain label highlighted whenever a particular entry field receives the focus, a callback would donicely. Just have the entry-field object invoke the "gaining focus" and "losing focus" callback chains. Register the callback functions for each of these. The "gaining focus" callback would highlight the associated label, while the "losing focus" callback could reset the label to its normal state. Using similar methods, callbacks can enforce many different types of dependencies between fields in dialogs and other user-interface code.
[PROGRAM LISTING OMITTED]