private void ParseBlocks() { VoidPtr dataAddr = Header; int len = Header->_header._length; int total = WorkingUncompressed.Length; SetSizeInternal(len); //Look for labl block LABLHeader *labl = (LABLHeader *)(dataAddr + len); if ((total > len) && (labl->_tag == LABLHeader.Tag)) { int count = labl->_numEntries; _labels = new LabelItem[count]; count = labl->_numEntries; for (int i = 0; i < count; i++) { LABLEntry *entry = labl->Get(i); _labels[i] = new LabelItem() { String = entry->Name, Tag = entry->_id }; } len += labl->_size; } //Set data source if (total > len) { _audioSource = new DataSource(dataAddr + len, total - len); } }
//Finds labels using LABL block between header and footer, also initializes array protected bool GetLabels(int count) { RWSDHeader *header = (RWSDHeader *)WorkingUncompressed.Address; int len = header->_header._length; LABLHeader *labl = (LABLHeader *)((int)header + len); if ((WorkingUncompressed.Length > len) && (labl->_tag == LABLHeader.Tag)) { _labels = new LabelItem[count]; count = labl->_numEntries; for (int i = 0; i < count; i++) { LABLEntry *entry = labl->Get(i); _labels[i] = new LabelItem() { String = entry->Name, Tag = entry->_id }; } return(true); } return(false); }