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