+-- $Header: GAP3.cr,v 2.0 85/11/21 07:22:56 jqj Exp $
+-- $Log: GAP3.cr,v $
+-- Revision 2.0 85/11/21 07:22:56 jqj
+-- 4.3BSD standard release
+--
+-- Revision 1.1 85/11/20 14:09:06 jqj
+-- Initial revision
+--
+
+GAP: PROGRAM 3 VERSION 3 =
+BEGIN
+
+ DEPENDS UPON Authentication (14) VERSION 1;
+
+-- types --
+
+WaitTime: TYPE = CARDINAL; -- in seconds --
+
+SessionHandle: TYPE = ARRAY 2 OF UNSPECIFIED;
+
+CharLength: TYPE = {five(0), six(1), seven(2), eight(3)};
+
+Parity: TYPE = {none(0), odd(1), even(2), one(3), zero(4)};
+
+StopBits: TYPE = {oneStopBit(0), twoStopBits(1)};
+
+FlowControl: TYPE = RECORD [
+ type: {flowControlNone(0), xOnXOff(1)},
+ xOn: UNSPECIFIED,
+ xOFF: UNSPECIFIED ];
+
+BidReply: TYPE = {wack(0), nack(1), defaultBidReply(2)};
+
+ExtendedBoolean: TYPE = {true(0), false(1), defaultExtendedBoolean(2)};
+
+DeviceType: TYPE = {undefined(0), terminal(1), printer(2)};
+
+-- the following is sometimes called a SessionParamObject --
+SessionParameterObject: TYPE = CHOICE OF {
+ xerox800(0) => RECORD [],
+ xerox850(1), xerox860(2) => RECORD [pollProc: UNSPECIFIED],
+ system6(3), cmcll(4), imb2770(5), ibm2770Host(6),
+ ibm6670(7), ibm6670Host(8) => RECORD [
+ sendBlocksize, receiveBlocksize: CARDINAL ],
+ ibm3270(9), ibm3270Host(10) => RECORD [],
+ oldTtyHost(11), oldTty(12) => RECORD [
+ charLength: CharLength,
+ parity: Parity,
+ stopBits: StopBits,
+ frameTimeout: CARDINAL ], -- in millisec --
+ otherSessionType(13) => RECORD [],
+ unknown(14) => RECORD [],
+ ibm2780(15), ibm2780Host(16),
+ ibm3780(17), ibm3780Host(18) => RECORD [
+ sendBlocksize, receiveBlocksize: CARDINAL ],
+ siemens9750(19), siemens9750Host(20) => RECORD [],
+ ttyHost(21), tty(22) => RECORD [
+ charLength: CharLength,
+ parity: Parity,
+ stopBits: StopBits,
+ frameTimeout: CARDINAL, -- in millisec --
+ flowControl: FlowControl ] };
+
+LineType: TYPE = {
+ bitSynchronous(0), byteSynchronous(1), asynchronous(2),
+ autoRecognition(3) };
+
+LineSpeed: TYPE = {
+ bps50(0), bps75(1), bps110(2), bps135(3), bps150(4),
+ bps300(5), bps600(6), bps1200(7), bps2400(8), bps3600(9),
+ bps4800(10), bps7200(11), bps9600(12),
+ bps19200(13), bps28800(14), bps38400(15), bps48000(16),
+ bps56000(17), bps57600(18)
+ };
+
+Duplexity: TYPE = {fullduplex(0), halfduplex(1)};
+
+CommParamObject: TYPE = RECORD [
+ accessDetail: CHOICE OF {
+ directConn(0) => RECORD [
+ duplex: Duplexity,
+ lineType: LineType,
+ lineSpeed: LineSpeed ],
+ dialConn(1) => RECORD [
+ duplex: Duplexity,
+ lineType: LineType,
+ lineSpeed: LineSpeed,
+ dialMode: {manualDial(0), autoDial(1)},
+ dialerNumber: CARDINAL,
+ retryCount: CARDINAL ] }
+ ];
+
+ReserveType: TYPE = { preemptNever(0), preemptAlways(1),
+ preemptInactive(2) };
+
+Resource: TYPE = ARRAY 2 OF UNSPECIFIED;
+
+LineControl: TYPE = { primary(0), secondary(1) };
+
+ControllerAddress: TYPE = CARDINAL;
+
+TerminalAddress: TYPE = CARDINAL;
+
+TransportObject: TYPE = CHOICE OF {
+ rs232c(0) => RECORD [ -- spec doesn't say (0) --
+ commParams: CommParamObject,
+ preemptOthers, preemptMe: ReserveType,
+ phoneNumber: STRING,
+ line: CHOICE OF { -- spec doesn't say (0) --
+ alreadyReserved(0) => RECORD [resource: Resource],
+ reserveNeeded(1) => RECORD [lineNumber: CARDINAL]
+ }
+ ],
+ bsc(1) => RECORD [
+ localTerminalID: STRING,
+ localSecurityID: STRING,
+ lineControl: LineControl,
+ authenticateProc: UNSPECIFIED,
+ bidReply: BidReply,
+ sendLineHoldingEOTs: ExtendedBoolean,
+ expectLineHoldingEOTs: ExtendedBoolean ],
+ teletype(2) => RECORD [],
+ polledBSCController(3), sdlcController(5) => RECORD [
+ hostControllerName: STRING,
+ controllerAddress: ControllerAddress,
+ portsOnController: CARDINAL ],
+ polledBSCTerminal(4), sdlcTerminal(6) => RECORD [
+ hostControllerName: STRING,
+ terminalAddress: TerminalAddress ],
+ service(7) => RECORD [
+ id: LONG CARDINAL ],
+ unused(8) => RECORD [],
+ polledBSCPrinter(9), sdlcPrinter(10) => RECORD [
+ hostControllerName: STRING,
+ printerAddress: TerminalAddress]
+ };
+
+-- Constants --
+
+infiniteTime: WaitTime = 177777B; -- LAST[CARDINAL] --
+
+NopPollProc: UNSPECIFIED = 0B;
+
+unspecifiedTerminalAddr: TerminalAddress = 177777B;
+
+-- Remote Errors --
+
+unimplemented: ERROR = 0;
+noCommunicationHardware: ERROR = 1;
+illegalTransport: ERROR = 2;
+mediumConnectFailed: ERROR = 3;
+badAddressFormat: ERROR = 4;
+noDialingHardware: ERROR = 5;
+dialingHardwareProblem: ERROR = 6;
+transmissionMediumUnavailable: ERROR = 7;
+inconsistentParams: ERROR = 8;
+tooManyGateStreams: ERROR = 9;
+bugInGAPCode: ERROR = 10;
+gapNotExported: ERROR = 11;
+gapCommunicationError: ERROR = 12;
+controllerAlreadyExists: ERROR = 13;
+controllerDoesNotExist: ERROR = 14;
+terminalAddressInUse: ERROR = 15;
+terminalAddressInvalid: ERROR = 16;
+-- the following are guesses as to the ERROR numbers --
+serviceTooBusy: ERROR = 17;
+userNotAuthenticated: ERROR = 18;
+userNotAuthorized: ERROR = 19;
+serviceNotFound: ERROR = 20;
+
+
+-- Remote procedures --
+
+Reset: PROCEDURE = 0;
+
+Create: PROCEDURE [
+ sessionParameterHandle: SessionParameterObject,
+ transportList: SEQUENCE OF TransportObject,
+ createTimeout: WaitTime,
+ credentials: Authentication.Credentials,
+ verifier: Authentication.Verifier ]
+ RETURNS [ session: SessionHandle ]
+ REPORTS [ badAddressFormat,
+ controllerAlreadyExists, controllerDoesNotExist,
+ dialingHardwareProblem,
+ illegalTransport, inconsistentParams,
+ mediumConnectFailed,
+ noCommunicationHardware, noDialingHardware,
+ terminalAddressInUse, terminalAddressInvalid,
+ tooManyGateStreams, transmissionMediumUnavailable,
+ serviceTooBusy, userNotAuthenticated, userNotAuthorized,
+ serviceNotFound ]
+ = 2;
+
+Delete: PROCEDURE [ session: SessionHandle ] = 3;
+
+END.
+