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