-- DFSubr.Mesa -- last edit January 3, 1983 6:01 pm -- last edit May 22, 1983 1:04 pm by Russ Atkinson -- (changed STRING to LONG STRING in WriteOut) -- Pilot 6.0 / Mesa 7.0 DIRECTORY File: TYPE USING [Capability, nullCapability], Stream: TYPE USING [Handle], Subr: TYPE USING[TTYProcs], TimeStamp: TYPE USING[Null, Stamp]; DFSubr: DEFINITIONS = { Criterion: TYPE = {none, update, notequal}; DF: TYPE = LONG POINTER TO DFFileRecord; DFFileRecord: TYPE = RECORD[ host: LONG STRING _ NIL, -- ivy directory: LONG STRING _ NIL, -- schmidt>model shortname: LONG STRING _ NIL, -- junk.mesa version: CARDINAL _ 0, -- 23 createtime: LONG CARDINAL _ 0, -- > 0 is create time from leader pg. comment: LONG STRING _ NIL, -- comment before this line recorder: LONG STRING _ NIL, -- describebcd, verifydf, releasetool releaseHost: LONG STRING _ NIL, -- release on Ivy releaseDirectory: LONG STRING _ NIL, -- release as Cedar>Top atsign: BOOL _ FALSE, -- indirect this df file criterion: Criterion _ none, -- none, notequal => xfer if ~= dates -- update => like retrieve/U topmark: BOOL _ FALSE, -- if T then this is top bcd in DF newOnly: BOOL _ FALSE, -- filename preceded by ~, -- indicating retrieve only if not already on disk public: BOOL _ FALSE, -- if T then directory was Public publicOnly: BOOL _ FALSE, -- if T then {PublicOnly} in filename readonly: BOOL _ FALSE, -- readonly directory cameFrom: BOOL _ FALSE, -- T => CameFrom, F=> ReleaseAs parentCameFrom: BOOL _ FALSE, -- used by ReleaseTool versionstamp: TimeStamp.Stamp _ TimeStamp.Null, -- used by DescribeBcd & VerifyDF presentonlocaldisk: BOOL _ FALSE,-- file is on local disk cap: File.Capability _ File.nullCapability, using: UsingSeq _ NIL, -- using list for df file isdefns: BOOL _ FALSE, -- used by describebcd systemfile: BOOL _ FALSE, -- is a Mesa system file eval: BOOL _ FALSE, -- has been evaluated in EvalBcds need: BOOL _ FALSE, -- need to retrieve this file exportsAnalyzed: BOOL _ FALSE, -- used by FlattenDF includeAnalyzed: BOOL _ FALSE -- used by FlattenDF ]; UsingSeq: TYPE = LONG POINTER TO UsingSeqRecord; -- string entries may be NIL UsingSeqRecord: TYPE = RECORD[ zone: UNCOUNTED ZONE _ NIL, -- the zone the strings are in size: CARDINAL _ 0, body: SEQUENCE maxsize: CARDINAL OF LONG STRING -- the strings ]; ZoneType: TYPE = {shared, single, huge}; DFSeq: TYPE = LONG POINTER TO DFSeqRecord; -- don't change this record without looking at AllocSpecialSeq in DFSubrImpl DFSeqRecord: TYPE = RECORD[ dfzone: UNCOUNTED ZONE _ NIL, zoneType: ZoneType _ shared, size: CARDINAL _ 0, trailingcomment: LONG STRING _ NIL, ivyHost: LONG STRING _ NIL, -- if huge, then "Ivy" indigoHost: LONG STRING _ NIL, -- if huge then "Indigo" body: SEQUENCE maxsize: CARDINAL OF DFFileRecord ]; -- PROGRAMS (does NOT need to be started explicitly) DFSubrImpl, DFParserImpl: PROGRAM; -- PROCS (defined in DFParserImpl.Mesa) DFEntryProcType: TYPE = PROC[dfEntry: DF]; -- be sure to check version >0, createtime = 0, and criterion = none -- to determine if wants explicit version InterestingNestedDFProcType: TYPE = PROC[ host, directory, shortname, ancestor, immediateParent: LONG STRING, version, nLevel: CARDINAL, createtime: LONG CARDINAL, driverUsingSeq, innerUsingSeq: UsingSeq, dfEntry: DF, entryIsReadonly, publicOnly: BOOL, criterion: Criterion]; -- if noremoteerrors is true, don't complain if a file doesn't -- appear to have a remote place -- if forceReadonly then make every entry in this DF file be ReadOnly -- if omitNonPublic, then don't parse them into dfseq -- dffilename is for error messages ParseStream: PROC[sh: Stream.Handle, dfseq: DFSeq, dffilename: LONG STRING, using: UsingSeq, noremoteerrors, forceReadonly, omitNonPublic: BOOL, h: Subr.TTYProcs, interestingNestedDF: InterestingNestedDFProcType _ NIL, dfEntryProc: DFEntryProcType _ NIL, ancestor: LONG STRING _ NIL, nLevel: CARDINAL _ 0]; -- PROCS (defined in DFSubrImpl) -- remember this stuff uses its own HugeZone -- allocation -- if useHugeZone then only uses HugeZone AllocateDFSeq: PROC[maxEntries: CARDINAL, zoneType: ZoneType] RETURNS[dfseq: DFSeq]; NextDF: PROC[dfseq: DFSeq] RETURNS[df: DF]; FreeDFSeq: PROC[pdfseq: POINTER TO DFSeq]; -- input/output WriteOut: PROC[dfseq: DFSeq, topLevelFile: LONG STRING, outputStream: Stream.Handle, print, altoCompatibility: BOOL _ FALSE, wrapUsingLists: BOOL _ TRUE]; FlattenDF: PROC[dfseq: DFSubr.DFSeq, dffilename: LONG STRING, h: Subr.TTYProcs, checkForOverwrite, allowForceReadOnly: BOOL _ TRUE, setRecorder, printStatus, skipCameFrom, tryDollars: BOOL _ FALSE]; TooManyEntries: ERROR; -- raised by FlattenDF when dfseq fills up -- UsingSeq procedures -- oldusing may be NIL AppendToUsingSeq: PROC[oldusing: UsingSeq, shortname: LONG STRING, zone: UNCOUNTED ZONE] RETURNS[newusing: UsingSeq]; UsingEmpty: PROC[usingseq: UsingSeq] RETURNS[empty: BOOL]; IntersectUsing: PROC[driver, limiter: UsingSeq] RETURNS[newusing: UsingSeq]; CopyUsing: PROC[limiter: UsingSeq] RETURNS[newusing: UsingSeq]; FreeUsingSeq: PROC[using: UsingSeq]; -- utilities ReadInDir: PROC[dfseq: DFSeq]; LookupDF: PROC[dfseq: DFSeq, shortname: LONG STRING] RETURNS[df: DF]; -- fullname is readonly -- any of host, directory, short may be NIL -- if mustbedir is TRUE then if long does not end in a '> -- the tail is assumed to be part of the directory, not the short, -- e.g. "schmidt>pilot" is all a directory if mustbedir is TRUE StripLongName: PROC[fullname, host, directory, short: LONG STRING, mustbedir: BOOL _ FALSE] RETURNS[version: CARDINAL]; SortByFileName, SortByCap: PROC[dfseq: DFSeq, min, max: CARDINAL, ignorehostanddir: BOOL _ FALSE]; CompareDFs: PROC[dfleft, dfright: DF, ignorehostanddir: BOOL _ FALSE] RETURNS[res: INTEGER]; InsertCRs: PROC[dfseq: DFSeq]; }. Ę0˜Jš…ĪcgœGœĪk œ žœžœ)žœžœžœžœžœžœž œžœžœžœžœžœžœžœžœ žœžœžœœ žœžœžœœ žœžœžœ œ žœœ žœžœ&œ žœžœžœœ žœžœžœ&œžœžœžœœžœžœžœœ žœžœœ$&œœ žœžœ#œ žœžœœ3œ žœžœ"œ žœžœ&œ žœžœœ žœžœ œžœžœœ1"œžœžœœ@žœœ žœžœœ žœžœœžœžœ"œžœžœœžœžœœžœžœœžœžœžœžœœžœžœ ž œžœžœœžœ žœ žœžœžœžœœžœ#žœžœžœžœMœ žœžœ ž œžœžœ'žœžœžœžœ žœžœžœœ žœžœžœœžœ žœžœ5œžœ(Īnœžœžœ žœpŸœžœžœ:žœžœžœžœžœ6žœ žœ€Ÿ œžœ.žœžœBžœHžœ#žœ žœžœžœ žœ†Ÿ œžœ žœžœŸœžœžœžœŸ œžœ žœžœ œŸœžœžœžœ:žœžœžœžœŸ œžœ"žœžœ=žœžœ8žœžœžœ+œ.Ÿœžœ žœžœž œžœžœŸ œžœžœžœŸœžœžœŸ œžœžœŸ œžœ Ÿ œžœŸœžœžœžœžœžœŸ œžœ#žœžœžœžœžœ žœŸ œžœžœžœžœŸ œžœžœžœžœžœžœŸ œžœ˜ß-—…—â