BSD 4_3_Net_1 development
authorCSRG <csrg@ucbvax.Berkeley.EDU>
Mon, 14 Apr 1986 01:18:45 +0000 (17:18 -0800)
committerCSRG <csrg@ucbvax.Berkeley.EDU>
Mon, 14 Apr 1986 01:18:45 +0000 (17:18 -0800)
Work on file xns/examples/filing/Filing5.cr

Synthesized-from: CSRG/cd2/net.1

xns/examples/filing/Filing5.cr [new file with mode: 0644]

diff --git a/xns/examples/filing/Filing5.cr b/xns/examples/filing/Filing5.cr
new file mode 100644 (file)
index 0000000..210244c
--- /dev/null
@@ -0,0 +1,557 @@
+-- $Header: Filing5.cr,v 1.2 86/04/14 11:18:25 jqj Exp $
+
+-- Note:  this is a TEST version of Filing, and is not guaranteed to
+-- match the official Xerox version at all.  It does seem to be adequate
+-- for FTP, however.
+
+-- $Log:       Filing5.cr,v $
+-- Revision 1.2  86/04/14  11:18:25  jqj
+-- fixed some nits
+-- 
+-- Revision 1.1  86/03/12  10:33:01  jqj
+-- Initial revision
+--
+-- 
+
+Filing: PROGRAM 10 VERSION 5 =
+BEGIN
+       DEPENDS UPON
+               BulkData(0) VERSION 1,
+               Clearinghouse(2) VERSION 2,
+               Authentication(14) VERSION 1,   -- should be V 2 --
+               Time(15) VERSION 2;
+
+
+
+
+-- TYPES AND CONSTANTS --
+
+-- Attributes (individual attributes defined later) --
+
+AttributeType: TYPE = LONG CARDINAL;
+AttributeTypeSequence: TYPE = SEQUENCE OF AttributeType;
+allAttributeTypes: AttributeTypeSequence = [37777777777B];
+Attribute: TYPE = RECORD [type: AttributeType, value: SEQUENCE OF UNSPECIFIED];
+AttributeSequence: TYPE = SEQUENCE OF Attribute;
+
+-- Controls --
+
+ControlType: TYPE = {lockControl(0), timeoutControl(1), accessControl(2)};
+ControlTypeSequence: TYPE = SEQUENCE 3 OF ControlType;
+
+Lock: TYPE = {lockNone(0), share(1), exclusive(2)};
+
+Timeout: TYPE = CARDINAL;      -- in seconds --
+defaultTimeout: Timeout = 177777B;     -- actual value impl.-dependent --
+
+AccessType: TYPE = {
+       readAccess(0), writeAccess(1), ownerAccess(2),  -- all files --
+       addAccess(3), removeAccess(4) };                -- directories only --
+AccessSequence: TYPE = SEQUENCE 5 OF AccessType;
+-- fullAccess: AccessSequence = [177777B]; --
+
+Control: TYPE = CHOICE ControlType OF {
+       lockControl => Lock,
+       timeoutControl => Timeout,
+       accessControl => AccessSequence};
+ControlSequence: TYPE = SEQUENCE 3 OF Control;
+
+-- Scopes --
+
+Count: TYPE = CARDINAL;
+unlimitedCount: Count = 177777B;
+
+Depth: TYPE = CARDINAL;
+allDescendants: Depth = 177777B;
+
+Direction: TYPE = {forward(0), backward(1)};
+
+Interpretation: TYPE = { interpretationNone(0), boolean(1), cardinal(2),
+       longCardinal(3), time(4), integer(5), longInteger(6), string(7) };
+FilterType: TYPE = {
+       -- relations --
+       less(0), lessOrEqual(1), equal(2), notEqual(3), greaterOrEqual(4),
+       greater(5), 
+       -- logical --
+       and(6), or(7), not(8),
+       -- constants --
+       filterNone(9), all(10),
+       -- patterns --
+       matches(11) };
+RestrictedFilter: TYPE = CHOICE FilterType OF {
+       less, lessOrEqual, equal, notEqual, greaterOrEqual, greater =>
+               RECORD [attribute: Attribute, interpretation: Interpretation],
+               -- interpretation ignored if attribute interpreted by
+               -- implementor
+       -- NOT IMPLEMENTED: and, or, not --
+       filterNone, all => RECORD [],
+       matches => RECORD [attribute: Attribute] };
+Filter: TYPE = CHOICE FilterType OF {
+       less, lessOrEqual, equal, notEqual, greaterOrEqual, greater =>
+               RECORD [attribute: Attribute, interpretation: Interpretation],
+               -- interpretation ignored if attribute interpreted by
+               -- implementor
+       -- NOT YET IMPLEMENTED: (at least, not generally) and, or, not --
+       and, or => SEQUENCE OF RestrictedFilter,
+       not => RestrictedFilter,
+       filterNone, all => RECORD [],
+       matches => RECORD [attribute: Attribute] };
+nullFilter: Filter = all[];
+       
+ScopeType: TYPE = { count(0), direction(1), filter(2), depth(3) };
+Scope: TYPE = CHOICE ScopeType OF {
+       count => Count,
+       depth => Depth,
+       direction => Direction,
+       filter => Filter };
+ScopeSequence: TYPE = SEQUENCE 4 OF Scope;
+
+-- Handles and Authentication --
+
+Credentials: TYPE = Authentication.Credentials;
+Verifier: TYPE = Authentication.Verifier;
+SimpleVerifier: TYPE = Authentication.SimpleVerifier;
+
+Handle: TYPE = ARRAY 2 OF UNSPECIFIED;
+nullHandle: Handle = [0,0];    -- meaning depends on operation --
+
+Session: TYPE = RECORD [token: ARRAY 2 OF UNSPECIFIED, verifier: Verifier ];
+
+-- RANDOM ACCESS --
+ByteAddress: TYPE = LONG CARDINAL;
+ByteCount: TYPE = LONG CARDINAL;
+endOfFile: LONG CARDINAL = 37777777777B; -- logical end of file --
+ByteRange: TYPE = RECORD [firstByte: ByteAddress, count: ByteCount];
+
+-- REMOTE ERRORS --
+
+ArgumentProblem: TYPE = {
+       illegal(0),
+       disallowed(1),
+       unreasonable(2),
+       unimplemented(3),
+       duplicated(4),
+       argMissing(5) };
+
+-- problem with an attribute type or value --
+AttributeTypeError: ERROR [ problem: ArgumentProblem, type: AttributeType]
+       = 0;
+AttributeValueError: ERROR [ problem: ArgumentProblem, type: AttributeType]
+       = 1;
+
+-- problem with an control type or value --
+ControlTypeError: ERROR [ problem: ArgumentProblem, type: ControlType]
+       = 2;
+ControlValueError: ERROR [ problem: ArgumentProblem, type: ControlType]
+       = 3;
+
+-- problem with an scope type or value --
+ScopeTypeError: ERROR [ problem: ArgumentProblem, type: ScopeType]
+       = 4;
+ScopeValueError: ERROR [ problem: ArgumentProblem, type: ScopeType]
+       = 5;
+
+-- problem in obtaining access to a file --
+AccessProblem: TYPE = {
+       accessRightsInsufficient(0),
+       accessRightsIndeterminate(1),
+       fileChanged(2),
+       fileDamaged(3),
+       fileInUse(4),
+       fileNotFound(5),
+       fileOpen(6) };
+AccessError: ERROR [problem: AccessProblem] = 6;
+
+-- problem with a credentials or verifier --
+AuthenticationError: ERROR [problem: Authentication.Problem] = 7;
+
+-- problem with a BDT --
+ConnectionProblem: TYPE = {
+               -- communication problems --
+       noRoute(0),
+       noResponse(1),
+       transmissionHardware(2),
+       transportTimeout(3),
+               -- resource problems --
+       tooManyLocalConnections(4),
+       tooManyRemoteConnections(5),
+               -- remote program implementation problems --
+       missingCourier(6),
+       missingProgram(7),
+       missingProcedure(8),
+       protocolMismatch(9),
+       parameterInconsistency(10),
+       invalidMessage(11),
+       returnTimedOut(12),
+               -- miscellaneous --
+       otherCallProblem(177777B) };
+ConnectionError: ERROR [problem: ConnectionProblem] = 8;
+
+-- problem with file handle --
+HandleProblem: TYPE = {
+       invalid(0),
+       nullDisallowed(1),
+       directoryRequired(2) };
+HandleError: ERROR [problem: HandleProblem] = 9;
+
+-- problem during insertion in directory or changing attributes --
+InsertionProblem: TYPE = {
+       positionUnavailable(0),
+       fileNotUnique(1),
+       loopInHierarchy(2) };
+InsertionError: ERROR [problem: InsertionProblem] = 10;
+
+-- problem during random access operation --
+RangeError: ERROR [problem: ArgumentProblem] = 16;
+
+-- problem during logon or logoff --
+ServiceProblem: TYPE = {
+       cannotAuthenticate(0),
+       serviceFull(1),
+       serviceUnavailable(2),
+       sessionInUse(3) };
+ServiceError: ERROR [problem: ServiceProblem] = 11;
+
+-- problem with a session --
+SessionProblem: TYPE = {
+       tokenInvalid(0),
+       serviceAlreadySet(1) };
+SessionError: ERROR [problem: SessionProblem ] = 12;
+
+-- problem obtaining space for file contents or attributes --
+SpaceProblem: TYPE = {
+       allocationExceeded(0),
+       attributeAreadFull(1),
+       mediumFull(2) };
+SpaceError: ERROR [problem: SpaceProblem ] = 13;
+
+-- problem during BDT --
+TransferProblem: TYPE = {
+       aborted(0),
+       checksumIncorrect(1),
+       formatIncorrect(2),
+       noRendevous(3),
+       wrongDirection(4) };
+TransferError: ERROR [problem: TransferProblem ] = 14;
+
+-- some undefined (and implementation-dependent) problem occurred --
+UndefinedProblem: TYPE = CARDINAL;
+UndefinedError: ERROR [problem: UndefinedProblem ] = 15;
+
+
+
+
+-- REMOTE PROCEDURES --
+
+-- Logging On and Off --
+
+Logon: PROCEDURE [
+       service: Clearinghouse.Name, credentials: Credentials,
+       verifier: Verifier ] 
+       RETURNS [ session: Session ]
+       REPORTS [ AuthenticationError, ServiceError, SessionError,
+               UndefinedError ]
+       = 0;
+
+Logoff: PROCEDURE [ session: Session ]
+       REPORTS [ AuthenticationError, ServiceError, SessionError,
+               UndefinedError ]
+       = 1;
+
+Continue: PROCEDURE [ session: Session ]
+       RETURNS [ continuance: CARDINAL ]
+       REPORTS [ AuthenticationError, SessionError, UndefinedError ]
+       = 19;
+
+-- Opening and Closing Files --
+
+Open: PROCEDURE [ attributes: AttributeSequence, directory: Handle,
+               controls: ControlSequence, session: Session ]
+       RETURNS [ file: Handle ]
+       REPORTS [ AccessError, AttributeTypeError, AttributeValueError,
+               AuthenticationError, ControlTypeError, ControlValueError,
+               HandleError, SessionError, UndefinedError ]
+       = 2;
+
+Close: PROCEDURE [ file: Handle, session: Session ]
+       REPORTS [ AuthenticationError, HandleError, SessionError,
+               UndefinedError ] 
+       = 3;
+
+-- Creating and Deleting Files --
+
+Create: PROCEDURE [ directory: Handle, attributes: AttributeSequence,
+               controls: ControlSequence, session: Session ]
+       RETURNS [ file: Handle ]
+       REPORTS [ AccessError, AttributeTypeError, AttributeValueError,
+               AuthenticationError, ControlTypeError, ControlValueError,
+               HandleError, InsertionError, SessionError, SpaceError,
+               UndefinedError ]
+       = 4;
+
+Delete: PROCEDURE [ file: Handle, session: Session ]
+       REPORTS [AccessError, AuthenticationError, HandleError, SessionError,
+               UndefinedError ]
+       = 5;
+
+-- Getting and Changing Controls (transient) --
+
+GetControls: PROCEDURE [ file: Handle, types: ControlTypeSequence,
+               session: Session ]
+       RETURNS [ controls: ControlSequence ]
+       REPORTS [AccessError, AttributeTypeError, AuthenticationError,
+               ControlTypeError,
+               HandleError, SessionError, UndefinedError ]
+       = 6;
+
+ChangeControls: PROCEDURE [ file: Handle, controls: ControlSequence,
+               session: Session ]
+       REPORTS [AccessError, AttributeTypeError, AuthenticationError,
+               ControlTypeError, ControlValueError,
+               HandleError, SessionError, UndefinedError ]
+       = 7;
+
+
+-- Getting and Changing Attributes (permanent) --
+
+GetAttributes: PROCEDURE [ file: Handle, types: AttributeTypeSequence,
+               session: Session ]
+       RETURNS [ attributes: AttributeSequence ]
+       REPORTS [AccessError, AttributeTypeError, AuthenticationError,
+               HandleError, SessionError, UndefinedError ]
+       = 8;
+
+ChangeAttributes: PROCEDURE [file: Handle, attributes: AttributeSequence,
+               session: Session ]
+       REPORTS [AccessError, AttributeTypeError, AuthenticationError,
+               HandleError, SessionError, SpaceError, UndefinedError ]
+       = 9;
+
+UnifyAccessLists: PROCEDURE [directory: Handle, session: Session ]
+       REPORTS [AccessError, AuthenticationError, HandleError, SessionError,
+               UndefinedError ] 
+       = 20;
+
+-- Copying and Moving Files --
+
+Copy: PROCEDURE [ file, destinationDirectory: Handle ,
+               attributes: AttributeSequence, controls: ControlSequence,
+               awaaion: Session ]
+       RETURNS [ newFile: Handle ]
+       REPORTS [AccessError, AttributeTypeError, AttributeValueError,
+               AuthenticationError, ControlTypeError, ControlValueError,
+               HandleError, InsertionError, SessionError, SpaceError,
+               UndefinedError ] 
+       = 10;
+
+Move: PROCEDURE [ file, destinationDirectory: Handle ,
+               attributes: AttributeSequence, controls: ControlSequence,
+               awaaion: Session ]
+       RETURNS [ newFile: Handle ]
+       REPORTS [AccessError, AttributeTypeError, AttributeValueError,
+               AuthenticationError, HandleError, InsertionError,
+               SessionError, SpaceError, UndefinedError ] 
+       = 11;
+
+-- Transfering Bulk Data (File Content) --
+
+Store: PROCEDURE [ directory: Handle, attributes: AttributeSequence,
+               controls: ControlSequence, content: BulkData.Source,
+               session: Session ]
+       RETURNS [ file: Handle ]
+       REPORTS [AccessError, AttributeTypeError, AttributeValueError,
+               AuthenticationError, ConnectionError, ControlTypeError,
+               ControlValueError, HandleError, InsertionError, SessionError,
+               SpaceError, TransferError, UndefinedError ]
+       = 12;
+
+Retrieve: PROCEDURE [ file: Handle, content: BulkData.Sink, session: Session ]
+       REPORTS [AccessError, AuthenticationError, ConnectionError,
+               HandleError, SessionError, SpaceError, TransferError,
+               UndefinedError ]
+       = 13;
+
+Replace: PROCEDURE [ file: Handle,  attributes: AttributeSequence,
+               content: BulkData.Source, session: Session ]
+       REPORTS [AccessError, AttributeTypeError, AttributeValueError,
+               AuthenticationError, ConnectionError, HandleError,
+               SessionError, SpaceError, TransferError, UndefinedError ]
+       = 14;
+
+-- Transferring Bulk Data (Serialized Files) --
+
+       -- NOT YET IMPLEMENTED --
+
+-- Random Access to File Data --
+
+RetrieveBytes: PROCEDURE [file: Handle, range: ByteRange, sink: BulkData.Sink,
+               session: Session ]
+       REPORTS [AccessError, HandleError, RangeError, SessionError,
+               UndefinedError ]
+       = 22;
+
+ReplaceBytes: PROCEDURE [file: Handle, range: ByteRange,
+               source: BulkData.Source, session: Session ]
+       REPORTS [AccessError, HandleError, RangeError, SessionError,
+               SpaceError, UndefinedError ]
+       = 23;
+
+
+-- Locating and Listing Files in a Directory --
+
+Find: PROCEDURE [ directory: Handle, scope: ScopeSequence,
+               controls: ControlSequence, session: Session ]
+       RETURNS [ file: Handle ]
+       REPORTS [ AccessError, AuthenticationError, ConnectionError,
+               ControlTypeError, ControlValueError, HandleError,
+               ScopeTypeError, ScopeValueError,
+               SessionError, UndefinedError ]
+       = 17;
+
+List: PROCEDURE [ directory: Handle, types: AttributeTypeSequence,
+               scope: ScopeSequence, listing: BulkData.Sink,
+               session: Session ]
+       REPORTS [ AccessError, AttributeTypeError,
+               AuthenticationError, ConnectionError,
+               HandleError,
+               ScopeTypeError, ScopeValueError,
+               SessionError, TransferError, UndefinedError ]
+       = 18;
+
+
+
+
+
+-- INTERPRETED ATTRIBUTE DEFINITIONS --
+
+-- common definitions --
+
+Time: TYPE = Time.Time;                -- seconds --
+nullTime: Time = Time.earliestTime;
+
+User: TYPE = Clearinghouse.Name;
+
+-- attributes --
+
+accessList: AttributeType = 19;
+AccessEntry: TYPE = RECORD [key: Clearinghouse.Name, access: AccessSequence];
+AccessList: TYPE = RECORD [entries: SEQUENCE OF AccessEntry, defaulted: BOOLEAN];
+
+checksum: AttributeType = 0;
+Checksum: TYPE = CARDINAL;
+unknownChecksum: Checksum = 177777B;
+
+childrenUniquelyNamed: AttributeType = 1;
+ChildrenUniquelyNamed: TYPE = BOOLEAN;
+
+createdBy: AttributeType = 2;
+CreatedBy: TYPE = User;
+
+createdOn: AttributeType = 3;
+CreatedOn: TYPE = Time;
+
+dataSize: AttributeType = 16;
+DataSize: TYPE = LONG CARDINAL;
+
+defaultAccessList: AttributeType = 20;
+DefaultAccessList: TYPE = AccessList;
+
+fileID: AttributeType = 4;
+FileID: TYPE = ARRAY 5 OF UNSPECIFIED;
+nullFileID: FileID = [0,0,0,0,0];
+
+isDirectory: AttributeType = 5;
+IsDirectory: TYPE = BOOLEAN;
+
+isTemporary: AttributeType = 6;
+IsTemporary: TYPE = BOOLEAN;
+
+modifiedBy: AttributeType = 7;
+ModifiedBy: TYPE = User;
+
+modifiedOn: AttributeType = 8;
+ModifiedOn: TYPE = Time;
+
+name: AttributeType = 9;       -- name relative to parent --
+Name: TYPE = STRING;   -- must not exceed 100 bytes --
+
+numberOfChildren: AttributeType = 10;
+NumberOfChildren: TYPE = CARDINAL;
+
+ordering: AttributeType = 11;
+Ordering: TYPE = RECORD [key: AttributeType, ascending: BOOLEAN,
+               interpretation: Interpretation];
+-- see below for defaultOrdering, byAscendingPosition, byDescendingPosition --
+
+parentID: AttributeType = 12;
+ParentID: TYPE = FileID;
+
+pathname: AttributeType = 21;
+Pathname: TYPE = STRING;
+
+position: AttributeType = 11;
+Position: TYPE = SEQUENCE 100 OF UNSPECIFIED;
+firstPosition: Position = [0];
+lastPosition: Position = [177777B];
+
+readBy: AttributeType = 14;
+ReadBy: TYPE = User;
+
+readOn: AttributeType = 15;
+ReadOn: TYPE = Time;
+
+storedSize: AttributeType = 26;
+StoredSize: TYPE = LONG CARDINAL;
+
+subtreeSize: AttributeType = 23;
+SubtreeSize: TYPE = LONG CARDINAL;
+
+subtreeSizeLimit: AttributeType = 24;
+SubtreeSizeLimit: TYPE = LONG CARDINAL;
+nullSubtreeSizeLimit: SubtreeSizeLimit = 37777777777B;
+
+type: AttributeType = 17;
+Type: TYPE = LONG CARDINAL;
+
+version: AttributeType = 18;
+Version: TYPE = CARDINAL;
+lowestVersion: Version = 0;
+highestVersion: Version = 177777B;
+
+defaultOrdering: Ordering = [key: name, ascending: TRUE, interpretation:
+               string];
+byAscendingPosition: Ordering = [key: position, ascending: TRUE,
+               interpretation: interpretationNone];
+byDescendingPosition: Ordering = [key: position, ascending: FALSE,
+               interpretation: interpretationNone];
+
+
+
+
+-- BULK DATA FORMATS --
+
+       -- NOT YET IMPLEMENTED --
+
+
+-- Attribute Series Format, used in List --
+
+StreamOfAttributeSequence: TYPE = CHOICE OF {
+       nextSegment(0) => RECORD [
+               segment: SEQUENCE OF AttributeSequence,
+               restOfStream: StreamOfAttributeSequence],
+       lastSegment(1) => SEQUENCE OF AttributeSequence};
+
+
+
+
+
+-- FILE TYPES --
+
+tUnspecified: Type = 0;
+tDirectory: Type = 1;
+tText: Type = 2;
+tSerialized: Type = 3;
+tEmpty: Type = 4;
+tAscii: Type = 6;
+
+END. -- of Filing --