80b6140bc22c8d77f9da0c0f6e05449ff7e60e04
[crypto.git] / apps / silcmap / silcmap.h
1 /*
2
3   silcmap.h
4
5   Author: Pekka Riikonen <priikone@silcnet.org>
6
7   Copyright (C) 2003 - 2004 Pekka Riikonen
8
9   This program is free software; you can redistribute it and/or modify
10   it under the terms of the GNU General Public License as published by
11   the Free Software Foundation; version 2 of the License.
12
13   This program is distributed in the hope that it will be useful,
14   but WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16   GNU General Public License for more details.
17
18 */
19
20 #ifndef SILCMAP_H
21 #define SILCMAP_H
22
23 /* Font context */
24 typedef struct {
25   int height;
26   struct {
27     char width;
28     unsigned char data[16 * 16];
29   } font[94];
30 } MapFonts;
31
32 /* SilcMap command context. */
33 typedef struct {
34   /* Map command datas */
35   char *filename;
36   SilcInt32 x;
37   SilcInt32 y;
38   SilcInt32 x2;
39   SilcInt32 y2;
40   SilcUInt32 width;
41   SilcUInt32 height;
42   char *text;
43   SilcInt32 lposx;
44   SilcInt32 lposy;
45
46   SilcInt16 r;
47   SilcInt16 g;
48   SilcInt16 b;
49   SilcInt16 lr;
50   SilcInt16 lg;
51   SilcInt16 lb;
52   unsigned int color_set      : 1;
53   unsigned int lcolor_set     : 1;
54
55   /* Command */
56   unsigned int loadmap        : 1;
57   unsigned int writemap       : 1;
58   unsigned int writehtml      : 1;
59   unsigned int writemaphtml   : 1;
60   unsigned int writerel       : 1;
61   unsigned int cut            : 1;
62   unsigned int draw_line      : 1;
63   unsigned int draw_text      : 1;
64   unsigned int draw_circle    : 1;
65   unsigned int draw_rectangle : 1;
66 } *SilcMapCommand, SilcMapCommandStruct;
67
68 /* The SilcMap context. */
69 typedef struct {
70   /* Connection data */
71   SilcClient client;            /* SILC Client context */
72   char *conffile;               /* Config file name */
73   SilcDList conns;              /* Connections */
74   SilcUInt32 conns_num;         /* Number of created connections */
75   SilcUInt32 conn_num;          /* Current number of processed connections */
76
77   /* Bitmap data */
78   unsigned char *bitmap;        /* Loaded bitmap image */
79   SilcUInt32 bitmap_size;       /* Size of bitmap */
80   SilcUInt32 width;             /* Bitmap width in pixels */
81   SilcUInt32 height;            /* Bitmap height in pixels */
82   SilcUInt32 maxcolor;          /* Max color value in bitmap */
83   MapFonts font;                /* Current font */
84
85   /* Output methods */
86   SilcMapCommandStruct loadmap;
87   SilcMapCommandStruct writemap;
88   SilcMapCommandStruct writehtml;
89   SilcMapCommandStruct writerel;
90   SilcMapCommandStruct *writemaphtml;
91   SilcMapCommandStruct *cut;
92   SilcUInt32 writemaphtml_count;
93   SilcUInt32 cut_count;
94 } *SilcMap;
95
96 /* SilcMap connecetion context. */
97 typedef struct {
98   /* Server and connection details */
99   SilcDList hostnames;
100   SilcDList ips;
101   int port;
102   char *public_key;
103   char *country;
104   char *city;
105   char *admin;
106   char *description;
107   int connect_timeout;
108   char *html_url;
109
110   /* Flags */
111   unsigned int connect        : 1;
112   unsigned int starttime      : 1;
113   unsigned int uptime         : 1;
114   unsigned int clients        : 1;
115   unsigned int channels       : 1;
116   unsigned int server_ops     : 1;
117   unsigned int router_ops     : 1;
118   unsigned int cell_clients   : 1;
119   unsigned int cell_channels  : 1;
120   unsigned int cell_servers   : 1;
121   unsigned int all_clients    : 1;
122   unsigned int all_channels   : 1;
123   unsigned int all_servers    : 1;
124   unsigned int all_routers    : 1;
125   unsigned int all_server_ops : 1;
126   unsigned int all_router_ops : 1;
127   unsigned int motd           : 1;
128   unsigned int down           : 1;
129   unsigned int stats_received : 1;
130   unsigned int motd_received  : 1;
131
132   /* Gathered data */
133   struct {
134     SilcUInt32 starttime;
135     SilcUInt32 uptime;
136     SilcUInt32 clients;
137     SilcUInt32 channels;
138     SilcUInt32 server_ops;
139     SilcUInt32 router_ops;
140     SilcUInt32 cell_clients;
141     SilcUInt32 cell_channels;
142     SilcUInt32 cell_servers;
143     SilcUInt32 all_clients;
144     SilcUInt32 all_channels;
145     SilcUInt32 all_servers;
146     SilcUInt32 all_routers;
147     SilcUInt32 all_server_ops;
148     SilcUInt32 all_router_ops;
149     char *motd;
150   } data;
151
152   /* Status colors */
153   char *up_color;
154   char *down_color;
155   char *up_text_color;
156   char *down_text_color;
157
158   /* Map commands */
159   SilcDList commands;
160
161   /* Back pointers */
162   SilcMap map;
163   SilcClientConnection conn;
164 } *SilcMapConnection;
165
166 extern SilcClientOperations silc_map_client_ops;
167
168 SilcMap silc_map_alloc(const char *conffile);
169 void silc_map_free(SilcMap map);
170 bool silc_map_commands_parse(SilcMap map, const char *filename);
171 void silc_map_connect(SilcMap map, SilcMapConnection mapconn);
172 bool silc_map_load_ppm(SilcMap map, const char *filename);
173 bool silc_map_write_ppm(SilcMap map, const char *filename);
174 bool silc_map_cut(SilcMap map, SilcInt32 x, SilcInt32 y,
175                   SilcUInt32 width, SilcUInt32 height,
176                   SilcMap *ret_map);
177 bool silc_map_draw(SilcMap map,
178                    SilcInt32 x, SilcInt32 y,
179                    const unsigned char *bitmap,
180                    SilcUInt32 width, SilcUInt32 height);
181 bool silc_map_draw_raw(SilcMap map,
182                        SilcInt32 x, SilcInt32 y,
183                        const unsigned char *bitmap,
184                        SilcUInt32 width, SilcUInt32 height,
185                        SilcInt16 r, SilcInt16 g, SilcInt16 b);
186 bool silc_map_draw_line(SilcMap map, SilcUInt32 width,
187                         SilcInt32 a_x, SilcInt32 a_y,
188                         SilcInt32 b_x, SilcInt32 b_y,
189                         SilcInt16 r, SilcInt16 g, SilcInt16 b);
190 bool silc_map_draw_text(SilcMap map, const char *text,
191                         SilcInt32 x, SilcInt32 y,
192                         SilcInt16 r, SilcInt16 g, SilcInt16 b);
193 bool silc_map_draw_circle(SilcMap map, SilcInt32 x, SilcInt32 y,
194                           SilcInt16 r, SilcInt16 g, SilcInt16 b,
195                           const char *label, SilcInt32 lposx, SilcInt32 lposy,
196                           SilcInt16 lr, SilcInt16 lg, SilcInt16 lb);
197 bool silc_map_draw_rectangle(SilcMap map, SilcInt32 x, SilcInt32 y,
198                              SilcInt16 r, SilcInt16 g, SilcInt16 b,
199                              const char *label, SilcInt32 lposx,
200                              SilcInt32 lposy,
201                              SilcInt16 lr, SilcInt16 lg, SilcInt16 lb);
202 double silc_map_parse_pos(char *pos);
203 int silc_map_lon2x(SilcMap map, char *latitude);
204 int silc_map_lat2y(SilcMap map, char *longitude);
205 bool silc_map_parse_color(const char *color,
206                           SilcInt16 *r, SilcInt16 *g, SilcInt16 *b);
207 bool silc_map_load_font(SilcMap map, const char *filename);
208 bool silc_map_writehtml(SilcMap map, SilcMapConnection mapconn);
209 bool silc_map_writehtml_index(SilcMap map);
210 bool silc_map_writemaphtml(SilcMap map);
211 bool silc_map_writerel(SilcMap map, SilcMapConnection mapconn);
212 bool silc_map_writerelhtml(SilcMap map);
213
214 #endif /* SILCMAP_H */