IPWriter.mesa
Token-level interface for writing encoded Interpress masters
Last edited by:
Doug Wyatt, March 12, 1984 1:10:10 pm PST
DIRECTORY
IO USING [STREAM],
IPBasic USING [Op, Rational],
Rope USING [ROPE];
IPWriter: CEDAR DEFINITIONS
~ BEGIN OPEN IPBasic;
ROPE: TYPE ~ Rope.ROPE;
STREAM: TYPE ~ IO.STREAM;
ErrorCode: TYPE ~ {
ok, -- initial value for an ErrorCode
bug, -- implementation bug
unimplemented, -- operation not currently implemented
unknownEncoding, -- the requested encoding is not implemented
illegalArgument, -- invalid argument for an operation
closed -- tried to operate on a closed writer
};
Error: ERROR[code: ErrorCode, explanation: ROPENIL];
Writer: TYPE ~ REF WriterRep;
WriterRep: TYPE ~ RECORD[class: Class, stream: STREAM];
Class: TYPE ~ REF ClassRep;
ClassRep: TYPE ~ RECORD[
encoding: ATOM ←,
putOp: PROC[writer: Writer, op: Op] ←,
putInt: PROC[writer: Writer, value: INT] ←,
putReal: PROC[writer: Writer, value: REAL] ←,
putRational: PROC[writer: Writer, value: Rational] ←,
putIdentifier: PROC[writer: Writer, rope: ROPE] ←,
putString: PROC[writer: Writer, rope: ROPE] ←,
putInsertfile: PROC[writer: Writer, rope: ROPE] ←,
putComment: PROC[writer: Writer, rope: ROPE] ←,
putAnnotation: PROC[writer: Writer, rope: ROPE] ←
];
Open: PROC[name: ROPE, encoding: ATOM] RETURNS[Writer];
Create the named file, write a header for the specified encoding, and return a Writer.
Create: PROC[stream: STREAM, encoding: ATOM] RETURNS[Writer];
Create a Writer for the given stream. (Does not write a header.)
PutHeader: PROC[writer: Writer];
Write an Interpress header for the writer's encoding.
Close: PROC[writer: Writer];
Close the writer's stream and prevent further calls on the writer.
PutOp: PROC[writer: Writer, op: Op]
~ INLINE { writer.class.putOp[writer, op] };
PutInt: PROC[writer: Writer, value: INT]
~ INLINE { writer.class.putInt[writer, value] };
PutReal: PROC[writer: Writer, value: REAL]
~ INLINE { writer.class.putReal[writer, value] };
PutRational: PROC[writer: Writer, value: Rational]
~ INLINE { writer.class.putRational[writer, value] };
PutIdentifier: PROC[writer: Writer, rope: ROPE]
~ INLINE { writer.class.putIdentifier[writer, rope] };
PutString: PROC[writer: Writer, rope: ROPE]
~ INLINE { writer.class.putString[writer, rope] };
PutComment: PROC[writer: Writer, rope: ROPE]
~ INLINE { writer.class.putComment[writer, rope] };
PutAnnotation: PROC[writer: Writer, rope: ROPE]
~ INLINE { writer.class.putAnnotation[writer, rope] };
PutInsertfile: PROC[writer: Writer, rope: ROPE]
~ INLINE { writer.class.putInsertfile[writer, rope] };
Register: PROC[class: Class];
END.