From 2e76f276d08afefe650a928bedd9683647926b18 Mon Sep 17 00:00:00 2001 From: Sanky Date: Fri, 19 Dec 2014 21:39:56 +0100 Subject: Fix parsing arguments --- pokemontools/gfx.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pokemontools/gfx.py b/pokemontools/gfx.py index bfd6745..dc3456a 100644 --- a/pokemontools/gfx.py +++ b/pokemontools/gfx.py @@ -1095,7 +1095,7 @@ def read_filename_arguments(filename): 't': 'tile_padding', } parsed_arguments = {} - arguments = os.path.splitext(filename)[0].split('.')[1:] + arguments = os.path.splitext(filename)[0].lstrip('.').split('.')[1:] for argument in arguments: arg = argument[0] param = argument[1:] -- cgit v1.2.3 From fa0761ea70308099bf3a61a88ecf8359cc594d44 Mon Sep 17 00:00:00 2001 From: IIMarckus Date: Thu, 8 Jan 2015 02:14:42 -0700 Subject: redrle: Add a -r flag to compress by rows (matching GF's behavior). --- redtools/redrle.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 62 insertions(+), 9 deletions(-) diff --git a/redtools/redrle.c b/redtools/redrle.c index e753b3a..580c3e4 100644 --- a/redtools/redrle.c +++ b/redtools/redrle.c @@ -1,5 +1,5 @@ /* - * Copyright © 2011 IIMarckus + * Copyright © 2011, 2014 IIMarckus * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -23,11 +23,12 @@ #include #include #include +#include void usage() { - fprintf(stderr, "Usage: redrle [-d] infile outfile\n"); + fprintf(stderr, "Usage: redrle [-dr] infile outfile\n"); exit(1); } @@ -35,15 +36,28 @@ int main(int argc, char *argv[]) { FILE *infile, *outfile; + int ch; bool d = false; /* compress or decompress flag */ + bool rows = false; /* compress individual rows or entire file */ + + while ((ch = getopt(argc, argv, "dr")) != -1) { + switch(ch) { + case 'd': + d = true; + break; + case 'r': + rows = true; + break; + default: + usage(); + /* NOTREACHED */ + } + } + argc -= optind; + argv += optind; - if (argc < 3 || argc > 4) + if (argc < 2) { usage(); - - if (strcmp(argv[1], "-d") == 0) { - if (argc != 4) - usage(); - d = true; } infile = fopen(argv[argc - 2], "rb"); @@ -80,17 +94,37 @@ main(int argc, char *argv[]) fputc(byte, outfile); } } else { /* compress */ - int byte, count = 0, lastbyte = 0; + int byte, count = 0, lastbyte = 0, xpos = 0; for (;;) { byte = fgetc(infile); if (feof(infile)) { while (count > 0xF) { + if (rows && 20 - xpos <= 0xF) { + count -= (20 - xpos); + fputc(lastbyte << 4 | + (20 - xpos), outfile); + xpos = 0; + continue; + } count -= 0xF; fputc(lastbyte << 4 | 0xF, outfile); + xpos += 0xF; + if (xpos == 20) + xpos = 0; } if (count != 0) { + if (rows && 20 - xpos < count) { + count -= (20 - xpos); + fputc(lastbyte << 4 | + (20 - xpos), outfile); + xpos = 0; + } fputc(lastbyte << 4 | count, outfile); + xpos += count; + if (xpos == 20) + xpos = 0; + count = 0; } break; } @@ -105,11 +139,30 @@ main(int argc, char *argv[]) ++count; else { while (count > 0xF) { + if (rows && 20 - xpos <= 0xF) { + count -= (20 - xpos); + fputc(lastbyte << 4 | + (20 - xpos), outfile); + xpos = 0; + continue; + } count -= 0xF; fputc(lastbyte << 4 | 0xF, outfile); + xpos += 0xF; + if (xpos == 20) + xpos = 0; } if (count != 0) { + if (rows && 20 - xpos < count) { + count -= (20 - xpos); + fputc(lastbyte << 4 | + (20 - xpos), outfile); + xpos = 0; + } fputc(lastbyte << 4 | count, outfile); + xpos += count; + if (xpos == 20) + xpos = 0; count = 0; } -- cgit v1.2.3 From f5248045ac938a141ace86d60ab908f03d6dd063 Mon Sep 17 00:00:00 2001 From: IIMarckus Date: Thu, 8 Jan 2015 03:14:58 -0700 Subject: redrle: reduce code duplication. --- redtools/redrle.c | 61 +++++++++++++++++++++++-------------------------------- 1 file changed, 25 insertions(+), 36 deletions(-) diff --git a/redtools/redrle.c b/redtools/redrle.c index 580c3e4..b8ec529 100644 --- a/redtools/redrle.c +++ b/redtools/redrle.c @@ -32,6 +32,15 @@ usage() exit(1); } +void +squash(int threshold, FILE *f, int lastbyte, int *count, int *xpos) +{ + fputc(lastbyte << 4 | threshold, f); + *xpos += threshold; + *xpos %= 20; + *count -= threshold; +} + int main(int argc, char *argv[]) { @@ -101,30 +110,20 @@ main(int argc, char *argv[]) if (feof(infile)) { while (count > 0xF) { if (rows && 20 - xpos <= 0xF) { - count -= (20 - xpos); - fputc(lastbyte << 4 | - (20 - xpos), outfile); - xpos = 0; + squash(20 - xpos, outfile, + lastbyte, &count, &xpos); continue; } - count -= 0xF; - fputc(lastbyte << 4 | 0xF, outfile); - xpos += 0xF; - if (xpos == 20) - xpos = 0; + squash(0xF, outfile, lastbyte, &count, + &xpos); } if (count != 0) { if (rows && 20 - xpos < count) { - count -= (20 - xpos); - fputc(lastbyte << 4 | - (20 - xpos), outfile); - xpos = 0; + squash(20 - xpos, outfile, + lastbyte, &count, &xpos); } - fputc(lastbyte << 4 | count, outfile); - xpos += count; - if (xpos == 20) - xpos = 0; - count = 0; + squash(count, outfile, lastbyte, + &count, &xpos); } break; } @@ -140,30 +139,20 @@ main(int argc, char *argv[]) else { while (count > 0xF) { if (rows && 20 - xpos <= 0xF) { - count -= (20 - xpos); - fputc(lastbyte << 4 | - (20 - xpos), outfile); - xpos = 0; + squash(20 - xpos, outfile, + lastbyte, &count, &xpos); continue; } - count -= 0xF; - fputc(lastbyte << 4 | 0xF, outfile); - xpos += 0xF; - if (xpos == 20) - xpos = 0; + squash(0xF, outfile, lastbyte, &count, + &xpos); } if (count != 0) { if (rows && 20 - xpos < count) { - count -= (20 - xpos); - fputc(lastbyte << 4 | - (20 - xpos), outfile); - xpos = 0; + squash(20 - xpos, outfile, + lastbyte, &count, &xpos); } - fputc(lastbyte << 4 | count, outfile); - xpos += count; - if (xpos == 20) - xpos = 0; - count = 0; + squash(count, outfile, lastbyte, + &count, &xpos); } lastbyte = byte; -- cgit v1.2.3