|
|
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.