igen - generate RPC calls using as transport. This program automates the process of creating remote interfaces. Interfaces are like remote porcedure calls, but the end points can be threads or processes. Usage: igen -xdr | -thread | -pvm [-header | -code] .I Input: A file containing igen protoypes (which are a superset of C++ prototypes). Output: 1 or 3 three C++ source files. 3 header files. The header files are: .h - .CLNT.h - client class. .SRVR.h - server class. If the interface is thread based, one file is generated. .C If the interface is xdr/pvm based, three files are generated. .C - xdr/pvm bundlers for the types that can be passed. .CLNT.C - Client side code for users of the interface. .SRVR.C - Server code for providers of the interface. Note: The member functions declared in .SRVR.h are not generated by igen, except for the class constructor and mainLoop. These functions are called by the server when it receives a request from the client. These functions must be provided by the programmer. An interface looks like: $remote { $base ; $version ; [$async] $upcall [$async] } The $base keyword defines the first message tag to use for creating request and responce message types. Since TAGS should be unique to an application, this value should not confilct with other interfaces that might get linked into the same process. The integer after the keyword $version indicates the protocol version of this interface. For XDR based protocols this version is verified when the client and server rendevous. For thread based interfaces, igen relies on the fact that changes to an interface generally change the signature of at least one function in the interface, and that version imcompatabilities should be resolved by the C++ linker in that case. The member functions are the basis of the interface. A provider of an interface defines the member functions in the class . Igen generates a shadow class User with the same member functions. The User member functions are really RPC style stubs that invoke the remote member functions. The $upcall keyword permits interfaces to support upcalls. Upcalls are a way for an interface to indicate to its user that an "intersting" event has occured. Upcalls are by default syncchronous, but can be made asynchronous by adding the keyword $async after the keyword $upcall. The $async keyword placed before a function definition prevents igen from generating a wait for reply after make the remote procedure call. No reply will be made by the receiver of the remote procedure call.