|
|
1.1 root 1: -- $Header: Filing6.cr,v 2.6 87/03/23 13:06:48 ed 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: Filing6.cr,v $
8: -- Revision 2.6 87/03/23 13:06:48 ed
9: -- Minor Typo in SerializedTree.
10: --
11: -- Revision 2.5 87/03/23 11:49:18 ed
12: -- Slight mod to SerializedTree to allow current implementation.
13: --
14: -- Revision 2.4 87/01/12 16:45:24 ed
15: -- Created Filing version 6 from Filing version 4
16: --
17: -- Revision 2.2 86/06/30 11:31:13 jqj
18: -- convert to Authentication v 2 for compatibility with spec., now that
19: -- compiler allows it.
20: --
21: -- Revision 2.1 86/06/02 07:08:22 jqj
22: -- typos
23: --
24: -- Revision 2.0 85/11/21 07:22:38 jqj
25: -- 4.3BSD standard release
26: --
27: -- Revision 1.1 85/05/27 06:30:46 jqj
28: -- Initial revision
29: --
30: -- Revision 1.1 85/05/27 06:30:46 jqj
31: -- Initial revision
32: --
33:
34: Filing: PROGRAM 10 VERSION 6 =
35: BEGIN
36: DEPENDS UPON
37: BulkData(0) VERSION 1,
38: Clearinghouse(2) VERSION 3,
39: Authentication(14) VERSION 3,
40: Time(15) VERSION 2;
41:
42:
43:
44:
45: -- TYPES AND CONSTANTS --
46:
47: -- Attributes (individual attributes defined later) --
48:
49: AttributeType: TYPE = LONG CARDINAL;
50: AttributeTypeSequence: TYPE = SEQUENCE OF AttributeType;
51: allAttributeTypes: AttributeTypeSequence = [37777777777B];
52: Attribute: TYPE = RECORD [type: AttributeType, value: SEQUENCE OF UNSPECIFIED];
53: AttributeSequence: TYPE = SEQUENCE OF Attribute;
54:
55: -- Controls --
56:
57: ControlType: TYPE = {lockControl(0), timeoutControl(1), accessControl(2)};
58: ControlTypeSequence: TYPE = SEQUENCE 3 OF ControlType;
59:
60: Lock: TYPE = {lockNone(0), share(1), exclusive(2)};
61:
62: Timeout: TYPE = CARDINAL; -- in seconds --
63: defaultTimeout: Timeout = 177777B; -- actual value impl.-dependent --
64:
65: AccessType: TYPE = {
66: readAccess(0), writeAccess(1), ownerAccess(2), -- all files --
67: addAccess(3), removeAccess(4) }; -- directories only --
68: AccessSequence: TYPE = SEQUENCE 5 OF AccessType;
69: -- fullAccess: AccessSequence = [177777B]; --
70:
71: Control: TYPE = CHOICE ControlType OF {
72: lockControl => Lock,
73: timeoutControl => Timeout,
74: accessControl => AccessSequence};
75: ControlSequence: TYPE = SEQUENCE 3 OF Control;
76:
77: -- Scopes --
78:
79: Count: TYPE = CARDINAL;
80: unlimitedCount: Count = 177777B;
81:
82: Depth: TYPE = CARDINAL;
83: allDescendants: Depth = 177777B;
84:
85: Direction: TYPE = {forward(0), backward(1)};
86:
87: Interpretation: TYPE = { interpretationNone(0), boolean(1), cardinal(2),
88: longCardinal(3), time(4), integer(5), longInteger(6), string(7) };
89: FilterType: TYPE = {
90: -- relations --
91: less(0), lessOrEqual(1), equal(2), notEqual(3), greaterOrEqual(4),
92: greater(5),
93: -- logical --
94: and(6), or(7), not(8),
95: -- constants --
96: filterNone(9), all(10),
97: -- patterns --
98: matches(11) };
99: RestrictedFilter: TYPE = CHOICE FilterType OF {
100: less, lessOrEqual, equal, notEqual, greaterOrEqual, greater =>
101: RECORD [attribute: Attribute, interpretation: Interpretation],
102: -- interpretation ignored if attribute interpreted by
103: -- implementor
104: -- NOT IMPLEMENTED: and, or, not --
105: filterNone, all => RECORD [],
106: matches => RECORD [attribute: Attribute] };
107: Filter: TYPE = CHOICE FilterType OF {
108: less, lessOrEqual, equal, notEqual, greaterOrEqual, greater =>
109: RECORD [attribute: Attribute, interpretation: Interpretation],
110: -- interpretation ignored if attribute interpreted by
111: -- implementor
112: -- NOT YET IMPLEMENTED: (at least, not generally) and, or, not --
113: and, or => SEQUENCE OF RestrictedFilter,
114: not => RestrictedFilter,
115: filterNone, all => RECORD [],
116: matches => RECORD [attribute: Attribute] };
117: nullFilter: Filter = all[];
118:
119: ScopeType: TYPE = { count(0), direction(1), filter(2), depth(3) };
120: Scope: TYPE = CHOICE ScopeType OF {
121: count => Count,
122: depth => Depth,
123: direction => Direction,
124: filter => Filter };
125: ScopeSequence: TYPE = SEQUENCE 4 OF Scope;
126:
127: -- Handles and Authentication --
128:
129: PrimaryCredentials: TYPE = Authentication.Credentials;
130: -- nullPrimaryCredentials: PrimaryCredentials = Authentication.nullCredentials;
131:
132: -- Secondary credentials --
133:
134: SecondaryItemType: TYPE = LONG CARDINAL;
135: SecondaryType: TYPE = SEQUENCE 10 OF SecondaryItemType;
136:
137: SecondaryItem: TYPE = RECORD [
138: type: SecondaryItemType,
139: value: SEQUENCE OF UNSPECIFIED ];
140:
141: Secondary: TYPE = SEQUENCE 10 OF SecondaryItem;
142:
143: systemPassword: SecondaryItemType = 1;
144: SystemPassword : TYPE = STRING; -- value is private --
145:
146: userName: SecondaryItemType = 2;
147: UserName: TYPE = STRING; -- value is not private --
148:
149: userPassword: SecondaryItemType = 3;
150: UserPassword: TYPE = STRING; -- value is private --
151:
152: userPassword2: SecondaryItemType = 4;
153: UserPassword2: TYPE = STRING; -- value is private --
154:
155: userServiceName: SecondaryItemType = 5;
156: UserServiceName: TYPE = STRING; -- value is not private --
157:
158: userServicePassword: SecondaryItemType = 6;
159: UserServicePassword: TYPE = STRING; -- value is private --
160:
161: userServicePassword2: SecondaryItemType = 7;
162: UserServicePassword2: TYPE = STRING; -- value is private --
163:
164: accountName: SecondaryItemType = 8;
165: AccountName: TYPE = STRING; -- value is not private --
166:
167: accountPassword: SecondaryItemType = 9;
168: AccountPassword: TYPE = STRING; -- value is private --
169:
170: accountPassword2: SecondaryItemType = 10;
171: AccountPassword2: TYPE = STRING; -- value is private --
172:
173: secondaryString: SecondaryItemType = 1000;
174: SecondaryString: TYPE = STRING; -- value is not private --
175:
176: privateSecondaryString: SecondaryItemType = 1001;
177: PrivateSecondaryString: TYPE = STRING; -- value is not private --
178:
179: EncryptedSecondary: TYPE = SEQUENCE OF Authentication.Block;
180:
181: Strength: TYPE = { strengthNone(0), simple(1), strong(2) };
182: SecondaryCredentials: TYPE = CHOICE Strength OF {
183: strengthNone => RECORD [],
184: simple => Secondary,
185: strong => EncryptedSecondary };
186:
187: Credentials: TYPE = RECORD [
188: primary: PrimaryCredentials,
189: secondary: SecondaryCredentials ];
190:
191: Verifier: TYPE = Authentication.Verifier;
192:
193: Handle: TYPE = ARRAY 2 OF UNSPECIFIED;
194: nullHandle: Handle = [0,0];
195:
196: Session: TYPE = RECORD [token: ARRAY 2 OF UNSPECIFIED, verifier: Verifier ];
197:
198: -- Random Access --
199:
200: ByteAddress: TYPE = LONG CARDINAL;
201: ByteCount: TYPE = LONG CARDINAL;
202: endOfFile: LONG CARDINAL = 3777777777B; -- logical end of file --
203:
204: ByteRange: TYPE = RECORD [ firstByte: ByteAddress, count: ByteCount ];
205:
206:
207:
208:
209:
210: -- REMOTE ERRORS --
211:
212: ArgumentProblem: TYPE = {
213: illegal(0),
214: disallowed(1),
215: unreasonable(2),
216: unimplemented(3),
217: duplicated(4),
218: missing(5) };
219:
220: -- problem with an attribute type or value --
221: AttributeTypeError: ERROR [ problem: ArgumentProblem, type: AttributeType]
222: = 0;
223: AttributeValueError: ERROR [ problem: ArgumentProblem, type: AttributeType]
224: = 1;
225:
226: -- problem with an control type or value --
227: ControlTypeError: ERROR [ problem: ArgumentProblem, type: ControlType]
228: = 2;
229: ControlValueError: ERROR [ problem: ArgumentProblem, type: ControlType]
230: = 3;
231:
232: -- problem with an scope type or value --
233: ScopeTypeError: ERROR [ problem: ArgumentProblem, type: ScopeType]
234: = 4;
235: ScopeValueError: ERROR [ problem: ArgumentProblem, type: ScopeType]
236: = 5;
237:
238: -- problem in obtaining access to a file --
239: AccessProblem: TYPE = {
240: accessRightsInsufficient(0),
241: accessRightsIndeterminate(1),
242: fileChanged(2),
243: fileDamaged(3),
244: fileInUse(4),
245: fileNotFound(5),
246: fileOpen(6) };
247: AccessError: ERROR [problem: AccessProblem] = 6;
248:
249: -- problem with a credentials or verifier --
250: AuthenticationProblem: TYPE = {
251: primaryCredentialsInvalid(0),
252: verifierInvalid(1),
253: verifierExpired(2),
254: verifierReused(3),
255: primaryCredentialsExpired(4),
256: inappropriatePrimaryCredentials(5),
257: secondaryCredentialsRequired(6),
258: secondaryCredentialsTypeInvalid(7),
259: secondaryCredentialsValueInvalid(8) };
260: AuthenticationError: ERROR [problem: AuthenticationProblem,
261: type: SecondaryType] = 7;
262:
263: -- problem with a BDT --
264: ConnectionProblem: TYPE = {
265: -- communication problems --
266: noRoute(0),
267: noResponse(1),
268: transmissionHardware(2),
269: transportTimeout(3),
270: -- resource problems --
271: tooManyLocalConnections(4),
272: tooManyRemoteConnections(5),
273: -- remote program implementation problems --
274: missingCourier(6),
275: missingProgram(7),
276: missingProcedure(8),
277: protocolMismatch(9),
278: parameterInconsistency(10),
279: invalidMessage(11),
280: returnTimedOut(12),
281: -- miscellaneous --
282: otherCallProblem(177777B) };
283: ConnectionError: ERROR [problem: ConnectionProblem] = 8;
284:
285: -- problem with file handle --
286: HandleProblem: TYPE = {
287: invalid(0),
288: nullDisallowed(1),
289: directoryRequired(2) };
290: HandleError: ERROR [problem: HandleProblem] = 9;
291:
292: -- problem during insertion in directory or changing attributes --
293: InsertionProblem: TYPE = {
294: positionUnavailable(0),
295: fileNotUnique(1),
296: loopInHierarchy(2) };
297: InsertionError: ERROR [problem: InsertionProblem] = 10;
298:
299: -- problem during random access operation --
300: RangeError: ERROR [problem: ArgumentProblem] = 16;
301:
302: -- problem during logon or logoff --
303: ServiceProblem: TYPE = {
304: cannotAuthenticate(0),
305: serviceFull(1),
306: serviceUnavailable(2),
307: sessionInUse(3) };
308: ServiceError: ERROR [problem: ServiceProblem] = 11;
309:
310: -- problem with a session --
311: SessionProblem: TYPE = {
312: tokenInvalid(0) };
313: SessionError: ERROR [problem: SessionProblem ] = 12;
314:
315: -- problem obtaining space for file contents or attributes --
316: SpaceProblem: TYPE = {
317: allocationExceeded(0),
318: attributeAreaFull(1),
319: mediumFull(2) };
320: SpaceError: ERROR [problem: SpaceProblem ] = 13;
321:
322: -- problem during BDT --
323: TransferProblem: TYPE = {
324: aborted(0),
325: checksumIncorrect(1),
326: formatIncorrect(2),
327: noRendezvous(3),
328: wrongDirection(4) };
329: TransferError: ERROR [problem: TransferProblem ] = 14;
330:
331: -- some undefined (and implementation-dependent) problem occurred --
332: UndefinedProblem: TYPE = CARDINAL;
333: UndefinedError: ERROR [problem: UndefinedProblem ] = 15;
334:
335:
336:
337:
338: -- REMOTE PROCEDURES --
339:
340: -- Logging On and Off --
341:
342: Logon: PROCEDURE [
343: service: Clearinghouse.Name, credentials: Credentials,
344: verifier: Verifier ]
345: RETURNS [ session: Session ]
346: REPORTS [ AuthenticationError, ServiceError, SessionError,
347: UndefinedError ]
348: = 0;
349:
350: Logoff: PROCEDURE [ session: Session ]
351: REPORTS [ AuthenticationError, ServiceError, SessionError,
352: UndefinedError ]
353: = 1;
354:
355: Continue: PROCEDURE [ session: Session ]
356: RETURNS [ continuance: CARDINAL ]
357: REPORTS [ AuthenticationError, SessionError, UndefinedError ]
358: = 19;
359:
360: -- Opening and Closing Files --
361:
362: Open: PROCEDURE [ attributes: AttributeSequence, directory: Handle,
363: controls: ControlSequence, session: Session ]
364: RETURNS [ file: Handle ]
365: REPORTS [ AccessError, AttributeTypeError, AttributeValueError,
366: AuthenticationError, ControlTypeError, ControlValueError,
367: HandleError, SessionError, UndefinedError ]
368: = 2;
369:
370: Close: PROCEDURE [ file: Handle, session: Session ]
371: REPORTS [ AuthenticationError, HandleError, SessionError,
372: UndefinedError ]
373: = 3;
374:
375: -- Creating and Deleting Files --
376:
377: Create: PROCEDURE [ directory: Handle, attributes: AttributeSequence,
378: controls: ControlSequence, session: Session ]
379: RETURNS [ file: Handle ]
380: REPORTS [ AccessError, AttributeTypeError, AttributeValueError,
381: AuthenticationError, ControlTypeError, ControlValueError,
382: HandleError, InsertionError, SessionError, SpaceError,
383: UndefinedError ]
384: = 4;
385:
386: Delete: PROCEDURE [ file: Handle, session: Session ]
387: REPORTS [ AccessError, AuthenticationError, HandleError, SessionError,
388: UndefinedError ]
389: = 5;
390:
391: -- Getting and Changing Controls (transient) --
392:
393: GetControls: PROCEDURE [ file: Handle, types: ControlTypeSequence,
394: session: Session ]
395: RETURNS [ controls: ControlSequence ]
396: REPORTS [ AccessError, AuthenticationError, ControlTypeError,
397: HandleError, SessionError, UndefinedError ]
398: = 6;
399:
400: ChangeControls: PROCEDURE [ file: Handle, controls: ControlSequence,
401: session: Session ]
402: REPORTS [ AccessError, AuthenticationError,
403: ControlTypeError, ControlValueError,
404: HandleError, SessionError, UndefinedError ]
405: = 7;
406:
407:
408: -- Getting and Changing Attributes (permanent) --
409:
410: GetAttributes: PROCEDURE [ file: Handle, types: AttributeTypeSequence,
411: session: Session ]
412: RETURNS [ attributes: AttributeSequence ]
413: REPORTS [ AccessError, AttributeTypeError, AuthenticationError,
414: HandleError, SessionError, UndefinedError ]
415: = 8;
416:
417: ChangeAttributes: PROCEDURE [ file: Handle, attributes: AttributeSequence,
418: session: Session ]
419: REPORTS [ AccessError, AttributeTypeError, AttributeValueError,
420: AuthenticationError, HandleError, InsertionError,
421: SessionError, SpaceError, UndefinedError ]
422: = 9;
423:
424: UnifyAccessLists: PROCEDURE [ directory: Handle, session: Session ]
425: REPORTS [ AccessError, AuthenticationError, HandleError, SessionError,
426: UndefinedError ]
427: = 20;
428:
429: -- Copying and Moving Files --
430:
431: Copy: PROCEDURE [ file, destinationDirectory: Handle ,
432: attributes: AttributeSequence, controls: ControlSequence,
433: session: Session ]
434: RETURNS [ newFile: Handle ]
435: REPORTS [ AccessError, AttributeTypeError, AttributeValueError,
436: AuthenticationError, ControlTypeError, ControlValueError,
437: HandleError, InsertionError, SessionError, SpaceError,
438: UndefinedError ]
439: = 10;
440:
441: Move: PROCEDURE [ file, destinationDirectory: Handle ,
442: attributes: AttributeSequence, session: Session ]
443: REPORTS [ AccessError, AttributeTypeError, AttributeValueError,
444: AuthenticationError, HandleError, InsertionError,
445: SessionError, SpaceError, UndefinedError ]
446: = 11;
447:
448: -- Transfering Bulk Data (File Content) --
449:
450: Store: PROCEDURE [ directory: Handle, attributes: AttributeSequence,
451: controls: ControlSequence, content: BulkData.Source,
452: session: Session ]
453: RETURNS [ file: Handle ]
454: REPORTS [ AccessError, AttributeTypeError, AttributeValueError,
455: AuthenticationError, ConnectionError, ControlTypeError,
456: ControlValueError, HandleError, InsertionError, SessionError,
457: SpaceError, TransferError, UndefinedError ]
458: = 12;
459:
460: Retrieve: PROCEDURE [ file: Handle, content: BulkData.Sink, session: Session ]
461: REPORTS [ AccessError, AuthenticationError, ConnectionError,
462: HandleError, SessionError, TransferError,
463: UndefinedError ]
464: = 13;
465:
466: Replace: PROCEDURE [ file: Handle, attributes: AttributeSequence,
467: content: BulkData.Source, session: Session ]
468: REPORTS [ AccessError, AttributeTypeError, AttributeValueError,
469: AuthenticationError, ConnectionError, HandleError,
470: SessionError, SpaceError, TransferError, UndefinedError ]
471: = 14;
472:
473: -- Transferring Bulk Data (Serialized Files) --
474:
475: Serialize: PROCEDURE [ file: Handle, serializedFile: BulkData.Sink,
476: session: Session ]
477: REPORTS [ AccessError, AuthenticationError, ConnectionError,
478: HandleError, SessionError, TransferError, UndefinedError ]
479: = 15;
480:
481: Deserialize: PROCEDURE [ directory: Handle, attributes: AttributeSequence,
482: controls: ControlSequence, serializedFile: BulkData.Source,
483: session: Session ]
484: RETURNS [ file: Handle ]
485: REPORTS [ AccessError, AttributeTypeError, AttributeValueError,
486: AuthenticationError, ConnectionError, ControlTypeError,
487: ControlValueError, HandleError, InsertionError,
488: SessionError, SpaceError, TransferError, UndefinedError ]
489: = 16;
490:
491: -- Random Access to File Data --
492:
493: RetrieveBytes: PROCEDURE [ file: Handle, range: ByteRange,
494: sink: BulkData.Sink, session: Session ]
495: REPORTS [ AccessError, HandleError, RangeError, SessionError,
496: UndefinedError ]
497: = 22;
498:
499: ReplaceBytes: PROCEDURE [ file: Handle, range: ByteRange,
500: source: BulkData.Source, session: Session ]
501: REPORTS [ AccessError, HandleError, RangeError, SessionError,
502: SpaceError, UndefinedError ]
503: = 23;
504:
505: -- Locating and Listing Files in a Directory --
506:
507: Find: PROCEDURE [ directory: Handle, scope: ScopeSequence,
508: controls: ControlSequence, session: Session ]
509: RETURNS [ file: Handle ]
510: REPORTS [ AccessError, AuthenticationError,
511: ControlTypeError, ControlValueError, HandleError,
512: ScopeTypeError, ScopeValueError,
513: SessionError, UndefinedError ]
514: = 17;
515:
516: List: PROCEDURE [ directory: Handle, types: AttributeTypeSequence,
517: scope: ScopeSequence, listing: BulkData.Sink,
518: session: Session ]
519: REPORTS [ AccessError, AttributeTypeError,
520: AuthenticationError, ConnectionError,
521: HandleError,
522: ScopeTypeError, ScopeValueError,
523: SessionError, TransferError, UndefinedError ]
524: = 18;
525:
526:
527:
528:
529:
530: -- INTERPRETED ATTRIBUTE DEFINITIONS --
531:
532: -- common definitions --
533:
534: Time: TYPE = Time.Time; -- seconds --
535: nullTime: Time = Time.earliestTime;
536:
537: User: TYPE = Clearinghouse.Name;
538:
539: -- attributes --
540:
541: accessList: AttributeType = 19;
542: AccessEntry: TYPE = RECORD [key: Clearinghouse.Name, access: AccessSequence];
543: AccessList: TYPE = RECORD [entries: SEQUENCE OF AccessEntry, defaulted: BOOLEAN];
544:
545: checksum: AttributeType = 0;
546: Checksum: TYPE = CARDINAL;
547: unknownChecksum: Checksum = 177777B;
548:
549: childrenUniquelyNamed: AttributeType = 1;
550: ChildrenUniquelyNamed: TYPE = BOOLEAN;
551:
552: createdBy: AttributeType = 2;
553: CreatedBy: TYPE = User;
554:
555: createdOn: AttributeType = 3;
556: CreatedOn: TYPE = Time;
557:
558: dataSize: AttributeType = 16;
559: DataSize: TYPE = LONG CARDINAL;
560:
561: defaultAccessList: AttributeType = 20;
562: DefaultAccessList: TYPE = AccessList;
563:
564: fileID: AttributeType = 4;
565: FileID: TYPE = ARRAY 5 OF UNSPECIFIED;
566: nullFileID: FileID = [0,0,0,0,0];
567:
568: isDirectory: AttributeType = 5;
569: IsDirectory: TYPE = BOOLEAN;
570:
571: isTemporary: AttributeType = 6;
572: IsTemporary: TYPE = BOOLEAN;
573:
574: modifiedBy: AttributeType = 7;
575: ModifiedBy: TYPE = User;
576:
577: modifiedOn: AttributeType = 8;
578: ModifiedOn: TYPE = Time;
579:
580: name: AttributeType = 9; -- name relative to parent --
581: Name: TYPE = STRING; -- must not exceed 100 bytes --
582:
583: numberOfChildren: AttributeType = 10;
584: NumberOfChildren: TYPE = CARDINAL;
585:
586: ordering: AttributeType = 11;
587: Ordering: TYPE = RECORD [key: AttributeType, ascending: BOOLEAN,
588: interpretation: Interpretation];
589: -- see below for defaultOrdering, byAscendingPosition, byDescendingPosition --
590:
591: parentID: AttributeType = 12;
592: ParentID: TYPE = FileID;
593:
594: pathname: AttributeType = 21;
595: Pathname: TYPE = STRING;
596:
597: position: AttributeType = 11;
598: Position: TYPE = SEQUENCE 100 OF UNSPECIFIED;
599: firstPosition: Position = [0];
600: lastPosition: Position = [177777B];
601:
602: readBy: AttributeType = 14;
603: ReadBy: TYPE = User;
604:
605: readOn: AttributeType = 15;
606: ReadOn: TYPE = Time;
607:
608: storedSize: AttributeType = 26;
609: StoredSize: TYPE = LONG CARDINAL;
610:
611: subtreeSize: AttributeType = 27;
612: SubtreeSize: TYPE = LONG CARDINAL;
613:
614: subtreeSizeLimit: AttributeType = 28;
615: SubtreeSizeLimit: TYPE = LONG CARDINAL;
616: nullSubtreeSizeLimit: SubtreeSizeLimit = 37777777777B;
617:
618: type: AttributeType = 17;
619: Type: TYPE = LONG CARDINAL;
620:
621: version: AttributeType = 18;
622: Version: TYPE = CARDINAL;
623: lowestVersion: Version = 0;
624: highestVersion: Version = 177777B;
625:
626: defaultOrdering: Ordering = [key: name, ascending: TRUE, interpretation:
627: string];
628: byAscendingPosition: Ordering = [key: position, ascending: TRUE,
629: interpretation: interpretationNone];
630: byDescendingPosition: Ordering = [key: position, ascending: FALSE,
631: interpretation: interpretationNone];
632:
633:
634:
635:
636:
637: -- BULK DATA FORMATS --
638:
639: -- Serialized File Format, used in Serialize and Deserialize --
640:
641: -- SerializedTree should contain the following but compiler won't allow it
642: -- Use Sequence of Unspecified to get around it for now.
643: --
644: -- SerializedTree: TYPE = RECORD [
645: -- attributes: AttributeSequence,
646: -- content: RECORD [ data: BulkData.StreamOfUnspecified ,
647: -- lastByteSignificant: BOOLEAN ],
648: -- children: SEQUENCE OF SerializedTree ];
649:
650: SerializedTree: TYPE = RECORD [
651: attributes: AttributeSequence,
652: content: RECORD [ data: BulkData.StreamOfUnspecified ,
653: lastByteSignificant: BOOLEAN ],
654: children: SEQUENCE OF UNSPECIFIED ];
655:
656: Serializedfile: TYPE = RECORD [ version: LONG CARDINAL, file: SerializedTree ];
657: currentVersion: LONG CARDINAL = 3;
658:
659:
660: -- Attribute Series Format, used in List --
661:
662: StreamOfAttributeSequence: TYPE = CHOICE OF {
663: nextSegment(0) => RECORD [
664: segment: SEQUENCE OF AttributeSequence,
665: restOfStream: StreamOfAttributeSequence ],
666: lastSegment(1) => SEQUENCE OF AttributeSequence };
667:
668: -- Line-oriented ASCII text file format, used in file interchange --
669:
670: AsciiString: TYPE = RECORD [
671: lastByteSignificant: BOOLEAN,
672: bytes: SEQUENCE OF UNSPECIFIED ];
673:
674: -- a liberty until the compiler can accept the alternate syntax --
675: -- see StreamOfAttributeSequence --
676:
677: LineType: TYPE = { nextLine(0), lastLine(1) };
678:
679: StreamOfAsciiText: TYPE = CHOICE LineType OF {
680: nextLine => RECORD [
681: line: AsciiString,
682: restOfText: StreamOfAsciiText ],
683: lastLine => AsciiString };
684:
685:
686:
687:
688: -- FILE TYPES --
689:
690: tUnspecified: Type = 0;
691: tDirectory: Type = 1;
692: tText: Type = 2;
693: tSerialized: Type = 3;
694: tEmpty: Type = 4;
695: tAscii: Type = 6;
696: tAsciiText: Type = 7;
697:
698: END. -- of Filing --
699:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.