X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=reader.h;h=21178f304e2ba32ee0d0ff86d6a74c39c8d2a028;hb=98bcd76b4c284676f55d754879dee9bda1898924;hp=e9b0234b4972c403099584334386b9d7cb137b62;hpb=8987976196a50e3e9639879990c7473610ff5369;p=odcread.git diff --git a/reader.h b/reader.h index e9b0234..21178f3 100644 --- a/reader.h +++ b/reader.h @@ -25,6 +25,9 @@ struct TypeEntry { */ class Reader { private: + static const unsigned int TYPENOTFOUND = 1; + static const unsigned int ALIENVERSION = 2; + /* * rider-: Files.Reader * The file rider which links a Reader to a file. @@ -33,7 +36,7 @@ private: /* * cancelled-: BOOLEAN valid during a Store.Internalize call - * Tells whether the currently executing Internalize has been called by ReadVersion or TurnIntoAlien. + * Tells whether the currently executing Internalize has been cancelled by ReadVersion or TurnIntoAlien. */ bool d_cancelled; @@ -43,6 +46,11 @@ private: */ bool d_readAlien; + /** + * Cause of current read being alien. + */ + unsigned int d_cause; + std::vector d_typeList; std::vector d_elemList; // FIXME: WTH, why are these different? @@ -62,8 +70,6 @@ private: }; ReaderState *d_state; - INTEGER d_cause; - public: /** * Construct a reader from the istream rider. @@ -125,17 +131,19 @@ private: * Reads a short character (00X..0FFX). */ SHORTCHAR readSChar(); + void readSChar(SHORTCHAR *buf, size_t len); /* PROCEDURE (VAR rd: Reader) ReadXChar (OUT x: CHAR) * NEW * Same as ReadSChar, but has a CHAR-type parameter. * This procedure is provided to simplify migration from Release 1.2 to 1.3. */ - CHAR readXChar(); /** * PROCEDURE (VAR rd: Reader) ReadChar (OUT x: CHAR) * NEW * Reads a character (0000X..0FFFFX). */ + CHAR readLChar(); + void readLChar(CHAR *buf, size_t len); /** * PROCEDURE (VAR rd: Reader) ReadByte (OUT x: BYTE) * NEW @@ -257,6 +265,9 @@ private: * Pre * 20 cause > 0 */ + void turnIntoAlien(int cause); + + bool isCancelled(); private: Store *readStoreOrElemStore(bool isElem);