DIRECTORY AMFiles USING [], BasicTime USING [GMT, nullGMT], FS USING [OpenFile, FileInfo, Error, Open, nullOpenFile], Rope USING [Fetch, ROPE]; AMFilesImpl: CEDAR MONITOR -- protects paths IMPORTS FS, Rope EXPORTS AMFiles = BEGIN OPEN Rope; pathPrefixes: PUBLIC LIST OF ROPE _ LIST[NIL, "///", "///Commands/"]; FullFileName: PUBLIC PROC [shortName: ROPE, createTime: BasicTime.GMT _ BasicTime.nullGMT] RETURNS[fullName: ROPE _ NIL] = { firstChar: CHAR = shortName.Fetch[0]; IF firstChar = '[ OR firstChar = '/ OR firstChar = '< THEN RETURN[shortName]; FOR paths: LIST OF ROPE _ pathPrefixes, paths.rest UNTIL paths = NIL DO ENABLE FS.Error => IF error.group # bug THEN LOOP; RETURN[FS.FileInfo[name: shortName, wantedCreatedTime: createTime, wDir: paths.first ! FS.Error => IF error.group # bug THEN LOOP ].fullFName]; ENDLOOP; }; FullFileNameList: PUBLIC PROC [shortName: ROPE, createTime: BasicTime.GMT _ BasicTime.nullGMT] RETURNS[fullNameList: LIST OF ROPE _ NIL] = { fullName: ROPE _ NIL; firstChar: CHAR = shortName.Fetch[0]; tail: LIST OF ROPE _ NIL; IF firstChar = '[ OR firstChar = '/ OR firstChar = '< THEN RETURN[CONS[shortName, NIL]]; FOR paths: LIST OF ROPE _ pathPrefixes, paths.rest UNTIL paths = NIL DO new: LIST OF ROPE _ LIST[ FS.FileInfo[ name: shortName, wantedCreatedTime: createTime, wDir: paths.first ! FS.Error => IF error.group # bug THEN LOOP ].fullFName ]; IF fullNameList = NIL THEN fullNameList _ new ELSE tail.rest _ new; tail _ new; ENDLOOP; }; OpenIt: PUBLIC PROC [shortName: ROPE, createTime: BasicTime.GMT _ BasicTime.nullGMT] RETURNS[fullName: ROPE _ NIL, openFile: FS.OpenFile _ FS.nullOpenFile] = { fullName _ FullFileName[shortName, createTime]; IF fullName # NIL THEN openFile _ FS.Open[fullName ! FS.Error => {fullName _ NIL; CONTINUE}]; }; PrependPathPrefix: PUBLIC ENTRY PROC[pathPrefix: ROPE] = { ENABLE UNWIND => NULL; pathPrefixes _ CONS[NIL, CONS[pathPrefix, pathPrefixes.rest]]; }; END. AMFilesImpl.mesa Copyright c 1984, 1985 by Xerox Corporation. All rights reserved. Paul Rovner: December 12, 1983 10:57 am Bob Hagmann: May 7, 1984 12:40:48 pm PDT Russ Atkinson: February 11, 1985 7:02:51 pm PST NIL => use the current default for the running process (do this first) ///Commands/ => use the Commands subdirectory /// => use the root directory returns NIL if not found procedure for opening symbol and source files (for read) Add in a search path. Always put the current inherited working directory first in the list. Κ™˜codešœ™Kšœ Οmœ7™BKšœ'™'K™(K™/K˜—šΟk ˜ Kšœžœ˜Kšœ žœžœ ˜Kšžœžœ1˜9Kšœžœ žœ˜—K˜šœ žœžœΟc˜,Kšžœžœ˜Kšžœ˜Kšœžœžœ˜K˜š œžœžœžœžœžœžœ˜EKšœF™FKšœ-™-Kšœ™—K˜šΟn œžœžœ žœžœžœ žœžœ˜|K™Kšœ žœ˜%Kš žœžœžœžœžœ ˜Mš žœžœžœžœžœ žœž˜GKš žœžœ žœžœžœ˜2šžœžœK˜TKšœžœ žœžœž˜,Kšœ ˜ —Kšžœ˜—Kšœ˜—K˜š œžœžœ žœžœžœžœžœžœžœ˜ŒKšœ žœžœ˜Kšœ žœ˜%Kš œžœžœžœžœ˜Kšžœžœžœžœžœžœ žœ˜Xš žœžœžœžœžœ žœž˜Gš œžœžœžœžœ˜šžœ ˜ KšœA˜AKšœžœ žœžœž˜,Kšœ ˜ —K˜—Kšžœžœžœžœ˜CKšœ ˜ Kšžœ˜—Kšœ˜—K˜š œžœžœ žœžœžœ ž œ žœ žœ˜ŸKšœ8™8Kšœ/˜/šžœ ž˜Kš žœ žœžœžœžœ˜K—Kšœ˜—K˜š  œžœžœžœ žœ˜:Kšžœžœžœ˜Kšœ\™\Kšœžœžœžœ!˜>Kšœ˜—K˜—Kšžœ˜K˜K˜—…—š Q