1 |
/* -*- c-basic-offset: 8 -*- |
/* -*- c-basic-offset: 8 -*- |
2 |
rdesktop: A Remote Desktop Protocol client. |
rdesktop: A Remote Desktop Protocol client. |
3 |
Persistent Bitmap Cache routines |
Persistent Bitmap Cache routines |
4 |
Copyright (C) Jeroen Meijer 2004-2005 |
Copyright (C) Jeroen Meijer 2004-2008 |
5 |
|
|
6 |
This program is free software; you can redistribute it and/or modify |
This program is free software; you can redistribute it and/or modify |
7 |
it under the terms of the GNU General Public License as published by |
it under the terms of the GNU General Public License as published by |
25 |
#define IS_PERSISTENT(id) (id < 8 && g_pstcache_fd[id] > 0) |
#define IS_PERSISTENT(id) (id < 8 && g_pstcache_fd[id] > 0) |
26 |
|
|
27 |
extern int g_server_depth; |
extern int g_server_depth; |
28 |
extern BOOL g_bitmap_cache; |
extern RD_BOOL g_bitmap_cache; |
29 |
extern BOOL g_bitmap_cache_persist_enable; |
extern RD_BOOL g_bitmap_cache_persist_enable; |
30 |
extern BOOL g_bitmap_cache_precache; |
extern RD_BOOL g_bitmap_cache_precache; |
31 |
|
|
32 |
int g_pstcache_fd[8]; |
int g_pstcache_fd[8]; |
33 |
int g_pstcache_Bpp; |
int g_pstcache_Bpp; |
34 |
BOOL g_pstcache_enumerated = False; |
RD_BOOL g_pstcache_enumerated = False; |
35 |
uint8 zero_key[] = { 0, 0, 0, 0, 0, 0, 0, 0 }; |
uint8 zero_key[] = { 0, 0, 0, 0, 0, 0, 0, 0 }; |
36 |
|
|
37 |
|
|
50 |
} |
} |
51 |
|
|
52 |
/* Load a bitmap from the persistent cache */ |
/* Load a bitmap from the persistent cache */ |
53 |
BOOL |
RD_BOOL |
54 |
pstcache_load_bitmap(uint8 cache_id, uint16 cache_idx) |
pstcache_load_bitmap(uint8 cache_id, uint16 cache_idx) |
55 |
{ |
{ |
56 |
uint8 *celldata; |
uint8 *celldata; |
57 |
int fd; |
int fd; |
58 |
CELLHEADER cellhdr; |
CELLHEADER cellhdr; |
59 |
HBITMAP bitmap; |
RD_HBITMAP bitmap; |
60 |
|
|
61 |
if (!g_bitmap_cache_persist_enable) |
if (!g_bitmap_cache_persist_enable) |
62 |
return False; |
return False; |
71 |
rd_read_file(fd, celldata, cellhdr.length); |
rd_read_file(fd, celldata, cellhdr.length); |
72 |
|
|
73 |
bitmap = ui_create_bitmap(cellhdr.width, cellhdr.height, celldata); |
bitmap = ui_create_bitmap(cellhdr.width, cellhdr.height, celldata); |
74 |
DEBUG(("Load bitmap from disk: id=%d, idx=%d, bmp=0x%x)\n", cache_id, cache_idx, bitmap)); |
DEBUG(("Load bitmap from disk: id=%d, idx=%d, bmp=0x%x)\n", cache_id, cache_idx, |
75 |
|
(unsigned int) bitmap)); |
76 |
cache_put_bitmap(cache_id, cache_idx, bitmap); |
cache_put_bitmap(cache_id, cache_idx, bitmap); |
77 |
|
|
78 |
xfree(celldata); |
xfree(celldata); |
80 |
} |
} |
81 |
|
|
82 |
/* Store a bitmap in the persistent cache */ |
/* Store a bitmap in the persistent cache */ |
83 |
BOOL |
RD_BOOL |
84 |
pstcache_save_bitmap(uint8 cache_id, uint16 cache_idx, uint8 * key, |
pstcache_save_bitmap(uint8 cache_id, uint16 cache_idx, uint8 * key, |
85 |
uint16 width, uint16 height, uint16 length, uint8 * data) |
uint8 width, uint8 height, uint16 length, uint8 * data) |
86 |
{ |
{ |
87 |
int fd; |
int fd; |
88 |
CELLHEADER cellhdr; |
CELLHEADER cellhdr; |
108 |
int |
int |
109 |
pstcache_enumerate(uint8 id, HASH_KEY * keylist) |
pstcache_enumerate(uint8 id, HASH_KEY * keylist) |
110 |
{ |
{ |
111 |
int fd, idx, n; |
int fd, n; |
112 |
|
uint16 idx; |
113 |
sint16 mru_idx[0xa00]; |
sint16 mru_idx[0xa00]; |
114 |
uint32 mru_stamp[0xa00]; |
uint32 mru_stamp[0xa00]; |
115 |
CELLHEADER cellhdr; |
CELLHEADER cellhdr; |
161 |
} |
} |
162 |
|
|
163 |
/* initialise the persistent bitmap cache */ |
/* initialise the persistent bitmap cache */ |
164 |
BOOL |
RD_BOOL |
165 |
pstcache_init(uint8 cache_id) |
pstcache_init(uint8 cache_id) |
166 |
{ |
{ |
167 |
int fd; |
int fd; |