From f0d4fc6c6b146197c0fc51753d838252766aeda2 Mon Sep 17 00:00:00 2001 From: Dave Chapman Date: Tue, 29 May 2007 19:00:36 +0000 Subject: Commit my patch from FS#7179 - a standalone command-line checkwps tool. To build, just type "make checkwps" in tools and run it with "checkwps wpsname.wps". git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13517 a1c6a512-1295-4272-9138-f99709370657 --- apps/gui/gwps-common.c | 26 --------------- apps/gui/wps_debug.c | 8 +++-- apps/gui/wps_parser.c | 32 ++++++++++++++++++ tools/Makefile | 5 +++ tools/checkwps.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 134 insertions(+), 28 deletions(-) create mode 100644 tools/checkwps.c diff --git a/apps/gui/gwps-common.c b/apps/gui/gwps-common.c index b25168f252..2cdb92d964 100644 --- a/apps/gui/gwps-common.c +++ b/apps/gui/gwps-common.c @@ -1969,29 +1969,3 @@ bool gui_wps_refresh(struct gui_wps *gwps, return true; } -int wps_subline_index(struct wps_data *data, int line, int subline) -{ - return data->lines[line].first_subline_idx + subline; -} - -int wps_first_token_index(struct wps_data *data, int line, int subline) -{ - int first_subline_idx = data->lines[line].first_subline_idx; - return data->sublines[first_subline_idx + subline].first_token_idx; -} - -int wps_last_token_index(struct wps_data *data, int line, int subline) -{ - int first_subline_idx = data->lines[line].first_subline_idx; - int idx = first_subline_idx + subline; - if (idx < data->num_sublines - 1) - { - /* This subline ends where the next begins */ - return data->sublines[idx+1].first_token_idx - 1; - } - else - { - /* The last subline goes to the end */ - return data->num_tokens - 1; - } -} diff --git a/apps/gui/wps_debug.c b/apps/gui/wps_debug.c index 8ba4b6f000..ae542785ae 100644 --- a/apps/gui/wps_debug.c +++ b/apps/gui/wps_debug.c @@ -22,13 +22,17 @@ #include #include #include "gwps.h" +#ifdef __PCTOOL__ +#define DEBUGF printf +#else #include "debug.h" +#endif #define PARSE_FAIL_UNCLOSED_COND 1 #define PARSE_FAIL_INVALID_CHAR 2 #define PARSE_FAIL_COND_SYNTAX_ERROR 3 -#ifdef SIMULATOR +#if defined(SIMULATOR) || defined(__PCTOOL__) extern bool debug_wps; #endif @@ -467,7 +471,7 @@ static void print_img_cond_indexes(struct wps_data *data) void print_debug_info(struct wps_data *data, int fail, int line) { -#ifdef SIMULATOR +#if defined(SIMULATOR) || defined(__PCTOOL__) if (debug_wps) { dump_wps_tokens(data); diff --git a/apps/gui/wps_parser.c b/apps/gui/wps_parser.c index be0ef4e271..d363d6d8cb 100644 --- a/apps/gui/wps_parser.c +++ b/apps/gui/wps_parser.c @@ -24,6 +24,7 @@ #include #include "atoi.h" #include "gwps.h" +#ifndef __PCTOOL__ #include "settings.h" #include "debug.h" #include "plugin.h" @@ -36,6 +37,8 @@ #include "backdrop.h" #endif +#endif + #define WPS_DEFAULTCFG WPS_DIR "/rockbox_default.wps" #define RWPS_DEFAULTCFG WPS_DIR "/rockbox_default.rwps" @@ -1008,6 +1011,7 @@ bool wps_data_load(struct wps_data *wps_data, * wants to be a virtual file. Feel free to modify dirbrowse() * if you're feeling brave. */ +#ifndef __PCTOOL__ if (! strcmp(buf, WPS_DEFAULTCFG) ) { global_settings.wps_file[0] = 0; @@ -1021,6 +1025,7 @@ bool wps_data_load(struct wps_data *wps_data, return false; } #endif +#endif /* __PCTOOL__ */ int fd = open(buf, O_RDONLY); @@ -1080,3 +1085,30 @@ bool wps_data_load(struct wps_data *wps_data, return true; } } + +int wps_subline_index(struct wps_data *data, int line, int subline) +{ + return data->lines[line].first_subline_idx + subline; +} + +int wps_first_token_index(struct wps_data *data, int line, int subline) +{ + int first_subline_idx = data->lines[line].first_subline_idx; + return data->sublines[first_subline_idx + subline].first_token_idx; +} + +int wps_last_token_index(struct wps_data *data, int line, int subline) +{ + int first_subline_idx = data->lines[line].first_subline_idx; + int idx = first_subline_idx + subline; + if (idx < data->num_sublines - 1) + { + /* This subline ends where the next begins */ + return data->sublines[idx+1].first_token_idx - 1; + } + else + { + /* The last subline goes to the end */ + return data->num_tokens - 1; + } +} diff --git a/tools/Makefile b/tools/Makefile index a25447c20e..ac9fbac6d0 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -47,6 +47,11 @@ database: database.c ../apps/tagcache.c ../apps/metadata.c \ -D__PCTOOL__ -DHAVE_TAGCACHE -DROCKBOX_HAS_LOGF -DSIMULATOR \ -DCONFIG_CODEC=1 -ldl -I../apps $+ -o $@ +checkwps: checkwps.c ../apps/gui/wps_parser.c ../apps/gui/wps_debug.c ../firmware/common/ctype.c + $(SILENT)$(CC) -g -I ../apps/gui -I../firmware/export \ +-D__PCTOOL__ -DDEBUG -DROCKBOX_HAS_LOGF -DIPOD_COLOR -D ROCKBOX_DIR_LEN=255 -D WPS_DIR=\".\" \ +-I../apps -I../firmware/target/arm/ipod -I../firmware/include $+ -o $@ + convbdf: convbdf.c $(SILENT)$(CC) -g $+ -o $@ diff --git a/tools/checkwps.c b/tools/checkwps.c new file mode 100644 index 0000000000..74ce1e82be --- /dev/null +++ b/tools/checkwps.c @@ -0,0 +1,91 @@ +#include +#include +#include "gwps.h" + +#define MIN(x,y) ((x) > (y) ? (y) : (x)) + +bool debug_wps = true; + +int read_bmp_file(char* filename, + struct bitmap *bm, + int maxsize, + int format) +{ + return 0; +} + +int errno; + +int read_line(int fd, char* buffer, int buffer_size) +{ + int count = 0; + int num_read = 0; + + errno = 0; + + while (count < buffer_size) + { + unsigned char c; + + if (1 != read(fd, &c, 1)) + break; + + num_read++; + + if ( c == '\n' ) + break; + + if ( c == '\r' ) + continue; + + buffer[count++] = c; + } + + buffer[MIN(count, buffer_size - 1)] = 0; + + return errno ? -1 : num_read; +} + +bool load_wps_backdrop(char* filename) +{ + return true; +} + +static char pluginbuf[PLUGIN_BUFFER_SIZE]; + +void* plugin_get_buffer(size_t *buffer_size) +{ + *buffer_size = PLUGIN_BUFFER_SIZE; + return pluginbuf; +} + +int main(int argc, char **argv) +{ + int res; + int fd; + + struct wps_data wps; + + if (argc != 2) { + printf("Usage: checkwps filename.wps\n"); + return 1; + } + + fd = open(argv[1], O_RDONLY); + if (fd < 0) { + printf("Failed to open %s\n",argv[1]); + return 2; + } + close(fd); + + res = wps_data_load(&wps, argv[1], true); + + if (!res) { + printf("WPS parsing failure\n"); + return 3; + } + + printf("WPS parsed OK\n"); + return 0; +} + -- cgit v1.2.3