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