DIRECTORY FS, Rope, RopeEdit, IO, TextNode; PutGet: CEDAR DEFINITIONS = BEGIN Ref: TYPE = TextNode.Ref; ROPE: TYPE = Rope.ROPE; Offset: TYPE = TextNode.Offset; MaxLen: Offset = LAST[Offset]; ToFile: PROC [fileName: ROPE, node: Ref, start: Offset _ 0, flatten, textOnly: BOOL _ FALSE] RETURNS [dataLen, count: Offset]; ToFileC: PROC [file: FS.OpenFile, node: Ref, start: Offset _ 0, flatten, textOnly: BOOL _ FALSE] RETURNS [dataLen, count: Offset]; FromFile: PROC [fileName: ROPE, start: Offset _ 0, len: Offset _ MaxLen] RETURNS [Ref]; FromFileC: PROC [file: FS.OpenFile, start: Offset _ 0, len: Offset _ MaxLen] RETURNS [Ref]; FromFileError: ERROR; WriteMesaFilePlain: PROC [fileName: ROPE, root: Ref]; WriteFilePlain: PROC [fileName: ROPE, root: Ref]; WriteFileCPlain: PROC [file: FS.OpenFile, root: Ref]; ToRope: PROC [node: Ref, flatten, textOnly: BOOL _ FALSE] RETURNS [dataLen, count: Offset, output: ROPE]; FromRope: PROC [rope: ROPE, start: Offset _ 0, len: Offset _ MaxLen] RETURNS [Ref]; WriteRopePlain: PROC [root: Ref] RETURNS [output: ROPE]; ToStream: PROC [stream: IO.STREAM, node: Ref, flatten, textOnly: BOOL _ FALSE] RETURNS [dataLen, count: Offset]; FromStream: PROC [stream: IO.STREAM, len: Offset _ MaxLen] RETURNS [Ref]; END. \PutGet.mesa written by Bill Paxton, May 1981 last edit by Paxton. October 21, 1982 1:55 pm Russ Atkinson, July 22, 1983 10:24 am -- **** File Input/Output -- write the node on the specified file -- starts writing at given address in file -- returns dataLen = number of data bytes at start of file, -- and count = the total number of bytes written -- create node from the contents of a file -- starts reading at given start address in file -- pretends that start+len is the end of the file -- if file was not created by ToFile (i.e., password not correct) -- then returns a single node containing contents of the file This is like WriteFilePlain, but adds initial dashes to comments if necessary. -- gives text of file with CR after each node and TABs before according to nesting -- **** Input/Output using ropes instead of files -- resulting rope contains same representation of node as would be put on file -- reads rope to construct node -- **** IO Operations **** -- does a series of IO.PutBlock's -- returns number of bytes written -- reads up to len chars from stream (via GetBlock's) to construct a node Ê·˜šœ ™ Jšœ ™ Jšœ-™-Jšœ%™%—J˜J˜šÏk ˜ Jšœ˜J˜J˜ Jšœ˜J˜ —J˜JšÏbœœ œ˜!J˜Jšœœ˜Jšœœœ˜Jšœœ˜Jšœœ ˜J˜J˜Jšœ™J˜š Ïnœœ œ3œœ˜\Jšœ˜!—šŸœœœ˜,Jšœ&œœ˜3Jšœ˜!Jšœ'™'Jšœ*™*šœ;™;Jšœ0™0J˜——JšŸœœ œ+œ˜WšŸ œœœ4œ˜[Jšœ*™*Jšœ0™0Jšœ1™1šœA™AJšœ=™=—J˜—Jšœœ˜J˜šŸœœ œ ˜5JšœN™N—JšŸœœ œ ˜1šŸœœœ˜5JšœR™RJ˜—Jšœ1™1J˜šŸœœ œœ˜9Jšœ"œ˜/JšœN™NJ˜—šŸœœœ+œ˜SJšœ™J˜—JšŸœœ œ œ˜8J˜J˜Jšœ™J˜š Ÿœœ œœ œœ˜NJšœ˜!Jšœ!™!Jšœ"™"J˜—š Ÿ œœ œœœ˜IJšœI™IJ˜J˜—Jšœ˜J˜—…—ö