rnd-20020318-3-src
[rocksndiamonds.git] / src / libgame / misc.h
1 /***********************************************************
2 * Artsoft Retro-Game Library                               *
3 *----------------------------------------------------------*
4 * (c) 1994-2001 Artsoft Entertainment                      *
5 *               Holger Schemel                             *
6 *               Detmolder Strasse 189                      *
7 *               33604 Bielefeld                            *
8 *               Germany                                    *
9 *               e-mail: info@artsoft.org                   *
10 *----------------------------------------------------------*
11 * misc.h                                                   *
12 ***********************************************************/
13
14 #ifndef MISC_H
15 #define MISC_H
16
17 #include <stdlib.h>
18 #include <stdio.h>
19
20 #include "system.h"
21
22
23 /* functions for version handling */
24 #define VERSION_IDENT(x,y,z)    ((x) * 10000 + (y) * 100 + (z))
25 #define VERSION_MAJOR(x)        ((x) / 10000)
26 #define VERSION_MINOR(x)        (((x) % 10000) / 100)
27 #define VERSION_PATCH(x)        ((x) % 100)
28
29 /* values for InitCounter() and Counter() */
30 #define INIT_COUNTER                    0
31 #define READ_COUNTER                    1
32
33 /* values for InitRND() */
34 #define NEW_RANDOMIZE                   -1
35
36 /* values for Error() */
37 #define ERR_RETURN                      0
38 #define ERR_WARN                        (1 << 0)
39 #define ERR_EXIT                        (1 << 1)
40 #define ERR_HELP                        (1 << 2)
41 #define ERR_SOUND_SERVER                (1 << 3)
42 #define ERR_NETWORK_SERVER              (1 << 4)
43 #define ERR_NETWORK_CLIENT              (1 << 5)
44 #define ERR_FROM_SERVER                 (ERR_SOUND_SERVER | ERR_NETWORK_SERVER)
45 #define ERR_EXIT_HELP                   (ERR_EXIT | ERR_HELP)
46 #define ERR_EXIT_SOUND_SERVER           (ERR_EXIT | ERR_SOUND_SERVER)
47 #define ERR_EXIT_NETWORK_SERVER         (ERR_EXIT | ERR_NETWORK_SERVER)
48 #define ERR_EXIT_NETWORK_CLIENT         (ERR_EXIT | ERR_NETWORK_CLIENT)
49
50 /* values for getFile...() and putFile...() */
51 #define BYTE_ORDER_BIG_ENDIAN           0
52 #define BYTE_ORDER_LITTLE_ENDIAN        1
53
54 /* values for createDirectory() */
55 #define PERMS_PRIVATE                   0
56 #define PERMS_PUBLIC                    1
57
58 /* values for general file handling stuff */
59 #define MAX_FILENAME_LEN                256
60 #define MAX_LINE_LEN                    1000
61
62 /* values for setup file stuff */
63 #define TYPE_BOOLEAN                    1
64 #define TYPE_SWITCH                     2
65 #define TYPE_KEY                        3
66 #define TYPE_INTEGER                    4
67 #define TYPE_STRING                     5
68
69 #define TOKEN_STR_FILE_IDENTIFIER       "file_identifier"
70
71 #define TOKEN_VALUE_POSITION            30
72
73 struct SetupFileList
74 {
75   char *token;
76   char *value;
77   struct SetupFileList *next;
78 };
79
80 void InitCounter(void);
81 unsigned long Counter(void);
82 void Delay(unsigned long);
83 boolean FrameReached(unsigned long *, unsigned long);
84 boolean DelayReached(unsigned long *, unsigned long);
85 void WaitUntilDelayReached(unsigned long *, unsigned long);
86 char *int2str(int, int);
87 unsigned int SimpleRND(unsigned int);
88 unsigned int RND(unsigned int);
89 unsigned int InitRND(long);
90 char *getLoginName(void);
91 char *getRealName(void);
92 char *getHomeDir(void);
93 char *getPath2(char *, char *);
94 char *getPath3(char *, char *, char*);
95 char *getStringCopy(char *);
96 char *getStringToLower(char *);
97 void GetOptions(char **);
98 void Error(int, char *, ...);
99 void *checked_malloc(unsigned long);
100 void *checked_calloc(unsigned long);
101 void *checked_realloc(void *, unsigned long);
102 short getFile16BitInteger(FILE *, int);
103 void putFile16BitInteger(FILE *, short, int);
104 int getFile32BitInteger(FILE *, int);
105 void putFile32BitInteger(FILE *, int, int);
106 boolean getFileChunk(FILE *, char *, int *, int);
107 void putFileChunk(FILE *, char *, int, int);
108 void ReadUnusedBytesFromFile(FILE *, unsigned long);
109 void WriteUnusedBytesToFile(FILE *, unsigned long);
110
111 char *getKeyNameFromKey(Key);
112 char *getX11KeyNameFromKey(Key);
113 Key getKeyFromX11KeyName(char *);
114 char getCharFromKey(Key);
115 char *getJoyNameFromJoySymbol(int);
116 int getJoySymbolFromJoyName(char *);
117 int getJoystickNrFromDeviceName(char *);
118
119 struct LevelDirInfo *newLevelDirInfo();
120 void pushLevelDirInfo(struct LevelDirInfo **, struct LevelDirInfo *);
121 int numLevelDirInfo(struct LevelDirInfo *);
122 boolean validLevelSeries(struct LevelDirInfo *);
123 struct LevelDirInfo *getFirstValidLevelSeries(struct LevelDirInfo *);
124 struct LevelDirInfo *getLevelDirInfoFirstGroupEntry(struct LevelDirInfo *);
125 int numLevelDirInfoInGroup(struct LevelDirInfo *);
126 int posLevelDirInfo(struct LevelDirInfo *);
127 struct LevelDirInfo *getLevelDirInfoFromPos(struct LevelDirInfo *, int);
128 struct LevelDirInfo *getLevelDirInfoFromFilename(char *);
129 void dumpLevelDirInfo(struct LevelDirInfo *, int);
130 void sortLevelDirInfo(struct LevelDirInfo **,
131                       int (*compare_function)(const void *, const void *));
132
133 inline void swap_numbers(int *, int *);
134 inline void swap_number_pairs(int *, int *, int *, int *);
135
136 char *getUserDataDir(void);
137 char *getSetupDir(void);
138 void createDirectory(char *, char *, int);
139 void InitUserDataDirectory(void);
140 void SetFilePermissions(char *, int);
141 int getFileVersionFromCookieString(const char *);
142 boolean checkCookieString(const char *, const char *);
143
144 int get_string_integer_value(char *);
145 boolean get_string_boolean_value(char *);
146 char *getFormattedSetupEntry(char *, char *);
147 void freeSetupFileList(struct SetupFileList *);
148 char *getTokenValue(struct SetupFileList *, char *);
149 struct SetupFileList *loadSetupFileList(char *);
150 void checkSetupFileListIdentifier(struct SetupFileList *, char *);
151
152 #if !defined(PLATFORM_UNIX)
153 void initErrorFile();
154 FILE *openErrorFile();
155 void dumpErrorFile();
156 #endif
157
158 void debug_print_timestamp(int, char *);
159
160 #endif /* MISC_H */