/* open the specified url in the configured browser */ static int command_open_url(char *text, int len) { text = getparams(text); if (*text) open_web_link(text); return 1; }
/* open last seen URL */ void open_last_seen_url(void) { if (!have_url_count) return; open_web_link(((URLDATA *)active_url->data)->text); ((URLDATA *)active_url->data)->visited = 1; }
/* common function to open link of the specified url record */ static void open_current_url(list_node_t *chosen_url) { if (have_url_count && chosen_url != NULL) { url_win_clicktime = SDL_GetTicks(); url_win_clicked_url = chosen_url; open_web_link(((URLDATA *)chosen_url->data)->text); ((URLDATA *)chosen_url->data)->visited = 1; } }
int click_encyclopedia_handler(window_info *win, int mx, int my, Uint32 flags) { _Text *t=Page[currentpage].T.Next; if(flags&ELW_WHEEL_UP) { vscrollbar_scroll_up(encyclopedia_win, encyclopedia_scroll_id); } else if(flags&ELW_WHEEL_DOWN) { vscrollbar_scroll_down(encyclopedia_win, encyclopedia_scroll_id); } else { int j = vscrollbar_get_pos(encyclopedia_win, encyclopedia_scroll_id); while(t){ int xlen=strlen(t->text)*((t->size)?11:8),ylen=(t->size)?18:15; if(t->ref && mx>(t->x) && mx<(t->x+xlen) && my>(t->y-j) && my<(t->y+ylen-j)){ // check if its a webpage if (!strncasecmp(t->ref, "http://", 7)) { open_web_link(t->ref); } else { //changing page int i; for(i=0;i<numpage+1;i++){ if(!xmlStrcasecmp((xmlChar*)Page[i].Name,(xmlChar*)t->ref)){ currentpage=i; vscrollbar_set_pos(encyclopedia_win, encyclopedia_scroll_id, 0); vscrollbar_set_bar_len(encyclopedia_win, encyclopedia_scroll_id, Page[currentpage].max_y); break; } } } break; } t=t->Next; } } return 1; }
/* #url command - List, clear list or open a specific URL */ int url_command(const char *text, int len) { /* no URLs so far so display a message then exit */ if (!have_url_count) { LOG_TO_CONSOLE(c_red2, urlcmd_none_str); return 1; } /* get any parameter text */ while(*text && !isspace(*text)) text++; while(*text && isspace(*text)) text++; /* no parameter specified - list the URL(s) we have, oldest first */ if (!strlen(text)) { char *out_str = NULL; size_t out_len = 0; int irl_num = 0; int line_colour = c_grey1; list_node_t *local_head = newest_url; LOG_TO_CONSOLE(c_green2, urlcmd_list_str); /* go to the oldest in the list */ while (local_head->next != NULL) local_head = local_head->next; /* display the list ending with the newest, alternating colours */ while (local_head != NULL) { size_t new_len = sizeof(char) * (strlen(((URLDATA *)local_head->data)->text) + 60); if (new_len > out_len) { if (out_str != NULL) free(out_str); out_str = (char *)malloc(new_len); out_len = new_len; } safe_snprintf(out_str, new_len, "%c %d) %s (seen %d time%s) (%s)", ((local_head==active_url) ?'>':' '), ++irl_num, ((URLDATA *)local_head->data)->text, ((URLDATA *)local_head->data)->seen_count, ((URLDATA *)local_head->data)->seen_count == 1?"":"s", ((((URLDATA *)local_head->data)->visited) ?"visited":"unvisited")); LOG_TO_CONSOLE(line_colour, out_str); local_head = local_head->prev; line_colour = (line_colour==c_grey1) ?c_grey2 :c_grey1; } if (out_str != NULL) free(out_str); } /* if parameter is "clear" delete all entries */ else if (strcmp(text, urlcmd_clear_str) == 0) { destroy_url_list(); } /* else assume parameter is an index, if its a valid index, open the URL */ else { int open_index = atoi(text) - 1; int valid_node = 0; if (open_index >= 0) { list_node_t *local_head = newest_url; int url_num = 0; /* go to the oldest int the list */ while (local_head->next != NULL) local_head = local_head->next; /* go to the specified entry */ while ((local_head->prev != NULL) && (url_num < open_index)) { local_head = local_head->prev; url_num++; } /* if we end up at a valid node, go for it */ if ((local_head != NULL) && (url_num == open_index) && strlen(((URLDATA *)local_head->data)->text)) { open_web_link(((URLDATA *)local_head->data)->text); ((URLDATA *)local_head->data)->visited = 1; valid_node = 1; } } if (!valid_node) LOG_TO_CONSOLE(c_red2, urlcmd_invalid_str); } return 1; }