-HEADERS=oberon.h store.h reader.h domain.h alien.h typeregister.h
+HEADERS=oberon.h store.h reader.h domain.h alien.h typeregister.h textmodel.h fold.h
-odcread: odcread.o reader.o store.o util.o alien.o typeregister.o textmodel.o
+odcread: odcread.o reader.o store.o util.o alien.o typeregister.o textmodel.o fold.o
g++ -o $@ $^
%.o: %.cc $(HEADERS)
reader.readVersion(0, 0);
}
-const std::string Fold::TYPENAME("Folds.Fold^");
+const std::string Fold::TYPENAME("StdFolds.Fold^");
const TypeProxy<Fold> Fold::PROXY;
Fold::Fold(INTEGER id) : View(id) {}
}
void Fold::internalize(Reader &reader) {
- Store::internalize(reader);
+ View::internalize(reader);
if (reader.isCancelled()) return;
reader.readVersion(0, 0);
if (reader.isCancelled()) return;
- reader.readSInt(); // FIXME IMPLEMENT
// rd.ReadXInt(xint);fold.leftSide := xint = 0;
+ reader.readSInt();
// rd.ReadXInt(xint); fold.collapsed := xint = 0;
+ reader.readSInt();
// rd.ReadXString(fold.label);
+ SHORTCHAR label[32];
+ reader.readSString(label); // the label
// rd.ReadStore(store);
+ reader.readStore(); // the hidden part
// IF store # NIL THEN fold.hidden := store(TextModels.Model); Stores.Join(fold.hidden, fold)
// ELSE fold.hidden := NIL
// END;
return out;
}
+SHORTINT Reader::readSInt() {
+ SHORTINT buf;
+ char *bufPtr = (char*)&buf;
+ d_rider.read(bufPtr, 2);
+ if (isLittleEndian()) {
+ return buf;
+ } else {
+ SHORTINT out;
+ char *outPtr = (char *)&out;
+ outPtr[0] = bufPtr[1]; outPtr[1] = bufPtr[0];
+ return out;
+ }
+}
+
INTEGER Reader::readInt() {
INTEGER buf;
char *bufPtr = (char*)&buf;
* PROCEDURE (VAR rd: Reader) ReadSInt (OUT x: SHORTINT)
* NEW
* Reads a short integer (-32768..32767).
- *
+ */
+ SHORTINT readSInt();
+ /**
* PROCEDURE (VAR rd: Reader) ReadXInt (OUT x: INTEGER)
* NEW
* Same as ReadSInt, but has an INTEGER-type parameter.