-- Copyright (C) 1986 by Xerox Corporation.  All rights reserved.
-- Stub file  was translated on April 23, 1986 3:32:40 pm PST by Lupine of May 23, 1985 8:38:08 am PDT
-- Source interface GPIB came from file GPIB.bcd, which was created on March 25, 1986 10:44:44 am PST with version stamp 234#310#33452240737 from source of March 25, 1986 10:44:41 am PST.

-- The RPC stub modules for GPIB are:
--   GPIBRpcControl.mesa;
--   GPIBRpcClientImpl.mesa;
--   GPIBRpcBinderImpl.mesa;
--   GPIBRpcServerImpl.mesa.

-- The parameters for this translation are:
--   Target language = Cedar
--   Default parameter passing = VALUE
--   Deallocate server heap arguments = TRUE
--   Inline RpcServerImpl dispatcher stubs = TRUE
--   Declare signals = TRUE
--   Warn about short POINTER ("MDS") allocations = TRUE
--   Maximum number of dynamic heap NEWs = 50, MDS NEWs = 50
--   Acceptable parameter protocols = VersionRange[1..1].


DIRECTORY
  Rope,
  GPIB,
  RPC USING [defaultInterfaceName, EncryptionKey, InterfaceName, Principal,
      standardZones, VersionRange, Zones];


GPIBRpcControl: DEFINITIONS
  SHARES  GPIB
  = BEGIN OPEN GPIB, RpcPublic: RPC;


-- Public RPC types and constants.

  InterfaceName: TYPE = RpcPublic.InterfaceName;
  VersionRange: TYPE = RpcPublic.VersionRange;
  Principal: TYPE = RpcPublic.Principal;
  EncryptionKey: TYPE = RpcPublic.EncryptionKey;
  Zones: TYPE = RpcPublic.Zones;
  
  defaultInterfaceName: InterfaceName = RpcPublic.defaultInterfaceName;
  standardZones: Zones = RpcPublic.standardZones;


-- Standard remote binding routines.

  ImportInterface: SAFE PROCEDURE [
        interfaceName: InterfaceName ← defaultInterfaceName,
        parameterStorage: Zones ← standardZones ];

  UnimportInterface: PROCEDURE;

  ExportInterface: SAFE PROCEDURE [
        interfaceName: InterfaceName ← defaultInterfaceName,
        user: Principal,
        password: EncryptionKey,
        parameterStorage: Zones ← standardZones ];

  UnexportInterface: SAFE PROCEDURE;


-- Dynamic instantiation and binding.

  ImportNewInterface: SAFE PROCEDURE [
        interfaceName: InterfaceName ← defaultInterfaceName,
        parameterStorage: Zones ← standardZones ]
    RETURNS [interfaceRecord: InterfaceRecord];

  -- NewInterfaceRecord is necessary for Cedar clients who want to
  -- manufacture a private interface instance, because
  -- RpcBindingImpl has finalization on type InterfaceRecord.
  NewInterfaceRecord: SAFE PROCEDURE
    RETURNS [interfaceRecord: InterfaceRecord];

  InterfaceRecord: TYPE = REF InterfaceRecordObject;

  InterfaceRecordObject: TYPE = RECORD [
      Command: PROCEDURE [sendMsg: Rope.ROPE],
      DevicesClear: PROCEDURE,
      GoToLocal: PROCEDURE,
      GroupExecuteTrigger: PROCEDURE,
      InterfaceClear: PROCEDURE,
      LocalLockout: PROCEDURE,
      RemoteEnable: PROCEDURE,
      SelectedDeviceClear: PROCEDURE [device: DeviceAddr],
      SelectedGoToLocal: PROCEDURE [device: DeviceAddr],
      SelectedGroupEnableTrigger: PROCEDURE [device: DeviceAddr],
      SelectedRemoteEnable: PROCEDURE [device: DeviceAddr],
      ParallelPollConfigure: PROCEDURE [device: DeviceAddr],
      ParallelPollUnconfigure: PROCEDURE,
      SelectedParallelPollConfigure: PROCEDURE [device: DeviceAddr],
      SelectedParallelPollUnconfigure: PROCEDURE [device: DeviceAddr],
      PollDevice: PROCEDURE [device: DeviceAddr, labels: SRQLabels],
      ReadDevice: PROCEDURE [device: DeviceAddr, terminator: Terminator]
          RETURNS [recvMsg: Rope.ROPE],
      ReadOnInterrupt: PROCEDURE [device: DeviceAddr, recvMsg: Rope.ROPE,
          labels: SRQLabels],
      SelectedReadSerialPoll: PROCEDURE [device: DeviceAddr] RETURNS
          [statusByte: CHAR],
      ReadStatusByte: PROCEDURE [device: DeviceAddr] RETURNS [char:
          CHAR],
      WriteDevice: PROCEDURE [device: DeviceAddr, sendMsg: Rope.ROPE],
      WriteDeviceBuffered: PROCEDURE [device: DeviceAddr, sendMsg:
          Rope.ROPE, hold: BOOL],
      InitializeController: PROCEDURE RETURNS [open: BOOL],
      FinalizeController: PROCEDURE,
      SRQAsserted: PROCEDURE RETURNS [asserted: BOOL],
      WriteDeviceInitial: PROCEDURE [device: DeviceAddr, sendMsg: Rope.ROPE],
      WriteDeviceContinued: PROCEDURE [device: DeviceAddr, sendMsg:
          Rope.ROPE, last: BOOL],
      WriteDeviceBlock: PROCEDURE [device: DeviceAddr, lp: LONG POINTER
          TO WORD, quadWordCnt: CARDINAL, last: BOOL],
      WriteDMABlock: PROCEDURE [device: DeviceAddr, multiBusAddress:
          LONG POINTER TO WORD, byteCnt: CARDINAL, last: BOOL],
      CheckDMADone: PROCEDURE RETURNS [BOOL],
      lupineDetails: PRIVATE REF LupineDetailsObject←NIL];

  LupineDetailsObject: PRIVATE TYPE;

 -- Definitions for the stubs.
 
 LupineProtocolVersion: PUBLIC VersionRange = [first: 1, last: 1];
 
 InterMdsCallsOnly: PUBLIC BOOLEAN = FALSE;

  ProcedureIndex: PRIVATE TYPE = MACHINE DEPENDENT {
      LupineUnusedIndex (0), LupineLastIndex (3),
      Command (4), DevicesClear (5), GoToLocal (6), GroupExecuteTrigger
      (7), InterfaceClear (8), LocalLockout (9), RemoteEnable (10), SelectedDeviceClear
      (11), SelectedGoToLocal (12), SelectedGroupEnableTrigger (13), SelectedRemoteEnable
      (14), ParallelPollConfigure (15), ParallelPollUnconfigure (16), SelectedParallelPollConfigure
      (17), SelectedParallelPollUnconfigure (18), PollDevice (19), ReadDevice
      (20), ReadOnInterrupt (21), SelectedReadSerialPoll (22), ReadStatusByte
      (23), WriteDevice (24), WriteDeviceBuffered (25), InitializeController
      (26), FinalizeController (27), SRQAsserted (28), WriteDeviceInitial
      (29), WriteDeviceContinued (30), WriteDeviceBlock (31), WriteDMABlock
      (32), CheckDMADone (33)};

  SignalIndex: PRIVATE TYPE = MACHINE DEPENDENT {
      LupineUnusedIndex (0), LupineLastIndex (3)};


END.  -- GPIBRpcControl.