*counter_var = actual_counter;
}
+/* int2str() returns a number converted to a string;
+ the used memory is static, but will be overwritten by later calls,
+ so if you want to save the result, copy it to a private string buffer;
+ there can be 10 local calls of int2str() without buffering the result --
+ the 11th call will then destroy the result from the first call and so on.
+*/
+
char *int2str(int number, int size)
{
- static char s[40];
+ static char shift_array[10][40];
+ static int shift_counter = 0;
+ char *s = shift_array[shift_counter];
+
+ shift_counter = (shift_counter + 1) % 10;
if (size > 20)
size = 20;
while (*s)
*s_ptr++ = tolower(*s++);
+ *s_ptr = '\0';
return s_copy;
}
options.display_name = NULL;
options.server_host = NULL;
options.server_port = 0;
- options.base_directory = BASE_PATH;
- options.level_directory = BASE_PATH "/" LEVELS_DIRECTORY;
+ options.ro_base_directory = RO_BASE_PATH;
+ options.rw_base_directory = RW_BASE_PATH;
+ options.level_directory = RO_BASE_PATH "/" LEVELS_DIRECTORY;
options.serveronly = FALSE;
options.network = FALSE;
options.verbose = FALSE;
if (option_arg == NULL)
Error(ERR_EXIT_HELP, "option '%s' requires an argument", option_str);
- options.base_directory = option_arg;
+ /* this should be extended to separate options for ro and rw data */
+ options.ro_base_directory = option_arg;
+ options.rw_base_directory = option_arg;
if (option_arg == next_option)
options_left++;
/* adjust path for level directory accordingly */
options.level_directory =
- getPath2(options.base_directory, LEVELS_DIRECTORY);
+ getPath2(options.ro_base_directory, LEVELS_DIRECTORY);
}
else if (strncmp(option, "-levels", option_len) == 0)
{
return ptr;
}
-void getFileChunk(FILE *file, char *chunk_buffer, int *chunk_length,
- int byte_order)
+short getFile16BitInteger(FILE *file, int byte_order)
{
- const int chunk_identifier_length = 4;
-
- fgets(chunk_buffer, chunk_identifier_length + 1, file);
+ if (byte_order == BYTE_ORDER_BIG_ENDIAN)
+ return ((fgetc(file) << 8) |
+ (fgetc(file) << 0));
+ else /* BYTE_ORDER_LITTLE_ENDIAN */
+ return ((fgetc(file) << 0) |
+ (fgetc(file) << 8));
+}
+void putFile16BitInteger(FILE *file, short value, int byte_order)
+{
if (byte_order == BYTE_ORDER_BIG_ENDIAN)
- *chunk_length = ((fgetc(file) << 24) |
- (fgetc(file) << 16) |
- (fgetc(file) << 8) |
- (fgetc(file) << 0));
+ {
+ fputc((value >> 8) & 0xff, file);
+ fputc((value >> 0) & 0xff, file);
+ }
else /* BYTE_ORDER_LITTLE_ENDIAN */
- *chunk_length = ((fgetc(file) << 0) |
- (fgetc(file) << 8) |
- (fgetc(file) << 16) |
- (fgetc(file) << 24));
+ {
+ fputc((value >> 0) & 0xff, file);
+ fputc((value >> 8) & 0xff, file);
+ }
}
-void putFileChunk(FILE *file, char *chunk_name, int chunk_length,
- int byte_order)
+int getFile32BitInteger(FILE *file, int byte_order)
{
- fputs(chunk_name, file);
+ if (byte_order == BYTE_ORDER_BIG_ENDIAN)
+ return ((fgetc(file) << 24) |
+ (fgetc(file) << 16) |
+ (fgetc(file) << 8) |
+ (fgetc(file) << 0));
+ else /* BYTE_ORDER_LITTLE_ENDIAN */
+ return ((fgetc(file) << 0) |
+ (fgetc(file) << 8) |
+ (fgetc(file) << 16) |
+ (fgetc(file) << 24));
+}
+void putFile32BitInteger(FILE *file, int value, int byte_order)
+{
if (byte_order == BYTE_ORDER_BIG_ENDIAN)
{
- fputc((chunk_length >> 24) & 0xff, file);
- fputc((chunk_length >> 16) & 0xff, file);
- fputc((chunk_length >> 8) & 0xff, file);
- fputc((chunk_length >> 0) & 0xff, file);
+ fputc((value >> 24) & 0xff, file);
+ fputc((value >> 16) & 0xff, file);
+ fputc((value >> 8) & 0xff, file);
+ fputc((value >> 0) & 0xff, file);
}
else /* BYTE_ORDER_LITTLE_ENDIAN */
{
- fputc((chunk_length >> 0) & 0xff, file);
- fputc((chunk_length >> 8) & 0xff, file);
- fputc((chunk_length >> 16) & 0xff, file);
- fputc((chunk_length >> 24) & 0xff, file);
+ fputc((value >> 0) & 0xff, file);
+ fputc((value >> 8) & 0xff, file);
+ fputc((value >> 16) & 0xff, file);
+ fputc((value >> 24) & 0xff, file);
}
}
+void getFileChunk(FILE *file, char *chunk_buffer, int *chunk_length,
+ int byte_order)
+{
+ const int chunk_identifier_length = 4;
+
+ /* read chunk identifier */
+ fgets(chunk_buffer, chunk_identifier_length + 1, file);
+
+ /* read chunk length */
+ *chunk_length = getFile32BitInteger(file, byte_order);
+}
+
+void putFileChunk(FILE *file, char *chunk_name, int chunk_length,
+ int byte_order)
+{
+ /* write chunk identifier */
+ fputs(chunk_name, file);
+
+ /* write chunk length */
+ putFile32BitInteger(file, chunk_length, byte_order);
+}
+
#define TRANSLATE_KEYSYM_TO_KEYNAME 0
#define TRANSLATE_KEYSYM_TO_X11KEYNAME 1
#define TRANSLATE_X11KEYNAME_TO_KEYSYM 2