Program the control the fischertechnik robo interface or intelligent interface via tcp socket or via a java gui.
Diff: ConfigFile.cpp
- Revision:
- 1:2c9d412ad471
- Parent:
- 0:7f26f0680202
--- a/ConfigFile.cpp Fri Dec 31 14:01:14 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,415 +0,0 @@ -/** - * Configuration file interface class (Version 0.0.1) - * - * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems) - * http://shinta.main.jp/ - */ -#include "ConfigFile.h" - -#define NEWLINE_UNIX "\n" -#define NEWLINE_DOS "\r\n" -#define NEWLINE_MAC "\r" - -/** - * Create a configuration file class. - */ -ConfigFile::ConfigFile() { - /* - * Allocation for a config_t list. - */ - configlist = (config_t **)malloc(sizeof(config_t *) * MAXCONFIG); - for (int i = 0; i < MAXCONFIG; i++) { - configlist[i] = NULL; - } -} - -/** - * Destroy a configuration file class. - */ -ConfigFile::~ConfigFile() { - /* - * Remove all storage and the contents. - */ - for (int i = 0; i < MAXCONFIG; i++) { - config_t *cfg = configlist[i]; - if (cfg != NULL) { - free(cfg->key); - free(cfg->value); - free(cfg); - } - configlist[i] = NULL; - } - - /* - * Remove cnofig_t list. - */ - free(configlist); - configlist = NULL; -} - -/** - * Get a value for a key. - * - * @param key A target key name. - * @param value A pointer to a value storage. - * @param siz A size of a value storage. - * @return A value or NULL. - */ -bool ConfigFile::getValue(char *key, char *value, size_t siz) { - /* - * Null check. - */ - if (key == NULL) { - return false; - } - - /* - * Search a config_t object from the key. - */ - config_t *p = search(key); - if (p == NULL) { - return false; - } - - /* - * Check the storage size. - */ - if (siz <= strlen(p->value)) { - return false; - } - - /* - * Copy the value to the storage. - */ - strcpy(value, p->value); - return true; -} - -/** - * Set a set of a key and value. - * - * @param key A key. - * @param value A value. - * - * @return True if it succeed. - */ -bool ConfigFile::setValue(char *key, char *value) { - /* - * Null check. - */ - if ((key == NULL) || (value == NULL)) { - return false; - } - - /* - * Size check. - */ - if ((MAXLEN_KEY < strlen(key)) || (MAXLEN_VALUE < strlen(value))) { - return false; - } - - /* - * Search a config_t object from the key. - */ - config_t *p = search(key); - if (p == NULL) { - /* - * Allocation a memory for a new key. - */ - char *k = (char *)malloc(sizeof(char) * (strlen(key) + 1)); - if (k == NULL) { - return false; - } - strcpy(k, key); - - /* - * Allocation a memory for a new value. - */ - char *v = (char *)malloc(sizeof(char) * (strlen(value) + 1)); - if (v == NULL) { - free(k); - return false; - } - strcpy(v, value); - - /* - * Allocation a memory for a new configuration. - */ - config_t *cfg = (config_t *)malloc(sizeof(config_t) * 1); - if (cfg == NULL) { - free(k); - free(v); - return false; - } - cfg->key = k; - cfg->value = v; - - /* - * Add the new configuration. - */ - if (!add(cfg)) { - free(k); - free(v); - free(cfg); - return false; - } - - return true; - } else { - /* - * The value is same. - */ - if (strcmp(value, p->value) == 0) { - return true; - } - - /* - * Free a memory for the value. - */ - free(p->value); - p->value = NULL; - - /* - * Allocation memory for the new value. - */ - char *v = (char *)malloc(sizeof(char) * (strlen(value) + 1)); - if (v == NULL) { - return false; - } - - /* - * Store it. - */ - strcpy(v, value); - p->value = v; - - return true; - } -} - -/** - * Remove a config. - * - * @param key A key. - * - * @return True if it succeed. - */ -bool ConfigFile::remove(char *key) { - if (key == NULL) { - return false; - } - for (int i = 0; i < MAXCONFIG; i++) { - config_t *cfg = configlist[i]; - if (cfg != NULL) { - if (strcmp(cfg->key, key) == 0) { - free(cfg->key); - free(cfg->value); - free(cfg); - configlist[i] = NULL; - return true; - } - } - } - return false; -} - -/** - * Remove all config. - * - * @return True if it succeed. - */ -bool ConfigFile::removeAll(void) { - for (int i = 0; i < MAXCONFIG; i++) { - config_t *p = configlist[i]; - if (p != NULL) { - free(p->key); - free(p->value); - } - free(p); - configlist[i] = NULL; - } - return true; -} - -/** - * Get a number of configuration sets. - * - * @return number of configuration sets. - */ -int ConfigFile::getCount() { - int cnt = 0; - for (int i = 0; i < MAXCONFIG; i++) { - config_t *p = configlist[i]; - if (p != NULL) { - cnt++; - } - } - return cnt; -} - -/** - * Get a key and a value. - * - * @param index Index number of this list. - * @param key A pointer to a buffer for key. - * @param keybufsiz A size of the key buffer. - * @param value A pointer to a buffer for value. - * @param valuebufsiz A size of the value buffer. - * - * @return true if it succeed. - */ -bool ConfigFile::getKeyAndValue(int index, char *key, size_t keybufsiz, char *value, size_t valuebufsiz) { - int cnt = 0; - for (int i = 0; i < MAXCONFIG; i++) { - config_t *p = configlist[i]; - if (p != NULL) { - if (cnt == index) { - if ((strlen(p->key) < keybufsiz) && (strlen(p->value) < valuebufsiz)) { - strcpy(key, p->key); - strcpy(value, p->value); - return true; - } - return false; - } - cnt++; - } - } - return false; -} - -/** - * Read from the target file. - * - * @param file A target file name. - */ -bool ConfigFile::read(char *file) { - /* - * Open the target file. - */ - FILE *fp = fopen(file, "r"); - if (fp == NULL) { - return false; - } - - /* - * Remove all configuration. - */ - removeAll(); - - /* - * Read from a file. - */ - char buf[MAXLEN_KEY + 8 + MAXLEN_VALUE]; - while (fgets(buf, sizeof(buf), fp) != NULL) { - /* - * Ignore a comment. - */ - if (buf[0] == '#') { - continue; - } - - /* - * Trim a return. - */ - const size_t len = strlen(buf); - for (int i = 0; i < len; i++) { - if ((buf[i] == '\r') || (buf[i] == '\n')) { - buf[i] = '\0'; - } - } - - /* - * Separate key and value. - */ - char k[MAXLEN_KEY]; - char v[MAXLEN_VALUE]; - char *sp = strchr(buf, SEPARATOR); - if (sp != NULL) { - strcpy(v, sp + 1); - *sp = '\0'; - strcpy(k, buf); - setValue(k, v); - } - } - fclose(fp); - return true; -} - -/** - * Write from the target file. - * - * @param file A pointer to a file name. - * @param header A pointer to a header. - * @param ff File format. - */ -bool ConfigFile::write(char *file, char *header, FileFormat ff) { - /* - * Open the target file. - */ - FILE *fp = fopen(file, "w"); - if (fp == NULL) { - return false; - } - - /* - * Set a type of new line. - */ - char *newline = NEWLINE_UNIX; - switch (ff) { - case UNIX: - newline = NEWLINE_UNIX; - break; - case MAC: - newline = NEWLINE_MAC; - break; - case DOS: - newline = NEWLINE_DOS; - break; - default: - newline = NEWLINE_UNIX; - break; - } - - /* - * Write the header. - */ - if (header != NULL) { - fprintf(fp, "%s%s", header, newline); - } - - /* - * Write the data. - */ - for (int i = 0; i < MAXCONFIG; i++) { - config_t *cfg = configlist[i]; - if (cfg != NULL) { - fprintf(fp, "%s=%s%s", cfg->key, cfg->value, newline); - } - } - fclose(fp); - return true; -} - -ConfigFile::config_t *ConfigFile::search(char *key) { - if (key == NULL) { - return NULL; - } - for (int i = 0; i < MAXCONFIG; i++) { - if (configlist[i] != NULL) { - if (strcmp(configlist[i]->key, key) == 0) { - return configlist[i]; - } - } - } - return NULL; -} - -bool ConfigFile::add(config_t *cfg) { - for (int i = 0; i < MAXCONFIG; i++) { - if (configlist[i] == NULL) { - configlist[i] = cfg; - return true; - } - } - return false; -} \ No newline at end of file