Initial commit
This commit is contained in:
commit
2654b709ab
4 changed files with 14331 additions and 0 deletions
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
build-*
|
||||
*.dat
|
||||
*~
|
7
importer/importer.pro
Normal file
7
importer/importer.pro
Normal file
|
@ -0,0 +1,7 @@
|
|||
TEMPLATE = app
|
||||
CONFIG += console
|
||||
CONFIG -= app_bundle
|
||||
CONFIG -= qt
|
||||
|
||||
SOURCES += \
|
||||
main.c
|
115
importer/main.c
Normal file
115
importer/main.c
Normal file
|
@ -0,0 +1,115 @@
|
|||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
|
||||
|
||||
#define MAX_WIDTH 20
|
||||
#define MAX_HEIGHT 12
|
||||
#define MAX_LINE 8192
|
||||
|
||||
|
||||
int isLegal(char c) {
|
||||
int x;
|
||||
char legal[] = { "_# .$@+*" };
|
||||
|
||||
if (c == '-') c = ' ';
|
||||
|
||||
for (x=0; x<(int)strlen(legal); x++) {
|
||||
if (legal[x] == c) {
|
||||
return x + 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
|
||||
char puzzle[MAX_WIDTH][MAX_WIDTH];
|
||||
char line[MAX_LINE]; // Ooo! Look! Potential buffer overflow!
|
||||
char height;
|
||||
unsigned char width;
|
||||
int16_t x;
|
||||
int16_t y;
|
||||
int16_t count = 0;
|
||||
int32_t bytes = 0;
|
||||
FILE *in;
|
||||
FILE *out;
|
||||
|
||||
if (argc != 3) {
|
||||
printf("%s: [letslogic.txt] [puzzles.dat]\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
in = fopen(argv[1], "rt");
|
||||
if (!in) {
|
||||
printf("Unable to read %s\n", argv[1]);
|
||||
return 2;
|
||||
}
|
||||
|
||||
out = fopen(argv[2], "wb");
|
||||
if (!out) {
|
||||
fclose(in);
|
||||
printf("Unable to write %s\n", argv[2]);
|
||||
return 2;
|
||||
}
|
||||
|
||||
// Skip two bytes at the front of the file to later write the puzzle count into.
|
||||
fputc(0, out);
|
||||
fputc(0, out);
|
||||
bytes = 2;
|
||||
|
||||
count = 0;
|
||||
height = -1;
|
||||
width = 0;
|
||||
|
||||
while (fgets(line, MAX_LINE, in)) {
|
||||
// Is there anything on this line?
|
||||
if (strlen(line) > 0) {
|
||||
// Is this a puzzle line?
|
||||
if (isLegal(line[0]) > 0) {
|
||||
// Got it. Read this line.
|
||||
if (width < strlen(line)) width = strlen(line);
|
||||
height++;
|
||||
for (x=0; x<width; x++) {
|
||||
puzzle[x][(int)height] = line[x];
|
||||
}
|
||||
} else {
|
||||
// Not a puzzle line. Were we currently reading a puzzle?
|
||||
if (height >= 0) {
|
||||
// Yep! Output it!
|
||||
if ((width & 1) == 1) {
|
||||
// Width must be even - fill new column with zeros.
|
||||
for (y=0; y<height; y++) puzzle[width][y] = 0;
|
||||
width++;
|
||||
}
|
||||
fputc(width, out);
|
||||
fputc(height + 1, out);
|
||||
bytes += 2;
|
||||
// Write out the puzzle data, two tiles to a byte.
|
||||
for (y=0; y<height; y++) {
|
||||
for (x=0; x<width; x+=2) {
|
||||
fputc((isLegal(puzzle[x][y]) << 4) + isLegal(puzzle[x + 1][y]), out);
|
||||
bytes++;
|
||||
}
|
||||
}
|
||||
// Reset for next pass.
|
||||
count++;
|
||||
width = 0;
|
||||
height = -1;
|
||||
printf("Puzzle %d imported, %d total bytes written.\n", count, bytes);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Seek back to the top and write the number of puzzles found.
|
||||
fflush(out);
|
||||
fseek(out, 0, SEEK_SET);
|
||||
fwrite(&count, sizeof(int16_t), 1, out);
|
||||
|
||||
fclose(out);
|
||||
fclose(in);
|
||||
|
||||
return 0;
|
||||
}
|
14206
puzzles.txt
Normal file
14206
puzzles.txt
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Reference in a new issue