CHOps: PROGRAM 2 VERSION 3 = BEGIN DEPENDS UPON BulkData (0) VERSION 1, CHName (2) VERSION 0, Authentication (14) VERSION 2; Organization: TYPE = CHName.Organization; OrganizationName: TYPE = CHName.OrganizationName; Domain: TYPE = CHName.Domain; DomainName: TYPE = CHName.DomainName; Object: TYPE = CHName.Object; ObjectName: TYPE = CHName.ObjectName; Name: TYPE = CHName.Name; TwoPartName: TYPE = CHName.TwoPartName; ThreePartName: TYPE = CHName.ThreePartName; OrganizationNamePattern: TYPE = CHName.Organization; DomainNamePattern: TYPE = CHName.TwoPartName; ObjectNamePattern: TYPE = CHName.ThreePartName; Property: TYPE = LONG CARDINAL; ArgumentProblem: TYPE = { illegalProperty(10), -- property is not usable by a client illegalOrganizationName(11), -- the organization component of the name is incorrect, e.g., too long or short, or has wild card characters when not allowed illegalDomainName(12), -- the domain component of the name is incorrect, e.g., too long or short, or has wild card characters when not allowed illegalObjectName(13), -- the object component of the name is incorrect, e.g., too long or short, or has wild card characters when not allowed noSuchOrganization(14), -- the name's organization component does not exist noSuchDomain(15), -- the name's domain component does not exist noSuchObject(16) -- the name's object component does not exist }; CallProblem: TYPE = { accessRightsInsufficient(1), -- operation prevented by access controls tooBusy(2), -- server is too busy to service this request serverDown(3), -- a remote Clearinghouse server was down and was needed for this request useCourier(4), -- server insists that Courier be used for this particular request other(5) }; PropertyProblem: TYPE = { missing(20), -- the object exists, but the property doesn't wrongType(21) -- client wanted a Group but it was an Item, or vice versa }; StreamKind: TYPE = { nextSegment(0), lastSegment(1) }; UpdateProblem: TYPE = { noChange(30), -- operation wouldn't change the database outOfDate(31), -- more recent information was in database objectOverflow(32), -- the particular object will have too much data associated with it databaseOverflow(33) -- the server has run out of room }; WhichArgument: TYPE = { first(1), -- concerns the first name or property argument second(2) -- concerns the second name or property argument }; NetworkNumber: TYPE = ARRAY 2 OF UNSPECIFIED; HostNumber: TYPE = ARRAY 3 OF UNSPECIFIED; Authenticator: TYPE = RECORD [ credentials: Authentication.Credentials, verifier: Authentication.Verifier ]; DomainList: TYPE = RECORD [ segment: DomainSequence ]; DomainNameList: TYPE = RECORD [ segment: DomainNameSequence ]; NetworkAddress: TYPE = RECORD [ network: NetworkNumber, host: HostNumber, socket: UNSPECIFIED ]; ObjectList: TYPE = RECORD [ segment: ObjectSequence ]; ObjectNameList: TYPE = RECORD [ segment: ObjectNameSequence ]; OrganizationList: TYPE = RECORD [ segment: OrganizationSequence ]; ThreePartNameList: TYPE = RECORD [ segment: ThreePartNameSequence ]; StreamOfDomain: TYPE = CHOICE StreamKind OF { nextSegment => DomainList, -- (0) lastSegment => DomainSequence -- (1) }; StreamOfDomainName: TYPE = CHOICE StreamKind OF { nextSegment => DomainNameList, -- (0) lastSegment => DomainNameSequence -- (1) }; StreamOfObject: TYPE = CHOICE StreamKind OF { nextSegment => ObjectList, -- (0) lastSegment => ObjectSequence -- (1) }; StreamOfObjectName: TYPE = CHOICE StreamKind OF { nextSegment => ObjectNameList, -- (0) lastSegment => ObjectNameSequence -- (1) }; StreamOfOrganization: TYPE = CHOICE StreamKind OF { nextSegment => OrganizationList, -- (0) lastSegment => OrganizationSequence -- (1) }; StreamOfThreePartName: TYPE = CHOICE StreamKind OF { nextSegment => ThreePartNameList, -- (0) lastSegment => ThreePartNameSequence -- (1) }; DomainSequence: TYPE = SEQUENCE OF Domain; DomainNameSequence: TYPE = SEQUENCE OF DomainName; Item: TYPE = SEQUENCE 500 OF UNSPECIFIED; NetworkAddressList: TYPE = SEQUENCE 40 OF NetworkAddress; ObjectSequence: TYPE = SEQUENCE OF Object; ObjectNameSequence: TYPE = SEQUENCE OF ObjectName; OrganizationSequence: TYPE = SEQUENCE OF Organization; Properties: TYPE = SEQUENCE 250 OF Property; ThreePartNameSequence: TYPE = SEQUENCE OF ThreePartName; all: Property = 0; nullProperty: Property = 37777777777B; wildcard: STRING = "*"; -- the wildcard character (asterisk) ArgumentError: ERROR [problem: ArgumentProblem, which: WhichArgument] = 2; AuthenticationError: ERROR [problem: Authentication.Problem] = 6; CallError: ERROR [problem: CallProblem] = 1; PropertyError: ERROR [problem: PropertyProblem, distinguishedObject: ObjectName] = 3; UpdateError: ERROR [problem: UpdateProblem, found: BOOLEAN, which: WhichArgument, distinguishedObject: ObjectName] = 4; WrongServer: ERROR [hint: ObjectName] = 5; CreateObject: PROCEDURE [name: ObjectName, agent: Authenticator] REPORTS [ArgumentError, AuthenticationError, CallError, UpdateError, WrongServer] = 2; DeleteObject: PROCEDURE [name: ObjectName, agent: Authenticator] REPORTS [ArgumentError, AuthenticationError, CallError, UpdateError, WrongServer] = 3; LookupObject: PROCEDURE [name: ObjectNamePattern, agent: Authenticator] RETURNS [distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 4; ListOrganizations: PROCEDURE [pattern: OrganizationName--Pattern--, list: BulkData.Sink, agent: Authenticator] REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 5; ListDomains: PROCEDURE [pattern: DomainNamePattern, list: BulkData.Sink, agent: Authenticator] REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 6; ListObjects: PROCEDURE [pattern: ObjectNamePattern, property: Property, list: BulkData.Sink, agent: Authenticator] REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 7; ListAliasesOf: PROCEDURE [pattern: ObjectNamePattern, list: BulkData.Sink, agent: Authenticator] RETURNS [distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 9; CreateAlias: PROCEDURE [alias, sameAs: ObjectName, agent: Authenticator] RETURNS [distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, UpdateError, WrongServer] = 10; DeleteAlias: PROCEDURE [alias: ObjectName, agent: Authenticator] RETURNS [distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, UpdateError, WrongServer] = 11; ListAliases: PROCEDURE [pattern: ObjectNamePattern, list: BulkData.Sink, agent: Authenticator] REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 8; DeleteProperty: PROCEDURE [name: ObjectName, property: Property, agent: Authenticator] RETURNS [distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError, UpdateError, WrongServer] = 14; ListProperties: PROCEDURE [pattern: ObjectNamePattern, agent: Authenticator] RETURNS [distinguishedObject: ObjectName, properties: Properties] REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 15; AddItemProperty: PROCEDURE [name: ObjectName, newProperty: Property, value: Item, agent: Authenticator] RETURNS [distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError, UpdateError, WrongServer] = 13; RetrieveItem: PROCEDURE [pattern: ObjectNamePattern, property: Property, agent: Authenticator] RETURNS [distinguishedObject: ObjectName, value: Item] REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError, WrongServer] = 16; ChangeItem: PROCEDURE [name: ObjectName, property: Property, newValue: Item, agent: Authenticator] RETURNS [distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError, UpdateError, WrongServer] = 17; AddGroupProperty: PROCEDURE [name: ObjectName, newProperty: Property, membership: BulkData.Source, agent: Authenticator] RETURNS [distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError, UpdateError, WrongServer] = 12; RetrieveMembers: PROCEDURE [pattern: ObjectNamePattern, property: Property, membership: BulkData.Sink, agent: Authenticator] RETURNS [distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError, WrongServer] = 18; AddMember: PROCEDURE [name: ObjectName, property: Property, newMember: ThreePartName, agent: Authenticator] RETURNS [distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError, UpdateError, WrongServer] = 19; AddSelf: PROCEDURE [name: ObjectName, property: Property, agent: Authenticator] RETURNS [distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError, UpdateError, WrongServer] = 20; DeleteMember: PROCEDURE [name: ObjectName, property: Property, member: ThreePartName, agent: Authenticator] RETURNS [distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError, UpdateError, WrongServer] = 21; DeleteSelf: PROCEDURE [name: ObjectName, property: Property, agent: Authenticator] RETURNS [distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError, UpdateError, WrongServer] = 22; IsMember: PROCEDURE [memberOf: ObjectNamePattern, property, secondaryProperty: Property, name: ThreePartName, agent: Authenticator] RETURNS [isMember: BOOLEAN, distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError, WrongServer] = 23; RetrieveAddresses: PROCEDURE RETURNS [address: NetworkAddressList] REPORTS [CallError] = 0; ListDomainsServed: PROCEDURE [domains: BulkData.Sink, agent: Authenticator] REPORTS [AuthenticationError, CallError] = 1; END. ξCHOps3.cr Copyright c 1986 by Xerox Corporation. All rights reserved. Bill Jackson (bj) August 8, 1986 7:25:29 pm PDT Demers, January 5, 1987 10:30:56 pm PST Copied types Primitive types Enumerated types Array types Record Types restOfStream: StreamOfDomain restOfStream: StreamOfDomainName restOfStream: StreamOfObject restOfStream: StreamOfObjectName restOfStream: StreamOfOrganization restOfStream: StreamOfThreePartName Choice Types Sequence Types Constants Initialized Constants Remote Errors Remote procedures PROCEDURES DEALING WITH OBJECTS PROCEDURES DEALING WITH ALIASES PROCEDURES DEALING WITH PROPERTIES PROCEDURES DEALING WITH THE ITEM PROPERTY PROCEDURES DEALING WITH THE GROUP PROPERTY PROCEDURES DEALING WITH SERVERS Κ Τ˜šœ ™ Icodešœ Οmœ1™Jšœ˜J˜—šœ Ÿœ˜Jšœ '˜FJšœ +˜9Jšœ G˜XJšœ @˜QJ˜J˜—J˜šœŸœ˜Jšœ  .˜;Jšœ :˜HJšœ˜J˜—šœ Ÿœ˜Jšœ˜Jšœ˜Jšœ˜J˜—šœŸœ˜Jšœ )˜7Jšœ *˜9Jšœ C˜WJšœ !˜6Jšœ˜J˜—šœŸœ˜Jšœ  /˜9Jšœ  0˜:Jšœ˜—J˜—šœ ™ J˜Jš œŸœŸœŸœŸ œ˜-Jš œ ŸœŸœŸœŸ œ˜*J˜—šœ ™ J™šœŸœŸœ˜Jšœ(˜(Jšœ!˜!J˜J˜—šœ ŸœŸœ˜Jšœ˜J™J˜J˜—šœŸœŸœ˜Jšœ˜J™ J˜J˜—šœŸœŸœ˜Jšœ˜Jšœ˜JšœŸ ˜Jšœ˜J˜—šœ ŸœŸœ˜Jšœ˜Jšœ™J˜J˜—šœŸœŸœ˜Jšœ˜Jšœ ™ J˜J˜—šœŸœŸœ˜!Jšœ˜Jšœ"™"J˜J˜—šœŸœŸœ˜"Jšœ˜Jšœ#™#J˜J˜—J™—šœ ™ J™šœŸœŸœ Ÿœ˜-Jšœ ˜!Jšœ ˜$Jšœ˜J˜—šœŸœŸœ Ÿœ˜1Jšœ ˜%Jšœ" ˜(Jšœ˜J˜—šœŸœŸœ Ÿœ˜-Jšœ ˜!Jšœ ˜$Jšœ˜J˜—šœŸœŸœ Ÿœ˜1Jšœ ˜%Jšœ" ˜(Jšœ˜J˜—šœŸœŸœ Ÿœ˜3Jšœ! ˜'Jšœ$ ˜*Jšœ˜J˜—šœŸœŸœ Ÿœ˜4Jšœ" ˜(Jšœ% ˜+Jšœ˜—J™—™J™JšœŸœŸœŸœ˜*JšœŸœŸœŸœ ˜2Jš œŸœŸœŸœŸ œ˜)JšœŸœŸœŸœ˜9JšœŸœŸœŸœ˜*JšœŸœŸœŸœ ˜2JšœŸœŸœŸœ˜6Jšœ ŸœŸœŸœ ˜,JšœŸœŸœŸœ˜8J˜—šœ ™ J˜J˜J˜&J˜—™J™Jšœ Ÿœ  "˜