Beispiel #1
0
        //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);
        }
Beispiel #3
0
        //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);
        }