Only check Local Object pointers
This commit is contained in:
@@ -109,13 +109,15 @@ void X26TripletList::updateInternalData()
|
||||
triplet->m_error = X26Triplet::OriginModifierAlone;
|
||||
break;
|
||||
case 0x11 ... 0x13: // Invoke Object
|
||||
if (triplet->objectLocalTripletNumber() > 12 ||
|
||||
triplet->objectLocalIndex() > (m_list.size()-1) ||
|
||||
m_list.at(triplet->objectLocalIndex()).modeExt() < 0x15 ||
|
||||
m_list.at(triplet->objectLocalIndex()).modeExt() > 0x17)
|
||||
triplet->m_error = X26Triplet::InvokePointerInvalid;
|
||||
else if ((triplet->modeExt() | 0x04) != m_list.at(triplet->objectLocalIndex()).modeExt())
|
||||
triplet->m_error = X26Triplet::InvokeTypeMismatch;
|
||||
if (triplet->objectSource() == X26Triplet::LocalObject) {
|
||||
if (triplet->objectLocalTripletNumber() > 12 ||
|
||||
triplet->objectLocalIndex() > (m_list.size()-1) ||
|
||||
m_list.at(triplet->objectLocalIndex()).modeExt() < 0x15 ||
|
||||
m_list.at(triplet->objectLocalIndex()).modeExt() > 0x17)
|
||||
triplet->m_error = X26Triplet::InvokePointerInvalid;
|
||||
else if ((triplet->modeExt() | 0x04) != m_list.at(triplet->objectLocalIndex()).modeExt())
|
||||
triplet->m_error = X26Triplet::InvokeTypeMismatch;
|
||||
}
|
||||
break;
|
||||
case 0x15 ... 0x17: // Define Object
|
||||
activePosition.reset();
|
||||
|
||||
@@ -27,6 +27,7 @@ class X26Triplet
|
||||
public:
|
||||
// x26model.h has the Plain English descriptions of these errors
|
||||
enum X26TripletError { NoError, ActivePositionMovedUp, ActivePositionMovedLeft, InvokePointerInvalid, InvokeTypeMismatch, OriginModifierAlone };
|
||||
enum ObjectSource { InvalidObjectSource, LocalObject, POPObject, GPOPObject };
|
||||
|
||||
X26Triplet() {}
|
||||
// X26Triplet(const X26Triplet &other);
|
||||
@@ -49,6 +50,8 @@ public:
|
||||
void setAddressRow(int);
|
||||
void setAddressColumn(int);
|
||||
|
||||
int objectSource() const { return (m_address & 0x18) >> 3; }
|
||||
|
||||
int objectLocalDesignationCode() const { return (((m_address & 0x01) << 3) | (m_data >> 4)); }
|
||||
int objectLocalTripletNumber() const { return m_data & 0x0f; }
|
||||
int objectLocalIndex() const { return objectLocalDesignationCode() * 13 + objectLocalTripletNumber(); }
|
||||
|
||||
Reference in New Issue
Block a user