struct path_string { char Item[sizeof(URL)]; int was_first; }; #define MAX_HISTORY_NUM 40 path_string history_list[MAX_HISTORY_NUM]; struct UrlsHistory { int links_count; int current; dword CurrentUrl(); dword GetUrl(); dword GetFirstLine(); void AddUrl(); byte GoBack(); byte GoForward(); }; dword UrlsHistory::CurrentUrl() { return #history_list[current].Item; } dword UrlsHistory::GetUrl(int id) { return #history_list[id].Item; } dword UrlsHistory::GetFirstLine(int id) { return history_list[id].was_first; } void UrlsHistory::AddUrl() { int i; if (links_count>0) && (!strcmp(#URL,#history_list[current].Item)) return; if (current>=MAX_HISTORY_NUM-1) { current/=2; for (i=0; i<current; i++;) { strlcpy(#history_list[i].Item, #history_list[MAX_HISTORY_NUM-i].Item, sizeof(URL)); } } current++; // history_list[i].was_first = WB1.list.first; strlcpy(#history_list[current].Item, #URL, sizeof(URL)); links_count=current; } byte UrlsHistory::GoBack() { if (current<=1) return 0; current--; strlcpy(#URL, #history_list[current].Item, sizeof(URL)); // stroka = history_list[current].was_first; return 1; } byte UrlsHistory::GoForward() { if (current==links_count) return 0; current++; strlcpy(#URL, #history_list[current].Item, sizeof(URL)); return 1; } UrlsHistory BrowserHistory;