Overview: --------- This demo is a an example a non trivial local application to RPC. The local program is a character oriented "play" program, which lets a user insert, delete, and iterate over a dictionary. The dictionary is based on splay trees, which are printed out in a format described below. We remoted the basic program by taking the interface to the dictionary (given in dict0.h) and creating an interface to a remote dictionary, (given in replay.idl) which is remoted using RPC. Following the local dictionary interface. which is minimal and uniform, the remote interface is also uniform. However, since the local dictionary is generic (can store any item type, using void* pointers to items), the interface needed to change to deal with predefined (Record) type items in order to be remoted using the Microsoft RPC system. Also, since the local implementation allows a "peek" at the root of the tree using a DICT_CURR_ITEM macro, the whole interface achanged needed a to change. Remote dictionaries are represented by context handles to demonstrate the use of [context_handle]. Context handles are currently initialized using a global primitive handle [implicit_handle]. State was added to remote dictionaries in order to allow sharing them, and maintain reference counts. At this time, however, access to shared dictionaries is *not* serialized! By default each client gets his own copy of the dictionaries. To use shared dictionaries, start the client using the -s switch. The use of context to maintain state is also demonstrated by differenciating between a private iterator, activated by "n" for "next" and "p" for "previous", and a global shared iterator activated by "N" for "Next" and "P" for previous. To start iterators, use "h" - go to the "head" of the dictionary, or "t" - go to the "tail" of the dictionary. The private iterator can be reset to DICT_CURR_ITEM using "r". Using the program: ------------------ To use the local dictionary example, type "play". To use the remote versiom, type "server" on the server side. On the client side, for each client use "client" for a fresh, private copy of the dictionary, or "client -s" for a shared copy of the dictionary. Options: -------- The -s option is used for using a shared version of the dictionary. If none exist, a fresh shared version is created. The -v