<<>> <> <> <> DIRECTORY Rope USING [ROPE]; TargetConversions: CEDAR DEFINITIONS = BEGIN <<>> <> <> ByteSequence: TYPE = Rope.ROPE; <> Reader: TYPE = REF ReaderRep; ReaderRep: TYPE; <> Writer: TYPE = REF WriterRep; WriterRep: TYPE; <> bitsPerWord: NAT = 32; <> BitIndex: TYPE = [0..bitsPerWord); BitLength: TYPE = [0..bitsPerWord]; ElemIndex: TYPE = [0..bitsPerWord); ElemLength: TYPE = [0..bitsPerWord]; Bool: TYPE = BOOL; <> Card1: TYPE = CARDINAL [0..1]; <> Card2: TYPE = CARDINAL [0..3]; <> Card4: TYPE = CARDINAL [0..15]; <> Card8: TYPE = CARDINAL [0..255]; <> Card16: TYPE = CARDINAL [0..65535]; <> Card32: TYPE = CARD; <> Char: TYPE = CHAR; <> Int32: TYPE = INT; <> Real: TYPE = RECORD [ SELECT realKind: RealKind FROM real32 => [real32: Real32], real48 => [real48: Real48], real64 => [real64: Real64], real80 => [real80: Real80], ENDCASE ]; RealKind: TYPE = {real32, real48, real64, real80}; Real32: TYPE = REAL; Real48: TYPE = PACKED ARRAY [0..48) OF BOOL; Real64: TYPE = PACKED ARRAY [0..64) OF BOOL; Real80: TYPE = PACKED ARRAY [0..80) OF BOOL; <> <> NewWriter: PROC RETURNS [Writer]; <> ResetWriter: PROC [writer: Writer]; <> WriterContents: PROC [writer: Writer] RETURNS [ByteSequence]; <> BitsWritten: PROC [writer: Writer] RETURNS [INT]; <> PutBool: PROC [writer: Writer, bool: Bool]; <> PutByteSeq: PROC [writer: Writer, seq: ByteSequence, len: INT]; <> PutCard: PROC [writer: Writer, card: Card32, bits: BitLength]; <> PutCard32: PROC [writer: Writer, card: Card32]; <> PutChar: PROC [writer: Writer, char: Char]; <> PutInt: PROC [writer: Writer, int: Int32, bits: BitLength]; <> PutInt32: PROC [writer: Writer, int: Int32]; <> PutPadBits: PROC [writer: Writer, bits: BitLength]; <> <<>> PutReal: PROC [writer: Writer, real: Real]; <> SetOutputIndex: PROC [writer: Writer, bits: INT]; <> GetOutputIndex: PROC [writer: Writer] RETURNS [INT]; <> <> NewReader: PROC [seq: ByteSequence, start: INT ¬ 0, len: INT ¬ LAST[INT]] RETURNS [Reader]; <> InitReader: PROC [reader: Reader, seq: ByteSequence, start: INT ¬ 0, len: INT ¬ LAST[INT]]; <> RemainingBits: PROC [reader: Reader] RETURNS [INT]; <> BitsRead: PROC [reader: Reader] RETURNS [INT]; <> GetBool: PROC [reader: Reader] RETURNS [Bool]; <> GetByteSequence: PROC [reader: Reader, len: INT] RETURNS [ByteSequence]; <> GetCard: PROC [reader: Reader, bits: BitLength] RETURNS [Card32]; <> GetCard32: PROC [reader: Reader] RETURNS [Card32]; <> GetChar: PROC [reader: Reader] RETURNS [Char]; <> GetInt: PROC [reader: Reader, bits: BitLength] RETURNS [Int32]; <> GetInt32: PROC [reader: Reader] RETURNS [Int32]; <> SkipPadBits: PROC [reader: Reader, bits: BitLength]; <> GetReal: PROC [reader: Reader, kind: RealKind ¬ real32] RETURNS [Real]; <> SetInputIndex: PROC [reader: Reader, bits: INT]; <> <> InsufficientBits: ERROR; <> <<>> InvalidArgument: ERROR; <> <<>> NotImplemented: ERROR; <> <<>> NotAligned: ERROR; <> <<>> <> <> <<{w: Writer _ NewWriter[]; Put&[w, &&]; RESULT[WriterContents[w]]};>> <<>> BoolToByteSeq: PROC [bool: Bool] RETURNS [ByteSequence]; CardToByteSeq: PROC [card: Card32, bits: BitLength] RETURNS [ByteSequence]; Card32ToByteSeq: PROC [card: Card32] RETURNS [ByteSequence]; CharToByteSeq: PROC [char: Char] RETURNS [ByteSequence]; IntToByteSeq: PROC [int: Int32, bits: BitLength] RETURNS [ByteSequence]; Int32ToByteSeq: PROC [int: Int32] RETURNS [ByteSequence]; RealToByteSeq: PROC [real: Real] RETURNS [ByteSequence]; <> <> <> <<>> ByteSeqToBool: PROC [seq: ByteSequence] RETURNS [Bool]; ByteSeqToCard: PROC [seq: ByteSequence, bits: BitLength] RETURNS [Card32]; ByteSeqToCard32: PROC [seq: ByteSequence] RETURNS [Card32]; ByteSeqToChar: PROC [seq: ByteSequence] RETURNS [Char]; ByteSeqToInt: PROC [seq: ByteSequence, bits: BitLength] RETURNS [Int32]; ByteSeqToInt32: PROC [seq: ByteSequence] RETURNS [Int32]; ByteSeqToReal: PROC [seq: ByteSequence, kind: RealKind ¬ real32] RETURNS [Real]; END.