/// <summary> /// Function to set all values of a pointer /// </summary> /// <param name="nr">number of pointer to set</param> /// <param name="id">id of section</param> /// <param name="length">length of section</param> /// <param name="index">index of section</param> public void setPointer(int nr, ushort id, int length, int index) { if (nr >= 0) { if (nr < _NrMandatory) { if (_MandatoryPointers[nr] == null) { _MandatoryPointers[nr] = new SCPPointer(); } _MandatoryPointers[nr].Nr = id; _MandatoryPointers[nr].Length = length; _MandatoryPointers[nr].Index = index; } else if ((_OptionalPointers != null) && ((nr - _NrMandatory) < _OptionalPointers.Length)) { nr -= _NrMandatory; if (_OptionalPointers[nr] == null) { _OptionalPointers[nr] = new SCPPointer(); } _OptionalPointers[nr].Nr = id; _OptionalPointers[nr].Length = length; _OptionalPointers[nr].Index = index; } } }
protected override int _Read(byte[] buffer, int offset) { /* Very stange, but most SCP files I got didn't seem to be live up to this law. * the check will now only be doen when the Protocol Version Nr is greator equal * to 14. This value might need changes in future. * * Reference 5.3.1 of the "Standard Communications protocol for computer-assisted * electrocardiography". */ if ((ProtocolVersionNr >= 13) && ((Reserved[0] != _Reserved[0]) || (Reserved[1] != _Reserved[1]) || (Reserved[2] != _Reserved[2]) || (Reserved[3] != _Reserved[3]) || (Reserved[4] != _Reserved[4]) || (Reserved[5] != _Reserved[5]))) { return(0x1); } int nrPointers = (Length - Size) / SCPPointer.Size; if (nrPointers < 12) { return(0x2); } for (int loper = 0; loper < _NrMandatory; loper++) { _MandatoryPointers[loper] = new SCPPointer(); int err = _MandatoryPointers[loper].Read(buffer, offset); if (err != 0) { return(err << 2); } offset += SCPPointer.Size; } nrPointers -= _NrMandatory; if (nrPointers > 0) { _OptionalPointers = new SCPPointer[nrPointers]; for (int loper = 0; loper < nrPointers; loper++) { _OptionalPointers[loper] = new SCPPointer(); int err = _OptionalPointers[loper].Read(buffer, offset); if (err != 0) { return(err << 3); } offset += SCPPointer.Size; } } return(0x0); }