Example #1
0
bool Rule::store ()
{
    char buff[10];
    char data[0x40006]; // Cater for worst possible case
    if (!m_matches)
        return false;
    sprintf (buff, "%d", m_player_id);
    ini_locateHeading (m_inifd, buff);

    {
        int   base  = m_addr[0] & 0xff00;
	    int   laddr = m_addr[0];
        int   group = 1;
        char *p     = data;

        sprintf (buff, "ID%d", group++);
        ini_locateKey (m_inifd, buff);
        p += sprintf (p, "$%04X", laddr - base);
        laddr--;
        for (int i = 0; i < m_ids; i++)
        {
            int addr = m_addr[i];
            if ((addr - 1) != laddr)
            {
                if ((addr - laddr) > (RULE_MAX_ERROR + 1))
                {
                    if (ini_writeString (m_inifd, data) < 0)
                        return false; // Error storing
                    p  = data;
                    // Move to next group
                    sprintf (buff, "ID%d", group++);
                    ini_locateKey (m_inifd, buff);
                    p  = data;
                    p += sprintf (p, "$%04X", addr - base);
                }
                else
                {
                    while (++laddr < addr)
                        p += sprintf (p, ":-");
                }
            }
            p += sprintf (p, ":$%02X", m_memory[addr]);
            laddr = addr;
        }
        if (ini_writeString (m_inifd, data) < 0)
            return false; // Error storing
    }
    return true;
}
Example #2
0
bool IniConfig::readString (ini_fd_t ini, const char *key, char *&str)
{
    char  *ret;
    size_t length;

    if (ini_locateKey (ini, key) < 0)
    {   // Dosen't exist, add it
        (void) ini_writeString (ini, "");
    }

    length = (size_t) ini_dataLength (ini);
    if (!length)
        return 0;

    ret = (char *) malloc (++length);
    if (!ret)
        return false;
    
    if (ini_readString (ini, ret, (uint) length) < 0)
        goto IniCofig_readString_error;

    str = ret;
return true;

IniCofig_readString_error:
    if (str)
        free (str);
    return false;
}
Example #3
0
bool IniConfig::readBool (ini_fd_t ini, const char *key, bool &boolean)
{
    int b = boolean;
    if (ini_locateKey (ini, key) < 0)
    {   // Dosen't exist, add it
        (void) ini_writeString (ini, "");
    }
    if (ini_readBool (ini, &b) < 0)
        return false;
    boolean = (b != 0);
    return true;
}
Example #4
0
bool IniConfig::readInt (ini_fd_t ini, const char *key, int &value)
{
    int i = value;
    if (ini_locateKey (ini, key) < 0)
    {   // Dosen't exist, add it
        (void) ini_writeString (ini, "");
    }
    if (ini_readInt (ini, &i) < 0)
        return false;
    value = i;
    return true;
}
Example #5
0
int_least32_t SidDatabase::length (const char *md5, uint_least16_t song)
{
    int_least32_t  time = 0;

    if (!database)
    {
        errorString = ERR_NO_DATABASE_LOADED;
        return -1;
    }

    // Now set up array access
    if (ini_listDelims  (database, " ") == -1)
    {
        errorString = ERR_MEM_ALLOC;
        return -1;
    }

    // Read Time (and check times before hand)
    (void) ini_locateHeading (database, "Database");
    (void) ini_locateKey     (database, md5);
    // If length return is -1 then no entry found in database
    if (ini_dataLength (database) != -1)
    {
        char timeStamp[10];

        for (uint_least16_t i = 0; i < song; i++)
        {
            if (ini_readString (database, timeStamp, sizeof (timeStamp)) == -1)
            {   // No time found
                errorString = ERR_DATABASE_CORRUPT;
                return -1;
            }

            // Validate Time
            if (timesFound (timeStamp) != 1)
            {
                errorString = ERR_DATABASE_CORRUPT;
                return -1;
            }
        }

        // Parse timestamp
        time = parseTimeStamp (timeStamp);
    }

    return time;
}
Example #6
0
void SidFilter::read (ini_fd_t ini, const char *heading)
{
    clear ();
    m_status = true;

    if (ini_locateHeading (ini, heading) < 0) {
        m_status = false;
        m_errorString = "SID Filter: Unable to locate filter section in input file";
        return;
    }

    struct parampair {
        const char* name;
        float*      address;
    };

    struct parampair sidparams[] = {
        { "DistortionRate",		&m_filter.rate                  },
        { "DistortionPoint",		&m_filter.point                 },
        { "DistortionCFThreshold",	&m_filter.cf_threshold          },
        { "VoiceNonlinearity",		&m_filter.voice_nonlinearity    },
        { "Type3BaseResistance",	&m_filter.baseresistance        },
        { "Type3Offset",		&m_filter.offset                },
        { "Type3Steepness",		&m_filter.steepness             },
        { "Type3MinimumFETResistance",	&m_filter.minimumfetresistance  },
        { "Type4K",			&m_filter.k                     },
        { "Type4B",			&m_filter.b                     },
        { NULL,				NULL                            }
    };

    for (int i = 0; sidparams[i].name != NULL; i ++) {
        /* Ensure that all parameters are zeroed, if missing. */
        double tmp = 0.;
        if (ini_locateKey(ini, sidparams[i].name) >= 0) {
            if (ini_readDouble(ini, &tmp) < 0) {
                std::string msg = "Invalid parameter: " + (std::string) sidparams[i].name + ": int expected";
                m_errorString = (char *) msg.c_str();
                m_status = false;
                return;
            }
        }
        *sidparams[i].address = (float) tmp;
    }
}
Example #7
0
static int load_theme_config(void)
{
	char buffer[300], *p = buffer;
	int ret;

	if (!theme_config_fd) {
		/*Theme config is not loaded yet*/
		memset(theme_font_sizes_cache, 0, sizeof(theme_font_sizes_cache));
		/* Open config file */
		char *filename = cfg_findfile ("etc/nanowm.cfg");
		if (!filename)
			return -1;

		ini_fd_t fd = ini_open (filename, "r", "#;");
		free (filename);

		if (fd == NULL) {
			fprintf (stderr, "theme_get: Unable to open nanowm.cfg file\n");
			return -1;
		} else {
			ret = ini_locateHeading (fd, "Main");
			ret = ini_locateKey (fd, "Theme");
			ret = ini_readString (fd, p, sizeof (buffer));
		}
		ini_close(fd);
		if (ret < 0)
			p = "theme";
		/* open theme config file */
		char path[256] =  ACTIVETHEME_PATH;

		strncat(path, p, 255);
		strncat(path, ".cfg", 255);
		filename = cfg_findfile (path);
		theme_config_fd = ini_open (filename, "r", "#;");
		free (filename);
		if (theme_config_fd == NULL) {
			fprintf (stderr, "theme_get: Unable to open theme config file\n");
			return -1;
		}

	}
	return 0;
}
Example #8
0
/**
 * Get font size from theme config
 */
