DIRECTORY IO USING [STREAM], PFSNames USING [Component, PATH, Version], Rope USING [ROPE]; PFSCFSNames: CEDAR DEFINITIONS SHARES PFSNames ~ BEGIN OPEN PFSNames; ROPE: TYPE = Rope.ROPE; UnparseName: PROC[name: PATH] RETURNS [fullFName: ROPE]; UnparseComponent: PROC [component: Component] RETURNS [ROPE]; UnparseVersion: PUBLIC PROC [version: Version] RETURNS [ROPE]; ParseName: PROC [name: ROPE] RETURNS [parsedName: PATH]; ParseComponent: PROC [name: ROPE, first: NAT _ 0] RETURNS [component: Component, next: NAT]; ParseVersion: PROC [v: ROPE, first: NAT _ 0] RETURNS [version: Version, next: NAT]; ParseNameFromStream: PROC [s: IO.STREAM] RETURNS [name: PATH]; END. μPFSCFSNames.mesa Carl Hauser, April 18, 1989 5:01:04 pm PDT Cedar filename unparsing: [component0]...>componentComponentCount-1[>] Canonical unparsing: Rope.Cat[name, Unparse[version]] bug: name unparsing should insert escape characters on /, ! (and, of course, the escape character). Canonical unparsing: NIL, !H, !L, !*, !num as appropriate. Parsing names in Cedar filename form. parses a component beginning at name[first] and returns that component; next = first + length of the parsed component. bug: should interpret escape sequences. parses a version beginning at name[first] and returns that version; next = first + length of the parsed version. A convenient way to read a whitespace-delimited name from a stream. Κ½˜šœ™Icode™*—J™K˜šΟk ˜ Kšœœœ˜Kšœ œ œ ˜*Kšœœœ˜K˜—KšΟn œœ ˜Kšœ ˜šœ œ ˜K˜Kšœœœ˜K˜š ž œœœœ œ˜9™Kšœ Οdœ ŸœŸœ™8Kšœ™—K˜šžœœœœ˜=™K™ K™c——K˜š žœœœœœ˜>™K™%———K™š ž œœœœœ˜8K™%K™š žœœœ œœœ˜\K™vK™'—K˜š ž œœœ œœœ˜SK™p——K˜š žœœ œœœ˜>K™E——K˜Kšœ˜—…—¨Q