rnd-20020318-4-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 struct TokenInfo
81 {
82   int type;
83   void *value;
84   char *text;
85 };
86
87 void InitCounter(void);
88 unsigned long Counter(void);
89 void Delay(unsigned long);
90 boolean FrameReached(unsigned long *, unsigned long);
91 boolean DelayReached(unsigned long *, unsigned long);
92 void WaitUntilDelayReached(unsigned long *, unsigned long);
93 char *int2str(int, int);
94 unsigned int SimpleRND(unsigned int);
95 unsigned int RND(unsigned int);
96 unsigned int InitRND(long);
97 char *getLoginName(void);
98 char *getRealName(void);
99 char *getHomeDir(void);
100 char *getPath2(char *, char *);
101 char *getPath3(char *, char *, char*);
102 char *getStringCopy(char *);
103 char *getStringToLower(char *);
104 void GetOptions(char **);
105 void Error(int, char *, ...);
106 void *checked_malloc(unsigned long);
107 void *checked_calloc(unsigned long);
108 void *checked_realloc(void *, unsigned long);
109 short getFile16BitInteger(FILE *, int);
110 void putFile16BitInteger(FILE *, short, int);
111 int getFile32BitInteger(FILE *, int);
112 void putFile32BitInteger(FILE *, int, int);
113 boolean getFileChunk(FILE *, char *, int *, int);
114 void putFileChunk(FILE *, char *, int, int);
115 void ReadUnusedBytesFromFile(FILE *, unsigned long);
116 void WriteUnusedBytesToFile(FILE *, unsigned long);
117
118 char *getKeyNameFromKey(Key);
119 char *getX11KeyNameFromKey(Key);
120 Key getKeyFromX11KeyName(char *);
121 char getCharFromKey(Key);
122 char *getJoyNameFromJoySymbol(int);
123 int getJoySymbolFromJoyName(char *);
124 int getJoystickNrFromDeviceName(char *);
125
126 struct LevelDirInfo *newLevelDirInfo();
127 void pushLevelDirInfo(struct LevelDirInfo **, struct LevelDirInfo *);
128 int numLevelDirInfo(struct LevelDirInfo *);
129 boolean validLevelSeries(struct LevelDirInfo *);
130 struct LevelDirInfo *getFirstValidLevelSeries(struct LevelDirInfo *);
131 struct LevelDirInfo *getLevelDirInfoFirstGroupEntry(struct LevelDirInfo *);
132 int numLevelDirInfoInGroup(struct LevelDirInfo *);
133 int posLevelDirInfo(struct LevelDirInfo *);
134 struct LevelDirInfo *getLevelDirInfoFromPos(struct LevelDirInfo *, int);
135 struct LevelDirInfo *getLevelDirInfoFromFilename(char *);
136 void dumpLevelDirInfo(struct LevelDirInfo *, int);
137 void sortLevelDirInfo(struct LevelDirInfo **,
138                       int (*compare_function)(const void *, const void *));
139
140 inline void swap_numbers(int *, int *);
141 inline void swap_number_pairs(int *, int *, int *, int *);
142
143 char *getUserDataDir(void);
144 char *getSetupDir(void);
145 void createDirectory(char *, char *, int);
146 void InitUserDataDirectory(void);
147 void SetFilePermissions(char *, int);
148 int getFileVersionFromCookieString(const char *);
149 boolean checkCookieString(const char *, const char *);
150
151 int get_string_integer_value(char *);
152 boolean get_string_boolean_value(char *);
153 char *getFormattedSetupEntry(char *, char *);
154 void freeSetupFileList(struct SetupFileList *);
155 char *getTokenValue(struct SetupFileList *, char *);
156 struct SetupFileList *loadSetupFileList(char *);
157 void checkSetupFileListIdentifier(struct SetupFileList *, char *);
158
159 #if !defined(PLATFORM_UNIX)
160 void initErrorFile();
161 FILE *openErrorFile();
162 void dumpErrorFile();
163 #endif
164
165 void debug_print_timestamp(int, char *);
166
167 #endif /* MISC_H */