|
|
1.1 root 1: -- $Header: Filing4.cr,v 2.2 86/06/30 11:31:13 jqj Exp $
2:
3: -- Note: this is a TEST version of Filing, and is not guaranteed to
4: -- match the official Xerox version at all. It does seem to be adequate
5: -- for FTP, however.
6:
7: -- $Log: Filing4.cr,v $
8: -- Revision 2.2 86/06/30 11:31:13 jqj
9: -- convert to Authentication v 2 for compatibility with spec., now that
10: -- compiler allows it.
11: --
12: -- Revision 2.1 86/06/02 07:08:22 jqj
13: -- typos
14: --
15: -- Revision 2.0 85/11/21 07:22:38 jqj
16: -- 4.3BSD standard release
17: --
18: -- Revision 1.1 85/05/27 06:30:46 jqj
19: -- Initial revision
20: --
21: -- Revision 1.1 85/05/27 06:30:46 jqj
22: -- Initial revision
23: --
24:
25: Filing: PROGRAM 10 VERSION 4 =
26: BEGIN
27: DEPENDS UPON
28: BulkData(0) VERSION 1,
29: Clearinghouse(2) VERSION 2,
30: Authentication(14) VERSION 2,
31: Time(15) VERSION 2;
32:
33:
34:
35:
36: -- TYPES AND CONSTANTS --
37:
38: -- Attributes (individual attributes defined later) --
39:
40: AttributeType: TYPE = LONG CARDINAL;
41: AttributeTypeSequence: TYPE = SEQUENCE OF AttributeType;
42: allAttributeTypes: AttributeTypeSequence = [37777777777B];
43: Attribute: TYPE = RECORD [type: AttributeType, value: SEQUENCE OF UNSPECIFIED];
44: AttributeSequence: TYPE = SEQUENCE OF Attribute;
45:
46: -- Controls --
47:
48: ControlType: TYPE = {lockControl(0), timeoutControl(1), accessControl(2)};
49: ControlTypeSequence: TYPE = SEQUENCE 3 OF ControlType;
50:
51: Lock: TYPE = {lockNone(0), share(1), exclusive(2)};
52:
53: Timeout: TYPE = CARDINAL; -- in seconds --
54: defaultTimeout: Timeout = 177777B; -- actual value impl.-dependent --
55:
56: AccessType: TYPE = {
57: readAccess(0), writeAccess(1), ownerAccess(2), -- all files --
58: addAccess(3), removeAccess(4) }; -- directories only --
59: AccessSequence: TYPE = SEQUENCE 5 OF AccessType;
60: -- fullAccess: AccessSequence = [177777B]; --
61:
62: Control: TYPE = CHOICE ControlType OF {
63: lockControl => Lock,
64: timeoutControl => Timeout,
65: accessControl => AccessSequence};
66: ControlSequence: TYPE = SEQUENCE 3 OF Control;
67:
68: -- Scopes --
69:
70: Count: TYPE = CARDINAL;
71: unlimitedCount: Count = 177777B;
72:
73: Depth: TYPE = CARDINAL;
74: allDescendants: Depth = 177777B;
75:
76: Direction: TYPE = {forward(0), backward(1)};
77:
78: Interpretation: TYPE = { interpretationNone(0), boolean(1), cardinal(2),
79: longCardinal(3), time(4), integer(5), longInteger(6), string(7) };
80: FilterType: TYPE = {
81: -- relations --
82: less(0), lessOrEqual(1), equal(2), notEqual(3), greaterOrEqual(4),
83: greater(5),
84: -- logical --
85: and(6), or(7), not(8),
86: -- constants --
87: filterNone(9), all(10),
88: -- patterns --
89: matches(11) };
90: RestrictedFilter: TYPE = CHOICE FilterType OF {
91: less, lessOrEqual, equal, notEqual, greaterOrEqual, greater =>
92: RECORD [attribute: Attribute, interpretation: Interpretation],
93: -- interpretation ignored if attribute interpreted by
94: -- implementor
95: -- NOT IMPLEMENTED: and, or, not --
96: filterNone, all => RECORD [],
97: matches => RECORD [attribute: Attribute] };
98: Filter: TYPE = CHOICE FilterType OF {
99: less, lessOrEqual, equal, notEqual, greaterOrEqual, greater =>
100: RECORD [attribute: Attribute, interpretation: Interpretation],
101: -- interpretation ignored if attribute interpreted by
102: -- implementor
103: -- NOT YET IMPLEMENTED: (at least, not generally) and, or, not --
104: and, or => SEQUENCE OF RestrictedFilter,
105: not => RestrictedFilter,
106: filterNone, all => RECORD [],
107: matches => RECORD [attribute: Attribute] };
108: nullFilter: Filter = all[];
109:
110: ScopeType: TYPE = { count(0), direction(1), filter(2), depth(3) };
111: Scope: TYPE = CHOICE ScopeType OF {
112: count => Count,
113: depth => Depth,
114: direction => Direction,
115: filter => Filter };
116: ScopeSequence: TYPE = SEQUENCE 4 OF Scope;
117:
118: -- Handles and Authentication --
119:
120: Credentials: TYPE = Authentication.Credentials;
121: Verifier: TYPE = Authentication.Verifier;
122: SimpleVerifier: TYPE = Authentication.SimpleVerifier;
123:
124: Handle: TYPE = ARRAY 2 OF UNSPECIFIED;
125: nullHandle: Handle = [0,0];
126:
127: Session: TYPE = RECORD [token: ARRAY 2 OF UNSPECIFIED, verifier: Verifier ];
128:
129: -- REMOTE ERRORS --
130:
131: ArgumentProblem: TYPE = {
132: illegal(0),
133: disallowed(1),
134: unreasonable(2),
135: unimplemented(3),
136: duplicated(4),
137: missing(5) };
138:
139: -- problem with an attribute type or value --
140: AttributeTypeError: ERROR [ problem: ArgumentProblem, type: AttributeType]
141: = 0;
142: AttributeValueError: ERROR [ problem: ArgumentProblem, type: AttributeType]
143: = 1;
144:
145: -- problem with an control type or value --
146: ControlTypeError: ERROR [ problem: ArgumentProblem, type: ControlType]
147: = 2;
148: ControlValueError: ERROR [ problem: ArgumentProblem, type: ControlType]
149: = 3;
150:
151: -- problem with an scope type or value --
152: ScopeTypeError: ERROR [ problem: ArgumentProblem, type: ScopeType]
153: = 4;
154: ScopeValueError: ERROR [ problem: ArgumentProblem, type: ScopeType]
155: = 5;
156:
157: -- problem in obtaining access to a file --
158: AccessProblem: TYPE = {
159: accessRightsInsufficient(0),
160: accessRightsIndeterminate(1),
161: fileChanged(2),
162: fileDamaged(3),
163: fileInUse(4),
164: fileNotFound(5),
165: fileOpen(6) };
166: AccessError: ERROR [problem: AccessProblem] = 6;
167:
168: -- problem with a credentials or verifier --
169: AuthenticationError: ERROR [problem: Authentication.Problem] = 7;
170:
171: -- problem with a BDT --
172: ConnectionProblem: TYPE = {
173: -- communication problems --
174: noRoute(0),
175: noResponse(1),
176: transmissionHardware(2),
177: transportTimeout(3),
178: -- resource problems --
179: tooManyLocalConnections(4),
180: tooManyRemoteConnections(5),
181: -- remote program implementation problems --
182: missingCourier(6),
183: missingProgram(7),
184: missingProcedure(8),
185: protocolMismatch(9),
186: parameterInconsistency(10),
187: invalidMessage(11),
188: returnTimedOut(12),
189: -- miscellaneous --
190: otherCallProblem(177777B) };
191: ConnectionError: ERROR [problem: ConnectionProblem] = 8;
192:
193: -- problem with file handle --
194: HandleProblem: TYPE = {
195: invalid(0),
196: nullDisallowed(1),
197: directoryRequired(2) };
198: HandleError: ERROR [problem: HandleProblem] = 9;
199:
200: -- problem during insertion in directory or changing attributes --
201: InsertionProblem: TYPE = {
202: positionUnavailable(0),
203: fileNotUnique(1),
204: loopInHierarchy(2) };
205: InsertionError: ERROR [problem: InsertionProblem] = 10;
206:
207: -- problem during random access operation --
208: RangeError: ERROR [problem: ArgumentProblem] = 16;
209:
210: -- problem during logon or logoff --
211: ServiceProblem: TYPE = {
212: cannotAuthenticate(0),
213: serviceFull(1),
214: serviceUnavailable(2),
215: sessionInUse(3) };
216: ServiceError: ERROR [problem: ServiceProblem] = 11;
217:
218: -- problem with a session --
219: SessionProblem: TYPE = {
220: tokenInvalid(0),
221: serviceAlreadySet(1) };
222: SessionError: ERROR [problem: SessionProblem ] = 12;
223:
224: -- problem obtaining space for file contents or attributes --
225: SpaceProblem: TYPE = {
226: allocationExceeded(0),
227: attributeAreaFull(1),
228: mediumFull(2) };
229: SpaceError: ERROR [problem: SpaceProblem ] = 13;
230:
231: -- problem during BDT --
232: TransferProblem: TYPE = {
233: aborted(0),
234: checksumIncorrect(1),
235: formatIncorrect(2),
236: noRendezvous(3),
237: wrongDirection(4) };
238: TransferError: ERROR [problem: TransferProblem ] = 14;
239:
240: -- some undefined (and implementation-dependent) problem occurred --
241: UndefinedProblem: TYPE = CARDINAL;
242: UndefinedError: ERROR [problem: UndefinedProblem ] = 15;
243:
244:
245:
246:
247: -- REMOTE PROCEDURES --
248:
249: -- Logging On and Off --
250:
251: Logon: PROCEDURE [
252: service: Clearinghouse.Name, credentials: Credentials,
253: verifier: Verifier ]
254: RETURNS [ session: Session ]
255: REPORTS [ AuthenticationError, ServiceError, SessionError,
256: UndefinedError ]
257: = 0;
258:
259: Logoff: PROCEDURE [ session: Session ]
260: REPORTS [ AuthenticationError, ServiceError, SessionError,
261: UndefinedError ]
262: = 1;
263:
264: SetService: PROCEDURE [service: Clearinghouse.Name, session: Session ]
265: REPORTS [ AuthenticationError, ServiceError, SessionError,
266: UndefinedError ]
267: = 21;
268:
269: Continue: PROCEDURE [ session: Session ]
270: RETURNS [ continuance: CARDINAL ]
271: REPORTS [ AuthenticationError, SessionError, UndefinedError ]
272: = 19;
273:
274: -- Opening and Closing Files --
275:
276: Open: PROCEDURE [ attributes: AttributeSequence, directory: Handle,
277: controls: ControlSequence, session: Session ]
278: RETURNS [ file: Handle ]
279: REPORTS [ AccessError, AttributeTypeError, AttributeValueError,
280: AuthenticationError, ControlTypeError, ControlValueError,
281: HandleError, SessionError, UndefinedError ]
282: = 2;
283:
284: Close: PROCEDURE [ file: Handle, session: Session ]
285: REPORTS [ AuthenticationError, HandleError, SessionError,
286: UndefinedError ]
287: = 3;
288:
289: -- Creating and Deleting Files --
290:
291: Create: PROCEDURE [ directory: Handle, attributes: AttributeSequence,
292: controls: ControlSequence, session: Session ]
293: RETURNS [ file: Handle ]
294: REPORTS [ AccessError, AttributeTypeError, AttributeValueError,
295: AuthenticationError, ControlTypeError, ControlValueError,
296: HandleError, InsertionError, SessionError, SpaceError,
297: UndefinedError ]
298: = 4;
299:
300: Delete: PROCEDURE [ file: Handle, session: Session ]
301: REPORTS [AccessError, AuthenticationError, HandleError, SessionError,
302: UndefinedError ]
303: = 5;
304:
305: -- Getting and Changing Controls (transient) --
306:
307: GetControls: PROCEDURE [ file: Handle, types: ControlTypeSequence,
308: session: Session ]
309: RETURNS [ controls: ControlSequence ]
310: REPORTS [AccessError, AttributeTypeError, AuthenticationError,
311: ControlTypeError,
312: HandleError, SessionError, UndefinedError ]
313: = 6;
314:
315: ChangeControls: PROCEDURE [ file: Handle, controls: ControlSequence,
316: session: Session ]
317: REPORTS [AccessError, AttributeTypeError, AuthenticationError,
318: ControlTypeError, ControlValueError,
319: HandleError, SessionError, UndefinedError ]
320: = 7;
321:
322:
323: -- Getting and Changing Attributes (permanent) --
324:
325: GetAttributes: PROCEDURE [ file: Handle, types: AttributeTypeSequence,
326: session: Session ]
327: RETURNS [ attributes: AttributeSequence ]
328: REPORTS [AccessError, AttributeTypeError, AuthenticationError,
329: HandleError, SessionError, UndefinedError ]
330: = 8;
331:
332: ChangeAttributes: PROCEDURE [file: Handle, attributes: AttributeSequence,
333: session: Session ]
334: REPORTS [AccessError, AttributeTypeError, AuthenticationError,
335: HandleError, SessionError, SpaceError, UndefinedError ]
336: = 9;
337:
338: UnifyAccessLists: PROCEDURE [directory: Handle, session: Session ]
339: REPORTS [AccessError, AuthenticationError, HandleError, SessionError,
340: UndefinedError ]
341: = 20;
342:
343: -- Copying and Moving Files --
344:
345: Copy: PROCEDURE [ file, destinationDirectory: Handle ,
346: attributes: AttributeSequence, controls: ControlSequence,
347: awaaion: Session ]
348: RETURNS [ newFile: Handle ]
349: REPORTS [AccessError, AttributeTypeError, AttributeValueError,
350: AuthenticationError, ControlTypeError, ControlValueError,
351: HandleError, InsertionError, SessionError, SpaceError,
352: UndefinedError ]
353: = 10;
354:
355: Move: PROCEDURE [ file, destinationDirectory: Handle ,
356: attributes: AttributeSequence, controls: ControlSequence,
357: awaaion: Session ]
358: RETURNS [ newFile: Handle ]
359: REPORTS [AccessError, AttributeTypeError, AttributeValueError,
360: AuthenticationError, HandleError, InsertionError,
361: SessionError, SpaceError, UndefinedError ]
362: = 11;
363:
364: -- Transfering Bulk Data (File Content) --
365:
366: Store: PROCEDURE [ directory: Handle, attributes: AttributeSequence,
367: controls: ControlSequence, content: BulkData.Source,
368: session: Session ]
369: RETURNS [ file: Handle ]
370: REPORTS [AccessError, AttributeTypeError, AttributeValueError,
371: AuthenticationError, ConnectionError, ControlTypeError,
372: ControlValueError, HandleError, InsertionError, SessionError,
373: SpaceError, TransferError, UndefinedError ]
374: = 12;
375:
376: Retrieve: PROCEDURE [ file: Handle, content: BulkData.Sink, session: Session ]
377: REPORTS [AccessError, AuthenticationError, ConnectionError,
378: HandleError, SessionError, SpaceError, TransferError,
379: UndefinedError ]
380: = 13;
381:
382: Replace: PROCEDURE [ file: Handle, attributes: AttributeSequence,
383: content: BulkData.Source, session: Session ]
384: REPORTS [AccessError, AttributeTypeError, AttributeValueError,
385: AuthenticationError, ConnectionError, HandleError,
386: SessionError, SpaceError, TransferError, UndefinedError ]
387: = 14;
388:
389: -- Transferring Bulk Data (Serialized Files) --
390:
391: -- NOT YET IMPLEMENTED --
392:
393: -- Locating and Listing Files in a Directory --
394:
395: Find: PROCEDURE [ directory: Handle, scope: ScopeSequence,
396: controls: ControlSequence, session: Session ]
397: RETURNS [ file: Handle ]
398: REPORTS [ AccessError, AuthenticationError, ConnectionError,
399: ControlTypeError, ControlValueError, HandleError,
400: ScopeTypeError, ScopeValueError,
401: SessionError, UndefinedError ]
402: = 17;
403:
404: List: PROCEDURE [ directory: Handle, types: AttributeTypeSequence,
405: scope: ScopeSequence, listing: BulkData.Sink,
406: session: Session ]
407: REPORTS [ AccessError, AttributeTypeError,
408: AuthenticationError, ConnectionError,
409: HandleError,
410: ScopeTypeError, ScopeValueError,
411: SessionError, TransferError, UndefinedError ]
412: = 18;
413:
414:
415:
416:
417:
418: -- INTERPRETED ATTRIBUTE DEFINITIONS --
419:
420: -- common definitions --
421:
422: Time: TYPE = Time.Time; -- seconds --
423: nullTime: Time = Time.earliestTime;
424:
425: User: TYPE = Clearinghouse.Name;
426:
427: -- attributes --
428:
429: checksum: AttributeType = 0;
430: Checksum: TYPE = CARDINAL;
431: unknownChecksum: Checksum = 177777B;
432:
433: childrenUniquelyNamed: AttributeType = 1;
434: ChildrenUniquelyNamed: TYPE = BOOLEAN;
435:
436: createdBy: AttributeType = 2;
437: CreatedBy: TYPE = User;
438:
439: createdOn: AttributeType = 3;
440: CreatedOn: TYPE = Time;
441:
442: dataSize: AttributeType = 16;
443: DataSize: TYPE = LONG CARDINAL;
444:
445: fileID: AttributeType = 4;
446: FileID: TYPE = ARRAY 5 OF UNSPECIFIED;
447: nullFileID: FileID = [0,0,0,0,0];
448:
449: isDirectory: AttributeType = 5;
450: IsDirectory: TYPE = BOOLEAN;
451:
452: isTemporary: AttributeType = 6;
453: IsTemporary: TYPE = BOOLEAN;
454:
455: modifiedBy: AttributeType = 7;
456: ModifiedBy: TYPE = User;
457:
458: modifiedOn: AttributeType = 8;
459: ModifiedOn: TYPE = Time;
460:
461: name: AttributeType = 9; -- name relative to parent --
462: Name: TYPE = STRING; -- must not exceed 100 bytes --
463:
464: numberOfChildren: AttributeType = 10;
465: NumberOfChildren: TYPE = CARDINAL;
466:
467: ordering: AttributeType = 11;
468: Ordering: TYPE = RECORD [key: AttributeType, ascending: BOOLEAN,
469: interpretation: Interpretation];
470: -- see below for defaultOrdering, byAscendingPosition, byDescendingPosition --
471:
472: parentID: AttributeType = 12;
473: ParentID: TYPE = FileID;
474:
475: pathname: AttributeType = 21;
476: Pathname: TYPE = STRING;
477:
478: position: AttributeType = 11;
479: Position: TYPE = SEQUENCE 100 OF UNSPECIFIED;
480: firstPosition: Position = [0];
481: lastPosition: Position = [177777B];
482:
483: readBy: AttributeType = 14;
484: ReadBy: TYPE = User;
485:
486: readOn: AttributeType = 15;
487: ReadOn: TYPE = Time;
488:
489: subtreeSize: AttributeType = 23;
490: SubtreeSize: TYPE = LONG CARDINAL;
491:
492: subtreeSizeLimit: AttributeType = 24;
493: SubtreeSizeLimit: TYPE = LONG CARDINAL;
494: nullSubtreeSizeLimit: SubtreeSizeLimit = 37777777777B;
495:
496: type: AttributeType = 17;
497: Type: TYPE = LONG CARDINAL;
498:
499: version: AttributeType = 18;
500: Version: TYPE = CARDINAL;
501: lowestVersion: Version = 0;
502: highestVersion: Version = 177777B;
503:
504: defaultOrdering: Ordering = [key: name, ascending: TRUE, interpretation:
505: string];
506: byAscendingPosition: Ordering = [key: position, ascending: TRUE,
507: interpretation: interpretationNone];
508: byDescendingPosition: Ordering = [key: position, ascending: FALSE,
509: interpretation: interpretationNone];
510:
511:
512:
513:
514: -- BULK DATA FORMATS --
515:
516: -- NOT YET IMPLEMENTED --
517:
518:
519: -- Attribute Series Format, used in List --
520:
521: StreamOfAttributeSequence: TYPE = CHOICE OF {
522: nextSegment(0) => RECORD [
523: segment: SEQUENCE OF AttributeSequence,
524: restOfStream: StreamOfAttributeSequence],
525: lastSegment(1) => SEQUENCE OF AttributeSequence};
526:
527:
528:
529:
530:
531: -- FILE TYPES --
532:
533: tUnspecified: Type = 0;
534: tDirectory: Type = 1;
535: tText: Type = 2;
536: tSerialized: Type = 3;
537:
538:
539: END. -- of Filing --
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.