/programs/cmm/TWB/absolute_url.h |
---|
1,24 → 1,4 |
int UrlIsAbsolute(dword in) |
{ |
if(!strncmp(in,"http:",5)) return true; |
if(!strncmp(in,"https:",6)) return true; |
if(!strncmp(in,"file:",5)) return true; |
if(!strncmp(in,"mailto:",7)) return true; |
if(!strncmp(in,"ftp:",4)) return true; |
if(!strncmp(in,"WebView:",8)) return true; |
if(!strncmp(in,"/sys/",5)) return true; |
if(!strncmp(in,"/hd/",4)) return true; |
if(!strncmp(in,"/fd/",4)) return true; |
if(!strncmp(in,"/rd/",4)) return true; |
if(!strncmp(in,"/tmp/",5)) return true; |
if(!strncmp(in,"/cd/",4)) return true; |
if(!strncmp(in,"/bd/",4)) return true; |
if(!strncmp(in,"/usbhd/",7)) return true; |
if(!strncmp(in,"/kolibrios/",11)) return true; |
return false; |
} |
void GetAbsoluteURL(dword in_URL) |
{ |
int i; |
30,7 → 10,7 |
strcpy(i+1, i+5); |
} |
if (UrlIsAbsolute(in_URL)) return; |
if (check_is_the_url_absolute(in_URL)) return; |
IF (!strcmpn(in_URL,"//", 2)) |
{ |
/programs/cmm/TWB/links.h |
---|
88,6 → 88,7 |
return false; |
} |
if (active==i) return false; |
CursorPointer.Load(#CursorFile); |
CursorPointer.Set(); |
if (links[active].underline) DrawBar(links[active].x, -WB1.list.first + links[active].y |
+ links[active].h, links[active].w, links[active].underline_h, link_color_inactive); |
/programs/cmm/TWB/parce_tag.h |
---|
1,5 → 1,82 |
unsigned int GetNextParam() |
bool GetNextParam() { |
if (!old_tag_parser_mode) |
return GetNextParam_NEW(); |
else |
return GetNextParam_OLD(); |
} |
bool GetNextParam_NEW() |
{ |
byte quotes = NULL; |
int i; |
if (!tagparam) return false; |
if (debug_mode) { |
debug("tagparam: "); debugln(#tagparam); |
} |
i = strlen(#tagparam) - 1; |
if (tagparam[i] == '/') i--; |
while (i>0) && (__isWhite(tagparam[i])) i--; |
if (tagparam[i] == '"') || (tagparam[i] == '\'') |
{ |
//find VAL end |
quotes = tagparam[i]; |
tagparam[i] = '\0'; i--; |
//find VAL start and copy |
i = strrchr(#tagparam, quotes); |
strlcpy(#val, #tagparam + i, sizeof(val)); |
tagparam[i] = '\0'; i--; |
//find ATTR end |
while (i > 0) && (tagparam[i] != '=') i--; |
tagparam[i+1] = '\0'; |
} |
else |
{ |
//find VAL end |
//already have |
//find VAL start and copy |
while (i > 0) && (tagparam[i] != '=') i--; |
i++; |
strlcpy(#val, #tagparam + i, sizeof(val)); |
tagparam[i] = '\0'; |
//find ATTR end |
//already have |
} |
//find ATTR start and copy |
while (i>0) && (!__isWhite(tagparam[i])) i--; |
strlcpy(#attr, #tagparam + i + 1, sizeof(attr)); |
tagparam[i] = '\0'; |
strlwr(#attr); |
if (debug_mode) { |
if (quotes) { |
debug("quote: "); debugch(quotes); debugln(" "); |
} |
else { |
debugln("unquoted text"); |
} |
sprintf(#param, "val: %s\nattr: %s\n\n", #val, #attr); |
debug(#param); |
} |
return true; |
} |
unsigned int GetNextParam_OLD() |
{ |
byte kavichki=0; |
int i = strlen(#tagparam) - 1; |
30,7 → 107,7 |
FOR ( ; ((tagparam[i] <>' ') && (i > 0); i--) |
{ |
IF (tagparam[i] == '=') //äåðçêàÿ çàãëóøêà |
IF (tagparam[i] == '=') //dirty fix (kludge) |
tagparam[i + 1] = 0x00; |
} |
strlcpy(#attr, #tagparam + i + 1, sizeof(attr)); |
/programs/cmm/TWB/unicode_tags.h |
---|
58,7 → 58,7 |
"#1031", "\244", |
"#8470", "N", |
"bull", "-", //âîîáùå çäåñü òî÷êà |
"bull", "\31", //âîîáùå çäåñü òî÷êà |
"percnt","%", |
0}; |
/programs/cmm/browser/WebView.c |
---|
32,7 → 32,7 |
char homepage[] = FROM "html\\homepage.htm""\0"; |
#ifdef LANG_RUS |
char version[]="¥ªáâ®¢ë© ¡à 㧥à 1.74"; |
char version[]="¥ªáâ®¢ë© ¡à 㧥à 1.8"; |
?define IMAGES_CACHE_CLEARED "íè ª à⨮ª ®ç¨é¥" |
?define T_LAST_SLIDE "â® ¯®á«¥¤¨© á« ©¤" |
char loading[] = " £à㧪 áâà ¨æë...<br>"; |
47,7 → 47,7 |
"®¯¨à®¢ âì áá뫪ã |
ª ç âì ᮤ¥à¦¨¬®¥ áá뫪¨"; |
#else |
char version[]="Text-based Browser 1.74"; |
char version[]="Text-based Browser 1.8"; |
?define IMAGES_CACHE_CLEARED "Images cache cleared" |
?define T_LAST_SLIDE "This slide is the last" |
char loading[] = "Loading...<br>"; |
83,6 → 83,9 |
dword panel_color; |
dword border_color; |
bool debug_mode = false; |
bool old_tag_parser_mode = false; |
progress_bar wv_progress_bar; |
bool souce_mode = false; |
bool open_in_a_new_window = false; |
98,7 → 101,7 |
VIEW_HISTORY, |
//FREE_IMG_CACHE, |
DOWNLOAD_MANAGER, |
COPY_LINK=1200, |
COPY_LINK_URL=1200, |
DOWNLOAD_LINK_CONTENTS, |
}; |
114,7 → 117,6 |
void main() |
{ |
CursorPointer.Load(#CursorFile); |
load_dll(boxlib, #box_lib_init,0); |
load_dll(libio, #libio_init,1); |
load_dll(libimg, #libimg_init,1); |
132,15 → 134,12 |
case evMouse: |
edit_box_mouse stdcall (#address_box); |
mouse.get(); |
if (WB1.list.MouseOver(mouse.x, mouse.y)) |
{ |
if (PageLinks.HoverAndProceed(mouse.x, WB1.list.first + mouse.y)) |
&& (bufsize) && (mouse.pkm) && (mouse.up) { |
EventShowPageMenu(mouse.x, mouse.y); |
if (WB1.list.MouseOver(mouse.x, mouse.y)) EventShowPageMenu(mouse.x, mouse.y); |
break; |
} |
if (WB1.list.MouseScroll(mouse.vert)) WB1.DrawPage(); |
} |
scrollbar_v_mouse (#scroll_wv); |
if (WB1.list.first != scroll_wv.position) |
{ |
192,47 → 191,28 |
if (http.status_code >= 300) && (http.status_code < 400) |
{ |
redirected++; |
if (redirected<=5) |
if (redirected>5) |
{ |
if (http.handle_redirect()) { |
if (!strncmp(#URL,"https://",8)) |
{ |
history.back(); |
strcpy(#editURL, history.current()); |
strcpy(#URL, history.current()); |
ShowErrorMessageThatHttpsIsNotSupportedYet(); |
notify("'Too many redirects.' -E"); |
StopLoading(); |
break; |
} |
} |
} |
else |
{ |
notify("Too many redirects"); |
StopLoading(); |
break; |
} |
} |
else |
{ |
redirected = 0; |
} |
// Loading the page is complete, free resources |
if (redirected>0) |
{ |
http.handle_redirect(); |
http.free(); |
GetAbsoluteURL(#URL); |
GetAbsoluteURL(#http.redirect_url); |
history.back(); |
strcpy(#editURL, #URL); |
DrawEditBoxWebView(); |
OpenPage(); |
} |
else |
{ |
break; |
} |
redirected = 0; |
// Loading the page is complete, free resources |
history.add(#URL); |
ESI = http.transfer; |
bufpointer = ESI.http_msg.content_ptr; |
bufsize = ESI.http_msg.content_received; |
bufpointer = http.content_pointer; |
bufsize = http.content_received; |
http.free(); |
SetPageDefaults(); |
ShowPage(); |
240,7 → 220,6 |
} |
} |
} |
} |
void SetElementSizes() |
{ |
275,7 → 254,12 |
img_draw stdcall(skin.image, Form.cwidth-24, address_box.top-3, 17, skin.h, 87, 0); |
DrawBar(0,Form.cheight - STATUSBAR_H, Form.cwidth,STATUSBAR_H, col_bg); |
DrawBar(0,Form.cheight - STATUSBAR_H, Form.cwidth,1, border_color); |
if (!header) OpenPage(); else { WB1.DrawPage(); DrawEditBoxWebView(); } |
if (!header) |
OpenPage(); |
else { |
WB1.DrawPage(); |
DrawEditBoxWebView(); |
} |
DrawRectangle(scroll_wv.start_x, scroll_wv.start_y, scroll_wv.size_x, scroll_wv.size_y-1, scroll_wv.bckg_col); |
DrawProgress(); |
} |
303,7 → 287,10 |
return; |
case GOTOURL_BUTTON: |
case SCAN_CODE_ENTER: |
if (!strncmp(#editURL,"http:",5)) || (editURL[0]=='/') |
if (!editURL[0]) { |
strcpy(#URL, URL_SERVICE_HOME); |
} |
else if (!strncmp(#editURL,"http:",5)) || (editURL[0]=='/') |
|| (!strncmp(#editURL,"https:",6)) || (!strncmp(#editURL,"WebView:",8)) |
{ |
strcpy(#URL, #editURL); |
334,7 → 321,7 |
WB1.LoadInternalPage(bufpointer, bufsize); |
break; |
case EDIT_SOURCE: |
if (!strncmp(#URL,"http:",5)) |
if (!strncmp(#URL,"http",4)) |
{ |
CreateFile(bufsize, bufpointer, "/tmp0/1/WebView_tmp.htm"); |
if (!EAX) RunProgram("/rd/1/tinypad", "/tmp0/1/WebView_tmp.htm"); |
356,7 → 343,7 |
CreateThread(#Downloader,#downloader_stak+4092); |
} |
return; |
case COPY_LINK: |
case COPY_LINK_URL: |
Clipboard__CopyText(PageLinks.GetURL(PageLinks.active)); |
notify("'URL copied to clipboard'O"); |
return; |
366,6 → 353,16 |
CreateThread(#Downloader,#downloader_stak+4092); |
} |
return; |
case SCAN_CODE_F12: |
debug_mode ^= 1; |
if (debug_mode) notify("'Debug mode ON'-I"); |
else notify("'Debug mode OFF'-I"); |
return; |
case SCAN_CODE_F11: |
old_tag_parser_mode ^= 1; |
if (old_tag_parser_mode) notify("'Old tag parser ON'-I"); |
else notify("'Old tag parser OFF'-I"); |
return; |
} |
} |
397,6 → 394,7 |
void OpenPage() |
{ |
char getUrl[sizeof(URL)]; |
StopLoading(); |
souce_mode = false; |
strcpy(#editURL, #URL); |
409,10 → 407,18 |
DrawEditBoxWebView(); |
return; |
} |
if (!strncmp(#URL,"http:",5)) |
if (!strncmp(#URL,"http:",5)) || (!strncmp(#URL,"https://",8)) |
{ |
img_draw stdcall(skin.image, address_box.left+address_box.width+1, address_box.top-3, 17, skin.h, 131, 0); |
if (!strncmp(#URL,"http:",5)) { |
http.get(#URL); |
} |
if (!strncmp(#URL,"https://",8)) { |
sprintf(#getUrl, "http://gate.aspero.pro/?site=%s", #URL); |
http.get(#getUrl); |
} |
//http.get(#URL); |
if (!http.transfer) |
{ |
StopLoading(); |
452,7 → 458,6 |
void ShowPage() |
{ |
DrawEditBoxWebView(); |
debugval("bufsize", bufsize); |
if (!bufsize) |
{ |
if (http.transfer) WB1.LoadInternalPage(#loading, sizeof(loading)); |
486,10 → 491,10 |
void DrawProgress() |
{ |
unsigned long btn; |
dword persent; |
if (http.transfer == 0) return; |
if (wv_progress_bar.max) btn = address_box.width*wv_progress_bar.value/wv_progress_bar.max; else btn = 30; |
DrawBar(address_box.left-2, address_box.top+20, btn, 2, wv_progress_bar.progress_color); |
if (wv_progress_bar.max) persent = wv_progress_bar.value*100/wv_progress_bar.max; else persent = 10; |
DrawBar(address_box.left-2, address_box.top+20, persent*address_box.width/100, 2, wv_progress_bar.progress_color); |
} |
501,7 → 506,6 |
StopLoading(); |
history.back(); |
} |
strcpy(#URL, PageLinks.GetURL(PageLinks.active)); |
//#1 |
if (URL[0] == '#') |
532,17 → 536,9 |
return; |
} |
if (!strncmp(#URL,"https://",8)) |
{ |
ShowErrorMessageThatHttpsIsNotSupportedYet(); |
strcpy(#editURL, history.current()); |
strcpy(#URL, history.current()); |
return; |
} |
GetAbsoluteURL(#URL); |
if (strncmp(#URL,"http://",7)!=0) |
if (strncmp(#URL,"http://",7)!=0) && (strncmp(#URL,"https://",8)!=0) |
{ |
if (UrlExtIs(".htm")!=true) && (UrlExtIs(".html")!=true) |
{ |
587,7 → 583,7 |
void EventShowLinkMenu(dword _left, _top) |
{ |
menu.show(Form.left+_left-6,Form.top+_top+skin_height+3, 220, #link_menu, COPY_LINK); |
menu.show(Form.left+_left-6,Form.top+_top+skin_height+3, 220, #link_menu, COPY_LINK_URL); |
} |
void EventUpdateProgressBar() |
600,12 → 596,6 |
} |
} |
void ShowErrorMessageThatHttpsIsNotSupportedYet() |
{ |
notify("'HTTPS protocol is not supported yet' -E"); |
} |
DrawStatusBar(dword _status_text) |
{ |
status_text.start_x = wv_progress_bar.left + wv_progress_bar.width + 10; |
/programs/cmm/browser/download_manager.h |
---|
73,10 → 73,10 |
default: |
if (!downloader.MonitorProgress()) break; |
pb.max = downloader.data_full_size; |
if (pb.value != downloader.data_downloaded_size) |
pb.max = downloader.httpd.content_length; |
if (pb.value != downloader.httpd.content_received) |
{ |
pb.value = downloader.data_downloaded_size; |
pb.value = downloader.httpd.content_received; |
progressbar_draw stdcall(#pb); |
DrawDownloading(); |
} |
153,7 → 153,7 |
void DrawDownloading() |
{ |
char bytes_received[70]; |
sprintf(#bytes_received, KB_RECEIVED, ConvertSizeToKb(downloader.data_downloaded_size) ); |
sprintf(#bytes_received, KB_RECEIVED, ConvertSizeToKb(downloader.httpd.content_received) ); |
DrawBar(15, pb.top + 22, strlen(#bytes_received+4)*12, 16, system.color.work); |
WriteText(15, pb.top + 22, 0x90, system.color.work_text, #bytes_received); |
progressbar_draw stdcall(#pb); |
182,7 → 182,7 |
for (i=0; i<strlen(#filepath); i++) if(filepath[i]==':')||(filepath[i]=='?')filepath[i]='-'; |
if (CreateFile(downloader.data_downloaded_size, downloader.bufpointer, #filepath)==0) |
if (CreateFile(downloader.httpd.content_received, downloader.bufpointer, #filepath)==0) |
sprintf(#notify_message, "%s%s%s",FILE_SAVED_AS,#filepath,"' -Dt"); |
else |
sprintf(#notify_message, "%s%s%s","'Download manager\nError! Can\96t save file as ",#filepath,"' -Et"); |
/programs/cmm/lib/keyboard.h |
---|
41,6 → 41,8 |
#define SCAN_CODE_PLUS 013 |
#define SCAN_CODE_F1 059 |
#define SCAN_CODE_F11 087 |
#define SCAN_CODE_F12 088 |
#define SCAN_CODE_KEY_B 048 |
#define SCAN_CODE_KEY_C 046 |
/programs/cmm/lib/patterns/http_downloader.h |
---|
13,6 → 13,8 |
dword status_code; |
dword receive_result; |
dword content_pointer; |
char redirect_url[4096*3]; |
char finaladress[4096*3]; |
dword get(); |
void free(); |
39,17 → 41,19 |
http_receive stdcall (transfer); |
receive_result = EAX; |
ESI = transfer; |
if (!EAX) status_code = ESI.http_msg.status; |
content_length = ESI.http_msg.content_length; |
content_received = ESI.http_msg.content_received; |
EDI = transfer; |
if (!EAX) { |
status_code = EDI.http_msg.status; |
content_pointer = EDI.http_msg.content_ptr; |
} |
content_length = EDI.http_msg.content_length; |
content_received = EDI.http_msg.content_received; |
} |
bool _http::handle_redirect() |
{ |
dword redirect, i; |
char redirect_url[4096*3], finaladress[4096*3]; |
dword redirect; |
http_find_header_field stdcall (transfer, "location\0"); |
if (EAX!=0) { |
ESI = EAX; |
81,13 → 85,11 |
struct DOWNLOADER { |
_http httpd; |
unsigned data_downloaded_size, data_full_size; |
dword bufpointer, bufsize, url; |
int state; |
dword Start(); |
void Stop(); |
void Completed(); |
int MonitorProgress(); |
bool MonitorProgress(); |
} downloader; |
dword DOWNLOADER::Start(dword _url) |
113,43 → 115,30 |
bufsize = 0; |
bufpointer = free(bufpointer); |
} |
data_downloaded_size = data_full_size = 0; |
httpd.content_received = httpd.content_length = 0; |
} |
void DOWNLOADER::Completed() |
bool DOWNLOADER::MonitorProgress() |
{ |
state = STATE_COMPLETED; |
ESI = httpd.transfer; |
bufpointer = ESI.http_msg.content_ptr; |
bufsize = ESI.http_msg.content_received; |
httpd.free(); |
} |
int DOWNLOADER::MonitorProgress() |
{ |
dword receive_result; |
char redirect_url[4096*3], finaladress[4096*3]; |
if (httpd.transfer <= 0) return false; |
http_receive stdcall (httpd.transfer); |
receive_result = EAX; |
EDI = httpd.transfer; |
httpd.status_code = EDI.http_msg.status; |
data_full_size = EDI.http_msg.content_length; |
data_downloaded_size = EDI.http_msg.content_received; |
if (!data_full_size) data_full_size = data_downloaded_size * 6 + 1; |
httpd.receive(); |
if (!httpd.content_length) httpd.content_length = httpd.content_received * 20; |
if (receive_result == 0) { |
if (httpd.receive_result == 0) { |
if (httpd.status_code >= 300) && (httpd.status_code < 400) |
{ |
httpd.handle_redirect(); |
strcpy(url, httpd.url); |
get_absolute_url(#finaladress, url, #redirect_url); |
get_absolute_url(#httpd.finaladress, url, #httpd.redirect_url); |
Stop(); |
Start(#finaladress); |
url = #finaladress; |
Start(#httpd.finaladress); |
url = #httpd.finaladress; |
return false; |
} |
Completed(); |
state = STATE_COMPLETED; |
bufpointer = httpd.content_pointer; |
bufsize = httpd.content_received; |
httpd.free(); |
} |
return true; |
} |
191,8 → 180,6 |
void get_absolute_url(dword _rez, _base, _new) |
{ |
int i; |
debug("_base:");debugln(_base); |
debug("_new:");debugln(_new); |
//case: ./valera.html |
if (!strncmp(_new,"./", 2)) _new+=2; |
//case: http://site.name |
222,5 → 209,4 |
strcat(_rez, _new); |
_GET_ABSOLUTE_URL_END: |
while (i=strstr(_rez, "&")) strcpy(i+1, i+5); |
debug("_rez:");debugln(_rez); |
} |