Example #1
0
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);
    }
}
Example #2
0
	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;
		}
	}
Example #3
0
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;
}