WebView and draw_buf.h: show error notification if requested memory size is more than free RAM size

git-svn-id: svn://kolibrios.org@6724 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Kirill Lipatov (Leency) 2016-11-17 21:23:36 +00:00
parent 9ac0ede851
commit e4b55f0dfb
2 changed files with 20 additions and 5 deletions

View File

@ -30,7 +30,7 @@
char homepage[] = FROM "html\\homepage.htm""\0";
#ifdef LANG_RUS
char version[]="’¥ªáâ®¢ë© ¡à ã§¥à 1.5";
char version[]="’¥ªáâ®¢ë© ¡à ã§¥à 1.51";
?define IMAGES_CACHE_CLEARED "Šíè ª à⨭®ª ®ç¨é¥­"
?define T_LAST_SLIDE "<EFBFBD>â® ¯®á«¥¤­¨© á« ©¤"
char loading[] = "‡ £à㧪  áâà ­¨æë...<br>";
@ -43,7 +43,7 @@ char rmb_menu[] =
Žç¨áâ¨âì ªíè ª à⨭®ª
Œ¥­¥¤¦¥à § £à㧮ª";
#else
char version[]="Text-based Browser 1.5";
char version[]="Text-based Browser 1.51";
?define IMAGES_CACHE_CLEARED "Images cache cleared"
?define T_LAST_SLIDE "This slide is the last"
char loading[] = "Loading...<br>";
@ -263,8 +263,7 @@ void SetElementSizes()
WB1.list.column_max = WB1.list.w - scroll_wv.size_x / WB1.list.font_w;
WB1.list.visible = WB1.list.h - 5 / WB1.list.item_h;
if (WB1.list.w!=WB1.DrawBuf.bufw) {
if (WB1.DrawBuf.Init(WB1.list.x, WB1.list.y, WB1.list.w, 2048 * WB1.list.item_h) == false)
die("Memory allocation error! Seems to be too little RAM.");
WB1.DrawBuf.Init(WB1.list.x, WB1.list.y, WB1.list.w, 2048 * WB1.list.item_h);
ProcessEvent(REFRESH_BUTTON);
}
}

View File

@ -25,13 +25,29 @@ struct DrawBufer {
bool DrawBufer::Init(int i_bufx, i_bufy, i_bufw, i_bufh)
{
dword alloc_size, free_ram_size;
char error_str[256];
if (!zoom) zoom = 1;
bufx = i_bufx;
bufy = i_bufy;
bufw = i_bufw * zoom;
bufh = i_bufh * zoom;
free(buf_data);
buf_data = malloc(bufw * bufh * 4 + 8);
$mov eax, 18
$mov ebx, 16
$int 0x40
free_ram_size = EAX * 1024;
alloc_size = bufw * bufh * 4 + 8;
if (alloc_size >= free_ram_size) {
sprintf(#error_str,
"'DrawBufer needs more memory than currenly available.
Application could be unstable.
Requested size: %i Kb.
Free RAM: %i Kb' -E", alloc_size/1024, free_ram_size/1024);
notify(#error_str);
}
buf_data = malloc(alloc_size);
//debugval("buf_data",buf_data);
if (!buf_data) return false;
ESDWORD[buf_data] = bufw;