-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathsolution.h
102 lines (84 loc) · 3.59 KB
/
solution.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/* solution.c: Functions for reading and writing the solution files.
*
* Copyright (C) 2001-2010 by Brian Raiter and Madhav Shanbhag,
* under the GNU General Public License. No warranty. See COPYING for details.
*/
#ifndef HEADER_solution_h_
#define HEADER_solution_h_
#include "defs.h"
#include "fileio.h"
/* A structure holding all the data needed to reconstruct a solution.
*/
typedef struct solutioninfo {
actlist moves; /* the actual moves of the solution */
unsigned long rndseed; /* the PRNG's initial seed */
unsigned long flags; /* other flags (currently unused) */
unsigned char rndslidedir; /* random slide's initial direction */
signed char stepping; /* the timer offset */
} solutioninfo;
/* The path of the directory containing the user's solution files.
*/
extern char *savedir;
/* No file modification will be done unless this variable is FALSE.
*/
extern int readonly;
/* Initialize or reinitialize list as empty.
*/
extern void initmovelist(actlist *list);
/* Append move to the end of list.
*/
extern void addtomovelist(actlist *list, action move);
/* Make to an independent copy of from.
*/
extern void copymovelist(actlist *to, actlist const *from);
/* Deallocate list.
*/
extern void destroymovelist(actlist *list);
/* Expand a level's solution data into the actual solution, including
* the full list of moves. FALSE is returned if the solution is
* invalid or absent.
*/
extern int expandsolution(solutioninfo *solution, gamesetup const *game);
/* Take the given solution and compress it, storing the compressed
* data as part of the level's setup. FALSE is returned if an error
* occurs. (It is not an error to compress the null solution.)
*/
extern int contractsolution(solutioninfo const *solution, gamesetup *game);
/* Read all the solutions for the given series into memory. FALSE is
* returned if an error occurs. Note that it is not an error for the
* solution file to not exist.
*/
extern int readsolutions(gameseries *series);
/* Write out all the solutions for the given series. The solution file
* is created if it does not currently exist. The solution file's
* directory is also created if it does not currently exist. (Nothing
* is done if the directory's name has been unset, however.) FALSE is
* returned if an error occurs.
*/
extern int savesolutions(gameseries *series);
/* Free all memory allocated for storing the game's solutions, and mark
* the levels as being unsolved.
*/
extern void clearsolutions(gameseries *series);
/* Read the solution file at filename to see if it contains a set
* name. If so, copy it into buffer and return its length in bytes (up
* to 255). Zero is returned if the solution file contains no set
* name. A negative value is returned if the file cannot be read or is
* not a valid solution file.
*/
extern int loadsolutionsetname(char const *filename, char *buffer);
/* Produce a list of available solution files associated with the
* given series (i.e. that have the name of the series as their
* prefix). An array of filenames is returned through pfilelist, the
* array's size is returned through pcount, and the table of the
* filenames is returned through table. FALSE is returned if no table
* was returned. If morethanone is TRUE, and less than two solution
* files are found, FALSE is returned and the table is not created.
*/
extern int createsolutionfilelist(gameseries const *series, int morethanone,
char const ***pfilelist, int *pcount,
tablespec *table);
/* Free the memory allocated by createsolutionfilelist().
*/
extern void freesolutionfilelist(char const **filelist, tablespec *table);
#endif