/programs/cmm/TWB/absolute_url.h |
---|
42,7 → 42,7 |
} |
IF (!strcmpn(in_URL,"./", 2)) in_URL+=2; |
if (!http_transfer) |
if (!http.transfer) |
{ |
strcpy(#newurl, history.current()); |
} |
/programs/cmm/browser/WebView.c |
---|
27,10 → 27,12 |
#include "..\lib\patterns\history.h" |
#include "..\lib\patterns\http_downloader.h" |
_http http = {0, 0, 0, 0, 0, 0, 0}; |
char homepage[] = FROM "html\\homepage.htm""\0"; |
#ifdef LANG_RUS |
char version[]="¥ªáâ®¢ë© ¡à 㧥à 1.73"; |
char version[]="¥ªáâ®¢ë© ¡à 㧥à 1.74"; |
?define IMAGES_CACHE_CLEARED "íè ª à⨮ª ®ç¨é¥" |
?define T_LAST_SLIDE "â® ¯®á«¥¤¨© á« ©¤" |
char loading[] = " £à㧪 áâà ¨æë...<br>"; |
45,7 → 47,7 |
"®¯¨à®¢ âì áá뫪ã |
ª ç âì ᮤ¥à¦¨¬®¥ áá뫪¨"; |
#else |
char version[]="Text-based Browser 1.73"; |
char version[]="Text-based Browser 1.74"; |
?define IMAGES_CACHE_CLEARED "Images cache cleared" |
?define T_LAST_SLIDE "This slide is the last" |
char loading[] = "Loading...<br>"; |
75,9 → 77,6 |
int action_buf; |
dword http_transfer = 0; |
dword http_buffer; |
dword TOOLBAR_H = 40; |
dword STATUSBAR_H = 15; |
dword col_bg; |
185,34 → 184,17 |
break; |
case evNetwork: |
if (http_transfer > 0) { |
http_receive stdcall (http_transfer); |
$push EAX |
ESI = http_transfer; |
wv_progress_bar.max = ESI.http_msg.content_length; |
if (wv_progress_bar.value != ESI.http_msg.content_received) |
{ |
wv_progress_bar.value = ESI.http_msg.content_received; |
DrawProgress(); |
} |
$pop EAX |
if (EAX == 0) { |
ESI = http_transfer; |
if (http.transfer > 0) { |
http.receive(); |
EventUpdateProgressBar(); |
if (http.receive_result == 0) { |
// Handle redirects |
if (ESI.http_msg.status >= 300) && (ESI.http_msg.status < 400) |
if (http.status_code >= 300) && (http.status_code < 400) |
{ |
redirected++; |
if (redirected<=5) |
{ |
http_find_header_field stdcall (http_transfer, "location\0"); |
if (EAX!=0) { |
ESI = EAX; |
EDI = #URL; |
do { |
$lodsb; |
$stosb; |
} while (AL != 0) && (AL != 13) && (AL != 10); |
DSBYTE[EDI-1]='\0'; |
if (http.handle_redirect()) { |
if (!strncmp(#URL,"https://",8)) |
{ |
history.back(); |
238,8 → 220,7 |
// Loading the page is complete, free resources |
if (redirected>0) |
{ |
http_free stdcall (http_transfer); |
http_transfer=0; |
http.free(); |
GetAbsoluteURL(#URL); |
history.back(); |
strcpy(#editURL, #URL); |
249,11 → 230,10 |
else |
{ |
history.add(#URL); |
ESI = http_transfer; |
ESI = http.transfer; |
bufpointer = ESI.http_msg.content_ptr; |
bufsize = ESI.http_msg.content_received; |
http_free stdcall (http_transfer); |
http_transfer=0; |
http.free(); |
SetPageDefaults(); |
ShowPage(); |
} |
338,7 → 318,7 |
case 063: //F5 |
IF(address_box.flags & 0b10) return; |
case REFRESH_BUTTON: |
if (http_transfer > 0) |
if (http.transfer > 0) |
{ |
StopLoading(); |
Draw_Window(); |
391,15 → 371,15 |
void StopLoading() |
{ |
if (http_transfer) |
if (http.transfer) |
{ |
EAX = http_transfer; |
EAX = http.transfer; |
EAX = EAX.http_msg.content_ptr; // get pointer to data |
$push EAX // save it on the stack |
http_free stdcall (http_transfer); // abort connection |
http_free stdcall (http.transfer); // abort connection |
$pop EAX |
free(EAX); // free data |
http_transfer=0; |
http.transfer=0; |
bufsize = 0; |
bufpointer = free(bufpointer); |
} |
432,9 → 412,8 |
if (!strncmp(#URL,"http:",5)) |
{ |
img_draw stdcall(skin.image, address_box.left+address_box.width+1, address_box.top-3, 17, skin.h, 131, 0); |
http_get stdcall (#URL, 0, 0, #accept_language); |
http_transfer = EAX; |
if (!http_transfer) |
http.get(#URL); |
if (!http.transfer) |
{ |
StopLoading(); |
bufsize = 0; |
465,7 → 444,7 |
address_box.size = address_box.pos = address_box.shift = address_box.shift_old = strlen(#editURL); |
address_box.offset = 0; |
edit_box_draw stdcall(#address_box); |
if (http_transfer > 0) EAX = 131; else EAX = 54; |
if (http.transfer > 0) EAX = 131; else EAX = 54; |
img_draw stdcall(skin.image, address_box.left+address_box.width+1, address_box.top-3, 17, skin.h, EAX, 0); |
} |
476,7 → 455,7 |
debugval("bufsize", bufsize); |
if (!bufsize) |
{ |
if (http_transfer) WB1.LoadInternalPage(#loading, sizeof(loading)); |
if (http.transfer) WB1.LoadInternalPage(#loading, sizeof(loading)); |
else WB1.LoadInternalPage(#page_not_found, sizeof(page_not_found)); |
} |
else |
508,7 → 487,7 |
void DrawProgress() |
{ |
unsigned long btn; |
if (http_transfer == 0) return; |
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); |
} |
517,7 → 496,7 |
char anchor[256]; |
void ClickLink() |
{ |
if (http_transfer > 0) |
if (http.transfer > 0) |
{ |
StopLoading(); |
history.back(); |
611,7 → 590,17 |
menu.show(Form.left+_left-6,Form.top+_top+skin_height+3, 220, #link_menu, COPY_LINK); |
} |
void EventUpdateProgressBar() |
{ |
wv_progress_bar.max = http.content_length; |
if (wv_progress_bar.value != http.content_received) |
{ |
wv_progress_bar.value = http.content_received; |
DrawProgress(); |
} |
} |
void ShowErrorMessageThatHttpsIsNotSupportedYet() |
{ |
notify("'HTTPS protocol is not supported yet' -E"); |
/programs/cmm/browser/download_manager.h |
---|
20,25 → 20,21 |
proc_info DL_Form; |
char downloader_edit[10000]; |
char filepath[4096]; |
int mouse_twbi; |
edit_box ed = {250,20,20,0xffffff,0x94AECE,0xffffff,0xffffff,0x10000000,sizeof(downloader_edit),#downloader_edit,#mouse_twbi,2,19,19}; |
edit_box ed = {NULL,57,20,0xffffff,0x94AECE,0xffffff,0xffffff,0x10000000,sizeof(downloader_edit),#downloader_edit,0,2,19,19}; |
progress_bar pb = {0, 20, 58, 350, 17, 0, 0, 100, 0xFFFfff, 0x74DA00, 0x9F9F9F}; |
//progress_bar pb = {0, 180, 55, 225, 12, 0, 0, 100, 0xFFFfff, 0x74DA00, 0x9F9F9F}; |
//progress_bar: value, left, top, width, height, style, min, max, back_color, progress_color, frame_color; |
byte downloader_opened; |
bool downloader_opened; |
char downloader_stak[4096]; |
char str[2048]; |
char aux[2048]; |
void Downloader() |
{ |
int key, i; |
char notify_message[4296]; |
downloader_opened = 1; |
if (!dir_exists(#save_to)) CreateDir(#save_to); |
downloader_opened = true; |
SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE + EVM_MOUSE_FILTER + EVM_STACK); |
system.color.get(); |
53,7 → 49,6 |
loop() switch(WaitEvent()) |
{ |
case evMouse: |
if (!CheckActiveProcess(DL_Form.ID)) break; |
edit_box_mouse stdcall (#ed); |
break; |
87,24 → 82,7 |
} |
if (downloader.state == STATE_COMPLETED) |
{ |
if (!dir_exists(#save_to)) CreateDir(#save_to); |
strcpy(#filepath, #save_to); |
chrcat(#filepath, '/'); |
// Clean all slashes at the end |
strcpy(#aux, #downloader_edit); |
while (aux[strlen(#aux)-1] == '/') { |
aux[strlen(#aux)-1] = 0; |
} |
strcat(#filepath, #aux+strrchr(#aux, '/')); |
for (i=0; i<strlen(#filepath); i++) if(filepath[i]==':')||(filepath[i]=='?')filepath[i]='-'; |
if (CreateFile(downloader.data_downloaded_size, 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"); |
notify(#notify_message); |
SaveDownloadedFile(); |
StopDownloading(); |
DL_Draw_Window(); |
break; |
114,12 → 92,15 |
void Key_Scan(int id) |
{ |
if (id==001) { downloader_opened=0; StopDownloading(); ExitProcess(); } |
if (id==301) && (downloader.http_transfer <= 0) StartDownloading(); |
if (id==001) { downloader_opened=false; StopDownloading(); ExitProcess(); } |
if (id==301) && (downloader.httpd.transfer <= 0) StartDownloading(); |
if (id==302) StopDownloading(); |
if (id==305) RunProgram("/sys/File managers/Eolite", #save_to); |
if (id==306) RunProgram("/sys/@open", #filepath); |
if (id==306) { |
SetCurDir(#save_to); |
RunProgram("/sys/@open", #filepath); |
} |
} |
void DL_Draw_Window() |
{ |
127,6 → 108,8 |
int but_x = 0; |
int but_y = 58; |
DrawBar(0,0, DL_Form.cwidth, DL_Form.cheight, system.color.work); |
DeleteButton(301); |
DeleteButton(302); |
DeleteButton(305); |
DeleteButton(306); |
if (downloader.state == STATE_NOT_STARTED) || (downloader.state == STATE_COMPLETED) |
140,11 → 123,10 |
} |
if (downloader.state == STATE_IN_PROGRESS) |
{ |
DrawCaptButton(DL_Form.width - 190, but_y, 167, 26, 302, system.color.work_button, system.color.work_button_text, STOP_DOWNLOADING); |
DrawStandartCaptButton(DL_Form.width - 190, but_y, 302, STOP_DOWNLOADING); |
DrawDownloading(); |
} |
WriteText(cleft, ed.top + 4, 0x90, system.color.work_text, "URL:"); |
ed.left = strlen("URL:")*8 + 10 + cleft; |
ed.width = DL_Form.cwidth - ed.left - cleft - 3; |
ed.offset=0; |
DrawEditBox(#ed); |
183,4 → 165,27 |
ed.blur_border_color = 0xFFFfff; |
ed.flags = 10b; |
DL_Draw_Window(); |
} |
void SaveDownloadedFile() |
{ |
int i; |
char aux[2048]; |
char notify_message[4296]; |
// Clean all slashes at the end |
strcpy(#aux, #downloader_edit); |
while (aux[strlen(#aux)-1] == '/') { |
aux[strlen(#aux)-1] = 0; |
} |
sprintf(#filepath, "%s/%s", #save_to, #aux+strrchr(#aux, '/')); |
for (i=0; i<strlen(#filepath); i++) if(filepath[i]==':')||(filepath[i]=='?')filepath[i]='-'; |
if (CreateFile(downloader.data_downloaded_size, 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"); |
notify(#notify_message); |
} |
/programs/cmm/lib/patterns/http_downloader.h |
---|
1,4 → 1,78 |
//===================================================// |
// // |
// HTTP // |
// // |
//===================================================// |
struct _http |
{ |
dword url; |
dword transfer; |
dword content_length; |
dword content_received; |
dword status_code; |
dword receive_result; |
dword content_pointer; |
dword get(); |
void free(); |
void receive(); |
bool handle_redirect(); |
}; |
dword _http::get(dword _url) |
{ |
url = _url; |
http_get stdcall (url, 0, 0, #accept_language); |
transfer = EAX; |
return transfer; |
} |
void _http::free() |
{ |
http_free stdcall (transfer); |
transfer=0; |
} |
void _http::receive() |
{ |
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; |
} |
bool _http::handle_redirect() |
{ |
dword redirect, i; |
char redirect_url[4096*3], finaladress[4096*3]; |
http_find_header_field stdcall (transfer, "location\0"); |
if (EAX!=0) { |
ESI = EAX; |
EDI = #redirect_url; |
do { |
$lodsb; |
$stosb; |
} while (AL != 0) && (AL != 13) && (AL != 10); |
DSBYTE[EDI-1]='\0'; |
get_absolute_url(#finaladress, url, #redirect_url); |
strcpy(url, #finaladress); |
return true; |
} |
return false; |
} |
//===================================================// |
// // |
// DOWNLOADER // |
// // |
//===================================================// |
enum { |
STATE_NOT_STARTED, |
STATE_IN_PROGRESS, |
6,11 → 80,10 |
}; |
struct DOWNLOADER { |
_http httpd; |
unsigned data_downloaded_size, data_full_size; |
dword bufpointer, bufsize, url; |
byte state; |
dword http_transfer; |
int http_status_code; |
int state; |
dword Start(); |
void Stop(); |
void Completed(); |
21,25 → 94,24 |
{ |
url = _url; |
state = STATE_IN_PROGRESS; |
http_get stdcall (url, 0, 0, #accept_language); |
http_transfer = EAX; |
return http_transfer; |
httpd.get(url); |
return httpd.transfer; |
} |
void DOWNLOADER::Stop() |
{ |
state = STATE_NOT_STARTED; |
if (http_transfer!=0) |
if (httpd.transfer!=0) |
{ |
EAX = http_transfer; |
EAX = httpd.transfer; |
EAX = EAX.http_msg.content_ptr; // get pointer to data |
$push EAX // save it on the stack |
http_free stdcall (http_transfer); // abort connection |
http_free stdcall (httpd.transfer); // abort connection |
$pop EAX |
mem_Free(EAX); // free data |
http_transfer=0; |
free(EAX); // free data |
httpd.transfer=0; |
bufsize = 0; |
bufpointer = mem_Free(bufpointer); |
bufpointer = free(bufpointer); |
} |
data_downloaded_size = data_full_size = 0; |
} |
47,11 → 119,10 |
void DOWNLOADER::Completed() |
{ |
state = STATE_COMPLETED; |
ESI = http_transfer; |
ESI = httpd.transfer; |
bufpointer = ESI.http_msg.content_ptr; |
bufsize = ESI.http_msg.content_received; |
http_free stdcall (http_transfer); |
http_transfer=0; |
httpd.free(); |
} |
int DOWNLOADER::MonitorProgress() |
58,28 → 129,20 |
{ |
dword receive_result; |
char redirect_url[4096*3], finaladress[4096*3]; |
if (http_transfer <= 0) return false; |
http_receive stdcall (http_transfer); |
if (httpd.transfer <= 0) return false; |
http_receive stdcall (httpd.transfer); |
receive_result = EAX; |
EDI = http_transfer; |
http_status_code = EDI.http_msg.status; |
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; |
if (receive_result == 0) { |
if (http_status_code >= 300) && (http_status_code < 400) |
if (httpd.status_code >= 300) && (httpd.status_code < 400) |
{ |
http_find_header_field stdcall (http_transfer, "location\0"); |
if (EAX!=0) { |
ESI = EAX; |
EDI = #redirect_url; |
do { |
$lodsb; |
$stosb; |
} while ((AL != 0) && (AL != 13) && (AL != 10)); |
DSBYTE[EDI-1]='\0'; |
} |
httpd.handle_redirect(); |
strcpy(url, httpd.url); |
get_absolute_url(#finaladress, url, #redirect_url); |
Stop(); |
Start(#finaladress); |
94,7 → 157,7 |
/*===================================== |
== == |
== CHECK URL TYPE == |
== CHECK PATH TYPE == |
== == |
=====================================*/ |
/programs/cmm/liza/liza.c |
---|
26,6 → 26,11 |
byte letter_icons[sizeof(file "img/letter_icons.raw")] = FROM "img/letter_icons.raw"; |
#include "img/letter_icons.h" |
struct mockup |
{ |
dword transfer; |
} http = {0}; |
//connection algorithm |
enum { |
STOP, |