int theme_fontsize(int index)
{
	int ret, fontsize;

	if (index < 0 || index > 3)
		return -1;
	if (load_theme_config() < 0)
		return -1;

	if (theme_font_sizes_cache[index])
		return theme_font_sizes_cache[index];

	ret = ini_locateHeading (theme_config_fd, "FontSize");
	ret |= ini_locateKey (theme_config_fd, theme_font_sizes[index]);
	ret |= ini_readInt(theme_config_fd, &fontsize);
	if (ret < 0)
		return -1;
	else {
		theme_font_sizes_cache[index] = fontsize;
		return fontsize;
	}
}
Example #9
0
bool Rule::recall (int player_id)
{
    char buff[10];
    char data[0x40006]; // Cater for worst possible case
    sprintf (buff, "%d", m_player_id);
    if (ini_locateHeading (m_inifd, buff) < 0)
        return false;

    {
        int   addr  = 0;
        int   count = 0;
        int   group = 1;
        char *p     = data;

        memset (m_memory, 0, sizeof (m_memory));

        for (;;)
        {
            int ret, val;
            sprintf (buff, "ID%d", group++);
            if (ini_locateKey (m_inifd, buff) < 0)
            {
                if (group == 1)
                    return false;
                break;
            }
            if (ini_readString (m_inifd, data, sizeof (data)) < 0)
                return false;

            p   = data;
            ret = 0;
            sscanf (p, "$%x%n", &val, &ret);
            if (ret != 5)
                return false;
            addr = val;
            p   += ret;
            while (*p != '\0')
            {
                int val;

                // Seperator
                if (*p++ != ':')
                    return false;

                // Place holder
                if (*p == '-')
                {
                    addr++;
                    p++;
                    continue;
                }

                // value
                ret = 0;
                sscanf (p, "$%x%n", &val, &ret);
                if (ret != 3)
                    return false;
                p += ret;
                m_memory[addr]  = val;
                m_flags[addr]   = UNKNOWN;
                m_addr[count++] = addr++;
            }
        }
        m_ids = count;
    }

    // Reset
    m_base        = m_addr[0];
    m_status      = true;
    m_filename[0] = '\0';
    m_matches     = 0;
    m_player_id   = player_id;

    // Double check input values are ok
    _eval ();
    return true;
}
Example #10
0
/**
 * Get specified image from the active theme
 *
*/
int theme_get_image(int group_index, int image_index, int * xcoord, int * ycoord, GR_IMAGE_ID * pict_id)
{
	char buffer[300], *p = buffer;

	if (load_theme_config() < 0)
		return -1;
	/* load needed image */
	const char * theme_group; /*  group name */
	const char ** theme_images;	/* pointer to the theme_*_images array */
	switch(group_index) {
		case THEME_GROUP_TITLE:
			theme_group 	= theme_title;
			theme_images	= theme_title_images;
			break;
		case THEME_GROUP_MAINSCREEN:
			theme_group 	= theme_mainscreen;
			theme_images	= theme_mainscreen_images;
			break;
		default:
			return -1;
	}
	if (ini_locateHeading (theme_config_fd, theme_group) ) {
		fprintf (stderr, "theme_get: Unable to find group %s\n",theme_group);
		return -1;
	}
	if (ini_locateKey (theme_config_fd, theme_images[image_index] ) < 0 ) {
		fprintf (stderr, "theme_get: Unable to find key %s\n",theme_images[image_index]);
		return -1;
	}
	if (ini_readString (theme_config_fd, p, sizeof (buffer))  < 0 ) {
		fprintf (stderr, "theme_get: Unable to get string from key %s\n",theme_images[image_index]);
		return -1;
	}
	/* now parse key value */
	char * token;
	token = strtok(p, ", ");
	/*token = xcoord */
	*xcoord = atoi(token);

	token = strtok(NULL, ", ");
	/*token = ycoord */
	*ycoord = atoi(token);

	token = strtok(NULL, ", ");
	/*token = imagename */

	if (token) {
		/* we have found image name, now load it */
		char path[256] =  ACTIVETHEME_PATH;
		strncat(path, token, 255);
		char *filename = cfg_findfile (path);
		if(!filename) {
			fprintf (stderr, "theme_get: Unable to find image %s\n",path);
		} else {
	//		*wid = theme_load_image(filename);
			*pict_id = GrLoadImageFromFile(filename, 0);
			if (*pict_id == 0)
				fprintf(stderr, "theme_get: Failed to load image %s\n", filename);
			free(filename);
		}
	} else {
		*pict_id = 0;
	}
	return (*pict_id == 0)?-2:0;
}