int TParseEngine::decode (ifstream& file_handle, AnsiString file_name, ifstream& dff_handle, TList* &list, AnsiString* &tags, D_TYPES* &types, unsigned int &counter, AnsiString &support) { list->Clear(); if (parse_dff(dff_handle, tags, types, counter, file_name, support) == 0)//nuskaitome dff informaciją return 0; unsigned int records = read_uint32(file_handle); //nuskaitome įrašų kiekį for (unsigned int i = 0; i < records; i++) { //formatuojame duomenis pagal tagus ir tipus dec_data = new TStringList; //išvaloma pabaigoje dec_data->Clear(); for (unsigned int j = 0; j < counter; j++) { switch (types[j]) { case D_INT: { //nuskaitome INT tipą int int32_data = read_int32(file_handle); dec_data->Add(AnsiString(tags[j])+"="+IntToStr(int32_data)); } break; case D_UINT: { //nuskaitome UINT tipą unsigned int uint32_data = read_int32(file_handle); dec_data->Add(AnsiString(tags[j])+"="+IntToStr(uint32_data)); } break; case D_UNICODE: { //nuskaitome UNICODE tipą char* unicode_data = read_unicode(file_handle); dec_data->Add(AnsiString(tags[j])+"="+ AnsiString(unicode_data)); delete [] unicode_data; } break; case D_ASCF: { //nuskaitome ASCF tipą char* ASCF_data = read_ASCF(file_handle); dec_data->Add(AnsiString(tags[j])+"="+AnsiString(ASCF_data)); delete [] ASCF_data; } break; case D_CNTR: { //nuskaitome CNTR tipą unsigned char length; int* CNTR_data = read_CNTR(file_handle, length); dec_data->Add(AnsiString(tags[j])+"="+IntToStr(length)); //įrašome CNTR ilgį for (int i = 0; i < length; i++) dec_data->Add(AnsiString(tags[j])+IntToStr(i)+"="+IntToStr(CNTR_data[i])); //surašome CNTR duomenis delete [] CNTR_data; } break; case D_FLOAT: { //nuskaitome FLOAT tipą float FLOAT_data = read_float(file_handle); dec_data->Add(AnsiString(tags[j])+"="+FloatToStr(FLOAT_data)); } break; case D_BYTE: { //nuskaitome CHAR tipą char BYTE_data = read_int8(file_handle); dec_data->Add(AnsiString(tags[j])+"="+IntToStr(BYTE_data)); } break; case D_HEX: { //nuskaitome HEX tipą char* HEX_data = read_hex(file_handle); dec_data->Add(AnsiString(tags[j])+"="+AnsiString(HEX_data)); delete [] HEX_data; } break; case D_CHEX: { //nuskaitome CHEX tipą char* CHEX_data = read_chex(file_handle); dec_data->Add(AnsiString(tags[j])+"="+AnsiString(CHEX_data)); delete [] CHEX_data; } break; }; } list->Add(dec_data); } return 1; }