<<-- 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]; <> 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.