-- CatalogComm.Mesa -- last edit, Schroeder, February 3, 1983 2:09 pm DIRECTORY IO USING [Handle], Rope USING [ROPE], STP USING [ErrorCode, FileInfo, Handle], UECP USING [Argv], UserExec USING [ExecHandle, HistoryEvent]; CatalogComm: DEFINITIONS = { Handle: TYPE = REF CatalogObject; CatalogErrorType: TYPE = { nilDirectory, nilFilename, cantFindDirectory, badDirectoryName, parentNotFound, unknownTopLevelDirectory, topLevelDirectoryFoundTwice, cantCreateLocalFile, unKnownError, implementationRestriction, cantEnumerate, dirdirFoundTwice, catalogAbort, cantResume }; CatalogError: ERROR[e: CatalogErrorType]; ThingType: TYPE = {directory, file, link}; Node: TYPE = RECORD [ what: ThingType, directory: Rope.ROPE ← NIL, name: Rope.ROPE ← NIL, target: Rope.ROPE ← NIL, comment: Rope.ROPE ← NIL ]; Directory: TYPE = RECORD [ name: Rope.ROPE, entryMade: BOOL ← FALSE, oldDirExists: BOOL ← FALSE, fileCount: INT ← 0, directoryCount: INT ← 0, linkCount: INT ← 0, commentCount: INT ← 0, chain: LIST OF REF -- Node ]; CatalogObject: TYPE = RECORD [ argv: UECP.Argv, cmdindex: NAT ← 1, root: LIST OF REF Directory, filesystem: Rope.ROPE, directory: Rope.ROPE, locEnumFileName: Rope.ROPE, reportSignals: BOOL ← FALSE, doStoreRemote: BOOL ← TRUE, listLocal: BOOL ← FALSE, readLocal: BOOL ← FALSE, listDirsOnly: BOOL ← FALSE, saveLinksComments: BOOL ← TRUE, verbose: BOOL ← FALSE, current: REF Directory, fCount: NAT, in, out: IO.Handle, eh: UserExec.ExecHandle, he: UserExec.HistoryEvent, oldWorkingDir: Rope.ROPE, oldSearchRules: LIST OF Rope.ROPE, name: Rope.ROPE, password: Rope.ROPE ]; NoneFound: SIGNAL; GetLine: PROC[h: Handle, sh: IO.Handle, line: LONG STRING] RETURNS[noteof: BOOL]; FindFirst: PROC [s: Rope.ROPE, c: CHAR, start: INT] RETURNS [loc: INT]; FindLast: PROC [s: Rope.ROPE, c: CHAR] RETURNS [loc: INT]; SubStringCopy: PROC [s: Rope.ROPE, start, stop: INT] RETURNS [ns: Rope.ROPE]; LFindFirst: PROC [s: LONG STRING, c: CHAR, start: NAT] RETURNS [loc: NAT]; LFindLast: PROC [s: LONG STRING, c: CHAR] RETURNS [loc: NAT]; LSubStringAppend: PROC [from, to: LONG STRING, start, stop: NAT]; CatalogList: PROC [h: Handle, key: Rope.ROPE, entry: Rope.ROPE, depth: INTEGER, dirsOnly: BOOL, comment: Rope.ROPE ← NIL]; FreeWorld: PROC [h: Handle]; CatalogErrorString: PROC [error: CatalogErrorType] RETURNS [Rope.ROPE]; HandleSTPError: PROC[h: Handle, stphandle: STP.Handle, stpError: STP.ErrorCode, message: STRING] RETURNS [retryit: BOOL]; CheckForAbort: PROC [h: Handle] RETURNS [BOOL]; Connect: PROC [h: Handle, host: Rope.ROPE] RETURNS[stphandle: STP.Handle]; EnumFromRemoteFile: PROC [h: Handle]; EnumFromLocalFile: PROC [h: Handle]; ParseFile: PROC [h: Handle, vf: STP.FileInfo]; }.