//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; // RSEQ_LABLHeader* labl = (RSEQ_LABLHeader*)((int)header + len); // if ((WorkingUncompressed.Length > len) && (labl->_tag == RSEQ_LABLHeader.Tag)) // { // _labels = new LabelItem[count]; // count = labl->_numEntries; // for (int i = 0; i < count; i++) // { // RSEQ_LABLEntry* entry = labl->Get(i); // _labels[i] = new LabelItem() { String = entry->Name, Tag = entry->_id }; // } // return true; // } // return false; //} private void ParseBlocks() { VoidPtr dataAddr = Header; int len = Header->_header._length; int total = WorkingUncompressed.Length; //Look for labl block RSEQ_LABLHeader *labl = (RSEQ_LABLHeader *)(dataAddr + len); if ((total > len) && (labl->_tag == RSEQ_LABLHeader.Tag)) { int count = labl->_numEntries; _labels = new LabelItem[count]; count = labl->_numEntries; for (int i = 0; i < count; i++) { RSEQ_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); } }
public void Write(VoidPtr address) { RSEQ_LABLHeader *header = (RSEQ_LABLHeader *)address; int count = _labels.Count; VoidPtr dataAddr = address + 12 + (count * 4); bint * list = (bint *)(address + 8); LabelItem label; int size; byte * pad; for (int i = 0; i < count;) { label = _labels[i++]; list[i] = (int)dataAddr - (int)list; ((RSEQ_LABLEntry *)dataAddr)->Set(label.Tag, label.String); dataAddr += label.DataLen; } pad = (byte *)dataAddr; for (size = dataAddr - address; (size & 0x1F) != 0; size++) { *pad++ = 0; } header->Set(size, count); }
//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; RSEQ_LABLHeader *labl = (RSEQ_LABLHeader *)((int)header + len); if ((WorkingUncompressed.Length > len) && (labl->_tag == RSEQ_LABLHeader.Tag)) { _labels = new LabelItem[count]; count = labl->_numEntries; for (int i = 0; i < count; i++) { RSEQ_LABLEntry *entry = labl->Get(i); _labels[i] = new LabelItem() { String = entry->Name, Tag = entry->_id }; } return(true); } return(false); }