#### 8.1.4.2 Regular Remote Subprograms (RCI)

In the following example, a RCIBank offers several remote services: Balance, Transfer, Deposit and Withdraw. On the caller side, the bank client uses the stub files of unit RCIBank. On the receiver side, the bank receiver uses the skeleton files of unit RCIBank including the body of this package.

    package Types is
       pragma Pure;

       type Customer_Type is new String;
       type Password_Type is new String;
    end Types;

    with Types; use Types;
    package RCIBank is
       pragma Remote_Call_Interface;

       function Balance
         (Customer : in Customer_Type;
          Password : in Password_Type)
          return Integer;

       procedure Transfer
         (Payer    : in Customer_Type;
          Password : in Password_Type;
          Amount   : in Positive;
          Payee    : in Customer_Type);

       procedure Deposit
         (Customer : in Customer_Type;
          Amount   : in Positive);

       procedure Withdraw
         (Customer : in Customer_Type;
          Password : in Password_Type;
          Amount   : in out Positive);
    end RCIBank;

    with Types; use Types;
    with RCIBank; use RCIBank;
    procedure RCIClient is
       B : Integer;
       C : Customer_Type := "rich";
       P : Password_Type := "xxxx";
    begin
       B := Balance (C, P);
    end RCIClient;