int retval = SILC_CONFIG_OK;
if (type == SILC_CONFIG_ARG_BLOCK) {
+ int i;
if (!filename)
return SILC_CONFIG_EMISSFIELDS;
- SILC_LOG_DEBUG(("writehmaphtml: file: %s", filename));
+ SILC_LOG_DEBUG(("writemaphtml: file: %s", filename));
/* Will generate HTML map page */
- map->writemaphtml.filename = filename;
- map->writemaphtml.text = text;
+ i = map->writemaphtml_count;
+ map->writemaphtml = silc_realloc(map->writemaphtml,
+ sizeof(*map->writemaphtml) * (i + 1));
+ map->writemaphtml[i].filename = filename;
+ map->writemaphtml[i].text = text;
if (lon)
- map->writemaphtml.x = silc_map_lon2x(map, lon);
+ map->writemaphtml[i].x = silc_map_lon2x(map, lon);
if (lat)
- map->writemaphtml.y = silc_map_lat2y(map, lat);
- map->writemaphtml.writemaphtml = TRUE;
+ map->writemaphtml[i].y = silc_map_lat2y(map, lat);
+ map->writemaphtml[i].writemaphtml = TRUE;
+ map->writemaphtml_count++;
/* Clean up */
silc_free(lat);
if (type == SILC_CONFIG_ARG_BLOCK) {
SilcMap map2;
+ int i;
if (!filename || !lat || !lon || !width || !height)
return SILC_CONFIG_EMISSFIELDS;
retval = SILC_CONFIG_ESILENT;
} else {
/* After all connection blocks */
- map->cut.filename = strdup(filename);
- map->cut.x = silc_map_lon2x(map, lon);
- map->cut.y = silc_map_lat2y(map, lat);
- map->cut.width = width;
- map->cut.height = height;
- map->cut.cut = TRUE;
+ i = map->cut_count;
+ map->cut = silc_realloc(map->cut, sizeof(*map->cut) * (i + 1));
+ map->cut[i].filename = strdup(filename);
+ map->cut[i].x = silc_map_lon2x(map, lon);
+ map->cut[i].y = silc_map_lat2y(map, lat);
+ map->cut[i].width = width;
+ map->cut[i].height = height;
+ map->cut[i].cut = TRUE;
+ map->cut_count++;
}
} else {
SilcMapCommand cmd = silc_calloc(1, sizeof(*cmd));
cmd->lb = lb;
cmd->x = silc_map_lon2x(map, lon);
cmd->y = silc_map_lat2y(map, lat);
- cmd->text = strdup(text);
+ cmd->text = text ? strdup(text) : NULL;
cmd->lposx = lposx;
cmd->lposy = lposy;
cmd->draw_rectangle = TRUE;
cmd->lb = lb;
cmd->x = silc_map_lon2x(map, lon);
cmd->y = silc_map_lat2y(map, lat);
- cmd->text = strdup(text);
+ cmd->text = text ? strdup(text) : NULL;
cmd->lposx = lposx;
cmd->lposy = lposy;
cmd->draw_circle = TRUE;
cmd->b = b;
cmd->x = silc_map_lon2x(map, lon);
cmd->y = silc_map_lat2y(map, lat);
- cmd->text = strdup(text);
+ cmd->text = text ? strdup(text) : NULL;
cmd->draw_text = TRUE;
cmd->color_set = color_set;
}
bool silc_map_writemaphtml(SilcMap map)
{
SilcMapConnection mapconn;
- SilcMapCommand cmd;
+ SilcMapCommand cmd, c;
char *hostname, url[256];
FILE *fp;
- int xx , yy, w, h;
+ int i, xx , yy, w, h;
- /* Open for writing */
- fp = fopen(map->writemaphtml.filename, "w+");
- if (!fp) {
- fprintf(stderr, "Could not open file '%s'\n", map->writemaphtml.filename);
- return FALSE;
- }
-
- /* The target may be portion of the original map, so we must make the
- new coordinates relative to the new map. */
- xx = map->writemaphtml.x;
- yy = map->writemaphtml.y;
+ for (i = 0; i < map->writemaphtml_count; i++) {
+ c = &map->writemaphtml[i];
- memset(url, 0, sizeof(url));
+ /* Open for writing */
+ fp = fopen(c->filename, "w+");
+ if (!fp) {
+ fprintf(stderr, "Could not open file '%s'\n", c->filename);
+ return FALSE;
+ }
- fprintf(fp, "<!-- Automatically generated by silcmap --!>\n");
- fprintf(fp, "<img src=\"%s\" usemap=\"#map\" class=\"silcmap\">\n",
- map->writemaphtml.text);
- fprintf(fp, "<map name=\"map\">\n");
+ /* The target may be portion of the original map, so we must make the
+ new coordinates relative to the new map. */
+ xx = c->x;
+ yy = c->y;
- silc_dlist_start(map->conns);
- while ((mapconn = silc_dlist_get(map->conns)) != SILC_LIST_END) {
memset(url, 0, sizeof(url));
- if (mapconn->html_url && mapconn->html_url[0]) {
- silc_strncat(url, sizeof(url), mapconn->html_url,
- strlen(mapconn->html_url));
- } else {
- silc_dlist_start(mapconn->hostnames);
- hostname = silc_dlist_get(mapconn->hostnames);
- snprintf(url, sizeof(url) - 1, "%s_%d.html", hostname, mapconn->port);
- }
- /* Print the positions of various items on the map into the map file */
- silc_dlist_start(mapconn->commands);
- while ((cmd = silc_dlist_get(mapconn->commands)) != SILC_LIST_END) {
- if (cmd->draw_text) {
- w = strlen(cmd->text) * 5;
- h = map->font.height - 2;
- fprintf(fp,
- "<area shape=\"rect\" coords=\"%d,%d,%d,%d\" href=\"%s\">\n",
- (int)(cmd->x - xx), (int)(cmd->y - yy), w, h, url);
+ fprintf(fp, "<!-- Automatically generated by silcmap --!>\n");
+ fprintf(fp, "<img src=\"%s\" usemap=\"#map\" class=\"silcmap\">\n",
+ c->text);
+ fprintf(fp, "<map name=\"map\">\n");
+
+ silc_dlist_start(map->conns);
+ while ((mapconn = silc_dlist_get(map->conns)) != SILC_LIST_END) {
+ memset(url, 0, sizeof(url));
+ if (mapconn->html_url && mapconn->html_url[0]) {
+ silc_strncat(url, sizeof(url), mapconn->html_url,
+ strlen(mapconn->html_url));
+ } else {
+ silc_dlist_start(mapconn->hostnames);
+ hostname = silc_dlist_get(mapconn->hostnames);
+ snprintf(url, sizeof(url) - 1, "%s_%d.html", hostname, mapconn->port);
}
- if (cmd->draw_circle) {
- w = 4;
- fprintf(fp,
- "<area shape=\"circle\" coords=\"%d,%d,%d\" href=\"%s\">\n",
- (int)(cmd->x - xx), (int)(cmd->y - yy), w, url);
- if (cmd->text) {
+ /* Print the positions of various items on the map into the map file */
+ silc_dlist_start(mapconn->commands);
+ while ((cmd = silc_dlist_get(mapconn->commands)) != SILC_LIST_END) {
+ if (cmd->draw_text) {
w = strlen(cmd->text) * 5;
h = map->font.height - 2;
fprintf(fp,
"<area shape=\"rect\" coords=\"%d,%d,%d,%d\" href=\"%s\">\n",
- (int)(cmd->x - xx + cmd->lposx),
- (int)(cmd->y - yy - cmd->lposy),
- (int)(cmd->x - xx + cmd->lposx + w),
- (int)(cmd->y - yy - cmd->lposy + h), url);
+ (int)(cmd->x - xx), (int)(cmd->y - yy), w, h, url);
}
- }
- if (cmd->draw_rectangle) {
- w = 7;
- h = 6;
- fprintf(fp,
- "<area shape=\"rect\" coords=\"%d,%d,%d,%d\" href=\"%s\">\n",
- (int)(cmd->x - xx), (int)(cmd->y - yy),
- (int)(cmd->x - xx + w), (int)(cmd->y - yy + h), url);
- if (cmd->text) {
- w = strlen(cmd->text) * 5;
- h = map->font.height - 2;
+ if (cmd->draw_circle) {
+ w = 4;
+ fprintf(fp,
+ "<area shape=\"circle\" coords=\"%d,%d,%d\" href=\"%s\">\n",
+ (int)(cmd->x - xx), (int)(cmd->y - yy), w, url);
+ if (cmd->text) {
+ w = strlen(cmd->text) * 5;
+ h = map->font.height - 2;
+ fprintf(fp,
+ "<area shape=\"rect\" coords=\"%d,%d,%d,%d\" href=\"%s\">\n",
+ (int)(cmd->x - xx + cmd->lposx),
+ (int)(cmd->y - yy - cmd->lposy),
+ (int)(cmd->x - xx + cmd->lposx + w),
+ (int)(cmd->y - yy - cmd->lposy + h), url);
+ }
+ }
+
+ if (cmd->draw_rectangle) {
+ w = 7;
+ h = 6;
fprintf(fp,
"<area shape=\"rect\" coords=\"%d,%d,%d,%d\" href=\"%s\">\n",
- (int)(cmd->x - xx + cmd->lposx),
- (int)(cmd->y - yy - cmd->lposy),
- (int)(cmd->x - xx + cmd->lposx + w),
- (int)(cmd->y - yy - cmd->lposy + h), url);
+ (int)(cmd->x - xx), (int)(cmd->y - yy),
+ (int)(cmd->x - xx + w), (int)(cmd->y - yy + h), url);
+ if (cmd->text) {
+ w = strlen(cmd->text) * 5;
+ h = map->font.height - 2;
+ fprintf(fp,
+ "<area shape=\"rect\" coords=\"%d,%d,%d,%d\" href=\"%s\">\n",
+ (int)(cmd->x - xx + cmd->lposx),
+ (int)(cmd->y - yy - cmd->lposy),
+ (int)(cmd->x - xx + cmd->lposx + w),
+ (int)(cmd->y - yy - cmd->lposy + h), url);
+ }
}
}
}
- }
- fprintf(fp, "</map>\n");
- fclose(fp);
+ fprintf(fp, "</map>\n");
+ fclose(fp);
+ }
return TRUE;
}