Exemplo n.º 1
0
/* Load a skin (TilEm v2.00 only) */
int skin_load(SKIN_INFOS *si, const char *filename, GError **err)
{
	FILE *fp;
	int ret = 0, errnum;
	char *dname;

	g_return_val_if_fail(err == NULL || *err == NULL, -1);

	fp = g_fopen(filename, "rb");
	if (fp == NULL) {
		errnum = errno;
		dname = g_filename_display_basename(filename);
		g_set_error(err, G_FILE_ERROR, g_file_error_from_errno(errnum),
		            _("Unable to open %s for reading: %s"),
		            dname, g_strerror(errnum));
		g_free(dname);
		return -1;
	}

	ret = skin_read_header(si, fp);
	if (ret) {
		fclose(fp);
		dname = g_filename_display_basename(filename);
		g_set_error(err, SKIN_ERROR, SKIN_ERROR_INVALID,
		            _("The file %s is not a valid skin."), dname);
		g_free(dname);
		return -1;
	}

	ret = skin_read_image(si, fp, err);

	fclose(fp);

	return ret;
}
Exemplo n.º 2
0
static int match_skin(int calc_type)
{
	SKIN_INFOS *sk = &skin_infos;
	int ok;
	gchar *skin_name, *s;

	s = g_strdup(ti68k_calctype_to_string(calc_type));
	skin_name = g_ascii_strdown(s, strlen(s));
	g_free(s);

	if(!strcmp(skin_name, "ti92+") || !strcmp(skin_name, "ti89t"))
		skin_name[4] = '\0';

#ifdef __IPAQ__
	s = g_strconcat("ipaq_", skin_name, NULL);
	g_free(skin_name);
	skin_name = s;
#endif

	// filename is "", load default skin
	if(!strcmp(g_basename(options.skin_file), ""))
	{
		g_free(options.skin_file);
		options.skin_file = g_strdup_printf("%s%s.skn", 
					    inst_paths.skin_dir, skin_name);
		g_free(skin_name);
		return -1;
	}

	// load skin header
	if(skin_read_header(sk, options.skin_file) == -1)
	{
		g_free(options.skin_file);
      	options.skin_file = g_strdup_printf("%s%s.skn", 
					    inst_paths.skin_dir, skin_name);
	    g_free(skin_name);
	    return -1;
	}

	// is skin compatible
	switch(tihw.calc_type)
	{
	    case TI92:
		case TI92p:
            ok = !strcmp(sk->calc, SKIN_TI92) || !strcmp(sk->calc, SKIN_TI92P);
		break;
	    case TI89:
        case TI89t:
            ok = !strcmp(sk->calc, SKIN_TI89) || !strcmp(sk->calc, SKIN_TI89T);
		break;
		case V200:
			ok = !strcmp(sk->calc, SKIN_V200);
		break;
	    default: 
            ok = 0;
		break;
	}

	if(!ok)
	{
		g_free(options.skin_file);
      	options.skin_file = g_strdup_printf("%s%s.skn", 
			inst_paths.skin_dir, skin_name);

	    //tiemu_error(0, _("skin incompatible with the current calc model. Falling back to default skin."));
	    g_free(skin_name);
		return -1;
	}

    g_free(skin_name);
	return 0;
}