-- PrintInUseFileNames.Mesa
-- Last Modified By Paul Rovner On June 21, 1982 2:57 pm
DIRECTORY
RTTypesBasicPrivate USING[MapStiStd],
DCSFileTypes USING [tLeaderPage],
File USING [Capability, GetAttributes],
FileIOPrivate USING [LeaderPage],
Space USING [CopyIn, Create, Delete, Handle, LongPointer, Map, virtualMemory],
SymbolTable USING [nullHandle],
UserExec USING [GetExecHandle],
IO USING[Handle, PutRope, PutChar];
PrintInUseFileNames: PROGRAM
IMPORTS RTTypesBasicPrivate, IO, Space, File, UserExec
= BEGIN OPEN RTTypesBasicPrivate;
PrintFileName: PROC[file: File.Capability, out: IO.Handle] =
{ IF File.GetAttributes[file].type # DCSFileTypes.tLeaderPage
THEN out.PutRope["file with no leader page\n"]
ELSE
{leaderSpace: Space.Handle = Space.Create[1, Space.virtualMemory];
leader: LONG POINTER TO FileIOPrivate.LeaderPage ← Space.LongPointer[leaderSpace];
Space.Map[leaderSpace];
Space.CopyIn[space: leaderSpace, window: [file, 0]];
FOR i: NAT IN [0..leader.nameLength)
DO out.PutChar[leader.name[i]]
ENDLOOP;
out.PutChar['\n];
Space.Delete[leaderSpace];
};
};
DoIt: PROC =
{out: IO.Handle = UserExec.GetExecHandle[].out;
FOR i: NAT IN [0..MapStiStd.length)
DO IF MapStiStd[i] # NIL
THEN IF MapStiStd[i].sth # SymbolTable.nullHandle
THEN PrintFileName[MapStiStd[i].sth.file, out];
ENDLOOP};
-- START HERE
DoIt[];
END.