InterFile.mesa
Copyright © 1985, 1986 by Xerox Corporation. All rights reserved.
written by Bill Paxton, May 1981
last edit by McGregor, June 10, 1982 4:43 pm
Russ Atkinson, July 22, 1983 10:30 am
Doug Wyatt, August 28, 1986 5:19:03 pm PDT
For reading and writing Tioga files in (pseudo) InterDoc format.
DIRECTORY
IO USING [STREAM],
Rope USING [ROPE],
TextNode USING [Node];
InterFile: CEDAR DEFINITIONS
= BEGIN
Node: TYPE = TextNode.Node;
ROPE: TYPE = Rope.ROPE;
MaxLen: INT = LAST[INT];
**** File Input/Output
ToFile:
PROC [fileName:
ROPE, node: Node, start:
INT ← 0, flatten:
BOOL ←
TRUE]
RETURNS [count:
INT];
write the node on the specified file
starts writing at given address in file
returns the number of bytes written
FromFile:
PROC [fileName:
ROPE, start:
INT ← 0, len:
INT ← MaxLen]
RETURNS [Node];
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
then returns a single node containing contents of the file
FromFileError: ERROR;
**** Input/Output using ropes instead of files
ToRope:
PROC [node: Node, flatten:
BOOL ←
TRUE]
RETURNS [
ROPE];
resulting rope contains same representation of node as would be put on file
FromRope:
PROC [rope:
ROPE, start:
INT ← 0, len:
INT ← MaxLen]
RETURNS [Node];
reads rope to construct node
**** IO Operations ****
ToStream:
PROC [stream:
IO.
STREAM, node: Node, flatten:
BOOL ←
TRUE]
RETURNS [count:
INT];
does a series of IO.PutBlock's
returns number of bytes written
FromStream:
PROC [stream:
IO.
STREAM, len:
INT ← MaxLen]
RETURNS [Node];
reads up to len chars from stream (via GetBlock's) to construct a node
END.