static void format_meta (w_io_t *io, const w_meta_item_t *meta, int indent) { while (w_meta_item_is_valid (meta)) { if (indent) { int i = indent << 1; while (i--) W_IO_NORESULT (w_io_putchar (io, ' ')); } switch (meta->type) { case W_META_TYPE_I8: W_IO_NORESULT (w_io_format (io, "int8_t ")); break; case W_META_TYPE_I16: W_IO_NORESULT (w_io_format (io, "int16_t ")); break; case W_META_TYPE_I32: W_IO_NORESULT (w_io_format (io, "int32_t ")); break; case W_META_TYPE_I64: W_IO_NORESULT (w_io_format (io, "int64_t ")); break; case W_META_TYPE_U8 : W_IO_NORESULT (w_io_format (io, "uint8_t ")); break; case W_META_TYPE_U16: W_IO_NORESULT (w_io_format (io, "uint16_t ")); break; case W_META_TYPE_U32: W_IO_NORESULT (w_io_format (io, "uint32_t ")); break; case W_META_TYPE_U64: W_IO_NORESULT (w_io_format (io, "uint64_t ")); break; case W_META_TYPE_STR: W_IO_NORESULT (w_io_format (io, "char *")); break; case W_META_TYPE_BOOL:W_IO_NORESULT (w_io_format (io, "bool ")); break; default: break; } if (meta->type == W_META_TYPE_REG) { if (meta->alen) W_IO_NORESULT (w_io_format (io, "$s $s[$I] {\n", w_meta_desc_name (meta->mref), meta->name, meta->alen)); else W_IO_NORESULT (w_io_format (io, "$s $s {\n", w_meta_desc_name (meta->mref), meta->name)); format_meta (io, w_meta_desc_items (meta->mref), indent + 1); if (indent) { int i = indent << 1; while (i--) W_IO_NORESULT (w_io_putchar (io, ' ')); } W_IO_NORESULT (w_io_format (io, "};\n")); } else { W_IO_NORESULT (w_io_format (io, "$s", meta->name)); if (meta->alen) W_IO_NORESULT (w_io_format (io, "[$I];\n", meta->alen)); else W_IO_NORESULT (w_io_format (io, ";\n")); } meta = w_meta_item_next (meta); } }
void create(pfc::string_formatter & p_out,const t_entry_list & p_data) { if (p_data.get_count() == 0) return; bool album_artist_global = is_meta_same_everywhere(p_data,"album artist"), artist_global = is_meta_same_everywhere(p_data,"artist"), album_global = is_meta_same_everywhere(p_data,"album"), genre_global = is_meta_same_everywhere(p_data,"genre"), date_global = is_meta_same_everywhere(p_data,"date"), discid_global = is_meta_same_everywhere(p_data,"discid"), comment_global = is_meta_same_everywhere(p_data,"comment"), catalog_global = is_meta_same_everywhere(p_data,"catalog"), songwriter_global = is_meta_same_everywhere(p_data,"songwriter"); if (genre_global) { p_out << "REM GENRE " << format_meta(p_data.first()->m_infos,"genre") << g_eol; } if (date_global) { p_out << "REM DATE " << format_meta(p_data.first()->m_infos,"date") << g_eol; } if (discid_global) { p_out << "REM DISCID " << format_meta(p_data.first()->m_infos,"discid") << g_eol; } if (comment_global) { p_out << "REM COMMENT " << format_meta(p_data.first()->m_infos,"comment") << g_eol; } if (catalog_global) { p_out << "CATALOG " << format_meta(p_data.first()->m_infos,"catalog") << g_eol; } if (songwriter_global) { p_out << "SONGWRITER \"" << format_meta(p_data.first()->m_infos,"songwriter") << "\"" << g_eol; } if (album_artist_global) { p_out << "PERFORMER \"" << format_meta(p_data.first()->m_infos,"album artist") << "\"" << g_eol; artist_global = false; } else if (artist_global) { p_out << "PERFORMER \"" << format_meta(p_data.first()->m_infos,"artist") << "\"" << g_eol; } if (album_global) { p_out << "TITLE \"" << format_meta(p_data.first()->m_infos,"album") << "\"" << g_eol; } { replaygain_info::t_text_buffer rgbuffer; replaygain_info rg = p_data.first()->m_infos.get_replaygain(); if (rg.format_album_gain(rgbuffer)) p_out << "REM REPLAYGAIN_ALBUM_GAIN " << rgbuffer << g_eol; if (rg.format_album_peak(rgbuffer)) p_out << "REM REPLAYGAIN_ALBUM_PEAK " << rgbuffer << g_eol; } pfc::string8 last_file; for(t_entry_list::const_iterator iter = p_data.first();iter.is_valid();++iter) { if (strcmp(last_file,iter->m_file) != 0) { p_out << "FILE \"" << iter->m_file << "\" WAVE" << g_eol; last_file = iter->m_file; } p_out << " TRACK " << pfc::format_int(iter->m_track_number,2) << " AUDIO" << g_eol; if (iter->m_infos.meta_find("title") != pfc_infinite) p_out << " TITLE \"" << format_meta(iter->m_infos,"title") << "\"" << g_eol; if (!artist_global && iter->m_infos.meta_find("artist") != pfc_infinite) p_out << " PERFORMER \"" << format_meta(iter->m_infos,"artist") << "\"" << g_eol; if (!songwriter_global && iter->m_infos.meta_find("songwriter") != pfc_infinite) { p_out << " SONGWRITER \"" << format_meta(iter->m_infos,"songwriter") << "\"" << g_eol; } if (iter->m_infos.meta_find("isrc") != pfc_infinite) { p_out << " ISRC " << format_meta(iter->m_infos,"isrc") << g_eol; } if (!date_global && iter->m_infos.meta_find("date") != pfc_infinite) { p_out << " REM DATE " << format_meta(iter->m_infos,"date") << g_eol; } { replaygain_info::t_text_buffer rgbuffer; replaygain_info rg = iter->m_infos.get_replaygain(); if (rg.format_track_gain(rgbuffer)) p_out << " REM REPLAYGAIN_TRACK_GAIN " << rgbuffer << g_eol; if (rg.format_track_peak(rgbuffer)) p_out << " REM REPLAYGAIN_TRACK_PEAK " << rgbuffer << g_eol; } if (!iter->m_flags.is_empty()) { p_out << " FLAGS " << iter->m_flags << g_eol; } if (iter->m_index_list.m_positions[0] < iter->m_index_list.m_positions[1]) { if (iter->m_index_list.m_positions[0] < 0) p_out << " PREGAP " << cuesheet_format_index_time(iter->m_index_list.m_positions[1] - iter->m_index_list.m_positions[0]) << g_eol; else p_out << " INDEX 00 " << cuesheet_format_index_time(iter->m_index_list.m_positions[0]) << g_eol; } p_out << " INDEX 01 " << cuesheet_format_index_time(iter->m_index_list.m_positions[1]) << g_eol; for(unsigned n=2;n<t_cuesheet_index_list::count && iter->m_index_list.m_positions[n] > 0;n++) { p_out << " INDEX " << pfc::format_uint(n,2) << " " << cuesheet_format_index_time(iter->m_index_list.m_positions[n]) << g_eol; } // p_out << " INDEX 01 " << cuesheet_format_index_time(iter->m_offset) << g_eol; } }
static GwyContainer* jeol_get_metadata(const JEOLImageHeader *header) { const JEOLSPMParam *spm_param; const JEOLDate *date; const JEOLTime *time_; GwyContainer *meta; const gchar *s; meta = gwy_container_new(); spm_param = &header->spm_param; format_meta(meta, "WinSPM Version", "%.2f", header->winspm_version/100.0); format_meta(meta, "Clock", "%g ms", spm_param->clock); format_meta(meta, "Rotation", "%g deg", spm_param->rotation); format_meta(meta, "Feedback filter", "%g Hz", spm_param->feedback_filter); format_meta(meta, "Present filter", "%g Hz", spm_param->present_filter); format_meta(meta, "Head amp gain", "%g V/nA", spm_param->head_amp_gain); if ((s = gwy_enuml_to_string(spm_param->mode, "Line1024", JEOL_MODE_LINE_1024, "Topo Mirror", JEOL_MODE_TOPO_MIRROR, "Topo512", JEOL_MODE_TOPO_512, "Topo256", JEOL_MODE_TOPO_256, "Topo128", JEOL_MODE_TOPO_128, "Line512", JEOL_MODE_LINE_512, "Line256", JEOL_MODE_LINE_256, "Line128", JEOL_MODE_LINE_128, "Topo ×2", JEOL_MODE_TOPO_X2, "Topo ×4", JEOL_MODE_TOPO_X4, "CITS", JEOL_MODE_CITS, "I-V", JEOL_MODE_I_V, "S-V", JEOL_MODE_S_V, "I-S", JEOL_MODE_I_S, "F-C", JEOL_MODE_F_C, "FFC", JEOL_MODE_FFC, "Montage128", JEOL_MODE_MONTAGE_128, "Montage256", JEOL_MODE_MONTAGE_256, "LSTS", JEOL_MODE_LSTS, "Topo SPS", JEOL_MODE_TOPO_SPS, "VCO", JEOL_MODE_VCO, "Topo Image", JEOL_MODE_TOPO_IMAGE, "Topo3 VE AFM", JEOL_MODE_TOPO3_VE_AFM, "Topo4 MFM", JEOL_MODE_TOPO4_MFM, "Topo3 LM FFM", JEOL_MODE_TOPO3_LM_FFM, "Topo2 FKM", JEOL_MODE_TOPO2_FKM, "Topo2 FFM", JEOL_MODE_TOPO2_FFM, "Topo1204", JEOL_MODE_TOPO_1204, "Topo 2×512", JEOL_MODE_TOPO_2X512, "Topo2 SCFM", JEOL_MODE_TOPO2_SCFM, "Topo2 MFM-1", JEOL_MODE_TOPO2_MFM_1, "Topo64", JEOL_MODE_TOPO64, "Phaseshift", JEOL_MODE_PHASE_SHIFT, "Manipulation", JEOL_MODE_MANIPULATION, "CS3D Scan", JEOL_MODE_CS3D_SCAN, "F-V", JEOL_MODE_F_V, "SoftwareGen", JEOL_MODE_SOFTWARE_GEN, NULL))) format_meta(meta, "Measurement mode", "%s", s); format_meta(meta, "Bias", "%g V", header->bias); /* FIXME: It's called `reference value' and it can be in V or nA. * What it means when it's V and how one can tell when it's what? */ format_meta(meta, "Tunnel current", "%g nA", header->reference_value); date = &header->measurement_date; time_ = &header->measurement_time; format_meta(meta, "Date and time of measurement", "%04d-%02d-%02d %02d:%02d:%02d.%02d", date->year_1980, date->month, date->day, time_->hour, time_->minute, time_->second, time_->second_100); date = &header->save_date; time_ = &header->save_time; format_meta(meta, "Date and time of file save", "%04d-%02d-%02d %02d:%02d:%02d.%02d", date->year_1980, date->month, date->day, time_->hour, time_->minute, time_->second, time_->second_100); format_meta(meta, "Tip speed X", "%g nm/s", header->tip_speed_x); format_meta(meta, "Tip speed Y", "%g nm/s", header->tip_speed_y); if ((s = gwy_flat_enum_to_string(header->data_source, G_N_ELEMENTS(data_sources), data_sources, data_sources_name))) format_meta(meta, "Data source", "%s", s); format_meta(meta, "Direction", header->forward ? "Forward" : "Backward"); format_bit(meta, "Measurement signal", G_N_ELEMENTS(measurement_signals), measurement_signals, measurement_signals_name, header->spm_misc_param.measurement_signal); format_bit(meta, "SPM mode", G_N_ELEMENTS(spm_modes), spm_modes, spm_modes_name, header->spm_misc_param.spm_mode); format_bit(meta, "AFM mode", G_N_ELEMENTS(afm_modes), afm_modes, afm_modes_name, header->spm_misc_param.afm_mode); return meta; }