-- PutGet.mesa
-- written by Bill Paxton, May 1981
-- last edit by Paxton. October 21, 1982 1:55 pm
DIRECTORY
File,
RopeEdit,
IO,
TextNode;
PutGet: CEDAR DEFINITIONS =
BEGIN
Ref: TYPE = TextNode.Ref;
ROPE: TYPE = RopeEdit.ROPE;
Offset: TYPE = TextNode.Offset;
MaxLen: Offset = LAST[Offset];
-- **** File Input/Output
ToFile:
PROC [fileName:
ROPE, node: Ref, start: Offset ← 0, flatten, textOnly:
BOOLEAN ←
FALSE]
RETURNS [dataLen, count: Offset];
ToFileC:
PROC [file: File.Capability, node: Ref,
start: Offset ← 0, flatten, textOnly: BOOLEAN ← FALSE]
RETURNS [dataLen, count: Offset];
-- 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
FromFile:
PROC [fileName:
ROPE, start: Offset ← 0, len: Offset ← MaxLen,
okToMapFile: BOOLEAN ← FALSE] RETURNS [Ref];
FromFileC:
PROC [file: File.Capability, start: Offset ← 0, len: Offset ← MaxLen,
okToMapFile: BOOLEAN ← FALSE] RETURNS [Ref];
-- 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
-- set okToMapFile to TRUE if you will not want to overwrite the contents later
FromFileError: ERROR;
WriteMesaFilePlain:
PROC [fileName:
ROPE, root: Ref];
This is like WriteFilePlain, but adds initial dashes to comments if necessary.
WriteFilePlain: PROC [fileName: ROPE, root: Ref];
WriteFileCPlain:
PROC [file: File.Capability, root: Ref];
-- gives text of file with CR after each node and TABs before according to nesting
-- **** Input/Output using ropes instead of files
ToRope:
PROC [node: Ref, flatten, textOnly:
BOOLEAN ←
FALSE]
RETURNS [dataLen, count: Offset, output: ROPE];
-- resulting rope contains same representation of node as would be put on file
FromRope:
PROC [rope:
ROPE, start: Offset ← 0, len: Offset ← MaxLen]
RETURNS [Ref];
-- reads rope to construct node
WriteRopePlain: PROC [root: Ref] RETURNS [output: ROPE];
-- **** IO Operations ****
ToStream:
PROC [stream:
IO.Handle, node: Ref, flatten, textOnly:
BOOLEAN ←
FALSE]
RETURNS [dataLen, count: Offset];
-- does a series of IO.PutBlock's
-- returns number of bytes written
FromStream:
PROC [stream:
IO.Handle, len: Offset ← MaxLen]
RETURNS [Ref];
-- reads up to len chars from stream (via GetBlock's) to construct a node
END.