From 263a9a4c7d336dbeb3a3b93b3cfa9f1a60b60c8b Mon Sep 17 00:00:00 2001 From: "Kirill Lipatov (Leency)" Date: Mon, 26 Nov 2012 15:26:15 +0000 Subject: [PATCH] C Minus Minus programs in one location, one library, uploaded src new @rb, new end, new notify. dicty, tmpdisk and browser moved git-svn-id: svn://kolibrios.org@3067 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/cmm/browser/HTMLv.c | 261 ++++++ programs/cmm/browser/History.txt | 418 +++++++++ programs/cmm/browser/TWB.h | 884 ++++++++++++++++++++ programs/cmm/browser/compile.bat | 6 + programs/cmm/browser/img/URLgoto.png | Bin 0 -> 816 bytes programs/cmm/browser/img/URLgoto.txt | 256 ++++++ programs/cmm/browser/img/toolbar_icons.c | 529 ++++++++++++ programs/cmm/browser/img/toolbar_icons.png | Bin 0 -> 2528 bytes programs/cmm/browser/include/acid_0.1.htm | 131 +++ programs/cmm/browser/include/colors.h | 193 +++++ programs/cmm/browser/include/history.h | 59 ++ programs/cmm/browser/include/menu_rmb.h | 99 +++ programs/cmm/browser/include/parce_tag.h | 50 ++ programs/cmm/browser/include/some_code.h | 66 ++ programs/cmm/browser/include/unicode_tags.h | 89 ++ programs/cmm/dict/compile.bat | 5 + programs/cmm/dict/dicty.c | 274 ++++++ programs/cmm/dict/dicty_.c | 306 +++++++ programs/cmm/lib/dll.h | 173 ++++ programs/cmm/lib/edit_box_lib.h | 49 ++ programs/cmm/lib/encoding.h | 182 ++++ programs/cmm/lib/figures.h | 33 + programs/cmm/lib/file_system.h | 208 +++++ programs/cmm/lib/kolibri.h | 463 ++++++++++ programs/cmm/lib/libimg_lib.h | 104 +++ programs/cmm/lib/libio_lib.h | 36 + programs/cmm/lib/mem.h | 203 +++++ programs/cmm/lib/memory.h | 66 ++ programs/cmm/lib/random.h | 55 ++ programs/cmm/lib/scroll_lib.h | 95 +++ programs/cmm/lib/strings.h | 336 ++++++++ programs/cmm/lib/truetype.h | 29 + programs/cmm/new_end/compile.bat | 6 + programs/cmm/new_end/end.c | 161 ++++ programs/cmm/new_end/moon.bmp | Bin 0 -> 614 bytes programs/cmm/new_end/moon.raw | Bin 0 -> 108 bytes programs/cmm/notify/@notify | Bin 0 -> 832 bytes programs/cmm/notify/compile.bat | 6 + programs/cmm/notify/notify.c | 92 ++ programs/cmm/rb/@rb | Bin 0 -> 1389 bytes programs/cmm/rb/compile.bat | 7 + programs/cmm/rb/rb.c | 134 +++ programs/cmm/tmpdisk/compile_en.bat | 9 + programs/cmm/tmpdisk/compile_ru.bat | 9 + programs/cmm/tmpdisk/icons.ico | Bin 0 -> 8846 bytes programs/cmm/tmpdisk/icons.raw | Bin 0 -> 2352 bytes programs/cmm/tmpdisk/t_console.c | 87 ++ programs/cmm/tmpdisk/t_window.c | 266 ++++++ programs/cmm/tmpdisk/tmpdisk.c | 71 ++ 49 files changed, 6506 insertions(+) create mode 100644 programs/cmm/browser/HTMLv.c create mode 100644 programs/cmm/browser/History.txt create mode 100644 programs/cmm/browser/TWB.h create mode 100644 programs/cmm/browser/compile.bat create mode 100644 programs/cmm/browser/img/URLgoto.png create mode 100644 programs/cmm/browser/img/URLgoto.txt create mode 100644 programs/cmm/browser/img/toolbar_icons.c create mode 100644 programs/cmm/browser/img/toolbar_icons.png create mode 100644 programs/cmm/browser/include/acid_0.1.htm create mode 100644 programs/cmm/browser/include/colors.h create mode 100644 programs/cmm/browser/include/history.h create mode 100644 programs/cmm/browser/include/menu_rmb.h create mode 100644 programs/cmm/browser/include/parce_tag.h create mode 100644 programs/cmm/browser/include/some_code.h create mode 100644 programs/cmm/browser/include/unicode_tags.h create mode 100644 programs/cmm/dict/compile.bat create mode 100644 programs/cmm/dict/dicty.c create mode 100644 programs/cmm/dict/dicty_.c create mode 100644 programs/cmm/lib/dll.h create mode 100644 programs/cmm/lib/edit_box_lib.h create mode 100644 programs/cmm/lib/encoding.h create mode 100644 programs/cmm/lib/figures.h create mode 100644 programs/cmm/lib/file_system.h create mode 100644 programs/cmm/lib/kolibri.h create mode 100644 programs/cmm/lib/libimg_lib.h create mode 100644 programs/cmm/lib/libio_lib.h create mode 100644 programs/cmm/lib/mem.h create mode 100644 programs/cmm/lib/memory.h create mode 100644 programs/cmm/lib/random.h create mode 100644 programs/cmm/lib/scroll_lib.h create mode 100644 programs/cmm/lib/strings.h create mode 100644 programs/cmm/lib/truetype.h create mode 100644 programs/cmm/new_end/compile.bat create mode 100644 programs/cmm/new_end/end.c create mode 100644 programs/cmm/new_end/moon.bmp create mode 100644 programs/cmm/new_end/moon.raw create mode 100644 programs/cmm/notify/@notify create mode 100644 programs/cmm/notify/compile.bat create mode 100644 programs/cmm/notify/notify.c create mode 100644 programs/cmm/rb/@rb create mode 100644 programs/cmm/rb/compile.bat create mode 100644 programs/cmm/rb/rb.c create mode 100644 programs/cmm/tmpdisk/compile_en.bat create mode 100644 programs/cmm/tmpdisk/compile_ru.bat create mode 100644 programs/cmm/tmpdisk/icons.ico create mode 100644 programs/cmm/tmpdisk/icons.raw create mode 100644 programs/cmm/tmpdisk/t_console.c create mode 100644 programs/cmm/tmpdisk/t_window.c create mode 100644 programs/cmm/tmpdisk/tmpdisk.c diff --git a/programs/cmm/browser/HTMLv.c b/programs/cmm/browser/HTMLv.c new file mode 100644 index 0000000000..cbc539bbaa --- /dev/null +++ b/programs/cmm/browser/HTMLv.c @@ -0,0 +1,261 @@ +//HTML Viewer in C-- +//Copyright 2007-2012 by Veliant & Leency +//Asper, lev, Lrz, Barsuk, Nable. +//home icon - rachel fu, GPL licence + +#include "..\lib\kolibri.h" +#include "..\lib\strings.h" +#include "..\lib\figures.h" +#include "..\lib\encoding.h" +#include "..\lib\file_system.h" +#include "..\lib\mem.h" +#include "..\lib\dll.h" +//библиотеки .obj +#include "..\lib\libio_lib.h" +#include "..\lib\libimg_lib.h" +#include "..\lib\edit_box_lib.h" +#include "..\lib\scroll_lib.h" +#include "..\lib\truetype.h" +//картинки +#include "img\toolbar_icons.c" +#include "img\URLgoto.txt"; + + +#define URL param +int use_truetype = 0; + +char editURL[sizeof(URL)], + page_links[12000], + header[300]; + +struct lines{ + int visible, all, first, column_max; +}; + +int mouse_dd; +edit_box edit1= {250,207,16,0xffffff,0x94AECE,0xffffff,0xffffff,0,sizeof(editURL),#editURL,#mouse_dd,2,19,19}; +scroll_bar scroll1 = { 18,200,398, 44,18,0,115,15,0,0xeeeeee,0xD2CED0,0x555555,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1}; //details in scroll_lib.h-- + + +proc_info Form; +#define WIN_W 640 +#define WIN_H 480 + + +dword stak[100]; //меню ПКМ +mouse m; + +#include "TWB.h" +#include "include\menu_rmb.h" + + +void tre() +{ + char *font_picture; + char text[20]; + int width=600; + int height=20; +// char palette[256*4]; + int x; + + text_out stdcall ("hello world\0",#fontlol, 17, 0x0, 10, 10); + text_out stdcall ("heyeyey!\0",#fontlol, 27, 0x0, 10, 30); + text_out stdcall ("alarm!\0", #fontlol, 47, 0x00FF0000, 10, 70); + /* + strcpy(#text, "hello world\0"); + + debug("get width\n"); + get_width stdcall (#text, #fontinfo, height); + width=EAX; + for (x=0;x<20;x++) { + init_font(#fontinfo); + debug("yaya\n"); + font_picture=mem_Alloc(width*height); + text[1]=30+x; + truetype stdcall (#text, #fontinfo, font_picture, width, height); + + debug("blyad'!\n"); + + + + PutPaletteImage(font_picture,width,height,0,20*x,8,#palette); + mem_Free(font_picture); }*/ +} + +char fontlol[64]; + +void main() +{ + int btn; + byte key; + int half_scroll_size; + int scroll_used=0; + + mem_Init(); + if (load_dll2(libio, #libio_init,1)!=0) debug("Не удалось подключить библиотеку libio"w); + if (load_dll2(libimg, #libimg_init,1)!=0) debug("Не удалось подключить библиотеку libimg"w); + if (load_dll2(boxlib, #edit_box_draw,0)!=0) {RunProgram("@notify", "System Error: library doesn't exists /rd/1/lib/box_lib.obj"); ExitProcess();} + load_dll2(#abox_lib, #boxlib_init,0); + if (load_dll2(libtruetype, #truetype,0)!=0) {debug("Не удалось подключить библиотеку TrueType"w); use_truetype = 2; } + else init_font(#fontlol); + + if (!URL) strcpy(#URL, "/sys/home.htm"); + strcpy(#editURL, #URL); + + Form.width=WIN_W; + Form.height=WIN_H; + + SetElementSizes(); + + WB1.OpenPage(); + + SetEventMask(0x27); + loop() + { + WaitEventTimeout(2); + switch(EAX & 0xFF) + { + CASE evMouse: + /*scrollbar_v_mouse (#scroll1); //конченый скролл притормажимает, идём "своим путём" + if (lines.first <> scroll1.position) + { + lines.first = scroll1.position; + WB1.ParseHTML(buf, filesize); + //break; + };*/ + + btn=GetProcessSlot(Form.ID); + IF (btn<>GetActiveProcess()) break; //если окно не активно на события мыши не реагируем + + edit_box_mouse stdcall (#edit1); + + m.get(); + + if (m.pkm) && (m.y>WB1.top) && (m.y3) lines.first-=2; ELSE lines.first=1; + WB1.Scan(ID1); + break; + } + IF (m.vert==1) + { + IF(lines.visible+lines.first+3>=lines.all) WB1.Scan(181); + ELSE { + lines.first+=2; + WB1.Scan(ID2); + } + break; + } + + if (!m.lkm) scroll_used=0; + if (m.x>=WB1.width-14) && (m.x<=WB1.width+6) && (m.y>WB1.top+16) + && (m.ylines.visible) && (m.lkm) + scroll_used=1; + + if (scroll_used) + { + half_scroll_size = WB1.height - 16 * lines.visible / lines.all - 3 /2; + IF (half_scroll_size+WB1.top>m.y) || (m.y<0) || (m.y>4000) m.y=half_scroll_size+WB1.top; //если курсор над окном + btn=lines.first; //сохраняем старое количество + lines.first = m.y -half_scroll_size -WB1.top * lines.all / WB1.height; + if (lines.visible+lines.first>lines.all) lines.first=lines.all-lines.visible; + if (btn<>lines.first) WB1.ParseHTML(buf); //чтоб лишний раз не перерисовывать + } + + break; + case evButton: + btn=GetButtonID(); + IF (btn==1) + { + KillProcess(downloader_id); + ExitProcess(); + } + ELSE + { + WB1.Scan(btn); + } + break; + case evKey: + key = GetKey(); + + if (edit1.flags == 66) || (edit1.flags == 98) SWITCH(key) //если активна строка адреса игнорируем некоторые кнопки + { CASE 52: CASE 53: CASE 54: goto _EDIT_MARK; } + + WB1.Scan(key); + + _EDIT_MARK: + IF (key<>0x0d) && (key<>183) && (key<>184) && (key<>173) {EAX=key<<8; edit_box_key stdcall(#edit1);} //адресная строка + break; + case evReDraw: + Draw_Window(); + break; + default: + if (downloader_id<>0) + { + if (GetProcessSlot(downloader_id)<>0) break; + downloader_id=0; + lines.first = lines.all = 0; + WB1.ReadHtml(_WIN); + Draw_Window(); + } + } + } +} + +void SetElementSizes() +{ + edit1.width=Form.width-266; + WB1.top=44; + WB1.width=Form.width-13; + WB1.height=onTop(43,5); + lines.column_max = WB1.width - 30 / 6; + lines.visible = WB1.height - 3 / 10 - 2; +} + + +void Draw_Window() +{ + int j; + DefineAndDrawWindow(215,100,WIN_W,WIN_H,0x73,0x00E4DFE1,0,0); + + GetProcessInfo(#Form, SelfInfo); + if (Form.status_window>2) //если свернуто в заголовок, ничего не рисуем + { + DrawTitle(#header); + return; + } + if (Form.height<120) MoveSize(OLD,OLD,OLD,120); + if (Form.width<280) MoveSize(OLD,OLD,280,OLD); + + PutPaletteImage(#toolbar,200,42,0,0,8,#toolbar_pal); + if (GetProcessSlot(downloader_id)<>0) PutImage(#stop_btn,24,24,88,10); + + DrawBar(200,0,onLeft(200,9),43,0xE4DFE1); //закрашиваем фон под тулбаром + DrawBar(0,42,onLeft(5,4),1,0xE2DBDC); //выпуклость + DrawBar(0,43,onLeft(5,4),1,0xD2CED0); //выпуклость + for (j=0; j<5; j++) DefineButton(j*37+11, 7, 29, 29, 300+j+BT_HIDE, 0xE4DFE1); + PutImage(#URLgoto,40,19,onLeft(57,0),14); + DefineButton(onLeft(37,0),15, 18, 16, GOTOURL+BT_HIDE, 0xE4DFE1); + DefineButton(onLeft(56,0),15, 17, 16, SEARCHWEB+BT_HIDE, 0xE4DFE1); + DrawRectangle(205,14,onLeft(58,205),18,0x94AECE); //ободок полосы адреса + DrawRectangle(206,15,onLeft(59,205),16,0xE4ECF3); + + SetElementSizes(); + WB1.ShowPage(); + //tre(); + DefineButton(scroll1.start_x+1, scroll1.start_y+1, 16, 16, ID1+BT_HIDE, 0xE4DFE1); + DefineButton(scroll1.start_x+1, scroll1.start_y+scroll1.size_y-18, 16, 16, ID2+BT_HIDE, 0xE4DFE1); +} + +int onLeft(dword right,left) {return Form.width-right-left;} +int onTop(dword down,up) {return Form.height-GetSkinHeight()-down-up;} + + +stop: diff --git a/programs/cmm/browser/History.txt b/programs/cmm/browser/History.txt new file mode 100644 index 0000000000..9ff3167149 --- /dev/null +++ b/programs/cmm/browser/History.txt @@ -0,0 +1,418 @@ +20.11.12 - 0.98 +- интелектуальная система кеширования изображений. + +18.11.12 - 0.97.7 +- если изображение не загрузилось, но содержит ссылку отображается + заменяющий его текст; +- полностью исправлены переносы ссылках в тексте; +- отображение в меню текущей кодировки; +- SoUrcerer - Синхронизация программы с новой оптимизированной +версией библитеки TryeType. + + + +10.11.12 - 0.97.6 +- нормальный запуск программы даже без библиотеки lib_img; +- оповещение если box_lib не найдена; +- исправлена ошибка приводящая к торможению при отображении + TrueType шрифтов; +- обновление библиотек. + +05.11.12 - 0.97.5 +Переключалка на шрифты TrueType из меню ПКМ. + +16.07.12 - 0.97 +- небольшие улучшения в обработке ссылок и изображений; +- включение обработки разрывов строк через меню; +- поддержка цветов вида #abc, улучшения в обработке цветов; +- пропадали изображения при начале загрузки страницы; +- исправлен баг 100% загрузки процессора при использовании + скролла (спасибо hidnplayer). + +14.07.12 - 0.96 +- исправлен баг со строкой адреса +- исправлен баг с незакрытыми тегами +- частично исправлен баг с длинными адресами урлов +- меню - новое окно + +22.06.12 - 0.95 + +22.06.12 - 0.94c +- испрвлена регрессия со ссылками; +- исправлена регрессия с ползунком; +- исправлено затирание первой строки. + +19.06.12 - 0.94 +- улучшение кода. + +14.06.12 -- v0.93 +- заработали якоря; +- улучшено меню. + +13.06.12 -- v0.92 +- базовое меню ПКМ; +- убрана постоянная загрузка страницы при перерисовке окна; +- костыли версии 2.0 для работы с downloader'ом; +- разделение кода загрузки и отображения страницы: часть 1. + +04.06.12 -- v0.90 +- новый скроллбар из box_lib (спасибо lev); +- нормальная загрузка страниц без скидывания фокуса с окна; +- гениальный и грязный хак для работы с downloader'ом, который + у меня на машине даёт 99% загрузки страниц вместо 50% ранее; +- масса исправлений в работе с историей посещений и навигацией; +- в теге исправлена регрессия. + + +27.05.12 -- v0.83 +- новая иконка кнопки "домой"; +- оптимизация тега ; +- улучшения при работе с книгами xml-подобного формата fb2. + + +13.04.12 -- v0.80 +- поддержка "bgcolor=" и "text="; +- обработка перехода вверх "../"; +- jpg, gif, png открываются через kiv. +- теперь изображения легко могут быть ссылками; +- 2 небольших фикса для изображений, кнопки BackSpace; +- чуток улучшена обработка урлов, содержащих #; +- заработала кнопка "Вперёд". + + + +29.02.12 -- v0.76 -- 11.3 +- исправлена работа кнопки "Назад"; +- в историю посещённых страниц не может быть добавлено 2 одинаковых адреса подряд; +- исправлено исчезание заголовка страниц; +- исчезала кнопка вверх в прокрутке - исправлено; +- некоторые другие исправления. + + +27.02.12 -- v0.75 -- 11.? Кб +- при закрытии HTMLv, downloader тоже завершается; +- невозможно запустить больше одного downloader'a; +- отображение процесса загрузки страницы из Интернета через кнопочку + "остановить", надпись "Loading...", возможность прервать процесс; +- обновление страницы из Интернета приводит к её повторной загрузке. + + +24.02.12 -- v0.71 -- 11.? Кб +- просто починил эти самые интернеты. + + +26.09.11 -- v0.70с -- 11.4 Кб +- универсальная обработка цветов; +- улучшения в обработке title; +- исправлена обработка станиц в кодировке iso-8859-1. + +22.09.11 -- v0.70 -- 11.3 Кб +- улучшен и оптимизирован код обработки юникодовских тегов (&), исправлен + и дополнен их список; +- устранён вылет программы при нажатии клавиши CapsLock (спасибо Mario); +- заглушка на вылет программы при загрузке страниц из и-нэта (спасибо Mario). + +13.09.11 -- v0.69 -- 11.2 Кб +- нормальная прокрутка изображений; +- работа с файлами любого размера; +- оптимизация процедуры парсинга тега с параметрами. + +05.09.11 -- v0.68 -- 11.2 Кб +- устранён вылет программы при неправильном параметре color тега - алсо + иногда действительно полезно читать маны; +- memory.h-- удалён как старый дубликат, все функции работы с памятью отныне + используют mem.h--, написанный Asper'ом; +- изображения теперь вписываются в окно по ширине; +- устранён частый вылет программы при прокрутке страницы, содержащей изображения. + +20.08.11 -- v0.67 -- 11.1 Кб +- более адекватная прокрутка изображений; +- корректная обработка табов в тексте и с тегом
 (спасибо Nazarus и Jaeger);
+- улучшена отзывчивость программы при прокрутке больших страниц (фикс изначально
+   был написан Gluk'ом для игры Косилка по моей просьбе, сюда перенесен мной);
+- небольшие исправления в реакции ползунка прокрутки;
+- исправлено залезание текста в наклонном шрифте на левый ободок окна;
+- кнопка "Новая вкладка" и комбинации Ctrl+N, Ctrl+T банально создают новое окно;
+- правильное распознание украинской буквы ґ;
+- поддержка кодировки "UTF8" для универсальности (идея фичи Joaquin).
+
+
+
+20.06.11 -- v0.63 -- 11.32 Кб
+lev
+- наклонный шрифт
+- таблица именованных цветов
+
+08.06.10 -- v0.62a -- 9.68 Кб
+- в адресную строку нельзя было нормально ввести цифры 4 и 6 (спасибо Nasarus
+   за найденные баги)
+- поддержка DOS-кодировки страниц (по просьбе Nasarus'a)
+
+
+14.02.10 -- v0.62 -- 9.42 Кб
+- поиск в Интернетах с помощью nigma.ru, поиск только по английским символам,
+   горячая комбинация клавиш Ctrl+Enter;
+- улучшено и оптимизировано определение кодировки;
+- небольшой фикс для работы с XHTML-тегами типа br/;
+- исправлен баг: не работал просмотр (по f3) страниц из интернета;
+- немного улучшено отображение изображений, но, всё равно, ещё очень плохо;
+- поддержка тегов с кавычками ' (как на главной странице kolibrios.org);
+- работа с историей вынесена в отдельный файл;
+- исправлена поломанная в предыдущей версии работа в Интернетах.
+
+
+31.01.10 -- v0.60 -- 8.94 Кб
+- поддержка utf-8 реализованная Asper'ом ещё в ноябре, увы не попавшая в
+   дистр 0.7.7.0. От меня огромное спасибо Asper'у в помощи!
+- исправлена ошибка при открытии страницы с /fd и /cd (спасибо Nasarus и IgorA,
+   которые сообщили мне об ошибке);
+- поддержка шайтанской кодировки mht-страниц, то есть, сохранённых со всем
+   содержимым через ИЕ7 (спасибо за помощь IgorA);
+- улучшено определение кодировки: например, теперь можно нормально читать хабр;
+- небольшое исправление в парсинге параметров тега;
+- увеличена длина URL до 4096 символов.
+
+
+08.11.09 -- v0.57 -- 8.69 Кб
+- Asper реализовал поддержку изображений, которую в HTMLv ещё надо пилить;
+- поддержка .mht, скорее всего старых версий (страница Albom'a), в новых (я
+   сохранил в .mht через ИЕ7) вместо буковок какая-то ересь, очень похожая на
+   hex-коды;
+- исправлено появление кнопки "остановить загрузку" когда не надо;
+- оптимизации поиска и загрузки файла.
+
+
+03.11.09 -- v0.53 -- 7.87 Кб
+- восстановлена совместимость с библиотекой box_lib.obj;
+- исправлена заглушка с адресами страниц, содержащими знак # ;
+- программа больше не вылетает, если несколько раз нажать на локальную ссылку;
+- серьёзное улучшение обработки разных ссылок;
+- исправлено превышение максимальной длины истории ссылок;
+- корректная обработка ссылок, содержащих знак = ;
+- исправлено исчезание ссылок, если тег находится за границей видимой области;
+- во время загрузки страницы, пишет "Loading...";
+- небольшие обновления кода.
+
+
+05.06.09 -- v0.5 -- 7.91 Кб
+- barsuk прикрутил загрузку страниц из Интернета через downloader за что
+   ему огромнейший респект :)
+- исправление падения программы в случае, если страница недокачана -
+   исправлен выход за границы памяти при парсинге тегаов и обработке <-- -->;
+- исправлена передача параметров downloader'y: обрезается / в конце;
+- корректная обработка некоторых символов;
+- некоторые оптимизации.
+
+
+28.01.08 -- v0.48.5 -- 6.95 Кб
+- если присутствует только закрывающий тег , без открывающего, ссылки
+   больше не "съезжают";
+- корректная обработка параметров, не взятых в скобки, пример: href=1.htm ;
+- исправлен баг с цветом ссылок и цветом текста после ссылок;
+- многоуровневые списки;
+- немного улучшен алгоритм парсинга тегов;
+- клавиша BackSpace опять возвращает назад;
+- подчёркивание цветных ссылок теперь цвета самих ссылок;
+- исправлен баг в заглушке с переходом по ссылке внутри страницы #.
+
+
+28.01.08 -- v0.48.2 -- 6.95 Кб
+- устранён вылет программы при прокрутке страницы с большим кол-вом ссылок;
+- устранено "синение" текста в некоторых случаях;
+- исправлен баг в чтении тега с параметрами;
+- автоопределение кодировки KOI8;
+
+
+22.01.08 -- v0.48.1 -- 6,88 Кб
+21.12.08 -- v0.48.0
+- перенос по словам;
+- координаты считаются от конца заголовка;
+- исправлена перерисовка окна, когда страница маленькая;
+- исправил баг в теге 
;
+- исправлен баг перерисовки первой строки;
+
+
+07.12.08 -- v0.47 -- 7,50 Кб
+- добавлен символ "апостроф", украинские буквы для кодировки win1251;
+- инфа внутри  фильтруется;
+- переписана процедура парсинга параметров тега;
+- зачатки вывода изображений (спасибо Nable и Asper за помощь);
+- исправлен баг, из-за которого страницы могли не отображаться;
+- исправлен баг с тегом font, из-за которого весь текст могло плющить;
+- исправлен недочёт в теге 
 (нашёл diamond);
+- немного увеличена скорость обработки страниц;
+- немного улучшена полоса прокрутки, исправлен один мелкий баг;
+
+
+02.12.08 -- v0.45 -- 6,79 Кб
+- поддержка кодировки KOI8-R(U) - активируется нажатием Ctrl+R. Спасибо Velianty
+   за написаный код;
+- вывод какой-то win кодировки, где все символы отображаются, как А и т.д.
+   (заработал файл, присланый Albom'ом);
+- исправлен очень серьёзный баг из-за которого страницы с большим количеством
+   ссылок приводили к вылету программы;
+- кодировка DOS'a (cp866) активируется нажатием Ctrl+D;
+- улучшен скролл;
+- исправлен баг кнопки "Обновить";
+- иконки тулбара выводится одним изображением с палитрой, как результат меньше
+   перерисовка окна и размер программы.
+
+
+20.10.08 -- v0.40 -- 7,36 Кб
+- обработка нескольких параметров тега для ссылки и текста;
+- перечёркивание и подчёркивание отображается тем же цветом что и текст
+- правильная обработка табов;
+- улучшение тега 
  • ; +- корректный переход на страницу, адрес которой содержит знак "#"; +- исправлен баг из-за которого часть текста могла стать невидимой; +- исправлен тег ; +- некоторые спецсимволы заменены своими "аналогами": (с), (r), обычное тире + вместо типографического; +- поддержка тегов и ; +- прочие доработки и хитрожопые оптимизации отображения :) + + +19.10.08 -- v0.38.1 -- 6,85 Кб +- суровые оптимизации и как результат увеличилась скорость загрузки страниц на + 7-10% (было проверено с использованием секундомера); +- правильное отображение файлов с расширением ".txt" в окне программы; + +18.10.08 -- v0.38 -- 6,88 Кб +- для полосы адреса теперь используется отдельная переменная; +- хождение по относительным ссылкам, с косяками, но то фигня. Сделаю; +- улучшения в обработке тегов: корректно обрабатываются таб и переход на + следующую строку в теге. +- немного улучшена обработка тегов вообще, догадываюсь как сделать ваще зашибись; +- добавлена обработка цвета линий (hr). + +17.10.08 -- v0.37 -- 6,82 Кб +- реализовано преобразование тегов вида   в символы (пока только 5 основных); +- немного улучшен скролл, но, всё равно, это не дело; +- F3 - просмотр исходного кода страницы; +- обновлены кнопочки "Вперёд/Назад". +Правка багов: +- исправлена табота со ссылками; +- исправлен баг с тем, что иногда отображалось два пробела в тексте вместо одного; +- исправил баг из-за которого часть текста при прокрутке могла стать синей; +- исправлен баг, связаный с клавишей BackSpace; +Огромное спасибо diamond'y за тестирование. + + +16.10.08 -- v0.35.3 -- 6,74 Кб +- кнопки от ссылок не удалялись в случае, если страница не найдена, fixed; +- улучшены кнопочки тулбара; +- пофиксил последнюю страницу от Albom'a, со скриптом; оказалось просто надо было + обнулить переменную во время её объявления; +- при сворачивании окна в заголовок, его название не исчезает. + + +15.10.08 -- v0.35 -- 6,75 Кб +- исправлен баг - вылет проги из-за переполнения памяти во время создания ссылок + (спасибо Albom'у, который прислал страницу, на которой проявляется баг); +- при перемотке колёсиком теперь проматывается 3 строчки; +- исправлена перемотка PgUp/PgDn; +- исправлена работа программы в случае, если страница не найдена; +- новые фирменные изображения на кнопках; +- исправлен тег для длинных названий; +- теперь переход Домой записывается в хистори; +- программа больше не должна вылетать :) + + +03.10.08 -- v0.30.2 -- 6,56 Кб +- обновление страницы не приводит к записи новой ссылки в историю посещений; +- оптимизация перебора символов; +- больше не появляются белые полосы на ободке нижней части окна; +- установлены минимальные размеры окна, убраны артефакты при сворачивании окна в заголовок. + + +02.08.08 -- v0.30.1 -- 6,48 Кб +- поправил баг с историей посещений страниц; +- устранён баг, когда под самой нижней строкой появлась прозрачная полоса; +- игнорируется текст между <style>; +- немного оптимизирован скролл. + + +29.07.08 -- v0.30 -- 6,46 Кб +- клавиша BackSpace, если полоса адреса не активна, возвращает на предыдущую страницу; +- игнорируется текст после тега <script>; +- сносно работает прокрутка; +- заглушка на PgUp\PgDown, работает End; +- исправлен баг с заголовком окна. + + +28.07.08 -- v0.27 -- 6,21 Кб +- вывод цвета текста, поддержка до 10 вложеных тегов цвета - за всё это спасибо Veliant'y; +- адаптирован код под новую версию библиотеки <Lrz>, отвечающей за строку адреса (box_lib); +- теперь корректно определяется конец файла при обработке (by Veliant); +- теперь текст декодируется win -> dos, исправлено отображение некоторых специальных символов; +- почищен код, оптимизована структура документа; +- опредение длины страницы, заглушки на прокрутку её вверх и вниз; +- сильно уменьшена перерисовка первых двух строк. + + +23.07.08 -- v0.24 -- 6,05 Кб +- полностью исправлена работа ссылок; +- Энтер теперь добавляется как пробел в тексте, в случае если до него не было пробела; +- обработка тега "hr" - рисование линий; +- исправлен баг при деактивации окна. + + +07.07.08 -- v0.23 alpha -- 5.68 Кб +- исправлен баг кнопки "Назад"; +- некоторые ссылки работают :) +- PageUp, PageDown. + + +05.07.08 -- v0.22 -- 5.68 Кб +- исправлен баг, из-за которого строка в конце окна отображалась без "стиля"; +- теперь программа умеет отделять теги от параметров - улучшена совместимость; +- поддержка параметров в режиме тестирования (пока недоступно). + + +04.07.08 -- v0.21 -- 5.58 Кб +- небольшие изминения в интерфейсе; +- рабочая клавиша "Назад". + + +29.06.08 -- v0.2 -- 5.48 Кб +- уменьшена перерисовка при открытии проги, во время перехода по страницам, + во время их прокрутки - текст выводится не побуквенно, а короткими строчками; +- изменения в структуре программы, она стала ещё чуть более гибкой; +- теперь заголовок не перерисовывается постоянно во время перемотки; +- теперь не выводится больше 1 пробела; +- запуск с параметром - открывается страница; +- немного подправлено положение строки адреса при разной высоте заголовков; +- если страница не существует, выводится предупреждение. + + +26.06.08 -- v0.1.3 -- 5.59 Кб +- при прокрутке не перерисовывается заголовок; +- теги обнуляются перед началом перерисовки; +- устранён глюк из-за которого внизу списка мог появляться левый текст; +- поддержка тегов ul, blockquote, q, некоторые другие частично; +- теперь вместе обрабатываются теги с / и без него. + + +24.06.08 -- v0.1.1 -- 5.37 Кб +- исправления и улучшения тега <li>; +- теперь можно прописывать путь к странице не добавляя в конце ".htm", + программа добавит расширение автоматически; +- немного уменьшена перерисовка окна; +- добавлен тег "strike", аналог "s"; +- начальная поддержка некоторых других тегов; +- исправлен баг, из-за которого нельзя было перематывать текст вниз до конца. + + +22.06.08 -- v0.1 -- 5.11 Кб +- более или менее полная поддержка тегов: b, strong, i, u, s, br, pre, title, + li, p. Поддержка закрывающих тегов соответственно; +- поддержка вложеных тегов; +- игнорирование ненужных пробелов в теге (пример: < b >); +- увеличена скорость прокрутки и программы; +- полоса адреса (EditBox) от <Lrz>, спасибо ему огромное; +- остановка рисования после тега </html>. + + +20.02.08 -- v0.000001 -- 7.32 Кб +Типа начало. :) +Переписал браузер Veliant'a под новую библиотеку, немного доделан. diff --git a/programs/cmm/browser/TWB.h b/programs/cmm/browser/TWB.h new file mode 100644 index 0000000000..d4623b0ab7 --- /dev/null +++ b/programs/cmm/browser/TWB.h @@ -0,0 +1,884 @@ + +int downloader_id; + +dword + buf, + filesize, + blink; + +char download_path[]="/rd/1/.download"; +char search_path[]="http://nigma.ru/index.php?s="; +char version[]=" Text-based Browser 0.98"; + + +struct TWebBrowser { + int left, top, width, height; + void Scan(int); + void GetNewUrl(); + void OpenPage(); + void ReadHtml(byte); + void ShowPage(); + void ParseHTML(dword); + void WhatTextStyle(int left1, top1, width1); + void DrawPage(); + void DrawScroller(); +}; + +TWebBrowser WB1; + +byte rez, b_text, i_text, u_text, s_text, pre_text, blq_text, li_text, + link, ignor_text, li_tab, first_line_drawed, cur_encoding; + + +dword text_colors[300], + text_color_index, + link_color, + bg_color; + +int stroka, + stolbec, + tab_len; + +char anchor[256]; +int anchor_line_num; + +char line[500], + tag[100], + tagparam[10000], + parametr[1200], + options[4096]; + +#include "include\history.h" +#include "include\colors.h" +#include "include\unicode_tags.h" +#include "include\some_code.h" +#include "include\parce_tag.h" + + +void TWebBrowser::Scan(int id) +{ + if (id >= 400) + { + GetURLfromPageLinks(id); + + //#1 + if (URL[0] == '#') + { + strcpy(#anchor, #URL+strrchr(#URL, '#')); + + strcpy(#URL, BrowserHistory.CurrentUrl()); + + lines.first=lines.all-lines.visible; + ShowPage(); + return; + } + //liner.ru#1 + if (strrchr(#URL, '#')<>-1) + { + strcpy(#anchor, #URL+strrchr(#URL, '#')); + URL[strrchr(#URL, '#')-1] = 0x00; //заглушка + } + + GetNewUrl(); + + if (!strcmp(#URL + strlen(#URL) - 4, ".gif")) || (!strcmp(#URL + strlen(#URL) - 4, ".png")) || (!strcmp(#URL + strlen(#URL) - 4, ".jpg")) + { + //if (strstr(#URL,"http:")) + RunProgram("/sys/media/kiv", #URL); + strcpy(#editURL, BrowserHistory.CurrentUrl()); + strcpy(#URL, BrowserHistory.CurrentUrl()); + return; + } + if (!strcmpn(#URL,"mailto:", 7)) + { + RunProgram("@notify", #URL); + strcpy(#editURL, BrowserHistory.CurrentUrl()); + strcpy(#URL, BrowserHistory.CurrentUrl()); + return; + } + + OpenPage(); + return; + } + + IF(lines.all < lines.visible) SWITCH(id) //если мало строк игнорируем некоторые кнопки + { CASE 183: CASE 184: CASE 180: CASE 181: return; } + + switch (id) + { + case 011: //Ctrk+K + ReadHtml(_KOI); + break; + case 021: //Ctrl+U + ReadHtml(_UTF); + break; + case 004: //Ctrl+D + ReadHtml(_DOS); + break; + case 001: + if (!pre_text) pre_text=2; + else pre_text=0; + break; + case 002: //free img cache + FreeImgCache(); + break; + case 005: //truetype + if (use_truetype == 2) + { + RunProgram("@notify", "Library does not exists /rd/1/lib/truetype.obj"w); + return; + } + if (use_truetype == 1) use_truetype=0; else use_truetype=1; + break; + case BACK: + if (!BrowserHistory.GoBack()) return; + OpenPage(); + return; + case FORWARD: + if (!BrowserHistory.GoForward()) return; + OpenPage(); + return; + case 052: //Нажата F3 + if (strcmp(get_URL_part(5),"http:")<>0) RunProgram("/rd/1/tinypad", #URL); else RunProgram("/rd/1/tinypad", #download_path); + return; + case 054: //F5 + IF(edit1.flags == 66) break; + case REFRESH: + if (GetProcessSlot(downloader_id)<>0) + { + KillProcess(downloader_id); + Pause(20); + Draw_Window(); + return; + } + anchor_line_num=lines.first; //весёлый костыль :Р + anchor[0]='|'; + OpenPage(); + return; + case 014: //Ctrl+N новое окно + case 020: //Ctrl+T новая вкладка + case NEWTAB: + MoveSize(190,80,OLD,OLD); + RunProgram(#program_path, #URL); + return; + + case HOME: + strcpy(#editURL, "http://kolibri-os.narod.ru"); + case GOTOURL: + case 0x0D: //enter + strcpy(#URL, #editURL); + OpenPage(); + return; + case 173: //ctrl+enter + case SEARCHWEB: + strcpy(#URL, #search_path); + strcat(#URL, #editURL); + OpenPage(); + return; + + case ID1: //мотаем вверх + IF(lines.first <= 0) return; + lines.first--; + break; + case ID2: //мотаем вниз + IF(lines.visible + lines.first >= lines.all) return; + lines.first++; + break; + case 183: //PgDown + IF(lines.first == lines.all - lines.visible) return; + lines.first += lines.visible + 2; + IF(lines.visible + lines.first > lines.all) lines.first = lines.all - lines.visible; + break; + case 184: //PgUp + IF(lines.first == 0) return; + lines.first -= lines.visible - 2; + IF(lines.first < 0) lines.first = 0; + break; + case 180: //home + IF(lines.first == 0) return; + lines.first = 0; + break; + case 181: //end + IF (lines.first == lines.all - lines.visible) return; + lines.first = lines.all - lines.visible; + break; + default: + return; + } + ParseHTML(buf); +} + + +char *ABSOLUTE_LINKS[]={ "http:", "mailto:", "ftp:", "/sys/", "/rd/", "/fd/", "/bd/", "/hd/", "/cd/", "/tmp/", 0}; + +//dword TWebBrowser::GetNewUrl(dword CUR_URL, NEW_URL){ +void TWebBrowser::GetNewUrl(){ + int i, len; + + for (i=0; ABSOLUTE_LINKS[i]; i++) + { + len=strlen(ABSOLUTE_LINKS[i]); + if (!strcmpn(#URL, ABSOLUTE_LINKS[i], len)) return; + } + + IF (!strcmpn(#URL,"./", 2)) strcpy(#URL, #URL+2); //игнорим :) + if (URL[0] == '/') strcpy(#URL, #URL+1); + + strcpy(#editURL, BrowserHistory.CurrentUrl()); //достаём адрес текущей страницы + + _CUT_ST_LEVEL_MARK: + + if (editURL[strrchr(#editURL, '/')-2]<>'/') // если не http:// + { + editURL[strrchr(#editURL, '/')] = 0x00; //обрезаем её урл до последнего / + } + + IF (!strcmp(get_URL_part(3),"../")) //на уровень вверх + { + strcpy(#URL,#URL+3); + editURL[strrchr(#editURL, '/')-1] = 0x00; //обрезаем её урл до последнего / + goto _CUT_ST_LEVEL_MARK; + } + + if (editURL[strlen(#editURL)-1]<>'/') strcat(#editURL, "/"); + + strcat(#editURL, #URL); //клеим новый адрес + strcpy(#URL, #editURL); +} + + + +void TWebBrowser::ReadHtml(byte encoding) +{ + if (!strcmp(get_URL_part(5),"http:"))) + file_size stdcall (#download_path); + else + file_size stdcall (#URL); + + filesize = EBX; + if (!filesize) return; + + mem_Free(buf); + buf = mem_Alloc(filesize); + if (!strcmp(get_URL_part(5),"http:"))) + ReadFile(0, filesize, buf, #download_path); + else + ReadFile(0, filesize, buf, #URL); + + cur_encoding = encoding; + if (encoding==_WIN) wintodos(buf); + if (encoding==_UTF) utf8rutodos(buf); + if (encoding==_KOI) koitodos(buf); +} + + +void TWebBrowser::OpenPage() +{ + if (GetProcessSlot(downloader_id)<>0) PutPaletteImage(#toolbar,200,42,0,0,8,#toolbar_pal); + KillProcess(downloader_id); + strcpy(#editURL, #URL); + BrowserHistory.AddUrl(); + strcpy(#header, #version); + pre_text =0; + if (!strcmp(get_URL_part(5),"http:"))) + { + KillProcess(downloader_id); //убиваем старый процесс + DeleteFile(#download_path); + IF (URL[strlen(#URL)-1]=='/') URL[strlen(#URL)-1]=NULL; + downloader_id = RunProgram("/sys/network/downloader", #URL); + //Browser Hack v2.0 + Pause(60); + if (GetProcessSlot(downloader_id)<>0) + { + debug("Browser Hack v2.0: Killing downloader and trying to run it one more!"); + KillProcess(downloader_id); //убиваем старый процесс + downloader_id = RunProgram("/sys/network/downloader", #URL); + } + // + IF (downloader_id<0) RunProgram("@notify", "Error running Downloader. Internet unavilable."); + Draw_Window(); + return; + } + lines.first = lines.all =0; + ReadHtml(_WIN); + WB1.ShowPage(); +} + + +void TWebBrowser::ShowPage() +{ + edit1.size = edit1.pos = strlen(#editURL); + edit1.offset=0; + edit_box_draw stdcall(#edit1); //рисуем строку адреса + + if (!filesize) + { + DrawBar(left, top, width+4, height, 0xFFFFFF); //закрашиваем всё донизу + if (GetProcessSlot(downloader_id)<>0) WriteText(left + 10, top + 18, 0x80, 0, "Loading...", 0); + else + { + WriteText(left + 10, top + 18, 0x80, 0, "Page not found. May be, URL contains some errors.", 0); + if (!strcmp(get_URL_part(5),"http:"))) WriteText(left + 10, top + 32, 0x80, 0, "Or Internet unavilable for your configuration.", 0); + } + //return; + } + else + ParseHTML(buf); + + if (!header) strcpy(#header, #version); + if (!strcmp(#version, #header)) DrawTitle(#header); +} + + + +void TWebBrowser::ParseHTML(dword bword){ + word bukva[2]; + int j, perenos_num; + byte ignor_param; + char temp[768]; + + stroka = -lines.first; + stolbec = 0; + + for (j = 400; j < blink + 1; j++;) DeleteButton(j); + blink = 400; + + b_text = i_text = u_text = s_text = blq_text = first_line_drawed = + li_text = link = ignor_text = text_color_index = text_colors[0] = li_tab = 0; //обнуляем теги + link_color = 0x0000FF; + bg_color = 0xFFFFFF; + line = NULL; + strcpy(#page_links,"|"); + strcpy(#header, #version); + + if (pre_text<>2) + { + pre_text=0; + if (!strcmp(#URL + strlen(#URL) - 4, ".txt")) pre_text = 1; + if (!strcmp(#URL + strlen(#URL) - 4, ".mht")) ignor_text = 1; + } + + for ( ; buf+filesize > bword; bword++;) + { + bukva = ESBYTE[bword]; + if (ignor_text) && (bukva<>'<') continue; + switch (bukva) + { + case 0x0a: + if (pre_text) + { + bukva = temp = NULL; + goto NEXT_MARK; + } + case '\9': + if (pre_text) //иначе идём на 0x0d + { + tab_len=strlen(#line)/8; + tab_len=tab_len*8; + tab_len=8+tab_len-strlen(#line); + for (j=0; j<tab_len; j++;) strcat(#line," "); + break; + } + case 0x0d: + bukva = ' '; + goto DEFAULT_MARK; + case '=': //поддержка шайтанской кодировки страниц, сохранённых через ИЕ7 + if (strcmp(#URL + strlen(#URL) - 4, ".mht")<>0) goto DEFAULT_MARK; + + bword++; + bukva=ESBYTE[bword]; + strcpy(#temp,#bukva); + bword++; + bukva=ESBYTE[bword]; + strcat(#temp,#bukva); + + bukva=Hex2Symb(#temp); + if (bukva) goto DEFAULT_MARK; + break; + + case '&': //  and so on + bword++; + tag=0; + for (j=0; (ESBYTE[bword]<>';') && (j<7); j++, bword++;) + { + bukva = ESBYTE[bword]; + strcat(#tag, #bukva); + } + + bukva = GetUnicodeSymbol(); + if (bukva) goto DEFAULT_MARK; + break; + case '<': + bword++; //промотаем символ < + tag = parametr = tagparam = ignor_param = NULL; + if (ESBYTE[bword] == '!') //фильтрация внутри <!-- -->, дерзко + { + bword++; + if (ESBYTE[bword] == '-') + { + HH_: + do + { + bword++; + if (buf + filesize <= bword) break 2; + } + while (ESBYTE[bword] <>'-'); + + bword++; + if (ESBYTE[bword] <>'-') goto HH_; + } + } + while (ESBYTE[bword] !='>') && (bword < buf + filesize) //получаем тег и его параметры + { + bukva = ESBYTE[bword]; + if (bukva == '\9') || (bukva == '\x0a') || (bukva == '\x0d') bukva = ' '; + if (!ignor_param) && (bukva <>' ') + { + if (strlen(#tag)<sizeof(tag)) strcat(#tag, #bukva); + } + else + { + ignor_param = true; + if (!ignor_text) && (strlen(#tagparam)+1<sizeof(tagparam)) strcat(#tagparam, #bukva); + } + bword++; + } + strlwr(#tag); + strlwr(#tagparam); + + if (tag[strlen(#tag)-1]=='/') tag[strlen(#tag)-1]=NULL; //for br/ + if (tagparam) && (strlen(#tagparam) < 4000) GetNextParam(); + + if (stolbec + strlen(#line) > lines.column_max) + { + perenos_num = strrchr(#line, ' '); + if (!perenos_num) && (strlen(#line)>lines.column_max) perenos_num=lines.column_max; + strcpy(#temp, #line + perenos_num); //перенос по словам + line[perenos_num] = 0x00; + if (stroka >= lines.visible) && (lines.first <>0) break 1; //уходим... + DrawPage(); + strcpy(#line, #temp); + + TextGoDown(left + 5, stroka * 10 + top + 5, width - 20); //закрашиваем следущую строку + } + DrawPage(); + line=NULL; + + if (tag) WhatTextStyle(left + 5, stroka * 10 + top + 5, width - 20); //обработка тегов + + tag = parametr = tagparam = ignor_param = NULL; + break; + default: + DEFAULT_MARK: + if (!pre_text) && (bukva == ' ') + { + if (line[strlen(#line)-1]==' ') break; //убрать 2 пробела подряд + if (!stolbec) && (!line) break; //строка не может начинаться с пробела + } + if (strlen(#line)<sizeof(line)) strcat(#line, #bukva); + + if (stolbec + strlen(#line) > lines.column_max) + { + NEXT_MARK: + perenos_num = strrchr(#line, ' '); + if (!perenos_num) && (strlen(#line)>lines.column_max) perenos_num=lines.column_max; + strcpy(#temp, #line + perenos_num); //перенос по словам + line[perenos_num] = 0x00; + if (stroka >= lines.visible) && (lines.first <>0) break 1; //уходим... + DrawPage(); + strcpy(#line, #temp); + + TextGoDown(left + 5, stroka * 10 + top + 5, width - 20); //закрашиваем следущую строку + } + } + } + + DrawPage(); //рисует последнюю строку, потом это надо убрать, оптимизировав код + if (lines.visible * 10 + 25 <= height) + DrawBar(left, lines.visible * 10 + top + 25, width - 15, -lines.visible * 10 + height - 25, bg_color); + if (stroka * 10 + 15 <= height) + DrawBar(left, stroka * 10 + top + 15, width - 15, -stroka * 10 + height - 15, bg_color); //закрашиваем всё до конца + if (lines.first == 0) lines.all = stroka; + if (anchor) //если посреди текста появится новый якорь - будет бесконечный цикл + { + anchor=NULL; + lines.first=anchor_line_num; + ParseHTML(buf); + } + DrawScroller(); +} + +void TWebBrowser::DrawPage() //резать здесь!!1! +{ + int start_x, start_y, line_length; + char temp[sizeof(line)]; + + if (!header) //&& (tag) + { + if (strlen(#version)+strlen(#line)+2>sizeof(header)) + { + strcpy(#temp, #line); + temp[sizeof(header)-strlen(#version)-2]=0; + strcpy(#header, #temp); + strcpy(#line, #line+strlen(#temp)); + } + else + { + strcpy(#header, #line); + line=0; + } + strcat(#header, " -"); + strcat(#header, #version); + return; + } + + if (stroka >= 0) && (stroka - 2 < lines.visible) && (line) && (!anchor) + { + if (!stroka) && (!stolbec) + { + DrawBar(left, top, width-15, 15, bg_color); //закрашиваем первую строку + first_line_drawed=1; + } + + start_x=stolbec * 6 + left+5; + start_y=stroka * 10 + top + 5; + line_length=strlen(#line)*6; + + if (use_truetype == 1) + { + //line_length = get_length stdcall (#line,-1,16,line_length); + text_out stdcall (#line, #fontlol, 17, text_colors[text_color_index], start_x, start_y-3); + } + else + { + WriteText(start_x, start_y, 0x80, text_colors[text_color_index], #line, 0); + IF (b_text) { $add ebx, 1<<16 $int 0x40 } + } + IF (i_text) Skew(start_x, start_y, line_length+6, 10); + IF (s_text) DrawBar(start_x, start_y + 4, line_length, 1, text_colors[text_color_index]); + IF (u_text) DrawBar(start_x, start_y + 8, line_length, 1, text_colors[text_color_index]); + IF (link) { + DefineButton(start_x-2, start_y, line_length + 3, 9, blink + BT_HIDE, 0xB5BFC9); + DrawBar(start_x, start_y + 8, line_length, 1, text_colors[text_color_index]); + } + stolbec += strlen(#line); + } +} + + +char oldtag[100]; +void TWebBrowser::WhatTextStyle(int left1, top1, width1) { + dword hr_color; + + //проверяем тег открывается или закрывается + if (tag[0] == '/') + { + rez = 0; + strcpy(#tag, #tag+1); + } + else rez = 1; + + if (!chTag("html")) + { + IF(!strcmp(#URL + strlen(#URL) - 4, ".mht")) IF (rez==0) ignor_text = 1; ELSE ignor_text = 0; + return; + } + + if (!chTag("script")) || (!chTag("style")) || (!chTag("binary")) ignor_text = rez; + + if(!chTag("title")) + { + if (rez) header=NULL; + else if (!stroka) DrawTitle(#header); //тег закрылся - вывели строку + return; + } + + if (ignor_text) return; + + + + IF(!chTag("q")) strcat(#line, "\""); + + if (anchor) && (!strcmp(#parametr, "id=")) //очень плохо!!! потому что если не последний тег, работать не будет + { + if (!strcmp(#anchor, #options)) anchor_line_num=lines.first+stroka; + } + + if (!chTag("body")) + { + do{ + if (!strcmp(#parametr, "link=")) link_color = GetColor(#options); + if (!strcmp(#parametr, "text=")) text_colors[0]=GetColor(#options); + if (!strcmp(#parametr, "bgcolor=")) bg_color=GetColor(#options); + } while(GetNextParam()); + return; + } + + if (!chTag("a")) + { + if (rez) + { + if (link) IF(text_color_index > 0) text_color_index--; //если предыдущий тег а не был закрыт + + do{ + if (!strcmp(#parametr, "href=")) + { + if (stroka - 1 > lines.visible) || (stroka < -2) return; + + text_color_index++; + text_colors[text_color_index] = text_colors[text_color_index-1]; + + link = 1; + blink++; + text_colors[text_color_index] = link_color; + strcat(#page_links, #options); + strcat(#page_links, "|"); + } + if (anchor) && (!strcmp(#parametr, "name=")) + { + if (!strcmp(#anchor, #options)) + { + anchor_line_num=lines.first+stroka; + } + } + } while(GetNextParam()); + } + else { + link = 0; + IF(text_color_index > 0) text_color_index--; + } + return; + } + + if (!chTag("font")) + { + if (rez) + { + text_color_index++; + text_colors[text_color_index] = text_colors[text_color_index-1]; + + do{ + if (strcmp(#parametr, "color=") == 0) //&& (parametr[1] == '#') + { + text_colors[text_color_index] = GetColor(#options); + } + } while(GetNextParam()); + } + else + if (text_color_index > 0) text_color_index--; + return; + } + if(!chTag("tr")) || (!chTag("br")) { + TextGoDown(left1, top1, width1); + return; + } + if (!chTag("div")) { + IF(oldtag[0] <>'h') TextGoDown(left1, top1, width1); + return; + } + if (!chTag("p")) { + IF(oldtag[0] == 'h') return; + TextGoDown(left1, top1, width1); + IF(rez) TextGoDown(left1, top1 + 10, width1); + return; + } + if (!chTag("h1")) || (!chTag("h2")) || (!chTag("h3")) || (!chTag("h4")) { + TextGoDown(left1, top1, width1); + IF(rez) TextGoDown(left1, top1 + 10, width1); + b_text = rez; + strcpy(#oldtag, #tag); + return; + } + else + oldtag=NULL; + + if (!chTag("b")) || (!chTag("strong")) || (!chTag("big")) { + b_text = rez; + return; + } + if(!chTag("i")) || (!chTag("em")) || (!chTag("subtitle")) { + i_text = rez; + return; + } + if (!chTag("dt")) + { + li_text = rez; + IF(rez == 0) return; + TextGoDown(left1, top1, width1); + return; + } + if(!chTag("li")) || (!chTag("dt")) //надо сделать вложенные списки + { + li_text = rez; + IF(rez == 0) return; + TextGoDown(left1, top1, width1); + IF(stroka > -1) && (stroka - 2 < lines.visible) DrawBar(li_tab * 5 * 6 + left1 - 5, top1 + 12, 2, 2, 0); + return; + } + if (!chTag("u")) || (!chTag("ins")) u_text = rez; + if (!chTag("s")) || (!chTag("strike")) || (!chTag("del")) s_text = rez; + if (!chTag("ul")) || (!chTag("ol")) IF(!rez) + { + li_text = rez; + li_tab--; + TextGoDown(left1, top1, width1); + } ELSE li_tab++; + if (!chTag("dd")) stolbec += 5; + if (!chTag("blockquote")) blq_text = rez; + if (!chTag("pre")) pre_text = rez; + if (!chTag("hr")) + { + TextGoDown(left1, top1, width1); + TextGoDown(left1, top1 + 10, width1); + IF(strcmp(#parametr, "color=") == 0) hr_color = GetColor(#options); + ELSE hr_color = 0x999999; + IF(stroka > 0) DrawBar(left1, top1 + 14, width1 - 8, 1, hr_color); + } + if (!chTag("img")) + { + Images( left1, top1, width1); + return; + } + if (!chTag("meta")) || (!chTag("?xml")) + { + do{ + if (!strcmp(#parametr, "charset=")) || (!strcmp(#parametr, "content=")) || (!strcmp(#parametr, "encoding=")) + { + strcpy(#options, #options[strrchr(#options, '=')]); //поиск в content= + if (!strcmp(#options,"utf-8")) || (!strcmp(#options,"utf8")) ReadHtml(_UTF); + if (!strcmp(#options, "koi8-r")) || (!strcmp(#options, "koi8-u")) ReadHtml(_KOI); + if (!strcmp(#options, "dos")) || (!strcmp(#options, "cp-866")) ReadHtml(_DOS); + } + } while(GetNextParam()); + return; + } +} + + +void TextGoDown(int left1, top1, width1) +{ + if (!stroka) && (!stolbec) && (!first_line_drawed) + { + DrawBar(WB1.left, WB1.top, WB1.width-15, 15, bg_color); //закрашиваем первую строку + first_line_drawed=1; + } + stroka++; + if (blq_text) stolbec = 8; + ELSE stolbec = 0; + if (li_text) stolbec = li_tab * 5; + IF(stroka >= 0) && (stroka - 2 < lines.visible) && (!anchor) DrawBar(left1 - 5, top1 + 10, width1 + 5, 10, bg_color); +} + + +struct s_image +{ + dword *image; + char path[4096]; +}; +s_image pics[100]; //pics = mem_Alloc( 100*sizeof(s_image) ); +int num_of_pics; + +int GetOrSetPicNum(dword i_path) +{ + int i; + for (i=0; i<num_of_pics; i++) + { + if (!strcmp(#pics[i].path, i_path)) return i; + } + num_of_pics++; + return num_of_pics; +} + +void FreeImgCache() +{ + int i; + for (i=0; i<=num_of_pics; i++) + { + mem_Free(pics[num_of_pics].image); + pics[num_of_pics].path=NULL; + } + num_of_pics=0; +} + + +void Images(int left1, top1, width1) +{ + dword image; + char img_path[4096], alt[4096]; + int w=0, h=0, img_lines_first=0, cur_pic=0; + + if (GetFileInfo(libimg)<>0) return; //если библиотеки нет + do{ + if (!strcmp(#parametr,"src=")) //надо объединить с GetNewUrl() + { + if (downloader_id) strcpy(#img_path, #history_list[history_current-1].Item); + else strcpy(#img_path, BrowserHistory.CurrentUrl()); //достаём адрес текущей страницы + + if (strcmpn(#img_path, "http:", 5)!=0) || (strcmpn(#options, "http:", 5)!=0) + { + img_path[strrchr(#img_path, '/')] = 0x00; //обрезаем её урл до последнего / + strcat(#img_path, #options); + + cur_pic=GetOrSetPicNum(#img_path); + if (!pics[cur_pic].path) + { + pics[cur_pic].image=load_image(#img_path); + strcpy(#pics[cur_pic].path, #img_path); + } + } + } + if (!strcmp(#parametr,"alt=")) + { + strcpy(#alt, "["); + strcat(#alt, #options); + strcat(#alt, "]"); + } + + } while(GetNextParam()); + + if (!pics[cur_pic].image) + { + if (alt) && (link) strcat(#line, #alt); + return; + } + + w=DSWORD[pics[cur_pic].image+4]; + h=DSWORD[pics[cur_pic].image+8]; + if (w>width1) w=width1; + + if (stroka==0) DrawBar(WB1.left, WB1.top, WB1.width-15, 15, bg_color); //закрашиваем первую строку + stroka+=h/10; + if (top1+h<WB1.top) || (top1>WB1.top+WB1.height-10) return; //если ВСЁ изображение ушло ВЕРХ или ВНИЗ + if (top1<WB1.top) //если часть изображения сверху + { + DrawBar(WB1.left, WB1.top, WB1.width-15, 10, bg_color); //закрашиваем первую строку + img_lines_first=WB1.top-top1; + h=h-img_lines_first; + top1=WB1.top; + } + if (top1>WB1.top+WB1.height-h-15) //если часть изображения снизу + { + h=WB1.top+WB1.height-top1-15; + } + if (h<=0) return; + if (anchor) return; + + img_draw stdcall (pics[cur_pic].image,left1-5,top1+10,w, h,0,img_lines_first); + DrawBar(left1+w - 5, top1 + 10, width1-w + 5, h, bg_color); + IF (link) DefineButton(left1 - 5, top1+10, w, h, blink + BT_HIDE, 0xB5BFC9); +} + + +//скролл +void TWebBrowser::DrawScroller() //не оптимальная отрисовка, но зато в одном месте +{ + scroll1.max_area = lines.all; + scroll1.cur_area = lines.visible; + scroll1.position = lines.first; + + scroll1.all_redraw=1; + scroll1.start_x=Form.width-28; //left + width - 15 + scroll1.size_y=WB1.height; + + scrollbar_v_draw(#scroll1); +} diff --git a/programs/cmm/browser/compile.bat b/programs/cmm/browser/compile.bat new file mode 100644 index 0000000000..7f8a5a3696 --- /dev/null +++ b/programs/cmm/browser/compile.bat @@ -0,0 +1,6 @@ +..\C--\c-- HTMLv.c /lst +del HTMLv +rename HTMLv.com HTMLv +rem ..\C--\kpack HTMLv +del warning.txt +pause \ No newline at end of file diff --git a/programs/cmm/browser/img/URLgoto.png b/programs/cmm/browser/img/URLgoto.png new file mode 100644 index 0000000000000000000000000000000000000000..8bd51e71aab45adc1c632c80f7cba74bce6bcc97 GIT binary patch literal 816 zcmV-01JC@4P)<h;3K|Lk000e1NJLTq001Ze000vR0ssI2Z6VlH00006bW%=J00000 z009}HHwOR!0_90WK~#90y_W4uQ&AkpfA?v&?Yd1i@YXaKj`qTILiJ*xnP}t#MQ@^@ z=)pG?TD|OF$R5C`H-*rn7-kVvl9IB4X858|LorN~m~OCg;--7J_ncmw?e6Yw`7pvC z=f%Ch^ZlIfIluF}aH;#RzrZ$zNyn8H>CJkE1%UIl_8gXYJTQ|3IPYH>nGPJV<+J2H z8i{O)UtS941`0;b<*<C6{X=gF`!AtI;oxeV&764ozR&CPheBbV*IR|c6HP}pzi8V~ zJ$blZ`C)w}4FCwI;$deuMKLvXbtf;i>^oSqCc=ZxZk#Ptpqz9%Tuz6pZKysgB}s_L zXaFDx#?aH-Z!nsg&z=%?m#js>Qf#X}eoV{f_w@D?fjj_%5=`X*0AM+~=ybSl4mYS~ zF$Rn=VH0;uw&V5r?PaCkd@D<lxW%lo6lio>#^EgY`urJ3!%9$jVx{-3PYu~>l{_&* z63K)@VY9XPcPPf^GX+}CoW~hCwq%bj6bffAbrQ@pmc4I}G^UqYOqE*3d0xLTJEzkz z982fXw1H&{IL<pW$Mbr%Ey7ALt1<C533+!uH>He4iLj)ru_TEAU=<4IrY5a+J55t@ zj75xDgeS))tU@6XWCZ?4J`uslV$c`8w*O5^mfRa@E+mPPBub6dm8;>E;dgI;PE5sO z(a|sC9nZQJe$7`He-ME@Fh)vH9+|GK6|d641WN;eBq6!yP9JU5Fx0TybN5F3;KxCR zqIO0C<D-GK?@yGii7-}yX>BdLI(t-tm?#mJO*SWznT9G?TD_`VeI4x{cc2=c?y#Rx z*IEIpTwBV!v(BbU4FG7}INW>{06gwMWac@^$XBIO0>IexNYEF(y!S=crQ|O$ablFw zkgBM?aAn}pJ&!w3YfDqAz>B3_8!m{IrIyeJ#sF~WTx+IsGho_A5yFhdq@$9?vG`W` u96_2JUx<_y8K`ak1KDL@O9bAmXZ`|g^#KQ>nhW><0000<MNUMnLSTZ^bbA5- literal 0 HcmV?d00001 diff --git a/programs/cmm/browser/img/URLgoto.txt b/programs/cmm/browser/img/URLgoto.txt new file mode 100644 index 0000000000..0bcea11ab7 --- /dev/null +++ b/programs/cmm/browser/img/URLgoto.txt @@ -0,0 +1,256 @@ +unsigned char URLgoto[2280] = { + 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, + 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, + 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, + 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, + 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, + 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, + 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xD3, + 0xB8, 0xA4, 0xDE, 0xD4, 0xD1, 0xE1, 0xDF, 0xE4, 0xCE, 0xAE, 0x94, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, + 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, + 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, + 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, + 0xF4, 0xCE, 0xAE, 0x94, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, + 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, + 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, + 0xF4, 0xF2, 0xF1, 0xF4, 0xF2, 0xF1, 0xF4, 0xE5, 0xDA, 0xD5, 0xD1, 0xB3, 0x9C, 0xDE, 0xD4, 0xD1, + 0xCE, 0xAE, 0x94, 0xF2, 0xF1, 0xF4, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, + 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, + 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, + 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xDA, 0xD8, 0xDE, 0xCE, 0xAE, 0x94, 0xF2, 0xF1, 0xF4, 0xEA, + 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, + 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, + 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, + 0xE9, 0xED, 0xE5, 0xDA, 0xD5, 0xD3, 0xB8, 0xA4, 0xCE, 0xAE, 0x94, 0xF2, 0xF1, 0xF4, 0xEA, 0xE9, + 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, + 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, + 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xDA, 0xD8, + 0xDE, 0xCE, 0xAE, 0x94, 0xF2, 0xF1, 0xF4, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, + 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, + 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, + 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xDA, 0xD8, 0xDE, 0xCE, 0xAE, 0x94, + 0xCE, 0xAE, 0x94, 0xF2, 0xF1, 0xF4, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, + 0xE9, 0xED, 0xA3, 0x9E, 0x98, 0x8C, 0x86, 0x7D, 0x81, 0x7A, 0x71, 0x8C, 0x86, 0x7D, 0xA3, 0x9E, + 0x98, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, + 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xDA, 0xD8, 0xDE, 0xCE, 0xAE, 0x94, 0xF2, 0xF1, 0xF4, 0xEA, + 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0x32, 0xAD, + 0x76, 0x32, 0xAD, 0x76, 0x32, 0xAD, 0x76, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, + 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, + 0xE9, 0xED, 0xDA, 0xD8, 0xDE, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xF1, 0xF0, 0xF2, 0xE9, 0xE8, + 0xEC, 0xE9, 0xE8, 0xEC, 0xE9, 0xE8, 0xEC, 0x94, 0x8E, 0x87, 0xA6, 0x9F, 0x99, 0xD0, 0xCA, 0xBE, + 0xEC, 0xE2, 0xC8, 0xCD, 0xC4, 0xB0, 0xA3, 0x9A, 0x8F, 0x94, 0x8E, 0x86, 0xE9, 0xE8, 0xEC, 0xE9, + 0xE8, 0xEC, 0xE9, 0xE8, 0xEC, 0xE9, 0xE8, 0xEC, 0xE9, 0xE8, 0xEC, 0xE9, 0xE8, 0xEC, 0xD9, 0xD7, + 0xDD, 0xCE, 0xAE, 0x94, 0xF1, 0xF0, 0xF2, 0xE9, 0xE8, 0xEC, 0xE9, 0xE8, 0xEC, 0xE9, 0xE8, 0xEC, + 0xE9, 0xE8, 0xEC, 0xE9, 0xE8, 0xEC, 0x32, 0xAD, 0x76, 0x6B, 0xD4, 0xA5, 0x6B, 0xD4, 0xA5, 0x32, + 0xAD, 0x76, 0xE9, 0xE8, 0xEC, 0xE9, 0xE8, 0xEC, 0xE9, 0xE8, 0xEC, 0xE9, 0xE8, 0xEC, 0xE9, 0xE8, + 0xEC, 0xE9, 0xE8, 0xEC, 0xE9, 0xE8, 0xEC, 0xE8, 0xE6, 0xEA, 0xD9, 0xD7, 0xDD, 0xCE, 0xAE, 0x94, + 0xCE, 0xAE, 0x94, 0xF0, 0xEF, 0xF1, 0xE9, 0xE7, 0xEB, 0xE9, 0xE7, 0xEB, 0xA3, 0x9E, 0x98, 0xA4, + 0x9D, 0x95, 0xFE, 0xFD, 0xFB, 0xF3, 0xE8, 0xD6, 0xEC, 0xDB, 0xBF, 0xEE, 0xE1, 0xC4, 0xF1, 0xEA, + 0xCE, 0xA1, 0x9A, 0x8F, 0xA3, 0x9E, 0x98, 0xE9, 0xE7, 0xEB, 0xE9, 0xE7, 0xEB, 0xE9, 0xE7, 0xEB, + 0xE9, 0xE7, 0xEB, 0xE9, 0xE7, 0xEB, 0xD9, 0xD6, 0xDD, 0xCE, 0xAE, 0x94, 0xF0, 0xEF, 0xF1, 0xE9, + 0xE7, 0xEB, 0xE9, 0xE7, 0xEB, 0xE9, 0xE7, 0xEB, 0xE9, 0xE7, 0xEB, 0xE9, 0xE7, 0xEB, 0x32, 0xAD, + 0x76, 0x6B, 0xD4, 0xA5, 0x52, 0xCD, 0x96, 0x6B, 0xD4, 0xA5, 0x32, 0xAD, 0x76, 0xE9, 0xE7, 0xEB, + 0xE9, 0xE7, 0xEB, 0xE9, 0xE7, 0xEB, 0xE9, 0xE7, 0xEB, 0xE9, 0xE7, 0xEB, 0xE9, 0xE7, 0xEB, 0xE7, + 0xE5, 0xE9, 0xD9, 0xD6, 0xDD, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xF0, 0xEF, 0xF1, 0xE8, 0xE6, + 0xEA, 0xE8, 0xE6, 0xEA, 0x8C, 0x86, 0x7D, 0xCF, 0xCA, 0xB9, 0xF1, 0xE5, 0xCF, 0xEE, 0xE0, 0xC5, + 0xF2, 0xEE, 0xD3, 0xF4, 0xF2, 0xD8, 0xF4, 0xF3, 0xD8, 0xCF, 0xC9, 0xB6, 0x8C, 0x86, 0x7D, 0xE8, + 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xD8, 0xD6, + 0xDC, 0xCE, 0xAE, 0x94, 0xF0, 0xEF, 0xF1, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, + 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0x32, 0xAD, 0x76, 0x6B, 0xD4, 0xA5, 0x52, 0xCD, 0x96, 0x52, + 0xCD, 0x96, 0x6B, 0xD4, 0xA5, 0x32, 0xAD, 0x76, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, + 0xEA, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xE6, 0xE4, 0xE8, 0xD8, 0xD6, 0xDC, 0xCE, 0xAE, 0x94, + 0xCE, 0xAE, 0x94, 0xED, 0xED, 0xEF, 0xE7, 0xE5, 0xE9, 0xE7, 0xE5, 0xE9, 0x81, 0x7A, 0x71, 0xEC, + 0xE5, 0xCC, 0xEB, 0xD9, 0xBC, 0xF1, 0xED, 0xD1, 0xF7, 0xF7, 0xE4, 0xF9, 0xF9, 0xEB, 0xF8, 0xF8, + 0xE7, 0xF0, 0xEF, 0xD9, 0x81, 0x7A, 0x71, 0xE7, 0xE5, 0xE9, 0xE7, 0xE5, 0xE9, 0xE7, 0xE5, 0xE9, + 0xE7, 0xE5, 0xE9, 0xE7, 0xE5, 0xE9, 0xD7, 0xD5, 0xDB, 0xCE, 0xAE, 0x94, 0xED, 0xED, 0xEF, 0xE7, + 0xE5, 0xE9, 0xE7, 0xE5, 0xE9, 0xE7, 0xE5, 0xE9, 0xE7, 0xE5, 0xE9, 0xE7, 0xE5, 0xE9, 0x32, 0xAD, + 0x76, 0x6B, 0xD4, 0xA5, 0x52, 0xCD, 0x96, 0x52, 0xCD, 0x96, 0x52, 0xCD, 0x96, 0x6B, 0xD4, 0xA5, + 0x32, 0xAD, 0x76, 0xE7, 0xE5, 0xE9, 0xE7, 0xE5, 0xE9, 0xE7, 0xE5, 0xE9, 0xE7, 0xE5, 0xE9, 0xE2, + 0xE1, 0xE5, 0xD7, 0xD5, 0xDB, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xEC, 0xEA, 0xED, 0xE6, 0xE4, + 0xE8, 0xE6, 0xE4, 0xE8, 0x8C, 0x86, 0x7D, 0xCB, 0xC3, 0xB2, 0xEE, 0xE3, 0xC6, 0xF3, 0xF1, 0xD6, + 0xF9, 0xF9, 0xEB, 0xFD, 0xFD, 0xF9, 0xFD, 0xFD, 0xF8, 0xCF, 0xCB, 0xBE, 0x8C, 0x86, 0x7D, 0xE6, + 0xE4, 0xE8, 0xE6, 0xE4, 0xE8, 0xE6, 0xE4, 0xE8, 0xE6, 0xE4, 0xE8, 0xE6, 0xE4, 0xE8, 0xD6, 0xD3, + 0xDA, 0xCE, 0xAE, 0x94, 0xEC, 0xEA, 0xED, 0xE6, 0xE4, 0xE8, 0xE6, 0xE4, 0xE8, 0xE6, 0xE4, 0xE8, + 0xE6, 0xE4, 0xE8, 0xE6, 0xE4, 0xE8, 0x32, 0xAD, 0x76, 0x6B, 0xD4, 0xA5, 0x52, 0xCD, 0x96, 0x52, + 0xCD, 0x96, 0x52, 0xCD, 0x96, 0x52, 0xCD, 0x96, 0x39, 0xC5, 0x86, 0x32, 0xAD, 0x76, 0xE6, 0xE4, + 0xE8, 0xE6, 0xE4, 0xE8, 0xE6, 0xE4, 0xE8, 0xDF, 0xDD, 0xE2, 0xD6, 0xD3, 0xDA, 0xCE, 0xAE, 0x94, + 0xCE, 0xAE, 0x94, 0xEB, 0xEA, 0xED, 0xE2, 0xE1, 0xE5, 0xE2, 0xE1, 0xE5, 0xA3, 0x9E, 0x98, 0xA1, + 0x9A, 0x91, 0xEF, 0xE7, 0xCD, 0xF4, 0xF3, 0xD8, 0xF8, 0xF8, 0xE6, 0xFC, 0xFC, 0xF5, 0xFB, 0xFA, + 0xF9, 0xA2, 0x9C, 0x94, 0xA3, 0x9E, 0x98, 0xE2, 0xE1, 0xE5, 0xE2, 0xE1, 0xE5, 0xE2, 0xE1, 0xE5, + 0xE2, 0xE1, 0xE5, 0xE2, 0xE1, 0xE5, 0xD6, 0xD3, 0xDA, 0xCE, 0xAE, 0x94, 0xEB, 0xEA, 0xED, 0xE2, + 0xE1, 0xE5, 0xE2, 0xE1, 0xE5, 0xE2, 0xE1, 0xE5, 0xE2, 0xE1, 0xE5, 0xE2, 0xE1, 0xE5, 0x32, 0xAD, + 0x76, 0x6B, 0xD4, 0xA5, 0x52, 0xCD, 0x96, 0x52, 0xCD, 0x96, 0x52, 0xCD, 0x96, 0x39, 0xC5, 0x86, + 0x32, 0xAD, 0x76, 0xE2, 0xE1, 0xE5, 0xE2, 0xE1, 0xE5, 0xE2, 0xE1, 0xE5, 0xE2, 0xE1, 0xE5, 0xDF, + 0xDC, 0xE2, 0xD6, 0xD3, 0xDA, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xE9, 0xE9, 0xEC, 0xDF, 0xDD, + 0xE2, 0xDF, 0xDD, 0xE2, 0xDF, 0xDD, 0xE2, 0x94, 0x8F, 0x87, 0xA2, 0x9B, 0x92, 0xCB, 0xC6, 0xB8, + 0xF1, 0xF2, 0xE0, 0xCE, 0xCA, 0xBF, 0xA2, 0x9D, 0x95, 0x83, 0x7F, 0x7A, 0x80, 0xAD, 0xC8, 0xDF, + 0xDD, 0xE2, 0xDF, 0xDD, 0xE2, 0xDF, 0xDD, 0xE2, 0xDF, 0xDD, 0xE2, 0xDF, 0xDD, 0xE2, 0xD4, 0xD2, + 0xD9, 0xCE, 0xAE, 0x94, 0xE9, 0xE9, 0xEC, 0xDF, 0xDD, 0xE2, 0xDF, 0xDD, 0xE2, 0xDF, 0xDD, 0xE2, + 0xDF, 0xDD, 0xE2, 0xDF, 0xDD, 0xE2, 0x32, 0xAD, 0x76, 0x6B, 0xD4, 0xA5, 0x52, 0xCD, 0x96, 0x52, + 0xCD, 0x96, 0x39, 0xC5, 0x86, 0x32, 0xAD, 0x76, 0xDF, 0xDD, 0xE2, 0xDF, 0xDD, 0xE2, 0xDF, 0xDD, + 0xE2, 0xDF, 0xDD, 0xE2, 0xDF, 0xDD, 0xE2, 0xDC, 0xDB, 0xE1, 0xD4, 0xD2, 0xD9, 0xCE, 0xAE, 0x94, + 0xCE, 0xAE, 0x94, 0xE7, 0xE6, 0xE9, 0xDE, 0xDC, 0xE2, 0xDE, 0xDC, 0xE2, 0xDE, 0xDC, 0xE2, 0xDE, + 0xDC, 0xE2, 0xA3, 0x9E, 0x98, 0x8C, 0x86, 0x7D, 0x81, 0x7A, 0x71, 0x8C, 0x86, 0x7D, 0xA3, 0x9E, + 0x98, 0x6F, 0x77, 0x93, 0x6C, 0x77, 0x9A, 0x80, 0xB7, 0xD9, 0xDE, 0xDC, 0xE2, 0xDE, 0xDC, 0xE2, + 0xDE, 0xDC, 0xE2, 0xDE, 0xDC, 0xE2, 0xD3, 0xD1, 0xD7, 0xCE, 0xAE, 0x94, 0xE7, 0xE6, 0xE9, 0xDE, + 0xDC, 0xE2, 0xDE, 0xDC, 0xE2, 0xDE, 0xDC, 0xE2, 0xDE, 0xDC, 0xE2, 0xDE, 0xDC, 0xE2, 0x32, 0xAD, + 0x76, 0x6B, 0xD4, 0xA5, 0x52, 0xCD, 0x96, 0x39, 0xC5, 0x86, 0x32, 0xAD, 0x76, 0xDE, 0xDC, 0xE2, + 0xDE, 0xDC, 0xE2, 0xDE, 0xDC, 0xE2, 0xDE, 0xDC, 0xE2, 0xDE, 0xDC, 0xE2, 0xDE, 0xDC, 0xE2, 0xD9, + 0xD7, 0xDB, 0xD3, 0xD1, 0xD7, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xE7, 0xE6, 0xE9, 0xDC, 0xDB, + 0xE1, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, + 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0x6C, 0x77, 0x9A, 0x6C, + 0x77, 0x9A, 0x80, 0xB7, 0xD9, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0xD3, 0xD1, + 0xD7, 0xCE, 0xAE, 0x94, 0xE7, 0xE6, 0xE9, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, + 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0x32, 0xAD, 0x76, 0x6B, 0xD4, 0xA5, 0x39, 0xC5, 0x86, 0x32, + 0xAD, 0x76, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, + 0xE1, 0xDC, 0xDB, 0xE1, 0xDC, 0xDB, 0xE1, 0xD9, 0xD7, 0xDB, 0xD3, 0xD1, 0xD7, 0xCE, 0xAE, 0x94, + 0xCE, 0xAE, 0x94, 0xE7, 0xE6, 0xE9, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, + 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, + 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0x6C, 0x77, 0x9A, 0x6C, 0x77, 0x9A, 0x80, 0xB7, 0xD9, + 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xD3, 0xD0, 0xD7, 0xCE, 0xAE, 0x94, 0xE7, 0xE6, 0xE9, 0xDA, + 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0x32, 0xAD, + 0x76, 0x32, 0xAD, 0x76, 0x32, 0xAD, 0x76, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, + 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xDA, 0xD9, 0xDF, 0xD8, + 0xD6, 0xDA, 0xD3, 0xD0, 0xD7, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xE7, 0xE6, 0xE9, 0xD9, 0xD8, + 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, + 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, + 0xD8, 0xDD, 0x6C, 0x77, 0x9A, 0x6C, 0x77, 0x9A, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD3, 0xD0, + 0xD7, 0xCE, 0xAE, 0x94, 0xE7, 0xE6, 0xE9, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, + 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, + 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, + 0xDD, 0xD9, 0xD8, 0xDD, 0xD9, 0xD8, 0xDD, 0xD8, 0xD6, 0xDA, 0xD2, 0xCF, 0xD6, 0xCE, 0xAE, 0x94, + 0xCE, 0xAE, 0x94, 0xE7, 0xE6, 0xE9, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, + 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, + 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, + 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD3, 0xD0, 0xD7, 0xCE, 0xAE, 0x94, 0xE7, 0xE6, 0xE9, 0xD8, + 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, + 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, + 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD8, 0xD6, 0xDA, 0xD6, + 0xD4, 0xD8, 0xD8, 0xD2, 0xD5, 0xD3, 0xB8, 0xA4, 0xCE, 0xAE, 0x94, 0xE7, 0xE6, 0xE9, 0xD3, 0xD0, + 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, + 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, + 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD1, 0xCE, + 0xD5, 0xCE, 0xAE, 0x94, 0xE7, 0xE6, 0xE9, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, + 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, + 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, + 0xD7, 0xD3, 0xD0, 0xD7, 0xD3, 0xD0, 0xD7, 0xD8, 0xD2, 0xD5, 0xD0, 0xB8, 0xA7, 0xDE, 0xD4, 0xD1, + 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, + 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, + 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, + 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, + 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, + 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, + 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xCE, 0xAE, 0x94, 0xD2, + 0xBC, 0xAE, 0xDE, 0xD4, 0xD1, 0xE1, 0xDF, 0xE4 +}; + +unsigned char stop_btn[1728] = { + 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, + 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, + 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, + 0xEA, 0xE9, 0xED, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, + 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, + 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xC2, 0xC5, 0xE5, + 0xC2, 0xC5, 0xE5, 0xC2, 0xC5, 0xE5, 0xC2, 0xC5, 0xE5, 0xC2, 0xC5, 0xE5, 0xC2, 0xC5, 0xE5, 0xC2, + 0xC5, 0xE5, 0xC2, 0xC5, 0xE5, 0xC2, 0xC6, 0xE5, 0xE7, 0xE6, 0xED, 0xE8, 0xE7, 0xED, 0xEB, 0xEA, + 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, + 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, + 0xEA, 0xEE, 0xB3, 0xB8, 0xE3, 0x00, 0x19, 0xC1, 0x00, 0x19, 0xC1, 0x00, 0x19, 0xC1, 0x00, 0x19, + 0xC1, 0x00, 0x19, 0xC1, 0x00, 0x19, 0xC1, 0x00, 0x19, 0xC1, 0x00, 0x19, 0xC1, 0x00, 0x19, 0xC1, + 0x8C, 0x95, 0xDB, 0xE3, 0xE3, 0xEC, 0xE7, 0xE6, 0xED, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, + 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEB, 0xEA, 0xEE, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, + 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xB2, 0xB8, 0xE2, 0x00, 0x19, 0xC1, 0x74, 0x85, 0xE7, + 0x74, 0x85, 0xE7, 0x74, 0x85, 0xE7, 0x74, 0x85, 0xE7, 0x74, 0x85, 0xE7, 0x74, 0x85, 0xE7, 0x74, + 0x85, 0xE7, 0x74, 0x85, 0xE7, 0x74, 0x85, 0xE7, 0x00, 0x19, 0xC1, 0x87, 0x92, 0xDA, 0xE1, 0xE1, + 0xEB, 0xE8, 0xE7, 0xEC, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, 0xEA, 0xE9, 0xED, + 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xB1, 0xB5, 0xE0, 0x00, + 0x19, 0xC1, 0x74, 0x85, 0xE7, 0x49, 0x5F, 0xDB, 0x49, 0x5F, 0xDB, 0x4C, 0x65, 0xDD, 0x4C, 0x64, + 0xDD, 0x46, 0x5E, 0xDB, 0x3E, 0x55, 0xDA, 0x34, 0x4D, 0xDA, 0x29, 0x45, 0xD7, 0x2D, 0x47, 0xD8, + 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x86, 0x90, 0xD8, 0xDF, 0xDE, 0xE8, 0xE7, 0xE5, 0xE9, 0xE8, + 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, + 0xEA, 0xB1, 0xB5, 0xE0, 0x00, 0x19, 0xC1, 0x74, 0x85, 0xE7, 0x49, 0x5F, 0xDB, 0x4A, 0x61, 0xDC, + 0x50, 0x64, 0xDC, 0x52, 0x67, 0xDD, 0x4D, 0x64, 0xDC, 0x4B, 0x62, 0xDC, 0x46, 0x5E, 0xDB, 0x3C, + 0x53, 0xD9, 0x30, 0x4A, 0xD8, 0x28, 0x44, 0xD6, 0x29, 0x45, 0xD7, 0x48, 0x5F, 0xDB, 0x00, 0x19, + 0xC1, 0x86, 0x90, 0xD8, 0xE3, 0xE2, 0xE9, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, 0xE8, 0xE6, 0xEA, + 0xE7, 0xE5, 0xE9, 0xE7, 0xE5, 0xE9, 0xB0, 0xB5, 0xDF, 0x00, 0x19, 0xC1, 0x74, 0x85, 0xE7, 0x49, + 0x5F, 0xDB, 0x47, 0x5E, 0xDB, 0x51, 0x65, 0xDD, 0x6C, 0x80, 0xE2, 0x4C, 0x62, 0xDC, 0x47, 0x5F, + 0xDC, 0x48, 0x60, 0xDC, 0x44, 0x5C, 0xDC, 0x3B, 0x55, 0xD9, 0x58, 0x6D, 0xDE, 0x2C, 0x45, 0xD7, + 0x27, 0x43, 0xD2, 0x23, 0x3D, 0xCD, 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x86, 0x8F, 0xD8, 0xE5, + 0xE3, 0xE8, 0xE6, 0xE4, 0xE8, 0xE7, 0xE5, 0xE9, 0xE5, 0xE3, 0xE7, 0xBA, 0xBD, 0xDF, 0x00, 0x19, + 0xC1, 0x74, 0x85, 0xE7, 0x3E, 0x57, 0xDD, 0x49, 0x5F, 0xDB, 0x45, 0x5D, 0xDB, 0x8D, 0x9D, 0xE7, + 0xA8, 0xB6, 0xEF, 0xBC, 0xC9, 0xEE, 0x41, 0x59, 0xDB, 0x45, 0x5D, 0xDB, 0x44, 0x5C, 0xDC, 0x90, + 0xA0, 0xE9, 0xA8, 0xB6, 0xEF, 0x6B, 0x7E, 0xE2, 0x27, 0x41, 0xCF, 0x1A, 0x35, 0xCA, 0x21, 0x3C, + 0xCD, 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x9B, 0xA2, 0xDA, 0xE5, 0xE3, 0xE7, 0xE4, 0xE2, 0xE7, + 0xE2, 0xE1, 0xE5, 0xB8, 0xBC, 0xDD, 0x00, 0x19, 0xC1, 0x74, 0x85, 0xE7, 0x3E, 0x57, 0xDD, 0x46, + 0x5F, 0xDB, 0x67, 0x7B, 0xE1, 0xA8, 0xB6, 0xEF, 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xB6, 0xC6, + 0xE9, 0x43, 0x5B, 0xDC, 0x80, 0x93, 0xE3, 0x91, 0xA1, 0xE8, 0xDE, 0xE7, 0xF5, 0xE1, 0xE8, 0xF9, + 0x5C, 0x70, 0xE0, 0x26, 0x41, 0xD0, 0x17, 0x32, 0xC9, 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x71, + 0x7E, 0xD3, 0xDF, 0xDE, 0xE4, 0xE2, 0xE1, 0xE5, 0xE2, 0xE1, 0xE5, 0xB8, 0xBC, 0xDD, 0x00, 0x19, + 0xC1, 0x74, 0x85, 0xE7, 0x3E, 0x57, 0xDD, 0x43, 0x5B, 0xDC, 0x3E, 0x57, 0xDD, 0xBC, 0xC9, 0xEE, + 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xB4, 0xC5, 0xE6, 0x86, 0x99, 0xE4, 0xDE, + 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xE7, 0xEE, 0xFB, 0x27, 0x43, 0xD5, 0x27, 0x41, 0xD2, 0x22, 0x3B, + 0xCC, 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x71, 0x7E, 0xD3, 0xDA, 0xDA, 0xE3, 0xE2, 0xE1, 0xE5, + 0xE1, 0xE0, 0xE4, 0xB7, 0xBB, 0xDC, 0x00, 0x19, 0xC1, 0x74, 0x85, 0xE7, 0x3E, 0x57, 0xDD, 0x3F, + 0x56, 0xDD, 0x3E, 0x57, 0xDD, 0x3E, 0x57, 0xDA, 0xB6, 0xC6, 0xE9, 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, + 0xF5, 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xDD, 0xE7, 0xF5, 0x2D, 0x46, 0xD8, + 0x28, 0x44, 0xD7, 0x28, 0x43, 0xD2, 0x23, 0x3D, 0xCD, 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x70, + 0x7D, 0xD2, 0xD4, 0xD5, 0xE2, 0xDC, 0xDC, 0xE3, 0xDF, 0xDE, 0xE3, 0xB5, 0xB9, 0xDC, 0x00, 0x19, + 0xC1, 0x74, 0x85, 0xE7, 0x3E, 0x57, 0xDD, 0x3F, 0x58, 0xDB, 0x40, 0x59, 0xDD, 0x3E, 0x57, 0xDC, + 0x3E, 0x57, 0xDA, 0xB4, 0xC5, 0xE6, 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xDE, + 0xE7, 0xF5, 0x34, 0x4D, 0xD7, 0x30, 0x48, 0xD8, 0x29, 0x44, 0xD7, 0x28, 0x43, 0xD4, 0x22, 0x3D, + 0xCC, 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x6F, 0x7C, 0xD2, 0xD2, 0xD3, 0xE1, 0xDA, 0xDA, 0xE2, + 0xDC, 0xDB, 0xE1, 0xB3, 0xB7, 0xDA, 0x00, 0x19, 0xC1, 0x74, 0x85, 0xE7, 0x3E, 0x55, 0xD9, 0x41, + 0x5B, 0xDB, 0x41, 0x5B, 0xDD, 0x3F, 0x58, 0xDB, 0x80, 0x93, 0xE3, 0xA4, 0xB4, 0xE8, 0xDE, 0xE7, + 0xF5, 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xD7, 0xE2, 0xF3, 0x30, 0x49, 0xD8, + 0x28, 0x43, 0xD8, 0x28, 0x43, 0xD4, 0x22, 0x3B, 0xCC, 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x6E, + 0x7B, 0xD1, 0xCF, 0xD0, 0xDF, 0xD7, 0xD7, 0xE0, 0xDC, 0xDB, 0xE1, 0xB3, 0xB7, 0xDA, 0x00, 0x19, + 0xC1, 0x74, 0x85, 0xE7, 0x34, 0x4F, 0xDA, 0x40, 0x57, 0xDA, 0x3E, 0x57, 0xDD, 0x90, 0xA0, 0xE9, + 0x91, 0xA1, 0xE8, 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xDE, + 0xE7, 0xF5, 0xD7, 0xE2, 0xF3, 0xE0, 0xE9, 0xF7, 0x27, 0x43, 0xD8, 0x29, 0x43, 0xD1, 0x21, 0x3B, + 0xCB, 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x6E, 0x7B, 0xD1, 0xCF, 0xD0, 0xDF, 0xD7, 0xD7, 0xE0, + 0xDB, 0xDA, 0xE0, 0xB2, 0xB6, 0xD9, 0x00, 0x19, 0xC1, 0x74, 0x85, 0xE7, 0x2B, 0x45, 0xD8, 0x3A, + 0x52, 0xD8, 0x5E, 0x74, 0xE1, 0xA8, 0xB6, 0xEF, 0xDE, 0xE7, 0xF5, 0xDE, 0xE7, 0xF5, 0xDD, 0xE7, + 0xF5, 0x3A, 0x52, 0xD9, 0xD7, 0xE2, 0xF3, 0xD7, 0xE2, 0xF3, 0xDE, 0xE7, 0xF5, 0xE6, 0xED, 0xFB, + 0x5E, 0x71, 0xE1, 0x28, 0x43, 0xD0, 0x1D, 0x38, 0xCB, 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x6D, + 0x7A, 0xD0, 0xCE, 0xCF, 0xDE, 0xD6, 0xD6, 0xDF, 0xD9, 0xD7, 0xDB, 0xB1, 0xB4, 0xD6, 0x00, 0x19, + 0xC1, 0x74, 0x85, 0xE7, 0x2D, 0x47, 0xD8, 0x2F, 0x49, 0xD8, 0x30, 0x49, 0xD8, 0x73, 0x86, 0xE5, + 0xE1, 0xE8, 0xF9, 0xE7, 0xEE, 0xFB, 0x34, 0x4F, 0xDB, 0x34, 0x4D, 0xDA, 0x34, 0x4D, 0xD9, 0xE0, + 0xE9, 0xF7, 0xE6, 0xED, 0xFB, 0x77, 0x88, 0xE5, 0x27, 0x41, 0xD1, 0x25, 0x3F, 0xCF, 0x24, 0x3D, + 0xCF, 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x6C, 0x79, 0xCE, 0xCD, 0xCD, 0xD9, 0xD5, 0xD4, 0xDA, + 0xD9, 0xD7, 0xDB, 0xD6, 0xD4, 0xDA, 0x86, 0x8F, 0xD1, 0x00, 0x19, 0xC1, 0x48, 0x5F, 0xDB, 0x2B, + 0x45, 0xD7, 0x28, 0x44, 0xD7, 0x2C, 0x46, 0xD8, 0x63, 0x78, 0xE2, 0x2D, 0x47, 0xD9, 0x31, 0x4B, + 0xD9, 0x31, 0x4B, 0xD8, 0x30, 0x4A, 0xD8, 0x2D, 0x47, 0xD8, 0x62, 0x78, 0xE2, 0x27, 0x41, 0xD1, + 0x25, 0x3F, 0xCF, 0x25, 0x3E, 0xD0, 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x6C, 0x79, 0xCE, 0xB1, + 0xB4, 0xD6, 0xCF, 0xCE, 0xD9, 0xD6, 0xD4, 0xDA, 0xD9, 0xD7, 0xDB, 0xD7, 0xD5, 0xDA, 0xD3, 0xD1, + 0xDA, 0x7E, 0x88, 0xD0, 0x00, 0x19, 0xC1, 0x48, 0x5F, 0xDB, 0x26, 0x43, 0xD6, 0x27, 0x43, 0xD2, + 0x2C, 0x46, 0xD7, 0x2D, 0x47, 0xD7, 0x30, 0x49, 0xD8, 0x31, 0x4B, 0xD8, 0x2E, 0x48, 0xD8, 0x2C, + 0x46, 0xD6, 0x28, 0x43, 0xD4, 0x26, 0x43, 0xD0, 0x25, 0x3F, 0xD1, 0x48, 0x5F, 0xDB, 0x00, 0x19, + 0xC1, 0x6C, 0x78, 0xCD, 0xAD, 0xB1, 0xD6, 0xC4, 0xC5, 0xD8, 0xD3, 0xD1, 0xDA, 0xD7, 0xD5, 0xDA, + 0xD9, 0xD7, 0xDB, 0xD8, 0xD6, 0xDA, 0xD5, 0xD4, 0xDA, 0xD1, 0xD0, 0xDA, 0x7D, 0x87, 0xD0, 0x00, + 0x19, 0xC1, 0x48, 0x5F, 0xDB, 0x28, 0x44, 0xD7, 0x21, 0x3A, 0xCD, 0x25, 0x40, 0xCD, 0x27, 0x43, + 0xD2, 0x28, 0x43, 0xD2, 0x27, 0x43, 0xD2, 0x26, 0x41, 0xD0, 0x25, 0x3E, 0xCE, 0x1A, 0x35, 0xCA, + 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x6C, 0x78, 0xCD, 0xAC, 0xB0, 0xD6, 0xC2, 0xC3, 0xD8, 0xD1, + 0xD0, 0xDA, 0xD5, 0xD4, 0xDA, 0xD8, 0xD6, 0xDA, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD8, 0xD6, + 0xDA, 0xD5, 0xD4, 0xDA, 0xD1, 0xD0, 0xDA, 0x7D, 0x87, 0xD0, 0x00, 0x19, 0xC1, 0x48, 0x5F, 0xDB, + 0x48, 0x5F, 0xDB, 0x48, 0x5F, 0xDB, 0x48, 0x5F, 0xDB, 0x48, 0x5F, 0xDB, 0x48, 0x5F, 0xDB, 0x48, + 0x5F, 0xDB, 0x48, 0x5F, 0xDB, 0x48, 0x5F, 0xDB, 0x00, 0x19, 0xC1, 0x6C, 0x78, 0xCD, 0xAC, 0xB0, + 0xD6, 0xC2, 0xC3, 0xD8, 0xD1, 0xD0, 0xDA, 0xD5, 0xD4, 0xDA, 0xD8, 0xD6, 0xDA, 0xD9, 0xD7, 0xDB, + 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD8, 0xD6, 0xDA, 0xD5, 0xD4, 0xDA, 0xD1, + 0xD0, 0xDA, 0x7D, 0x87, 0xD0, 0x00, 0x19, 0xC1, 0x00, 0x1A, 0xC1, 0x00, 0x1A, 0xC1, 0x00, 0x1A, + 0xC1, 0x00, 0x1A, 0xC1, 0x00, 0x1A, 0xC1, 0x00, 0x1A, 0xC1, 0x00, 0x1A, 0xC1, 0x00, 0x1A, 0xC1, + 0x6C, 0x79, 0xCE, 0xAC, 0xB0, 0xD6, 0xC2, 0xC3, 0xD8, 0xD1, 0xD0, 0xDA, 0xD5, 0xD4, 0xDA, 0xD8, + 0xD6, 0xDA, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, + 0xDB, 0xD9, 0xD7, 0xDB, 0xD8, 0xD6, 0xDA, 0xD5, 0xD4, 0xDA, 0xD1, 0xD0, 0xDA, 0x87, 0x8F, 0xD1, + 0x78, 0x83, 0xCF, 0x77, 0x82, 0xCF, 0x77, 0x82, 0xCF, 0x77, 0x82, 0xCF, 0x77, 0x82, 0xCF, 0x77, + 0x82, 0xCF, 0x77, 0x82, 0xCF, 0x77, 0x82, 0xCF, 0xAF, 0xB2, 0xD6, 0xC3, 0xC4, 0xD8, 0xD1, 0xD0, + 0xDA, 0xD5, 0xD4, 0xDA, 0xD8, 0xD6, 0xDA, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, + 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD8, + 0xD6, 0xDA, 0xD5, 0xD4, 0xDA, 0xD2, 0xD1, 0xDA, 0xC6, 0xC6, 0xD8, 0xC3, 0xC4, 0xD8, 0xC2, 0xC3, + 0xD8, 0xC2, 0xC3, 0xD8, 0xC2, 0xC3, 0xD8, 0xC2, 0xC3, 0xD8, 0xC2, 0xC3, 0xD8, 0xC3, 0xC4, 0xD8, + 0xC6, 0xC6, 0xD8, 0xD2, 0xD1, 0xDA, 0xD5, 0xD4, 0xDA, 0xD8, 0xD6, 0xDA, 0xD9, 0xD7, 0xDB, 0xD9, + 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, + 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD8, 0xD6, 0xDA, + 0xD6, 0xD4, 0xDA, 0xD3, 0xD2, 0xDA, 0xD3, 0xD1, 0xDA, 0xD2, 0xD1, 0xDA, 0xCB, 0xCB, 0xD9, 0xD2, + 0xD1, 0xDA, 0xD2, 0xD1, 0xDA, 0xD3, 0xD1, 0xDA, 0xD3, 0xD2, 0xDA, 0xD6, 0xD4, 0xDA, 0xD8, 0xD6, + 0xDA, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB, 0xD9, 0xD7, 0xDB +}; \ No newline at end of file diff --git a/programs/cmm/browser/img/toolbar_icons.c b/programs/cmm/browser/img/toolbar_icons.c new file mode 100644 index 0000000000..3e1fe284bd --- /dev/null +++ b/programs/cmm/browser/img/toolbar_icons.c @@ -0,0 +1,529 @@ +dword toolbar_pal[249]= {0x00E4DFE1,0x00EDE9EA,0x00C2BEC0,0x00D6DFEB,0x00E9E6E8,0x00D4B9E8,0x00C29ADA,0x00B688D7,0x005FA8ED,0x0064ABED,0x00D6D8E2,0x008A9DC3,0x00D5D7E1,0x00DCC5EC,0x00B179D7,0x00C5A4DA,0x00C9A9E2,0x00C097E1,0x00A96AD4,0x00CEB1E5,0x005BA5EB,0x007DC1F2,0x00A4DFF8,0x0060A8EB,0x00CAD9EA,0x00C4C8D8,0x005376B5,0x006482BC,0x00BBC2D4,0x00E8E4E6,0x00E5D5F2,0x00ECEBF1,0x00E1CCF0,0x00DFD0E2,0x00DDE1E9,0x006CACE9,0x0092D5F4,0x0099D6F5,0x0089CDF2,0x009ADCF6,0x005EA5E9,0x00549CE2,0x008DA8D4,0x00E1DDE0,0x00A9B2C9,0x00E4E1E2,0x00E0CDEE,0x00D1B8DC,0x0064ABE5,0x008BD3F4,0x00A9EDFC,0x007FC4F0,0x0075BCEC,0x005CA0E3,0x00C6D5E7,0x0080CBF2,0x00B3BCD2,0x005A7BB9,0x009BB2DC,0x00CFE0F2,0x00A1ADC8,0x00BB95D6,0x00D6DBE4,0x0064A4E3,0x0079C4EE,0x00839CBD,0x008D9DB1,0x0091DAF6,0x00A6B1C8,0x00A5BBE1,0x00C4D6ED,0x00D3E2F3,0x0092A2C4,0x00E1D4E3,0x009FE6F9,0x0085A2C2,0x00F0EFF0,0x0099A8BC,0x005298DC,0x004B982C,0x00ACC2E4,0x00CDDEF1,0x00BCD1EB,0x00DCDDE2,0x00909FC0,0x00AC78D4,0x005A9BDC,0x0097E0F7,0x006CB7E9,0x00F7F7F8,0x00F8F8F9,0x0096A6BA,0x004690D7,0x0083D0F3,0x004B93DA,0x00DCD9DC,0x00AEE594,0x00A2ADC6,0x00A2B8DF,0x00B9CEE9,0x00B2C8E7,0x00AEB8CE,0x00D4D4DA,0x00CCB3D5,0x00D9CCDB,0x0073C1ED,0x0065B3E7,0x00F5F4F4,0x00EDECEE,0x009AAAC1,0x007DCCF2,0x004590D8,0x00D1CED1,0x00C2C2C8,0x00BFC0C6,0x007BD34A,0x00607EB9,0x00B6CBE8,0x00B0C5E6,0x00CDD2DC,0x00E3E1DF,0x00909EBF,0x00DDC3F0,0x00D2D7E0,0x005193D5,0x006BBBEA,0x005FB0E5,0x00EAEAEC,0x00408AD3,0x0079C7F0,0x00BBCADD,0x008A94A7,0x00737D90,0x00428F25,0x00A4DD8E,0x0073CC45,0x0067C833,0x00CED1D6,0x00A9BEE3,0x00D8C5DD,0x004C8FD2,0x005BAAE2,0x00DAD6D8,0x00C3C0C3,0x003B84CE,0x003C86D0,0x00BDBCC2,0x00519D31,0x00B4EB9A,0x0083DA51,0x0073D33C,0x00B9BECE,0x00CCCCD4,0x00E1DBDC,0x00E3D2EF,0x00488BCF,0x0056A5E0,0x006582A4,0x00E9E8EA,0x00B9B8B8,0x00D9EDED,0x00D8F6F6,0x00B3B2B2,0x008696AD,0x003782CD,0x006FC0ED,0x00B8C7DB,0x00E5E8EE,0x0080D74F,0x005578B7,0x00A1B6DE,0x008597BF,0x00D5C4D8,0x004688CC,0x0050A2DE,0x007895B6,0x00AEADAE,0x00317BC7,0x00337DC9,0x006B8AC2,0x0099AFDA,0x00738BBB,0x00C6C8D2,0x00D6CBD8,0x009AB5D4,0x002877C7,0x004D9FDC,0x00D2D0D5,0x00798AA0,0x0073A0CF,0x00E3E5EC,0x008096C1,0x006887BE,0x00BEC1CD,0x0096B1D0,0x009D9CA2,0x00ECEAEC,0x00EDAC35,0x00EBA525,0x00B6C3D6,0x007AA3CF,0x00B4B5BB,0x0096ADD9,0x00D2C4D6,0x00D9D3D4,0x00AF85D2,0x00A3A2A7,0x00F8EE27,0x00E89D1A,0x009A989F,0x00CCCFDD,0x008499C3,0x00C8C3C5,0x007890BF,0x00A09FA5,0x00E6E3E4,0x00E39C28,0x00F8EA2F,0x00F5E22C,0x00E3961A,0x0098969C,0x007591C6,0x00DB9326,0x00F7DE38,0x00F5D435,0x00F7E13A,0x00DC8E19,0x00939298,0x007996C9,0x00B4BBCB,0x007A94C3,0x00D58A24,0x00F4D545,0x00F4C741,0x00BD6516,0x00D68517,0x00929097,0x008DA1C6,0x00C4C5D1,0x00CDCBCE,0x00CE8223,0x00F5CA56,0x00F3C943,0x00CF7D17,0x008F8D94,0x00A8ABB5,0x0089888F,0x009BA9C9,0x0084838A}; + +unsigned char toolbar[8400] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x05, 0x06, 0x07, 0x05, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, + 0x08, 0x09, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0A, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0B, + 0x0C, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x0D, 0x0E, 0x07, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x14, 0x15, 0x16, 0x17, 0x18, 0x01, 0x01, 0x03, 0x03, + 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x19, 0x1A, + 0x1B, 0x0C, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x1B, 0x1A, 0x1C, 0x1D, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x11, 0x0E, 0x10, 0x1E, 0x1F, 0x1F, 0x1F, 0x20, 0x10, + 0x07, 0x21, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x22, 0x23, 0x24, + 0x25, 0x26, 0x27, 0x28, 0x18, 0x01, 0x17, 0x17, 0x17, 0x29, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x1C, 0x1A, 0x2A, 0x1B, 0x1C, 0x2B, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x1B, + 0x2A, 0x1A, 0x2C, 0x2D, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x07, + 0x05, 0x1E, 0x1E, 0x1E, 0x2E, 0x05, 0x10, 0x13, 0x13, 0x07, 0x2F, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x03, 0x30, 0x31, 0x32, 0x33, 0x34, 0x24, 0x27, 0x35, 0x36, 0x17, 0x32, + 0x37, 0x29, 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x38, 0x39, 0x3A, 0x3B, + 0x1B, 0x38, 0x0A, 0x1D, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x1D, 0x1B, 0x3B, 0x3A, 0x39, 0x3C, 0x2D, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x10, 0x0E, 0x13, 0x2E, 0x1E, 0x2E, 0x0F, 0x3D, 0x3D, 0x3D, 0x0F, + 0x06, 0x07, 0x0E, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x3E, 0x3F, 0x26, 0x32, 0x40, + 0x41, 0x42, 0x29, 0x24, 0x43, 0x29, 0x17, 0x32, 0x37, 0x29, 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1D, 0x1D, 0x1D, 0x1D, + 0x1D, 0x1D, 0x1D, 0x44, 0x39, 0x45, 0x46, 0x47, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, + 0x1B, 0x1B, 0x1B, 0x2B, 0x2D, 0x1D, 0x1D, 0x1D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x1D, 0x1D, 0x1D, 0x1D, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, + 0x47, 0x46, 0x45, 0x39, 0x48, 0x2B, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x21, 0x12, 0x0F, 0x0D, + 0x1E, 0x2E, 0x3D, 0x07, 0x2F, 0x21, 0x49, 0x2B, 0x1D, 0x1D, 0x2B, 0x21, 0x1D, 0x1D, 0x1D, 0x1D, + 0x1D, 0x1D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x3E, 0x35, 0x37, 0x4A, 0x34, 0x4B, 0x1D, 0x4C, 0x4D, 0x4E, 0x31, 0x31, 0x4E, 0x32, + 0x37, 0x29, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, + 0x1D, 0x1D, 0x1D, 0x4F, 0x4F, 0x4F, 0x4F, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x3C, 0x39, 0x50, 0x46, 0x46, 0x51, + 0x47, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x52, 0x1B, 0x1C, 0x53, 0x1D, 0x1D, 0x1D, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1D, 0x1D, 0x1D, 0x1D, 0x1B, 0x52, 0x3B, + 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x47, 0x51, 0x46, 0x46, 0x50, 0x39, 0x54, 0x53, 0x1D, + 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1D, 0x1D, + 0x1D, 0x2F, 0x21, 0x2B, 0x12, 0x07, 0x20, 0x20, 0x20, 0x3D, 0x55, 0x2F, 0x21, 0x1D, 0x1D, 0x1D, + 0x1D, 0x1D, 0x1D, 0x07, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x3E, 0x56, 0x40, 0x57, 0x58, 0x4B, 0x2B, + 0x59, 0x5A, 0x4C, 0x5B, 0x5C, 0x5D, 0x5D, 0x5E, 0x37, 0x29, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1D, 0x1D, 0x1D, 0x1D, 0x5F, 0x5F, 0x5F, 0x5F, + 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x4F, 0x60, 0x60, 0x4F, 0x5F, + 0x2B, 0x1D, 0x1D, 0x1D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2D, 0x2D, 0x2D, 0x2D, + 0x2D, 0x61, 0x39, 0x62, 0x46, 0x52, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, + 0x63, 0x64, 0x1B, 0x65, 0x66, 0x2D, 0x2D, 0x2D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x2D, 0x2D, 0x2D, 0x2D, 0x1B, 0x64, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, + 0x63, 0x63, 0x52, 0x46, 0x62, 0x39, 0x54, 0x5F, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2D, 0x2D, 0x2D, 0x0E, 0x07, 0x10, 0x12, 0x05, 0x1E, 0x05, + 0x13, 0x55, 0x67, 0x68, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2F, 0x0E, 0x07, 0x12, 0x2D, 0x2D, 0x2D, + 0x2D, 0x2D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, + 0x0C, 0x4E, 0x69, 0x43, 0x6A, 0x4B, 0x2B, 0x6B, 0x5A, 0x5A, 0x5A, 0x6C, 0x6D, 0x5C, 0x6E, 0x37, + 0x6F, 0x29, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x2D, 0x2D, 0x2D, 0x70, 0x71, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, + 0x72, 0x4F, 0x4F, 0x4F, 0x60, 0x73, 0x4F, 0x4F, 0x4F, 0x2D, 0x2D, 0x2D, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x2D, 0x2D, 0x2D, 0x2D, 0x61, 0x74, 0x45, 0x63, 0x75, 0x64, 0x75, 0x75, + 0x75, 0x63, 0x75, 0x75, 0x63, 0x63, 0x63, 0x63, 0x76, 0x75, 0x1B, 0x2C, 0x77, 0x2D, 0x2D, 0x2D, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2D, 0x2D, 0x2D, 0x78, 0x1B, 0x75, 0x76, + 0x63, 0x63, 0x63, 0x63, 0x75, 0x75, 0x63, 0x75, 0x75, 0x75, 0x75, 0x75, 0x63, 0x45, 0x74, 0x79, + 0x5F, 0x2D, 0x2D, 0x2D, 0x2D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2D, 0x2D, + 0x67, 0x12, 0x3D, 0x0E, 0x0F, 0x1E, 0x7A, 0x05, 0x10, 0x0E, 0x68, 0x2D, 0x2D, 0x2D, 0x2D, 0x2F, + 0x0E, 0x07, 0x06, 0x05, 0x0E, 0x10, 0x2D, 0x2D, 0x2D, 0x2D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x2D, 0x2D, 0x2D, 0x2D, 0x7B, 0x7C, 0x7D, 0x31, 0x7E, 0x4B, 0x5F, 0x6B, 0x59, + 0x5A, 0x59, 0x59, 0x6B, 0x7F, 0x5B, 0x80, 0x81, 0x81, 0x80, 0x82, 0x2D, 0x2D, 0x2D, 0x2D, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2D, 0x2D, 0x2D, 0x72, 0x83, 0x84, 0x84, 0x84, + 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x85, 0x86, 0x86, 0x87, 0x87, 0x87, 0x88, + 0x4F, 0x2D, 0x2D, 0x2D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2D, 0x2D, 0x2D, 0x61, + 0x1B, 0x45, 0x63, 0x76, 0x76, 0x76, 0x64, 0x64, 0x64, 0x64, 0x76, 0x64, 0x64, 0x75, 0x75, 0x75, + 0x76, 0x75, 0x1B, 0x2C, 0x89, 0x2D, 0x2D, 0x2D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x2D, 0x2D, 0x2D, 0x2B, 0x1B, 0x75, 0x76, 0x75, 0x75, 0x75, 0x75, 0x64, 0x76, 0x64, 0x64, + 0x64, 0x64, 0x76, 0x76, 0x76, 0x63, 0x8A, 0x1B, 0x79, 0x5F, 0x2D, 0x2D, 0x2D, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2D, 0x2D, 0x2F, 0x07, 0x0D, 0x0D, 0x1E, 0x20, 0x7A, 0x0D, + 0x11, 0x07, 0x8B, 0x2D, 0x2D, 0x8B, 0x0E, 0x07, 0x0F, 0x0D, 0x20, 0x1E, 0x11, 0x55, 0x78, 0x2D, + 0x2D, 0x2D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x7B, 0x8C, + 0x58, 0x5D, 0x8D, 0x41, 0x8E, 0x6B, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x4C, 0x04, 0x42, 0x90, + 0x69, 0x69, 0x91, 0x82, 0x2D, 0x2D, 0x2D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x2D, 0x2D, 0x2D, 0x92, 0x84, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, + 0x59, 0x93, 0x94, 0x95, 0x95, 0x95, 0x96, 0x88, 0x4F, 0x2D, 0x2D, 0x2D, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x2B, 0x2B, 0x97, 0x1A, 0x50, 0x63, 0x45, 0x50, 0x50, 0x50, 0x50, 0x50, + 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x76, 0x45, 0x75, 0x1B, 0x2C, 0x98, 0x2B, 0x2B, 0x2B, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2B, 0x2B, 0x2B, 0x99, 0x1B, 0x75, 0x45, + 0x76, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x45, 0x63, 0x50, + 0x1A, 0x3C, 0x5F, 0x2B, 0x2B, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2B, 0x2B, + 0x5F, 0x0E, 0x11, 0x0D, 0x9A, 0x0D, 0x05, 0x0D, 0x07, 0x0E, 0x07, 0x2B, 0x67, 0x0E, 0x3D, 0x05, + 0x0D, 0x0D, 0x0D, 0x9A, 0x0D, 0x0E, 0x0F, 0x2B, 0x2B, 0x2B, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x2B, 0x2B, 0x77, 0x9B, 0x6A, 0x5D, 0x9C, 0x9D, 0x8E, 0x9E, 0x6B, 0x9F, 0x6B, + 0x89, 0xA0, 0xA1, 0xA2, 0x7F, 0x9E, 0x2D, 0xA3, 0xA4, 0xA5, 0xA5, 0xA4, 0xA6, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2B, 0x2B, 0x2B, 0x92, 0x84, 0x59, 0xA7, 0xA7, + 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0x93, 0x93, 0x93, 0xA8, 0x96, 0x93, 0x85, + 0x4F, 0x2B, 0x2B, 0x2B, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x99, 0x99, 0x61, 0xA9, + 0x75, 0x76, 0x62, 0x3A, 0x3A, 0x62, 0x8A, 0x8A, 0xAA, 0x45, 0x3A, 0x62, 0x45, 0x45, 0x45, 0x45, + 0x45, 0x63, 0x1B, 0x44, 0x98, 0x99, 0x99, 0x99, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x99, 0x99, 0x99, 0x5F, 0x1B, 0x63, 0x45, 0x45, 0x8A, 0x45, 0x45, 0x62, 0x3A, 0x45, 0xAA, + 0x8A, 0x8A, 0x62, 0x3A, 0x3A, 0x62, 0x76, 0x75, 0xA9, 0xAB, 0x98, 0x5F, 0x99, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x99, 0x99, 0x99, 0x67, 0x55, 0x05, 0x2E, 0x05, 0x05, 0x05, + 0x10, 0x0E, 0x12, 0x06, 0x99, 0x3D, 0x07, 0x11, 0x0D, 0x0D, 0x2E, 0x9A, 0x0D, 0x11, 0x55, 0xAC, + 0x99, 0x99, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x99, 0x99, 0xAD, 0x7E, 0x6E, + 0xAE, 0xAF, 0x8E, 0x04, 0x4C, 0x59, 0x9F, 0xA2, 0xA2, 0xA2, 0xA2, 0xB0, 0x2D, 0x2D, 0x1D, 0x2B, + 0xA3, 0xB1, 0x7D, 0x7D, 0xB2, 0x99, 0x99, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x99, 0x99, 0x99, 0x92, 0x84, 0x59, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, + 0xA7, 0xA7, 0xA7, 0x93, 0x96, 0x96, 0x93, 0x84, 0x92, 0x99, 0x99, 0x99, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x99, 0x99, 0x99, 0xAB, 0xB3, 0x76, 0x76, 0x45, 0xB4, 0x45, 0x8A, 0x45, + 0x3A, 0xAA, 0x3A, 0x62, 0xAA, 0x3A, 0x3A, 0xAA, 0x62, 0x63, 0x1B, 0x44, 0x98, 0x99, 0x99, 0x99, + 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x99, 0x99, 0x99, 0x5F, 0x1B, 0x63, 0x62, + 0xAA, 0x3A, 0x3A, 0xAA, 0x62, 0x3A, 0xAA, 0x3A, 0x45, 0x8A, 0x45, 0xB4, 0x45, 0x76, 0x76, 0xB3, + 0xB5, 0x65, 0xB6, 0x5F, 0x99, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x99, 0x99, + 0x99, 0x99, 0x0E, 0x07, 0x20, 0x0D, 0x13, 0x07, 0x55, 0x12, 0x0F, 0xB7, 0x99, 0x99, 0x07, 0x10, + 0x2E, 0x7A, 0x20, 0x1E, 0x0D, 0x0D, 0x07, 0x0F, 0x99, 0x99, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x99, 0x99, 0xB8, 0xB9, 0xBA, 0x9D, 0xBB, 0x2D, 0x4C, 0x6B, 0x4C, 0x4C, 0x4C, + 0x4C, 0x7F, 0x2D, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2D, 0xBC, 0xB1, 0xAE, 0xBD, 0x99, 0x99, 0x8F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x99, 0x99, 0x99, 0x92, 0x84, 0x59, 0xBE, 0xBE, + 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0x93, 0x93, 0x93, 0x93, 0x84, + 0x92, 0x99, 0x99, 0x99, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x99, 0x99, 0x99, 0x8E, + 0xBF, 0xC0, 0x8A, 0x76, 0x45, 0x50, 0x76, 0x50, 0xAA, 0x62, 0xAA, 0x45, 0x45, 0xAA, 0x3A, 0xB4, + 0xAA, 0x52, 0x1B, 0x44, 0x98, 0x99, 0x99, 0x99, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x99, 0x99, 0x99, 0x5F, 0x1B, 0x52, 0xAA, 0xB4, 0x3A, 0xAA, 0x45, 0x45, 0xAA, 0x62, 0xAA, + 0x50, 0x76, 0x50, 0x45, 0x76, 0x8A, 0xC0, 0xB5, 0x44, 0xC1, 0x66, 0x99, 0x99, 0x8F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x99, 0x99, 0x99, 0x99, 0x2F, 0x0E, 0x13, 0x07, 0x55, 0x12, + 0x06, 0xAC, 0xAC, 0x99, 0x99, 0x99, 0x07, 0x13, 0x0D, 0x7A, 0x1E, 0x3D, 0x0E, 0x07, 0x12, 0x06, + 0x99, 0x99, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x99, 0x99, 0x99, 0xC2, 0xC2, + 0xC3, 0xC4, 0x6C, 0x6B, 0x4C, 0x4C, 0xC5, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x5F, 0x5F, 0x5F, 0x5F, + 0x04, 0xC3, 0xC7, 0xC8, 0x99, 0x99, 0x99, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x99, 0x99, 0x99, 0xC9, 0x84, 0x59, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x59, 0x84, 0xC9, 0x99, 0x99, 0x99, 0x8F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0xBB, 0xBF, 0xB3, 0x8A, 0x76, 0x50, 0x64, 0x76, + 0x8A, 0xAA, 0x3A, 0x45, 0x8A, 0x45, 0xAA, 0xCA, 0xCA, 0x52, 0x1B, 0x61, 0xB6, 0x8E, 0x8E, 0x99, + 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x1B, 0x52, 0xCA, + 0xCA, 0xAA, 0x45, 0x8A, 0x45, 0x3A, 0xAA, 0x8A, 0x76, 0x64, 0x50, 0x76, 0x8A, 0xB3, 0xB5, 0x61, + 0x97, 0xBB, 0x8E, 0x8E, 0x99, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x12, 0x55, 0x12, 0x3D, 0x67, 0xCB, 0xCC, 0x8E, 0x8E, 0x8E, 0xCB, 0x07, 0x05, + 0x0D, 0x9A, 0x13, 0x55, 0x3D, 0xCD, 0x0E, 0x67, 0x5F, 0x99, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x8E, 0x99, 0x99, 0x99, 0xCC, 0xCE, 0x6B, 0x4C, 0x6C, 0x6C, 0xC4, 0xC6, 0xCF, + 0xCF, 0xCF, 0xCF, 0xD0, 0x66, 0x66, 0x66, 0x66, 0x1D, 0xD1, 0x99, 0x99, 0x99, 0x99, 0x99, 0x8F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0xC9, 0x84, 0x59, 0xD2, 0xD2, + 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0x59, 0x84, + 0xC9, 0x8E, 0x8E, 0x99, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0xBB, 0xD3, 0xB3, 0x45, 0x76, 0x76, 0x63, 0x63, 0x63, 0x75, 0x75, 0x75, 0x64, 0x64, 0x76, + 0x76, 0x50, 0x1B, 0x61, 0xB6, 0x8E, 0x8E, 0x8E, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x1B, 0x50, 0x76, 0x76, 0x64, 0x64, 0x75, 0x75, 0x75, 0x63, 0x63, + 0x63, 0x76, 0x76, 0x45, 0xB3, 0xD5, 0x61, 0x97, 0xBB, 0x8E, 0x8E, 0x8E, 0x8E, 0xD4, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x55, 0x67, 0xCB, 0xCC, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x07, 0x06, 0x9A, 0x20, 0x0D, 0x3D, 0x55, 0x67, 0x67, 0x06, 0xB7, + 0x8E, 0x8E, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0xBB, + 0xD6, 0x4C, 0x2D, 0x2D, 0xD7, 0x1D, 0xD8, 0xD9, 0xDA, 0xDA, 0xD9, 0xDB, 0xBB, 0xBB, 0xBB, 0xBB, + 0x2D, 0xDC, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x8E, 0x8E, 0x8E, 0xC9, 0x84, 0x1F, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, + 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1F, 0x84, 0xC9, 0x8E, 0x8E, 0x8E, 0xD4, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xBB, 0x0B, 0xDD, 0xAA, 0x76, 0x64, + 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x44, 0xB6, 0x8E, 0x8E, 0x8E, + 0xD4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x1B, 0x1B, 0x1B, + 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x64, 0x76, 0xAA, 0xDD, 0xD5, 0x61, 0x97, 0xBB, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xCC, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xB7, 0x3D, 0x0F, 0x1E, 0x1E, + 0x0D, 0x0F, 0xCD, 0x0F, 0xCB, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0xBB, 0xC3, 0xC4, 0x2B, 0x2B, 0x2B, 0x2B, 0xDE, 0xDF, + 0xE0, 0xE0, 0xE1, 0xE2, 0xBB, 0xBB, 0xBB, 0xBB, 0x2B, 0xE3, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xD4, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0xC9, 0x84, 0xA7, 0x19, 0x19, + 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0xA7, 0x84, + 0xC9, 0x8E, 0x8E, 0x8E, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0xBB, 0x0B, 0xE4, 0x3A, 0x76, 0x1B, 0x6D, 0x61, 0x44, 0x2C, 0x2C, 0x2C, 0x2C, + 0x2C, 0x2C, 0x2C, 0x65, 0xBB, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0xBB, 0xE5, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x44, 0x1B, + 0x76, 0x3A, 0xE4, 0xE6, 0x61, 0x97, 0xBB, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x07, 0x3D, 0x0F, + 0x67, 0x0F, 0x3D, 0x06, 0x10, 0x1E, 0x1E, 0x0D, 0x10, 0xCD, 0x3D, 0xCB, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0xBB, + 0xD1, 0x9E, 0x5F, 0x5F, 0x5F, 0x5F, 0xE7, 0xE8, 0xE9, 0xE9, 0xEA, 0xEB, 0xBB, 0xBB, 0xBB, 0xBB, + 0x5F, 0xEC, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x8E, 0x8E, 0x8E, 0xC9, 0x84, 0xA7, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, + 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0xA7, 0x84, 0xC9, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xBB, 0xED, 0xE4, 0xB4, + 0x1B, 0x61, 0xEE, 0xB6, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x89, 0xBB, 0x8E, 0x8E, 0x8E, 0x8E, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xBB, 0x89, + 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x1B, 0xB4, 0xE4, 0xBF, 0x61, 0x97, 0xBB, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x06, 0x07, 0x06, 0x0F, 0x0F, 0x05, 0x0D, 0x9A, 0x1E, 0x2E, 0x13, + 0x07, 0xCD, 0xCB, 0x68, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0xEF, 0xDC, 0x1D, 0x66, 0x66, 0x66, 0x66, 0xF0, 0xF1, + 0xF2, 0xF2, 0xF1, 0xF3, 0xBB, 0xBB, 0xBB, 0xBB, 0x5F, 0xF4, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x71, 0xF5, 0x84, 0x19, 0x19, 0x19, + 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x84, + 0xF5, 0x71, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xBB, 0xED, 0xE4, 0x1B, 0x2C, 0x98, 0x66, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x66, 0x1B, + 0xE4, 0xD3, 0x61, 0x97, 0xBB, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x0F, 0x3D, + 0x0F, 0x05, 0x2E, 0x1E, 0x9A, 0x0D, 0x0F, 0x07, 0x07, 0xCB, 0xB7, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x70, + 0xE3, 0x5F, 0xBB, 0xBB, 0xBB, 0xBB, 0xF0, 0xF2, 0xF2, 0xF2, 0xF2, 0xF0, 0xBB, 0xBB, 0xBB, 0xBB, + 0x5F, 0xF6, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x8E, 0x8E, 0xF5, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, + 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0xF5, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xBB, 0xF7, + 0xBF, 0xE5, 0xBB, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xED, 0x48, 0x2C, 0xC1, 0xBB, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xB7, 0x3D, 0x3D, 0x06, 0x0F, 0x0F, 0x3D, 0xCD, 0x0F, + 0xCB, 0xB7, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0xCC, 0xE3, 0x8F, 0x5F, 0x5F, 0x5F, 0x5F, 0xF0, 0xF0, + 0xF0, 0xF0, 0xF0, 0xF0, 0x5F, 0x5F, 0x5F, 0x5F, 0x8F, 0xE3, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xBB, 0x97, 0xEE, 0x66, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0xB6, + 0xEE, 0xB6, 0xBB, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x0F, 0x07, 0x07, 0x3D, 0x3D, 0x67, 0xCB, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0xCE, 0xE3, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, + 0xE3, 0xDC, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x66, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x66, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x68, 0xB7, 0xB7, 0xCC, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, + 0x8E, 0x8E, 0x8E, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; \ No newline at end of file diff --git a/programs/cmm/browser/img/toolbar_icons.png b/programs/cmm/browser/img/toolbar_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8cfdf4dc2e68de1a1b51222562e189ec799566 GIT binary patch literal 2528 zcmV<62_N=}P)<h;3K|Lk000e1NJLTq0077U001fo0{{R3!3yLh00093P)t-s0000n zd&e_<$y0W<Rd}~rd%1IckYIkfLXRa&m@HA9F=xm#bJIL?%td?CN;iVdJA}?WhR|h# zq-27;XotReilB3gyLgqhc#ywFh|EZf&p?XPOpnq=kk>_!*h`bzO`qIRlhsm~+*+I5 zRGi{aqTW`e;9Q{NTczt>rRiI$;$NukU$EtCio$h~#(I>)d6vm@pwD`v&t#<IWUJ+1 zsOw~_?QE>+WwYmOx9MxU>UF&AZ@}$y!R>j(?s>=XeZlg7#PEI0^1Wpi&wUrEYSgTF z)UkQjfY(oh+ELbp7u=2+&VnP=iX_{UCgYYG=$#tloG9z1CGD&=_0%=@-Z=H*Ecosx z`06kB;X3rkLG#H&^~zTC)kTDZiiwDikByX)ke8E^n3$HFnwX!4maU4Er-hflgPgsM zow1#qqL7}ymZrLysJx(`rK6&!uC1=9tF^PTvb43kxwyE1mcfLX!-}25ke|SXqQZ@# z#*L`dlA^?#s==G7$(F6znXlTGvCx{e)SI&0uZ7aKh}XN7)}pP(p{>ZKvB;^i$*#E0 zp|;+lxZkw9%e}n9xxUV`ywat+;i<mkq}`6L<&?DRnt;pliOuqZ(DRGa^pe%|k=pi| z*7cg)_Lt!IpXT|$z{bA8&9=kVyTa7C$J@Kg-K@goq~G|k#pbfe=eEn}xz6dl(d()0 z{KA^rz?b30q}sy1z|6DN(YV~nsp8JD<<z<8!@$GB!pO+O#m&pk#KqCZ$kN2f*v!n- z%+KA<(bmn<+|tC>)x_A*&e7J(*x1G0+05J0(ACt`+S$|8+Sb_I+1$p}=fu|S%Gv78 z-tpYU?A^og(%0bC*WuRK;?~>b*5B*j(Bj<P;?Lmn-Qnrk?d{Xz^Vs(G;oIEc&F<mM z@Zr?s<I?Zp-QeWk;pNrx<Kf@r;o|1w<m2V+<>>C{<mTz-=;`R{>gw$6>FVt2?CtFC z?CbIH@9_2X^!NAp`1tuKcgFw#00000000000000000000M}z(S00001bW%=J06^y0 zW&i*Nj!8s8RCt{2mVI0kbsWbv+!Vqr&+NhM!7zIeqX)`o%i5MjPiAInPpJ8jWvKXU zVB-$K&4-(&pjjHZZV!&z*oGw#qR8OZ^zZ@HXj`1~%Hac#{nzg{kh|M$>}9-)eDQg~ zUSq%azTe+_-@D)FasCELkN<iDot18pu9j|*u9h28<VvU*yD-!(($%0YB~n#&{gwV5 zkvgjZwsu&l>al04I)tuA<ka%;M3$fI03u~DZqAihLRYGK__-hAk1=y;olIwm6h=TN z>%tL%B67T;pj?^R)6mf1HpA5+DxG_F=hr)SKXU9!e0+RNCy3OwB`0Dvltb0AV+??N zfmTOk(!n7Zwt74sm(^^sz<EI{RXv@(|M@XHcMtm|e*gBEQ0=(sP-Kfpeiqtt%G<Gs z7dk5!t*3)QW|_t1ap4Gp;09P0tkUVHcI+QNZ+^_qT``>`;`Jv(ggR=V_E0o<(a45a zi!}~Zw1#SZr;%H!T7r`v7Xs&1{|*SMng_Lc4BP(gn3dkfPlse@4*?=Vl{kq6;Xpw| z){E2*$MKr8t<gg{X97g@ZL2lM9S*f<#hE~nylP4UyWMU?n%8Oo3)-H3aQru;R#MF^ zjSB~7W!)zvV&^7u+qOtM6-tC=k}gs@^t$$Fpbh2VWg{DcG%P^xP>NRAeeY#MGT1D! zdaM?ysm!;QCxayc5KW&PGH%z%l~hwpOH2LQ!4tRN8xsH>Ik1NnFph1vfCm;ND3abA z)oC?atyTwqKrk(od5Bl}0;I*5H6O&FXzx$#y!IvuBEvnER<o?ERl{JFnFB;lJTN+Y z_)2?Ib4zn`)8&POCQKN#j}PtnSj<YFty}x{?R#@aBIyvS!!S$(0v^C78IfXMWeSKe z0vbPuVLBD$Ghsn_FiCpcm1Hh_l%|h@FB8)3$(3GUL*VzsJ)^Q7okuj~`_fo9|JHHi zZrjIew@KX0O4L`ACQXVCEkaS7Bh)%n%?gGBks^wsjO`HRgtREercj+aV!fRM*=4z8 zEomiT8BCdEh?OM4pE8_V>CoLHvmWYCTxwd{RQ&62i!WcI=kyypw%_;X&$HVBk&Eq# zii&zEI;u}3t5Sf7)0y5&iz(%DrAnnh<w}%^4$3HUI-SOL$Z3akD5^qHr5shLR1A-4 zd(ADfb0Cw{>atqFr6n;q5jdA5UA1Jc^f0H=UBf31y@RN0Y+kw;<a3(#QgeEa9(@zH z9ajXXL`O%7H?j64AmW@Gi(zOg*ri+{S1ROkg|by7pDW^D0}wz{Q4EV6xS_z#ft)hf zO<G{71TS?uVY92!?IB4R=T!RgulxJk=*Ff-kjpg1gucD!&?mU<fXJWhfSLG3@>!eb zix9~JR2Ztp)C#2nMHTW?g<eQRuSk_M>q-ScQA{;pV8-5ZF67LUF&c)$U<gjwLRNYZ zaBdm6(7JUCuGRyOw<a@T&epmG-#y7|w?y20j+bWfl29T9h%Gr*g{d`|%J*R_Qd0C# zdI3SSS7sncpOT{RjZKAV)R-!EVESeoA0i}D31TX#0MANbD_LuiB55)cYitDAOU0t5 z#`^lJlivY(qa4ILoB0qpm4L|4yZ{kaJ3$e`wk#H0D!#*2%N$8+p9t|IM?{VJ&ot(I z#?aV1eI7iBAf$c`f`ARRZW582Oomb(Wc#d<rvLE1Ic@6HX|LNr=vf56(h_k)AukP# z$Tdh<gs?3ip};h(|3WeXMcSjm6eHR^_#%W~qZGkC9uiN(O9CO=f~(A(@!H!{ro8(K zBSIw#h+O20TntA9n8e93Xl;5%rav2)T^c#<H?}TiK$tx4@iq@G#7qLgO*mpO0}pc= zQX&A^W?y3Nj91^AKK+H484>$O0Z>qppr;nmX0j?S6-qx?P~=OoEpU&vV*gqZlp2?O z%_Bg>02^=|+#Vj61x_m|6M%l2<z?=SgqbsD%zV)&@*y8OkR;}N6c&n;4um1Xn1HXr za)K599{nkY;+D001VT81TV0-75{KcEQX%L_qMg}(!VHiEpU4M%C`l}sq;NzC+ZV|j zZ3H{QBE+gSnR{&^pi%?@LqWj(Q7Q;kB<3@hR)R0gv;0H>NFZz|ga~2Ve2_DcU?K$v z3v8hwFbo8o!oi?LiSKigI4e{;Zo&}(SB>zS_?5%B{>n;AE5fK0R=evE`6reCW$4Bg qF@{PPhWH}?>vW5BwRDSgwfqgpG5W{@h*6vX0000<MNUMnLSTaN%Rco0 literal 0 HcmV?d00001 diff --git a/programs/cmm/browser/include/acid_0.1.htm b/programs/cmm/browser/include/acid_0.1.htm new file mode 100644 index 0000000000..70131954ca --- /dev/null +++ b/programs/cmm/browser/include/acid_0.1.htm @@ -0,0 +1,131 @@ +<!--doctype html public "-//w3c//dtd html 4.0 transitional//ru"--> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> + <title>Тест Acid 0.1 + + + + +background + +Это тестовая страница для проверки HTML Viewer
    +
    +Эта программа поддерживает все популярные кодировки: cp1251, koi-8, cp866, Unicode.

    + + +C +r +e +a +t +e +d +b +y +L +e +e +n +c +y
    +
    +Житомир 2008-2012 + +

    +Небольшой список:

      +
    1. Этот текст в кавычках
    2. +
    3. Это подчеркнутый текст
    4. +
    5. Это перечеркнутый текст
    6. +
    7. Это наклонный текст
    8. +
    9. Это текст с усиленным выделением
    10. +
    11. Куча тегов
    +

    +
    + +
    +Ать!
    +    Два!
    +        Три!
    +
    +          Автор сего творения не известен.
    +
    +
    + + + +Index.htm
    +Index.htm
    +Незакрытый тег а - Index.htm
    +
    Kernel.mnt
    +index.htm#2.1.4
    +http://bash.im
    +Mail to leency
    +#2.1.4
    +Фоновая картинка
    +
    +Очень длинный адрес строки
    + + + +
    +В этом тексте есть переход на следующую строку, но браузер +его должен проигнорировать. Еще много пробелов. А тут есть + табы. Кое-какие символы: " & < > •   © ® „ “ — Їжачок іншого боку р. Євфрат з'їв ґрунт та єврейський ґербалайф. +
    + + + diff --git a/programs/cmm/browser/include/colors.h b/programs/cmm/browser/include/colors.h new file mode 100644 index 0000000000..79ac17875e --- /dev/null +++ b/programs/cmm/browser/include/colors.h @@ -0,0 +1,193 @@ +//Надо будет переделать на "дерево поиска" или, что-то подобное +//будет нечитабельно, зато меньше и быстее + +struct color_spec { + char *name; + int rgb; +}; + +struct color_spec color_specs[] = { + "aliceblue", 0xF0F8FF, + "antiquewhite", 0xFAEBD7, + "aqua", 0x00FFFF, + "aquamarine", 0x7FFFD4, + "azure", 0xF0FFFF, + "beige", 0xF5F5DC, + "bisque", 0xFFE4C4, + "black", 0x000000, + "blanchedalmond",0xFFEBCD, + "blue", 0x0000FF, + "blueviolet", 0x8A2BE2, + "brown", 0xA52A2A, + "burlywood", 0xDEB887, + "cadetblue", 0x5F9EA0, + "chartreuse", 0x7FFF00, + "chocolate", 0xD2691E, + "coral", 0xFF7F50, + "cornflowerblue",0x6495ED, + "cornsilk", 0xFFF8DC, + "crimson", 0xDC143C, + "cyan", 0x00FFFF, + "darkblue", 0x00008B, + "darkcyan", 0x008B8B, + "darkgoldenrod", 0xB8860B, + "darkgray", 0xA9A9A9, + "darkgreen", 0x006400, + "darkkhaki", 0xBDB76B, + "darkmagenta", 0x8B008B, + "darkolivegreen",0x556B2F, + "darkorange", 0xFF8C00, + "darkorchid", 0x9932CC, + "darkred", 0x8B0000, + "darksalmon", 0xE9967A, + "darkseagreen", 0x8FBC8F, + "darkslateblue", 0x483D8B, + "darkslategray", 0x2F4F4F, + "darkturquoise", 0x00CED1, + "darkviolet", 0x9400D3, + "deeppink", 0xFF1493, + "deepskyblue", 0x00BFFF, + "dimgray", 0x696969, + "dodgerblue", 0x1E90FF, + "firebrick", 0xB22222, + "floralwhite", 0xFFFAF0, + "forestgreen", 0x228B22, + "fuchsia", 0xFF00FF, + "gainsboro", 0xDCDCDC, + "ghostwhite", 0xF8F8FF, + "gold", 0xFFD700, + "goldenrod", 0xDAA520, + "gray", 0x808080, + "green", 0x008000, + "greenyellow", 0xADFF2F, + "honeydew", 0xF0FFF0, + "hotpink", 0xFF69B4, + "indianred", 0xCD5C5C, + "indigo", 0x4B0082, + "ivory", 0xFFFFF0, + "khaki", 0xF0E68C, + "lavender", 0xE6E6FA, + "lavenderblush", 0xFFF0F5, + "lawngreen", 0x7CFC00, + "lemonchiffon", 0xFFFACD, + "lightblue", 0xADD8E6, + "lightcoral", 0xF08080, + "lightcyan", 0xE0FFFF, + "lightgoldenrodyellow", 0xFAFAD2, + "lightgreen", 0x90EE90, + "lightgrey", 0xD3D3D3, + "lightpink", 0xFFB6C1, + "lightsalmon", 0xFFA07A, + "lightseagreen", 0x20B2AA, + "lightskyblue", 0x87CEFA, + "lightslategray",0x778899, + "lightsteelblue",0xB0C4DE, + "lightyellow", 0xFFFFE0, + "lime", 0x00FF00, + "limegreen", 0x32CD32, + "linen", 0xFAF0E6, + "magenta", 0xFF00FF, + "maroon", 0x800000, + "mediumaquamarine",0x66CDAA, + "mediumblue", 0x0000CD, + "mediumorchid", 0xBA55D3, + "mediumpurple", 0x9370DB, + "mediumseagreen",0x3CB371, + "mediumslateblue",0x7B68EE, + "mediumspringgreen",0x00FA9A, + "mediumturquoise",0x48D1CC, + "mediumvioletred",0xC71585, + "midnightblue", 0x191970, + "mintcream", 0xF5FFFA, + "mistyrose", 0xFFE4E1, + "moccasin", 0xFFE4B5, + "navajowhite", 0xFFDEAD, + "navy", 0x000080, + "oldlace", 0xFDF5E6, + "olive", 0x808000, + "olivedrab", 0x6B8E23, + "orange", 0xFFA500, + "orangered", 0xFF4500, + "orchid", 0xDA70D6, + "palegoldenrod", 0xEEE8AA, + "palegreen", 0x98FB98, + "paleturquoise", 0xAFEEEE, + "palevioletred", 0xDB7093, + "papayawhip", 0xFFEFD5, + "peachpuff", 0xFFDAB9, + "peru", 0xCD853F, + "pink", 0xFFC0CB, + "plum", 0xDDA0DD, + "powderblue", 0xB0E0E6, + "purple", 0x800080, + "red", 0xFF0000, + "rosybrown", 0xBC8F8F, + "royalblue", 0x4169E1, + "saddlebrown", 0x8B4513, + "salmon", 0xFA8072, + "sandybrown", 0xF4A460, + "seagreen", 0x2E8B57, + "seashell", 0xFFF5EE, + "sienna", 0xA0522D, + "silver", 0xC0C0C0, + "skyblue", 0x87CEEB, + "slateblue", 0x6A5ACD, + "slategray", 0x708090, + "snow", 0xFFFAFA, + "springgreen", 0x00FF7F, + "steelblue", 0x4682B4, + "tan", 0xD2B48C, + "teal", 0x008080, + "thistle", 0xD8BFD8, + "tomato", 0xFF6347, + "turquoise", 0x40E0D0, + "violet", 0xEE82EE, + "wheat", 0xF5DEB3, + "white", 0xFFFFFF, + "whitesmoke", 0xF5F5F5, + "yellow", 0xFFFF00, + "yellowgreen", 0x9ACD32, +0}; + +dword StrToCol(char* htmlcolor) +{ + dword j=1, + color=0, + textlen=0; + char ch=0x00; + + if (ESBYTE[htmlcolor]<>'#') return text_colors[0]; + + textlen = strlen(htmlcolor); + + if (textlen==7) || (textlen==4) + { + FOR (; j='0') && (ch<='9')) ch -= '0'; + IF ((ch>='A') && (ch<='F')) ch -= 'A'-10; + IF ((ch>='a') && (ch<='f')) ch -= 'a'-10; + color = color*0x10 + ch; + if (textlen==4) color = color*0x10 + ch; //#abc ->> #aabbcc (слава википедии!!1) + } + return color; + } + + return text_colors[0]; +} + +dword GetColor(char* color_str) +{ + int ii; + + if (ESBYTE[color_str] == '#') + return StrToCol(color_str); + else + for (ii=0; color_specs[ii].name!=0; ii++) + { + if (!strcmp(color_str, color_specs[ii].name)) return color_specs[ii].rgb; + } + + return text_colors[0]; +} diff --git a/programs/cmm/browser/include/history.h b/programs/cmm/browser/include/history.h new file mode 100644 index 0000000000..5f77d41f21 --- /dev/null +++ b/programs/cmm/browser/include/history.h @@ -0,0 +1,59 @@ +struct UrlsHistory { + dword CurrentUrl(); + void AddUrl(); + byte GoBack(); + byte GoForward(); +}; + +UrlsHistory BrowserHistory; + +struct path_string { +char Item[4096]; +}; + +#define MAX_HISTORY_NUM 40 +path_string history_list[MAX_HISTORY_NUM]; +int history_num; +int history_current; + +dword UrlsHistory::CurrentUrl() +{ + return #history_list[history_current].Item; +} + +void UrlsHistory::AddUrl() //тут нужен вводимый элемент - для универсальности +{ + int i; + if (history_num>0) && (!strcmp(#URL,#history_list[history_current].Item)) return; + + if (history_current>=MAX_HISTORY_NUM-1) + { + history_current/=2; + for (i=0; iGetActiveProcess()) ExitProcess(); + + id1=mm.y/ITEM_HEIGHT; + if (id1<0) || (id1+1>items_num) || (mm.x<0) || (mm.x>ITEM_WIDTH) break; + if (mm.lkm) || (mm.pkm) + { + WB1.Scan(ITEMS_LIST[items_cur*2+1]); + ExitProcess(); + } + if (items_cur<>id1) + { + items_cur=id1; + goto _ITEMS_DRAW; + } + break; + + case evButton: + id1=GetButtonID()-10; + WB1.Scan(ITEMS_LIST[id1*2+1]); + ExitProcess(); + break; + + case evKey: + key = GetKey(); + if (key==27) ExitProcess(); + if (key==178) && (items_cur) + { + items_cur--; + goto _ITEMS_DRAW; + } + if (key==177) && (items_cur+1items_cur) EDX=0xFFFFFF; else EDX=0x94AECE; + DrawBar(1, i*ITEM_HEIGHT+1, ITEM_WIDTH-1, ITEM_HEIGHT, EDX); + WriteText(8,i*ITEM_HEIGHT+6,0x80,0x000000,ITEMS_LIST[i*2],0); + if (ITEMS_LIST[i*2+1]==1) && (pre_text==2) DrawBar(ITEM_WIDTH-18, i*ITEM_HEIGHT+8, 4, 4, 0x444444); + if (ITEMS_LIST[i*2+1]==5) && (use_truetype==1) DrawBar(ITEM_WIDTH-18, i*ITEM_HEIGHT+8, 4, 4, 0x444444); + } + DrawBar(33, cur_encoding+1*ITEM_HEIGHT+8, 4, 4, 0x444444); //показывает выбраную кодировку + } +} + + + + + diff --git a/programs/cmm/browser/include/parce_tag.h b/programs/cmm/browser/include/parce_tag.h new file mode 100644 index 0000000000..15ab1e06f5 --- /dev/null +++ b/programs/cmm/browser/include/parce_tag.h @@ -0,0 +1,50 @@ +unsigned int GetNextParam() +{ + byte kavichki = false; + int i = strlen(#tagparam) - 1; + + if (!tagparam) return 0; + + WHILE((i > 0) && ((tagparam[i] == '"') || (tagparam[i] == ' ') || (tagparam[i] == '\'') || (tagparam[i] == '/'))) + { + IF (tagparam[i] == '"') || (tagparam[i] == '\'') kavichki=tagparam[i]; + tagparam[i] = 0x00; + i--; + } + + if (kavichki) + { + i=strrchr(#tagparam, kavichki); + if (i>sizeof(options)) + strcpy(#options, #tagparam + sizeof(options)); + else + strcpy(#options, #tagparam + i); + } + else + { + WHILE((i > 0) && (tagparam[i] <>'=')) i--; //i=strrchr(#tagparam, '=')+1; + i++; + if (i>sizeof(options)) + strcpy(#options, #tagparam + sizeof(options)); + else + strcpy(#options, #tagparam + i); + + WHILE (options[0] == ' ') strcpy(#options, #options+1); + } + tagparam[i] = 0x00; + + FOR ( ; ((tagparam[i] <>' ') && (i > 0); i--) + { + IF (tagparam[i] == '=') //дерзкая заглушка + tagparam[i + 1] = 0x00; + } + + if (i>sizeof(parametr)) + strcpy(#parametr, #tagparam + sizeof(parametr)); + else + strcpy(#parametr, #tagparam + i + 1); + + tagparam[i] = 0x00; + + return 1; +} \ No newline at end of file diff --git a/programs/cmm/browser/include/some_code.h b/programs/cmm/browser/include/some_code.h new file mode 100644 index 0000000000..94112be6e3 --- /dev/null +++ b/programs/cmm/browser/include/some_code.h @@ -0,0 +1,66 @@ +//кнопки +#define BACK 300 +#define FORWARD 301 +#define REFRESH 302 +#define HOME 303 +#define NEWTAB 304 +#define GOTOURL 305 +#define SEARCHWEB 306 +#define ID1 178 +#define ID2 177 + +#define _WIN 0 +#define _DOS 1 +#define _KOI 2 +#define _UTF 3 + + +dword get_URL_part(int len) { + char temp1[sizeof(URL)]; + strcpy(#temp1, #URL); + temp1[len] = 0x00; + return #temp1; +} + +inline byte chTag(dword text) {return strcmp(#tag,text);} + + +void GetURLfromPageLinks(int id) +{ + int i, j = 0; + for (i = 0; i <= id - 401; i++) + { + do + { + j++; + if (j>=strlen(#page_links)) return; //не самое удачное решение + } + while (page_links[j] <>'|'); + } + page_links[j] = 0x00; + strcpy(#URL, #page_links+strrchr(#page_links, '|')); +} + + +//У нас нет наклонных шрифтов, поэтому делаем костыль из +//палочек для мороженого и жевательной резинки: +//Снимаем область экрана и выводим её обратно полосками со смещением, +//что даёт перекос картинки +//При наличии фона и т.п. проявится вся костыльность решения :) + +inline void Skew(dword x,y,w,h) +{ + dword italic_buf; + int tile_height=2, //будем выводить двухпиксельными полосками + shift=-2, //с двухпиксельным смещением + i, skin_height; + + italic_buf = mem_Alloc(w*h*3); + skin_height = GetSkinHeight(); + CopyScreen(italic_buf, x+Form.left+2, y+Form.top+skin_height, w, h); + + FOR (i=0;i*tile_height", +"#62", ">", + +"minus", "-", +"ndash", "-", +"mdash", "-", //-- +"#8722", "-", +"#8211", "-", +"#151", "-", +"#149", "-", + +"rsquo", "'", +"#39", "'", +"#96", "'", +"#8217", "'", + +"quot", "\"", +"#34", "\"", +"ldquo", "\"", +"rdquo", "\"", +"#8222", "\"", +"#8221", "\"", + +"laquo", "<<", +"#171", "<<", +"raquo", ">>", +"#187", ">>", + +"uarr", "\24", +"darr", "\25", +"rarr", "\26", +"larr", "\27", + +"#1028", "\242", +"#1030", "I", +"#1031", "\244", + +"#8470", "N", +"bull", "-", //вообще здесь точка +"percnt","%", + +0}; + + +byte unicode_chars[] = "ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®ЇабвгдежзийклмнопрсhЈ\243i\105\244\0"; + +unsigned char GetUnicodeSymbol() +{ + int j; + + for (j=0; unicode_tags[j]!=0; j+=2;) + { + if (!strcmp(#tag, unicode_tags[j])) + { + strcat(#line, unicode_tags[j+1]); + return NULL; + } + } + + rez = atoi(#tag + 1) - 1040; + if (tag[1] == '1') && (rez>=0) && (rez<=72) && (strlen(#tag) == 5) + { + return unicode_chars[rez]; + } + + strcat(#line,#tag); //выводим на экран необработанный тег, так браузеры зачем-то делают + return NULL; +} diff --git a/programs/cmm/dict/compile.bat b/programs/cmm/dict/compile.bat new file mode 100644 index 0000000000..3d857c8971 --- /dev/null +++ b/programs/cmm/dict/compile.bat @@ -0,0 +1,5 @@ +del dicty +..\C--\C-- dicty +rename dicty.com dicty +del warning.txt +pause \ No newline at end of file diff --git a/programs/cmm/dict/dicty.c b/programs/cmm/dict/dicty.c new file mode 100644 index 0000000000..8a2ec45122 --- /dev/null +++ b/programs/cmm/dict/dicty.c @@ -0,0 +1,274 @@ +#include "..\lib\kolibri.h" +#include "..\lib\strings.h" +#include "..\lib\file_system.h" +#include "..\lib\mem.h" +#include "..\lib\dll.h" +#include "..\lib\edit_box_lib.h" + +char title[]= "Dictionary v1.0"; +char direction[] = "Translate direction:"; +char translate_caption[] = "Translate"; +char dict_not_found[] = "Dictionary not found"; +char dict_opened[] = "Dictionary loaded"; +char empty_word[] = "Type a word to translate"; +//char direction[] = "Направление перевода:"w; + + +int mouse_dd; +edit_box edit1= {200,20,16,0xffffff,0x94AECE,0x94AECE,0x94AECE,0,248,#edword,#mouse_dd,100000000000010b}; + +system_colors sc; +proc_info Form; + +char edword[4096], translate_result[4096], search_word[4096], cur_dict[4096]; +#define DEFAULT_DICT_DIRECROTY "dictionaries/" +#define DEFAULT_DICT "eng - rus.dict"; +dword files_buf; +dword buff, fsize; + + +void main() +{ + int id; + word key; + + mem_Init(); + load_dll2(boxlib, #edit_box_draw,0); + + + program_path[strrchr(#program_path, '/')] = 0; //обрезаем её урл до последнего / + strcpy(#program_path+strlen(#program_path), DEFAULT_DICT_DIRECROTY); + SetCurDir(#program_path); + + strcpy(#cur_dict, DEFAULT_DICT); + OpenDictionary(#cur_dict); + + if (param) + { + strcpy(#edword, #param); + edit1.size=edit1.pos=strlen(#edword); + Translate(); + } + + SetEventMask(0x27); + loop() + { + switch(WaitEvent()) + { + case evMouse: + edit_box_mouse stdcall (#edit1); + break; + + case evButton: + id=GetButtonID(); + if (id==1) ExitProcess(); + if (id==10) + { + Translate(); + DrawTranslation(); + } + + if (id==11) + { + ShowDictList(); + break; + } + if (id==12) + { + Draw_Window(); + break; + } + + if (id>=20) + { + strcpy(#cur_dict, id-20*304+files_buf+72); + OpenDictionary(#cur_dict); + } + break; + + case evKey: + key = GetKey(); + IF (key==013) //Enter + { + Translate(); + DrawTranslation(); + } + + EAX=key<<8; + edit_box_key stdcall(#edit1); + break; + + case evReDraw: + Draw_Window(); + break; + } + } +} + + +void Draw_Window() +{ + sc.get(); + DefineAndDrawWindow(215,120,400,250,0x73,sc.work,#title); + GetProcessInfo(#Form, SelfInfo); + if (Form.status_window>2) return; //если свернуто в заголовок, ничего не рисуем + if (Form.height<140) MoveSize(OLD,OLD,OLD,140); + if (Form.width<400) MoveSize(OLD,OLD,400,OLD); + + DrawBar(0, 0, Form.width-9, 69, sc.work); + edit1.focus_border_color=sc.work_graph; + edit1.width=Form.width-edit1.left-edit1.left-9; + edit_box_draw stdcall(#edit1); //рисуем строку адреса + DefineButton(edit1.left+edit1.width-80,35, 80,20, 10, sc.work_button); + WriteText(edit1.left+edit1.width-80+14,35+7,0x80,sc.work_button_text,#translate_caption, 0); + DrawBar(0, 69, Form.width-9, 1, sc.work_graph); + + WriteText(edit1.left,35+7,0x80,sc.work_text,#direction, 0); + DefineButton(edit1.left+130,35, 120,20, 11, sc.work_button); + WriteText(edit1.left+130+112,35+7,0x80,sc.work_button_text,"\x19", 0); + DrawBar(edit1.left+130+1,36, 107,19, 0xFFFFFF); + WriteText(edit1.left+130+8,35+7,0x80,0x000000,#cur_dict, 0); + + + DrawTranslation(); +} + + +void OpenDictionary(dword dict_path) +{ + dword j, words_count=0; + + mem_Free(buff); + buff = mem_Alloc(3500576); + ReadFile(0, 3500576, buff, dict_path); + IF (EAX<>6) + { + fsize=0; + strcpy(#translate_result, #dict_not_found); + Draw_Window(); + return; + } + fsize=EBX; + + strcpy(#search_word, dict_path); + strcpy(#translate_result, #dict_opened); + Draw_Window(); +} + +void ShowDictList() +{ + int j, fcount=10; + + mem_Free(files_buf); + files_buf= mem_Alloc(32); + ReadDir(0, files_buf, #program_path); + fcount=ESDWORD[files_buf+8]; + mem_Free(files_buf); + files_buf = mem_Alloc(fcount+1*304+32); + + ReadDir(fcount, files_buf, #program_path); + + fcount-=2; + mem_Move(files_buf,files_buf+608,fcount*304); + + + DefineButton(0,0, Form.width,Form.height, 12+BT_HIDE+BT_NOFRAME, sc.work_button); + for (j=0; jsearch_word) InfType = IGNORE; //если первая буква не совпадает игнорим всё слово + } + if (InfType==TRANSLATION) strcat(#w_translation, #bukva); + } + } + if (!translate_result) strcpy(#translate_result, "Word is'nt found in the dictionary"); +} + + +void DrawTranslation() +{ + int text_break=0; + char tt[4096]=''; + + int y_pos=70, skin_height=GetSkinHeight(); + char draw_buf[4096]; + strcpy(#draw_buf, #translate_result); + + DrawBar(0, y_pos, Form.width-9, Form.height - y_pos-skin_height-4, 0xFFFFFF); + strttl(#draw_buf); + WriteText(10+1, y_pos+8, 0x90, 0x800080, #search_word, 0); + WriteText(10 , y_pos+8, 0x90, 0x800080, #search_word, 0); + while (draw_buf) + { + text_break= Form.width/6-6; + if (text_break>strlen(#draw_buf)) + { + WriteText(10, y_pos+21, 0x80, 0, #draw_buf, 0); + return; + } + while (draw_buf[text_break]<>' ') && (text_break>0) text_break--; + strcpy(#tt, #draw_buf+text_break+1); + draw_buf[text_break]=0x0; + WriteText(10, y_pos+21, 0x80, 0, #draw_buf, 0); + strcpy(#draw_buf, #tt); + y_pos+=12; + if (y_pos+24+skin_height+12>Form.height) return; //чтоб не залезало на нижний ободок + } +} + + +stop: diff --git a/programs/cmm/dict/dicty_.c b/programs/cmm/dict/dicty_.c new file mode 100644 index 0000000000..ff6aecf81f --- /dev/null +++ b/programs/cmm/dict/dicty_.c @@ -0,0 +1,306 @@ +//dict_path > cur_dict + +#include "..\lib\kolibri.h" +#include "..\lib\strings.h" +#include "..\lib\file_system.h" +#include "..\lib\mem.h" +#include "..\lib\dll.h" +#include "..\lib\edit_box_lib.h" + +unsigned char title[]= "Dictionary v1.0"; +unsigned char direction[] = "Translate direction:"; +unsigned char translate_caption[] = "Translate"; +unsigned char dict_not_found[] = "Dictionary not found"; +unsigned char dict_opened[] = "Dictionary loaded"; +unsigned char empty_word[] = "Type a word to translate"; +//char direction[] = "Направление перевода:"w; + + +int mouse_dd; +edit_box edit1= {200,20,16,0xffffff,0x94AECE,0x94AECE,0x94AECE,0,248,#edword,#mouse_dd,100000000000010b}; + +system_colors sc; +proc_info Form; + +unsigned char edword[4096], translate_result[4096], search_word[4096], cur_dict[4096]; +#define DEFAULT_DICT_DIRECROTY "dictionaries/" +#define DEFAULT_DICT "eng - rus.dict"; +dword files_buf; +dword buff, fsize; + + +void main() +{ + int id; + word key; + + mem_Init(); + load_dll2(boxlib, #edit_box_draw,0); + + + program_path[strrchr(#program_path, '/')] = 0; //обрезаем её урл до последнего / + strcpy(#program_path+strlen(#program_path), DEFAULT_DICT_DIRECROTY); + SetCurDir(#program_path); + + strcpy(#cur_dict, DEFAULT_DICT); + OpenDictionary(#cur_dict); + + if (param) + { + strcpy(#edword, #param); + edit1.size=edit1.pos=strlen(#edword); + Translate(); + } + + SetEventMask(0x27); + loop() + { + switch(WaitEvent()) + { + case evMouse: + edit_box_mouse stdcall (#edit1); + break; + + case evButton: + id=GetButtonID(); + if (id==1) ExitProcess(); + if (id==10) + { + Translate(); + DrawTranslation(); + } + + if (id==11) + { + ShowDictList(); + break; + } + if (id==12) + { + Draw_Window(); + break; + } + + if (id>=20) + { + strcpy(#cur_dict, id-20*304+files_buf+72); + OpenDictionary(#cur_dict); + } + break; + + case evKey: + key = GetKey(); + IF (key==013) //Enter + { + Translate(); + DrawTranslation(); + } + + EAX=key<<8; + edit_box_key stdcall(#edit1); + + //LiveSearch(); + break; + + case evReDraw: + Draw_Window(); + break; + } + } +} + +/*void LiveSearch() +{ + dword bj, i; + byte IsNativeWord=1; + unsigned char native[256]; + unsigned char bukovka; + + for (bj=0; bjnative[i]) goto __NE_RAVNO; + debug(#native); + __NE_RAVNO: + native = '\0'; + IsNativeWord = 0; + } + if (IsNativeWord==1) native[strlen(#native)] = bukovka; + } +}*/ + + +void Translate() +{ + dword tj; + char w_native[100], w_translation[100], bukva[1]; + + byte InfType; + #define NATIVE_WORD 0 + #define TRANSLATION 1 + #define IGNORE 2 + + if (!fsize) return; + + translate_result = 0; + strcpy(#search_word, #edword); + strupr(#search_word); + + if (!edword) + { + strcpy(#translate_result, #empty_word); + return; + } + + for (tj=0; tjsearch_word) InfType = IGNORE; //если первая буква не совпадает игнорим всё слово + } + if (InfType==TRANSLATION) strcat(#w_translation, #bukva); + } + } + if (!translate_result) strcpy(#translate_result, "Word is'nt found in the dictionary"); +} + + +void OpenDictionary(dword dict_path) +{ + dword j, words_count=0; + + mem_Free(buff); + buff = mem_Alloc(3500576); + ReadFile(0, 3500576, buff, dict_path); + IF (EAX<>6) + { + fsize=0; + strcpy(#translate_result, #dict_not_found); + Draw_Window(); + return; + } + fsize=EBX; + + strcpy(#search_word, dict_path); + strcpy(#translate_result, #dict_opened); + Draw_Window(); +} + + +void ShowDictList() +{ + int j, fcount=10; + + mem_Free(files_buf); + files_buf= mem_Alloc(32); + ReadDir(0, files_buf, #program_path); + fcount=ESDWORD[files_buf+8]; + mem_Free(files_buf); + files_buf = mem_Alloc(fcount+1*304+32); + + ReadDir(fcount, files_buf, #program_path); + + fcount-=2; + mem_Move(files_buf,files_buf+608,fcount*304); + + + DefineButton(0,0, Form.width,Form.height, 12+BT_HIDE+BT_NOFRAME, sc.work_button); + for (j=0; jstrlen(#draw_buf)) + { + WriteText(10, y_pos+21, 0x80, 0, #draw_buf, 0); + return; + } + while (draw_buf[text_break]<>' ') && (text_break>0) text_break--; + strcpy(#tt, #draw_buf+text_break+1); + draw_buf[text_break]=0x0; + WriteText(10, y_pos+21, 0x80, 0, #draw_buf, 0); + strcpy(#draw_buf, #tt); + y_pos+=12; + if (y_pos+24+skin_height+12>Form.height) return; //чтоб не залезало на нижний ободок + } +} + + +void Draw_Window() +{ + sc.get(); + DefineAndDrawWindow(215,120,400,250,0x73,sc.work,#title); + GetProcessInfo(#Form, SelfInfo); + if (Form.status_window>2) return; //если свернуто в заголовок, ничего не рисуем + if (Form.height<140) MoveSize(OLD,OLD,OLD,140); + if (Form.width<400) MoveSize(OLD,OLD,400,OLD); + + DrawBar(0, 0, Form.width-9, 69, sc.work); + edit1.focus_border_color=sc.work_graph; + edit1.width=Form.width-edit1.left-edit1.left-9; + edit_box_draw stdcall(#edit1); //рисуем строку адреса + DefineButton(edit1.left+edit1.width-80,35, 80,20, 10, sc.work_button); + WriteText(edit1.left+edit1.width-80+14,35+7,0x80,sc.work_button_text,#translate_caption, 0); + DrawBar(0, 69, Form.width-9, 1, sc.work_graph); + + WriteText(edit1.left,35+7,0x80,sc.work_text,#direction, 0); + DefineButton(edit1.left+130,35, 120,20, 11, sc.work_button); + WriteText(edit1.left+130+112,35+7,0x80,sc.work_button_text,"\x19", 0); + DrawBar(edit1.left+130+1,36, 107,19, 0xFFFFFF); + WriteText(edit1.left+130+8,35+7,0x80,0x000000,#cur_dict, 0); + + DrawTranslation(); +} + + +stop: diff --git a/programs/cmm/lib/dll.h b/programs/cmm/lib/dll.h new file mode 100644 index 0000000000..c32cdac24c --- /dev/null +++ b/programs/cmm/lib/dll.h @@ -0,0 +1,173 @@ +//Asper +char a_libdir[43] = "/sys/lib/\0"; + + +//proc dll.Load, import_table:dword +int dll_Load(dword import_table) +{ + $mov esi, import_table + @next_lib: $mov edx, DSDWORD[esi] + $or edx,edx + $jz exit_ + $push esi + $mov esi,DSDWORD[esi+4] + $mov edi,#a_libdir + + $push edi + $push esi + EAX=strlen(#a_libdir); + $pop esi + $pop edi + $add edi, eax //9 + + @loc01: $lodsb + $stosb + $or al,al + $jnz loc01 + + //IntToStr(EBX); + //$push edx + //WriteDebug(#a_libdir); + //$pop edx + //mcall 68,19,a_libdir + $mov eax, 68 + $mov ebx, 19 + $mov ecx,#a_libdir + $int 0x40 + + $or eax,eax + $jz fail + //stdcall dll.Link,eax,edx + dll_Link(EAX, EDX); + $push eax + $mov eax, DSDWORD [eax] + $cmp DSDWORD [eax], 'lib_' + $pop eax + //$jnz loc02 + //IntToStr(EBX); + //$push eax + //WriteDebug(DSDWORD[EAX]); + //$pop eax + //stdcall dll.Init,[eax+4] + //dll_Init(DSDWORD[EAX]); //dll_Init(DSDWORD[EAX+4]); + @loc02: + $pop esi + $add esi,8 + $jmp next_lib + @exit_: $xor eax,eax + return 0; + @fail: $add esp,4 + $xor eax,eax + $inc eax + return -1; +} + +//proc dll.Link, exp:dword,imp:dword +void dll_Link(dword exp, imp) +{ + $push eax + $mov esi, imp + $test esi, esi + $jz done + @next: $lodsd + $test eax,eax + $jz done + + //stdcall dll.GetProcAddress,[exp],eax + dll_GetProcAddress(exp,EAX); + $or eax,eax + $jz loc03 + + $mov DSDWORD[esi-4],eax + $jmp next + @loc03: + $mov DSDWORD[esp],0 + @done: $pop eax +} + +//proc dll.Init, dllentry:dword +void dll_Init(dword dllentry) +{ + $pushad + EAX=#mem_Alloc; + EBX=#mem_Free; + ECX=#mem_ReAlloc; + EDX=#dll_Load; + DSDWORD [dllentry+4] stdcall (); + $popad +} + +//proc dll.GetProcAddress, exp:dword,sz_name:dword +dword dll_GetProcAddress(dword exp, sz_name) +{ + $push esi + $mov edx, exp + $xor eax,eax + @next: $or edx,edx + $jz end_ + $cmp edx,0 + $jz end_ + strcmp(DSDWORD[EDX],sz_name); + $test eax,eax + $jz ok + $add edx,8 + $jmp next + @ok: + $mov eax, DSDWORD[edx+4] + @end_: + $pop esi + return EAX; +} + + +int load_dll2(dword dllname, import_table, byte need_init) +{ + //dword dllentry=0; +// load DLL + $mov eax, 68 + $mov ebx, 19 + ECX=dllname; + $int 0x40 + $test eax, eax + $jz exit01 + +// initialize import + $mov edx,eax + ESI=import_table; + +@import_loop01: + $lodsd + $test eax,eax + $jz import_done01 + $push edx +@import_find01: + $mov ebx,DSDWORD[EDX] + $test ebx, ebx + $jz exit01 + $push eax +@nex101: + $mov cl,DSBYTE[EAX]; + $cmp cl,DSBYTE[EBX]; + $jnz import_find_next01 + $test cl,cl + $jz import_found01 + $inc eax + $inc ebx + $jmp nex101 +@import_find_next01: + $pop eax + $add edx, 8 + $jmp import_find01 +@import_found01: + $pop eax + $mov eax,DSDWORD[edx+4] + $mov DSDWORD[esi-4],eax + $pop edx + + $jmp import_loop01 +@import_done01: + IF (need_init) dll_Init(EDX); + return 0; +@exit01: + return -1; +} diff --git a/programs/cmm/lib/edit_box_lib.h b/programs/cmm/lib/edit_box_lib.h new file mode 100644 index 0000000000..0822183a8f --- /dev/null +++ b/programs/cmm/lib/edit_box_lib.h @@ -0,0 +1,49 @@ +//BOX_LIB +dword boxlib = #aEdit_box_lib; //Asper +char aEdit_box_lib[22]="/sys/lib/box_lib.obj\0"; //Asper + +dword edit_box_draw = #aEdit_box_draw; +dword edit_box_key = #aEdit_box_key; +dword edit_box_mouse = #aEdit_box_mouse; +dword version_ed = #aVersion_ed; + +dword am__ = 0x0; +dword bm__ = 0x0; + +char aEdit_box_draw[9] = "edit_box\0"; +char aEdit_box_key[13] = "edit_box_key\0"; +char aEdit_box_mouse[15] = "edit_box_mouse\0"; +char aVersion_ed[11] = "version_ed\0"; + +char aCheck_box_draw [15] = "check_box_draw\0"; +char aCheck_box_mouse [16] = "check_box_mouse\0"; +char aVersion_ch [11] = "version_ch\0"; + +char aOption_box_draw [16] = "option_box_draw\0"; +char aOption_box_mouse[17] = "option_box_mouse\0"; +char aVersion_op [11] = "version_op\0" ; + + +struct edit_box{ +dword width, left, top, color, shift_color, focus_border_color, blur_border_color, +text_color, max, text, mouse_variable, flags, size, pos, offset, cl_curs_x, cl_curs_y, shift, shift_old; +}; + +//ed_width equ [edi] ;иЁаЁ­  Є®¬Ї®­Ґ­в  +//ed_left equ [edi+4] ;Ї®«®¦Ґ­ЁҐ Ї® ®бЁ е +//ed_top equ [edi+8] ;Ї®«®¦Ґ­ЁҐ Ї® ®бЁ г +//ed_color equ [edi+12] ;梥в д®­  Є®¬Ї®­Ґ­в  +//shift_color equ [edi+16] ;=0x6a9480 +//ed_focus_border_color equ [edi+20] ;梥в а ¬ЄЁ Є®¬Ї®­Ґ­в  +//ed_blur_border_color equ [edi+24] ;梥⠭Ґ  ЄвЁў­®Ј® Є®¬Ї®­Ґ­в  +//ed_text_color equ [edi+28] ;梥в ⥪бв  +//ed_max equ [edi+32] ;Є®«-ў® бЁ¬ў®«®ў Є®в®алҐ ¬®¦­® ¬ ЄбЁ¬ «м­® ўўҐбвЁ +//ed_text equ [edi+36] ;гЄ § вҐ«м ­  ЎгдҐа +//ed_flags equ [edi+40] ;д« ЈЁ +//ed_size equ [edi+42] ;Є®«-ў® бЁ¬ў®«®ў +//ed_pos equ [edi+46] ;Ї®§ЁжЁп Єгаб®а  +//ed_offset equ [edi+50] ;ᬥ饭ЁҐ +//cl_curs_x equ [edi+54] ;ЇаҐ¤л¤гй п Є®®а¤Ё­ в  Єгаб®а  Ї® е +//cl_curs_y equ [edi+58] ;ЇаҐ¤л¤гй п Є®®а¤Ё­ в  Єгаб®а  Ї® г +//ed_shift_pos equ [edi+62] ;Ї®«®¦Ґ­ЁҐ Єгаб®а  +//ed_shift_pos_old equ [edi+66] ;бв а®Ґ Ї®«®¦Ґ­ЁҐ Єгаб®а  diff --git a/programs/cmm/lib/encoding.h b/programs/cmm/lib/encoding.h new file mode 100644 index 0000000000..630eb622f8 --- /dev/null +++ b/programs/cmm/lib/encoding.h @@ -0,0 +1,182 @@ + +inline fastcall void wintodos( ESI) +{ + while (BL=ESBYTE[ESI]) + { + IF (BL>=192) + { + IF (BL>=240) ESBYTE[ESI] = BL - 16; + ELSE ESBYTE[ESI] = BL - 64; + } + ELSE + { + IF (BL==178) ESBYTE[ESI] = 73; //I + IF (BL==179) ESBYTE[ESI] = 105; //i + IF (BL==175) ESBYTE[ESI] = 244; //J + IF (BL==191) ESBYTE[ESI] = 245; //j + IF (BL==170) ESBYTE[ESI] = 242; //E + IF (BL==186) ESBYTE[ESI] = 243; //e + IF (BL==168) ESBYTE[ESI] = 240; //р + IF (BL==184) ESBYTE[ESI] = 'e'; //e + IF (BL==180) ESBYTE[ESI] = 254; //г + IF ((BL==147) || (BL==148) || (BL==171) || (BL==187)) ESBYTE[ESI] = 34; + IF ((BL==150) || (BL==151)) ESBYTE[ESI] = 45; + } + ESI++; + } +} + + +byte mas[66] = "椥дЈеЁ©Є«¬­®Їпабвг¦ўмл§инйзкћЂЃ–„…”ѓ•€‰Љ‹ЊЌЋЏџђ‘’“†‚њ›‡ќ™—љ"; +inline fastcall void koitodos( EDI) +{ + WHILE (BL=ESBYTE[EDI]) + { + IF (BL >= 0xC0) + { + BL -= 0xC0; + ESBYTE[EDI] = mas[BL]; + } + //IF (ESBYTE[EDI]=='\244') ESBYTE[EDI]='i'; + EDI++; + } +} + +//Asper, lev +//uncomplete +inline fastcall void utf8rutodos( ESI) +{ + EDI=ESI; + while (BL=ESBYTE[ESI]) + { + IF (BL == 0xD0) || (BL == 0xD1) EDI--; + else IF (BL == 0x81) && (ESBYTE[ESI-1]==0xD0) ESBYTE[EDI] = 0xF0; //ш + else IF (BL == 0x91) && (ESBYTE[ESI-1]==0xD1) ESBYTE[EDI] = 0xF1; //м + //0xE2 0x80 - сгруппировать + else IF (BL == 0xE2) && (ESBYTE[ESI+1]==0x80) + SWITCH (ESBYTE[ESI+2]) + { + case 0x93: //long defis + CASE 0x94: + { + ESBYTE[EDI] = '-'; + ESI+=2; + BREAK; + } + CASE 0xA2: //central point + { + ESBYTE[EDI] = '*'; + ESI+=2; + BREAK; + } + CASE 0xA6: //многоточие + { + ESBYTE[EDI] = ESBYTE[EDI+1] = ESBYTE[EDI+2] = '.'; + EDI+=2; + ESI+=2; + break; + } + } + + else IF (BL == 0xC2) //таблицу перекодировок? + SWITCH(ESBYTE[ESI+1]) { + case 0xAB: //" + CASE 0xBB: //" + { + ESBYTE[EDI] = '\"'; + ESI++; + BREAK; + } + CASE 0xB7: // _ + { + ESBYTE[EDI] = '_'; + ESI++; + BREAK; + } + CASE 0xA0: // Alt+160 - неразбивающий пробел + { + ESBYTE[EDI] = ' '; + ESI++; + BREAK; + } + CASE 0xB0: // градус + { + ESBYTE[EDI] = '\29'; + ESI++; + BREAK; + } + CASE 0xA9: // (c) --- вылет О_о + { + ESBYTE[EDI] = 'c'; + //ESBYTE[EDI] = '('; + //ESBYTE[EDI+1] = 'c'; + //ESBYTE[EDI+2] = ')'; + //EDI+=2; + ESI++; + BREAK; + } + CASE 0xAE: // (r) + { + ESBYTE[EDI] = 'r'; + //ESBYTE[EDI] = '('; + //ESBYTE[EDI+1] = 'r'; + //ESBYTE[EDI+2] = ')'; + //EDI+=2; + ESI++; + BREAK; + } + } + + ELSE IF (BL >= 0x90) && (BL <= 0xAF) + { + BL -= 0x10; + ESBYTE[EDI] = BL; + } + ELSE IF (BL >= 0x80) && (BL <= 0x8F) + { + BL += 0x60; + ESBYTE[EDI] = BL; + } + ELSE IF (BL >= 0xB0) && (BL <= 0xBF) + { + BL -= 0x10; + ESBYTE[EDI] = BL; + } + ELSE ESBYTE[EDI] = BL; + ESI++; + EDI++; + } + WHILE (EDI='0') && (ch<='9')) ch -= '0'; + IF ((ch>='A') && (ch<='F')) ch -= 'A'-10; + IF ((ch>='a') && (ch<='f')) ch -= 'a'-10; + symbol = symbol*0x10 + ch; + } + wintodos(#symbol); + AL=symbol; +} + +/* +int hex2char(dword c) +{ + if (c <=9) + return (c+48); + + return (c - 10 + 'a'); +}*/ diff --git a/programs/cmm/lib/figures.h b/programs/cmm/lib/figures.h new file mode 100644 index 0000000000..3cb8be8e35 --- /dev/null +++ b/programs/cmm/lib/figures.h @@ -0,0 +1,33 @@ +void DrawRectangle(dword x,y,width,height,color1) +{ + DrawBar(x,y,width,1,color1); + DrawBar(x,y+height,width,1,color1); + DrawBar(x,y,1,height,color1); + DrawBar(x+width,y,1,height+1,color1); +} + +void DrawRectangle3D(dword x,y,width,height,color1,color2) +{ + DrawBar(x,y,width+1,1,color1); + DrawBar(x,y+1,1,height-1,color1); + DrawBar(x+width,y+1,1,height,color2); + DrawBar(x,y+height,width,1,color2); +} + +void DrawCaptButton(dword x,y,width,height,id,color,text,text_len) +{ + DefineButton(x,y,width,height,id+BT_HIDE,0xEFEBEF); + WriteText(-text_len*6+width/2+x+1,height/2-3+y,0x80,0,text,0); +} + +void DrawCircle(int x, y, r) +{ + int i; + float px=0, py=r, ii = r * 3.1415926 * 2; + FOR (i = 0; i < ii; i++) + { + PutPixel(px + x, y - py, 0); + px = py / r + px; + py = -px / r + py; + } +} \ No newline at end of file diff --git a/programs/cmm/lib/file_system.h b/programs/cmm/lib/file_system.h new file mode 100644 index 0000000000..0408ee3fcc --- /dev/null +++ b/programs/cmm/lib/file_system.h @@ -0,0 +1,208 @@ +struct f70{ + dword func; + dword param1; + dword param2; + dword param3; + dword param4; + char rezerv; + dword name; +}; + +struct BDVK{ + dword attr; + byte type_name; + byte rez1, rez2, rez3; + dword timecreate; + dword datecreate; + dword timelastaccess; + dword datelastaccess; + dword timelastedit; + dword datelastedit; + dword sizelo; + dword sizehi; + char name[518]; +}; + + +/////////////////////////// +// Запуск программы // +/////////////////////////// +f70 run_file_70; +:int RunProgram(dword run_path, run_param) +{ + run_file_70.func = 7; + run_file_70.param1 = + run_file_70.param3 = + run_file_70.param4 = + run_file_70.rezerv = 0; + run_file_70.param2 = run_param; + run_file_70.name = run_path; + $mov eax,70 + $mov ebx,#run_file_70.func + $int 0x40 +} + +/////////////////////////// +// Создание папки // +/////////////////////////// +f70 create_dir_70; +:int CreateDir(dword new_folder_path) +{ + create_dir_70.func = 9; + create_dir_70.param1 = + create_dir_70.param2 = + create_dir_70.param3 = + create_dir_70.param4 = + create_dir_70.rezerv = 0; + create_dir_70.name = new_folder_path; + $mov eax,70 + $mov ebx,#create_dir_70.func + $int 0x40 +} + +//////////////////////////// +// Удаление файла/папки // +//////////////////////////// +f70 del_file_70; +:int DeleteFile(dword del_file_path) +{ + del_file_70.func = 8; + del_file_70.param1 = + del_file_70.param2 = + del_file_70.param3 = + del_file_70.param4 = + del_file_70.rezerv = 0; + del_file_70.name = del_file_path; + $mov eax,70 + $mov ebx,#del_file_70.func + $int 0x40 +} + +//////////////////////////// +// Прочитать файл // +//////////////////////////// +f70 read_file_70; +:int ReadFile(dword read_pos, read_file_size, read_buffer, read_file_path) +{ + read_file_70.func = 0; + read_file_70.param1 = read_pos; + read_file_70.param2 = 0; + read_file_70.param3 = read_file_size; + read_file_70.param4 = read_buffer; + read_file_70.rezerv = 0; + read_file_70.name = read_file_path; + $mov eax,70 + $mov ebx,#read_file_70.func + $int 0x40 +} + +//////////////////////////// +// Записать файл // +//////////////////////////// +f70 write_file_70; +:int WriteFile(dword write_file_size, write_buffer, write_file_path) +{ + write_file_70.func = 2; + write_file_70.param1 = 0; + write_file_70.param2 = 0; + write_file_70.param3 = write_file_size; + write_file_70.param4 = write_buffer; + write_file_70.rezerv = 0; + write_file_70.name = write_file_path; + $mov eax,70 + $mov ebx,#write_file_70.func + $int 0x40 +} + +/////////////////////////// +// Прочитать папку // +/////////////////////////// +f70 read_dir_70; +:int ReadDir(dword file_count, read_buffer, dir_path) +{ + read_dir_70.func = 1; + read_dir_70.param1 = + read_dir_70.param2 = + read_dir_70.rezerv = 0; + read_dir_70.param3 = file_count; + read_dir_70.param4 = read_buffer; + read_dir_70.name = dir_path; + $mov eax,70 + $mov ebx,#read_dir_70.func + $int 0x40 +} + + +/////////////////////////// +// Параметры файла // +/////////////////////////// +f70 getinfo_file_70; +BDVK getinfo_file_info; +:dword GetFileInfo(dword file_path) +{ + getinfo_file_70.func = 5; + getinfo_file_70.param1 = + getinfo_file_70.param2 = + getinfo_file_70.param3 = 0; + getinfo_file_70.param4 = #getinfo_file_info; + getinfo_file_70.rezerv = 0; + getinfo_file_70.name = file_path; + $mov eax,70 + $mov ebx,#getinfo_file_70.func + $int 0x40 +} + + +/////////////////////////// +// Скопировать файл // +/////////////////////////// +:int CopyFile(dword copy_from, copy_in) +{ + BDVK CopyFile_atr; + dword cBufer=0; + + if (! GetFileInfo(copy_from)) + { + mem_Init(); + cBufer = mem_Alloc(CopyFile_atr.sizelo); + if (! ReadFile(dword 0, CopyFile_atr.sizelo, cBufer, copy_from)) + if (! WriteFile(CopyFile_atr.sizelo, cBufer, copy_in)) return 1; + } + + return 0; +} + + +//Asper +void ReadAttributes(dword read_buffer, file_path) +{ + read_file_70.func = 5; + read_file_70.param1 = 0; + read_file_70.param2 = 0; + read_file_70.param3 = 0; + read_file_70.param4 = read_buffer; + read_file_70.rezerv = 0; + read_file_70.name = file_path; + $mov eax,70 + $mov ebx,#read_file_70.func + $int 0x40 +} + +inline fastcall void SetCurDir( ECX) +{ + $mov eax,30 + $mov ebx,1 + $int 0x40 +} + +inline fastcall void GetCurDir( ECX, EDX) +{ + $mov eax,30 + $mov ebx,2 + $int 0x40 +} + +void notify(dword notify_param) +{ + RunProgram("@notify", notify_param); +} \ No newline at end of file diff --git a/programs/cmm/lib/kolibri.h b/programs/cmm/lib/kolibri.h new file mode 100644 index 0000000000..79edcc8fb0 --- /dev/null +++ b/programs/cmm/lib/kolibri.h @@ -0,0 +1,463 @@ +//CODED by Veliant, Leency, Nable. GNU GPL licence. + +#startaddress 0 +#code32 TRUE + +char os_name[8] = {'M','E','N','U','E','T','0','1'}; +dword os_version = 0x00000001; +dword start_addr = #main; +dword final_addr = #stop+32; +dword alloc_mem = #0x00100000; +dword x86esp_reg = #0x00100000; +dword I_Param = #param; +dword I_Path = #program_path; +char param[4096]; +char program_path[4096]; + +//Events +#define evMouse 6 +#define evButton 3 +#define evKey 2 +#define evReDraw 1 + +#define OLD -1 +#define true 1 +#define false 0 + +#define NULL 0 + +//Button options +#define BT_DEL 0x80000000 +#define BT_HIDE 0x40000000 +#define BT_NOFRAME 0x20000000 + +//------------------------------------------------------------------------- + +struct mouse +{ + int x,y,lkm,pkm,hor,vert; + void get(); +}; + +void mouse::get() +{ + EAX = 37; + EBX = 1; + $int 0x40 + $mov ebx, eax + $shr eax, 16 + $and ebx,0x0000FFFF + x = EAX; + y = EBX; + EAX = 37; + EBX = 2; + $int 0x40 + $mov ebx, eax + $and eax, 0x00000001 + $shr ebx, 1 + $and ebx, 0x00000001 + lkm = EAX; + pkm = EBX; + EAX = 37; //бЄа®«« + EBX = 7; + $int 0x40 + $mov ebx, eax + $shr eax, 16 + $and ebx,0x0000FFFF + //hor = EAX; + vert = EBX; +} + + +struct system_colors +{ + dword frame,grab,grab_button,grab_button_text,grab_text, + work,work_button,work_button_text,work_text,work_graph; + void get(); +}; + +void system_colors::get() +{ + EAX = 48; + EBX = 3; + ECX = #frame; + EDX = 40; + $int 0x40 +} + +//------------------------------------------------------------------------------ + +inline fastcall dword WaitEvent() +{ + $mov eax,10 + $int 0x40 +} + +inline fastcall dword CheckEvent() +{ + $mov eax,11 + $int 0x40 +} + +inline fastcall dword WaitEventTimeout( EBX) +{ + $mov eax,23 + $int 0x40 +} + +inline fastcall SetEventMask( EBX) +{ + $mov eax,40 + $int 0x40 +} + +inline fastcall ScancodesGeting(){ + $mov eax,66 + $mov ebx,1 + $mov ecx,1 //бЄ ­Є®¤л + $int 0x40 +} + +inline fastcall word GetKey() //+Gluk fix +{ + $push edx +@getkey: + $mov eax,2 + $int 0x40 + $cmp eax,1 + $jne getkeyi + $mov ah,dh + $jmp getkeyii //jz? +@getkeyi: + $mov dh,ah + $jmp getkey +@getkeyii: + $pop edx + $shr eax,8 +} + + +inline fastcall Pause( EBX) +{ + $mov eax, 5 + $int 0x40 +} + +inline fastcall word GetButtonID() +{ + $mov eax,17 + $int 0x40 + $shr eax,8 +} + +//---------------------------------------- + +inline fastcall dword GetFreeRAM() +{ + $mov eax, 18 + $mov ebx, 16 + $int 0x40 + //return eax = размер свободной памяти в килобайтах +} + +inline fastcall dword LoadDriver( ECX) //ECX - имя драйвера +{ + $mov eax, 68 + $mov ebx, 16 + $int 0x40 + //return 0 - неудача, иначе eax = хэндл драйвера +} + +inline fastcall dword RuleDriver( ECX) //указатель на управляющую структуру +{ + $mov eax, 68 + $mov ebx, 17 + $int 0x40 + //return eax = определяется драйвером +} + +struct proc_info +{ + #define SelfInfo -1 + dword use_cpu; + word pos_in_stack,num_slot,rezerv1; + char name[11]; + char rezerv2; + dword adress,use_memory,ID,left,top,width,height; + word status_slot,rezerv3; + dword work_left,work_top,work_width,work_height; + char status_window; + void GetInfo( ECX); + byte reserved[1024-71]; +}; + +inline fastcall void GetProcessInfo( EBX, ECX) +{ + $mov eax,9; + $int 0x40 +} + +inline fastcall int GetPointOwner( EBX, ECX) //ebx=m.x, ecx=m.y +{ + $mov eax,34 + $int 0x40 +} + +inline fastcall int GetProcessSlot( ECX) +{ + EAX = 18; + EBX = 21; + $int 0x40 +} + +inline fastcall int GetActiveProcess() +{ + EAX = 18; + EBX = 7; + $int 0x40 +} + +inline fastcall int CreateThread( ECX,EDX) +{ + $mov eax,51 + $mov ebx,1 + $int 0x40 +} + +inline fastcall void SwitchToAnotherThread() +{ + $mov eax,68 + $mov ebx,1 + $int 0x40 +} + +inline fastcall int KillProcess( ECX) +{ + $mov eax,18; + $mov ebx,18; + $int 0x40 +} + +#define TURN_OFF 2 +#define REBOOT 3 +#define KERNEL 4 +inline fastcall int ExitSystem( ECX) +{ + $mov eax, 18 + $mov ebx, 9 + $int 0x40 +} + +inline fastcall ExitProcess() +{ + $mov eax,-1; + $int 0x40 +} + +//------------------------------------------------------------------------------ + +//eax = язык системы (1=eng, 2=fi, 3=ger, 4=rus) +inline fastcall int GetSystemLanguage() +{ + EAX = 26; + EBX = 5; + $int 0x40 +} + +inline fastcall GetSkinHeight() +{ + $push ebx + $mov eax,48 + $mov ebx,4 + $int 0x40 + $pop ebx +} + +inline fastcall void SetSystemSkin( ECX) +{ + EAX = 48; + EBX = 8; + $int 0x40 +} + +inline fastcall int GetScreenWidth() +{ + $mov eax, 14 + $int 0x40 + $shr eax, 16 +} + +inline fastcall int GetScreenHeight() +{ + $mov eax, 14 + $int 0x40 + $and eax,0x0000FFFF +} + +inline fastcall dword LoadLibrary( ECX) +{ + $mov eax, 68 + $mov ebx, 19 + $int 0x40 +} + +inline fastcall int TestBit( EAX, CL) +{ + $shr eax,cl + $and eax,1 +} + +inline fastcall int PlaySpeaker( ESI) +{ + $mov eax, 55 + $mov ebx, 55 + $int 0x40 +} + +inline fastcall void debug( EDX) +{ + $push ebx + $push ecx + $mov eax, 63 + $mov ebx, 1 +next_char: + $mov ecx, DSDWORD[edx] + $or cl, cl + $jz done + $int 0x40 + $inc edx + $jmp next_char +done: + $mov cl, 13 + $int 0x40 + $mov cl, 10 + $int 0x40 + $pop ecx + $pop ebx +} +//------------------------------------------------------------------------------ + +void DefineAndDrawWindow(dword x,y, sizeX,sizeY, byte WindowType,dword WindowAreaColor, EDI, ESI) +{ + EAX = 12; // function 12:tell os about windowdraw + EBX = 1; + $int 0x40 + + EAX = 0; + EBX = x << 16 + sizeX; + ECX = y << 16 + sizeY; + EDX = WindowType << 24 | WindowAreaColor; + $int 0x40 + + EAX = 12; // function 12:tell os about windowdraw + EBX = 2; + $int 0x40 +} + +inline fastcall DeleteAllButtons() +{ + EAX = 12; // function 12:tell os about windowdraw + EBX = 1; + $int 0x40 + EBX = 2; + $int 0x40 +} + +inline fastcall MoveSize( EBX,ECX,EDX,ESI) +{ + $mov eax, 67 + $int 0x40 +} + +inline fastcall void DrawTitle( ECX) +{ + EAX = 71; + EBX = 1; + $int 0x40; +} + +void WriteText(dword x,y,byte fontType, dword color, EDX, ESI) +{ + EAX = 4; + EBX = x<<16+y; + ECX = fontType<<24+color; + $int 0x40; +} + +void WriteNumber(dword x,y,byte fontType, dword color, count, ECX) +{ + EAX = 47; + EBX = count<<16; + EDX = x<<16+y; + ESI = fontType<<24+color; + $int 0x40; +} + +void CopyScreen(dword EBX, x, y, sizeX, sizeY) +{ + EAX = 36; + ECX = sizeX << 16 + sizeY; + EDX = x << 16 + y; + $int 0x40; +} + +dword GetPixelColor(dword x, x_size, y) +{ + $mov eax, 35 + EBX= y*x_size+x; + $int 0x40 +} + +void PutImage(dword EBX,w,h,x,y) +{ + EAX = 7; + ECX = w<<16+h; + EDX = x<<16+y; + $int 0x40 +} + +void _PutImage(dword x,y, w,h, EBX) +{ + EAX = 7; + ECX = w<<16+h; + EDX = x<<16+y; + $int 0x40 +} + +void PutPaletteImage(dword EBX,w,h,x,y,ESI,EDI) +{ + EAX = 65; + ECX = w<<16+h; + EDX = x<<16+y; + EBP = 0; + $int 0x40 +} + +inline fastcall void PutPixel( EBX,ECX,EDX) +{ + EAX=1; + $int 0x40 +} + +void DrawBar(dword x,y,w,h,EDX) +{ + EAX = 13; + EBX = x<<16+w; + ECX = y<<16+h; + $int 0x40 +} + +void DefineButton(dword x,y,w,h,EDX,ESI) +{ + EAX = 8; + EBX = x<<16+w; + ECX = y<<16+h; + $int 0x40 +} + +inline fastcall void DeleteButton( EDX) +{ + EAX = 8; + EDX += BT_DEL; + $int 0x40; +} \ No newline at end of file diff --git a/programs/cmm/lib/libimg_lib.h b/programs/cmm/lib/libimg_lib.h new file mode 100644 index 0000000000..f9650b3eeb --- /dev/null +++ b/programs/cmm/lib/libimg_lib.h @@ -0,0 +1,104 @@ +//Asper + +//library +dword libimg = #alibimg; +char alibimg[21] = "/sys/lib/libimg.obj\0"; + +dword libimg_init = #alibimg_init; +dword img_is_img = #aimg_is_img; +dword img_to_rgb2 = #aimg_to_rgb2; +dword img_decode = #aimg_decode; +dword img_destroy = #aimg_destroy; +dword img_draw = #aimg_draw; +//dword img_flip = #aimg_flip; +//dword img_rotate = #aimg_rotate; + +dword am1__ = 0x0; +dword bm1__ = 0x0; + +//import libimg , \ +char alibimg_init[9] = "lib_init\0"; +char aimg_is_img[11] = "img_is_img\0"; +char aimg_to_rgb2[12] = "img_to_rgb2\0"; +char aimg_decode[11] = "img_decode\0"; +char aimg_destroy[12] = "img_destroy\0"; +char aimg_draw[9] = "img_draw\0"; +//char aimg_flip[9] = "img_flip\0"; +//char aimg_rotate[11] = "img_rotate\0 "; + + + +dword load_image(dword filename) +{ + //align 4 + dword img_data=0; + dword img_data_len=0; + dword fh=0; + dword image=0; + + byte tmp_buf[40]; + $and img_data, 0 + //$mov eax, filename + //$push eax + //invoke file.open, eax, O_READ + file_open stdcall (filename, O_READ); + $or eax, eax + $jnz loc05 + $stc + return 0; + @loc05: + $mov fh, eax + //invoke file.size + file_size stdcall (filename); + $mov img_data_len, ebx + //stdcall mem.Alloc, ebx + mem_Alloc(EBX); + + $test eax, eax + $jz error_close + $mov img_data, eax + //invoke file.read, [fh], eax, [img_data_len] + file_read stdcall (fh, EAX, img_data_len); + $cmp eax, -1 + $jz error_close + $cmp eax, img_data_len + $jnz error_close + //invoke file.close, [fh] + file_close stdcall (fh); + $inc eax + $jz error_ +//; img.decode checks for img.is_img +//; //invoke img.is_img, [img_data], [img_data_len] +//; $or eax, eax +//; $jz exit + //invoke img.decode, [img_data], [img_data_len], 0 + EAX=img_data; + img_decode stdcall (EAX, img_data_len,0); + $or eax, eax + $jz error_ + $cmp image, 0 + $pushf + $mov image, eax + //call init_frame + $popf + //call update_image_sizes + mem_Free(img_data);//free_img_data(img_data); + $clc + return image; + +@error_free: + //invoke img.destroy, [image] + img_destroy stdcall (image); + $jmp error_ + +@error_pop: + $pop eax + $jmp error_ +@error_close: + //invoke file.close, [fh] + file_close stdcall (fh); +@error_: + mem_Free(img_data); + $stc + return 0; +} diff --git a/programs/cmm/lib/libio_lib.h b/programs/cmm/lib/libio_lib.h new file mode 100644 index 0000000000..1ef15c7b45 --- /dev/null +++ b/programs/cmm/lib/libio_lib.h @@ -0,0 +1,36 @@ +//Asper + +//library +dword libio = #alibio; +char alibio[21] = "/sys/lib/libio.obj\0"; //"libio.obj\0"; + +dword libio_init = #alibio_init; +dword file_size = #afile_size; +dword file_open = #afile_open; +dword file_read = #afile_read; +dword file_close = #afile_close; + +dword am2__ = 0x0; +dword bm2__ = 0x0; + + +//import libio , \ +char alibio_init[9] = "lib_init\0"; +char afile_size[11] = "file_size\0"; +char afile_open[12] = "file_open\0"; +char afile_read[11] = "file_read\0"; +char afile_close[12] = "file_close\0"; + +//align 4 +//dword fh=0; + +#define O_BINARY 0 +#define O_READ 1 +#define O_WRITE 2 +#define O_CREATE 4 +#define O_SHARE 8 +#define O_TEXT 16 + +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 diff --git a/programs/cmm/lib/mem.h b/programs/cmm/lib/mem.h new file mode 100644 index 0000000000..06fcc894db --- /dev/null +++ b/programs/cmm/lib/mem.h @@ -0,0 +1,203 @@ +//mem.Init +dword mem_Init() +{ + $push ebx + $mov eax, 68 + $mov ebx, 11 + $int 0x40 + + $pop ebx + return EAX; +} + +//mem.Alloc +dword mem_Alloc(dword size) +{ + $push ebx + $push ecx + $mov eax, 68 + $mov ebx, 12 + $mov ecx, size + $int 0x40 + + $pop ecx + $pop ebx + return EAX; +} + +//mem.ReAlloc +stdcall dword mem_ReAlloc(dword mptr, size) +{ + $push ebx + $push ecx + $push edx + $mov eax, 68 + $mov ebx, 20 + $mov ecx, size + $mov edx, mptr + $int 0x40 + + $pop edx + $pop ecx + $pop ebx + return EAX; +} + +//mem.Free +void mem_Free(dword mptr) +{ + $push eax + $push ebx + $push ecx + $mov eax, 68 + $mov ebx, 13 + $mov ecx, mptr + $test ecx, ecx + $jz end0 + $int 0x40 + @end0: + $pop ecx + $pop ebx + $pop eax +} + +//stdcall dword ?? +inline fastcall mem_Move( EDI, ESI, ECX) +{ + asm { + MOV EAX, ECX + CMP EDI, ESI + JG L1 + JE L2 + SAR ECX, 2 + JS L2 + REP MOVSD + MOV ECX, EAX + AND ECX, 3 + REP MOVSB + JMP SHORT L2 +L1: LEA ESI, DSDWORD[ ESI+ECX-4] + LEA EDI, DSDWORD[ EDI+ECX-4] + SAR ECX, 2 + JS L2 + STD + REP MOVSD + MOV ECX, EAX + AND ECX, 3 + ADD ESI, 3 + ADD EDI, 3 + REP MOVSB + CLD +L2: + } +} + + +/*:void fastcall memsetz( EDI, ECX) +{ + asm { + XOR EAX, EAX + MOV EDX, ECX + SHR ECX, 2 + REP STOSD + MOV ECX, EDX + AND ECX, 3 + REP STOSB + } +} + +:void fastcall memset( EDI, ECX, AL) +{ + asm { + MOV AH, AL + MOVZX EDX, AX + SHL EAX, 16 + OR EAX, EDX + MOV EDX, ECX + SHR ECX, 2 + REP STOSD + MOV ECX, EDX + AND ECX, 3 + REP STOSB + } +} + +:void fastcall memcpy( EDI, ESI, ECX) +{ + asm { + MOV EDX, ECX + SHR ECX, 2 + REP MOVSD + MOV ECX, EDX + AND ECX, 3 + REP MOVSB + } +} + +:void fastcall memsetd( EDI, ECX, EAX) +{ + asm { + REP STOSD + } +} + +:void fastcall memcpyd( EDI, ESI, ECX) +{ + asm { + REP MOVSD + } +} + +:void fastcall memmov( EDI, ESI, ECX) +{ + asm { + MOV EAX, ECX + CMP EDI, ESI + JG L1 + JE L2 + SAR ECX, 2 + JS L2 + REP MOVSD + MOV ECX, EAX + AND ECX, 3 + REP MOVSB + JMP SHORT L2 +L1: LEA ESI, DSDWORD[ ESI+ECX-4] + LEA EDI, DSDWORD[ EDI+ECX-4] + SAR ECX, 2 + JS L2 + STD + REP MOVSD + MOV ECX, EAX + AND ECX, 3 + ADD ESI, 3 + ADD EDI, 3 + REP MOVSB + CLD +L2: + } +} + +:long fastcall memcmp( ESI, EDI, ECX) +{ + asm { + MOV EAX, ECX + SHR ECX, 2 + REPE CMPSD + MOV ECX, EAX + AND ECX, 3 + REPE CMPSB + XOR EAX, EAX + XOR ECX, ECX + MOV AL, DSBYTE[ ESI-1] + MOV CL, DSBYTE[ EDI-1] + SUB EAX, ECX + } +}*/ + + +/*#define memzset memsetz +#define memset0 memsetz +#define mem0set memsetz +#define memset32 memsetd +#define memcpy32 memcpyd*/ diff --git a/programs/cmm/lib/memory.h b/programs/cmm/lib/memory.h new file mode 100644 index 0000000000..475017e565 --- /dev/null +++ b/programs/cmm/lib/memory.h @@ -0,0 +1,66 @@ +#code32 TRUE + +inline fastcall dword malloc(dword ECX){ + dword size, heap; + #speed + size = ECX; + EAX = 68; + EBX = 11; + $int 0x40; + heap = EAX; + IF (size<=heap) + { + EAX = 68; + EBX = 12; + ECX = size; + $int 0x40; + } + ELSE EAX=-1; + #codesize +} + +inline fastcall dword free(dword ECX){ + #speed + EAX = 68; + EBX = 13; + $int 0x40; + #codesize +} + +inline fastcall dword realloc(dword ECX, EDX){ + #speed + EAX = 68; + EBX = 20; + $int 0x40; + #codesize +} + +inline fastcall memmov( EDI, ESI, ECX) +{ + asm { + MOV EAX, ECX + CMP EDI, ESI + JG L1 + JE L2 + SAR ECX, 2 + JS L2 + REP MOVSD + MOV ECX, EAX + AND ECX, 3 + REP MOVSB + JMP SHORT L2 +L1: LEA ESI, DSDWORD[ ESI+ECX-4] + LEA EDI, DSDWORD[ EDI+ECX-4] + SAR ECX, 2 + JS L2 + STD + REP MOVSD + MOV ECX, EAX + AND ECX, 3 + ADD ESI, 3 + ADD EDI, 3 + REP MOVSB + CLD +L2: + } +} diff --git a/programs/cmm/lib/random.h b/programs/cmm/lib/random.h new file mode 100644 index 0000000000..a6d5282f28 --- /dev/null +++ b/programs/cmm/lib/random.h @@ -0,0 +1,55 @@ +/******************************************************************************* + + MenuetOS MineSweeper + Copyright (C) 2003 Ivan Poddubny + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*******************************************************************************/ + +dword generator; // random number generator - для генерации случайных чисел + +inline fastcall int random( ECX) +// get pseudo-random number - получить псевдослучайное число +{ + $push ebx + + $rdtsc // eax & edx + $xor eax,edx + $not eax + + EBX = generator; + $ror ebx,3 + $xor ebx,0xdeadbeef + EBX += EAX; + generator = EBX; + + EAX += EBX; + EAX = EAX % ECX; + + $pop ebx +} + +inline fastcall randomize() +// initialize random number generator - инициализировать генератор случайных чисел +{ + asm + { + mov eax,3 + int 0x40 + ror eax,16 + } + generator = EAX; +} \ No newline at end of file diff --git a/programs/cmm/lib/scroll_lib.h b/programs/cmm/lib/scroll_lib.h new file mode 100644 index 0000000000..27e88a36a2 --- /dev/null +++ b/programs/cmm/lib/scroll_lib.h @@ -0,0 +1,95 @@ +//lev +//:dword boxlib = #abox_lib; +:char abox_lib[]="/sys/lib/box_lib.obj"; + +:char aboxlib_init[] = "lib_init"; +:char aScrollbar_v_draw = "scrollbar_v_draw"; +:char aScrollbar_v_mouse = "scrollbar_v_mouse"; +:char aScrollbar_h_draw = "scrollbar_h_draw"; +:char aScrollbar_h_mouse = "scrollbar_h_mouse"; +:char aVersion_scrollbar = "version_scrollbar"; + +dword boxlib_init = #aboxlib_init; +dword scrollbar_v_draw = #aScrollbar_v_draw; +dword scrollbar_v_mouse = #aScrollbar_v_mouse; +dword scrollbar_h_draw = #aScrollbar_h_draw; +dword scrollbar_h_mouse = #aScrollbar_h_mouse; +:dword version_scrollbar = #aVersion_scrollbar; + +dword sc_am__ = 0x0; +dword sc_bm__ = 0x0; + +struct scroll_bar +{ +//scroll_bar: +word size_x,// equ [edi] +start_x,// equ [edi+2] +size_y,// equ [edi+4] +start_y;// equ [edi+6] +dword btn_height, // equ [edi+8] +type,// equ [edi+12] +max_area,// equ [edi+16] +cur_area,// equ [edi+20] +position,// equ [edi+24] +bckg_col,// equ [edi+28] +frnt_col,// equ [edi+32] +line_col,// equ [edi+36] +redraw;// equ [edi+40] +word delta,// equ [edi+44] +delta2,// equ [edi+46] +r_size_x,// equ [edi+48] +r_start_x,// equ [edi+50] +r_size_y,// equ [edi+52] +r_start_y;// equ [edi+54] +dword m_pos,// equ [edi+56] +m_pos_2,// equ [edi+60] +m_keys,// equ [edi+64] +run_size,// equ [edi+68] +position2,// equ [edi+72] +work_size,// equ [edi+76] +all_redraw,// equ [edi+80] +ar_offset;// equ [edi+84] +}; + +/*scroll_bar scroll1 = { +18,//word size_x, +200, //start_x, +398, //size_y, +44,//start_y; +18,//dword btn_height, +0,//type, +115,//max_area, (100+cur_area) +15,//cur_area, +0,//position, +0xeeeeee,//bckg_col, +0xD2CED0,//frnt_col, +0x555555,//line_col, +0,//redraw; +0,//word delta, +0,//delta2, +0,//r_size_x, +0,//r_start_x, +0,//r_size_y, +0,//r_start_y; +0,//dword m_pos, +0,//m_pos_2, +0,//m_keys, +0,//run_size, +0,//position2, +0,//work_size, +1,//all_redraw, +1//ar_offset; +};*/ + +//btn_height - ўлб®в  Ў®Є®ўле Є­®Ї®Є («Ґў п Ё Їа ў п ¤«п Ј®аЁ§. Ё ўҐае­пп Ё ­Ё¦­пп ¤«п ўҐав.) +//type - type - 0-1-2, ®бв «м­лҐ ўлЈ«п¤пв Є Є 0. +//max_area - ®Ў« бвм ¬ ЄбЁ¬ «м­ п,  Євг «м­® Є®Ј¤  ­Ґ ў« §Ёв ў ®в®Ўа ¦ Ґ¬го ®Ў« бвм, в.Ґ. б«гз ©  ЄвЁў­®бвЁ Є®¬Ї®­Ґ­в  (ўҐбм ¬ ЄбЁ¬ «м­л© а §¬Ґа ¤®Єг¬Ґ­в ) +//cur_area - а §¬Ґа ЎҐЈг­Є //®Ў« бвм ®в®Ўа ¦ Ґ¬ п (Є Є п з бвм ¤®Єг¬Ґ­в  ў« §Ёв ў нЄа ­) +//position - Ї®§ЁжЁп ЎҐЈг­Є  Ё§¬Ґ­пҐ¬ п ®в 0 ¤® §­ зҐ­Ёп (max_area-cur_area) +//bckg_col - 梥⠢­гв७­Ё©, ЇаЁ¬Ґ­пҐвбп ¤«п ®Ў« б⥩ ¬Ґ¦¤г ЎҐЈг­Є®¬ Ё Є­®Є ¬Ё +//frnt_col - 梥⠭ аг¦­л©, ЇаЁ¬Ґ­пҐвбп ¤«п ®Ў« б⥩ ®в«Ёз­ле ®в ЇаЁ¬Ґ­пҐ¬ле ў bckg_col +//line_col - 梥⠫Ё­Ё© Ё бв५®Є ­  Є­®ЇЄ е +//redraw - Ё­¤ЁЄ в®а ­Ґ®Ўе®¤Ё¬®бвЁ ЇҐаҐаЁб®ўЄЁ гЇа ў«пҐ¬®© ®Ў« бвЁ гзЁвлў п Ё§¬Ґ­Ґ­ЁҐ position Ё cur_area +//delta2 - Ё­¤ЁЄ в®а § еў в  д®Єгб  бЄа®««Ў а®¬ (㤥ঠ­ЁҐ ЎҐЈг­Є ) +//all_redraw - д« Ј гбв ­ ў«Ёў Ґ¬л© ў 1 ¤«п ЇҐаҐаЁб®ўЄЁ ўбҐЈ® Є®¬Ї®­Ґ­в , Ґб«Ё Ї®бв ўЁвм 0, в® ЇҐаҐаЁб®ўЄ  Їа®Ёб室Ёв в®«мЄ® ¤«п ®Ў« бвЁ ЎҐЈг­Є . ‚ўҐ¤Ґ­® ¤«п г᪮७Ёп ®ваЁб®ўЄЁ, Ї®бЄ®«мЄг ­Ґ ў® ўбҐе б«гз пе вॡгҐвбп ЇаЁ­г¤ЁвҐм­® ®ваЁб®ўлў вм ўбҐ з бвЁ Є®¬Ї®­Ґ­в . Љ®Ј¤  ўл§лў Ґвбп Ї® б®ЎлвЁо ¬лиЁ ўбҐЈ¤  ®ваЁб®ўлў Ґвбп б ¬Ё¬ Є®¬Ї®­Ґ­в®¬ б® §­ зҐ­ЁҐ¬ 0. +//ar_offset - ўҐ«ЁзЁ­  ᬥ饭Ёп ЇаЁ ®¤­®Єа в­®¬ ­ ¦ вЁЁ Ў®Є®ў®© Є­®ЇЄЁ. diff --git a/programs/cmm/lib/strings.h b/programs/cmm/lib/strings.h new file mode 100644 index 0000000000..8d71313fd6 --- /dev/null +++ b/programs/cmm/lib/strings.h @@ -0,0 +1,336 @@ +//------------------------------------------------------------------------------ +// strcmp( ESI, EDI) +// strlen( EDI) +// strcpy( EDI, ESI) +// strcat( EDI, ESI) +// strchr( ESI,BL) +// strrchr( ESI,BL) +// strstr( EBX, EDX) +// itoa( ESI) +// atoi( EAX) +// strupr( ESI) +// strlwr( ESI) ----- возможно не поддерживает кириллицу +// strttl( EDX) +// strtok( ESI) +//------------------------------------------------------------------------------ + +inline fastcall signed int strcmp( ESI, EDI) +{ + loop() + { + IF (DSBYTE[ESI]DSBYTE[EDI]) RETURN 1; + IF (DSBYTE[ESI]=='\0') RETURN 0; + ESI++; + EDI++; + } +} + + +inline fastcall signed int strncmp( ESI, EDI, ECX) +{ + asm { + MOV EBX, EDI + XOR EAX, EAX + MOV EDX, ECX + OR ECX, ECX + JE L1 + REPNE SCASB + SUB EDX, ECX + MOV ECX, EDX + MOV EDI, EBX + XOR EBX, EBX + REPE CMPSB + MOV AL, DSBYTE[ ESI-1] + MOV BL, DSBYTE[ EDI-1] + SUB EAX, EBX +L1: + } +} + + + +/* + +inline fastcall signed int strcmpi( ESI,EDI) +uses EBX +{ + do{ + $lodsb + IF(AL>='a')&&(AL<='z')AL-=0x20; + BL=DSBYTE[(E)DI]; + IF(BL>='a')&&(BL<='z')BL-=0x20; + AL-=BL; + IF(!ZEROFLAG)BREAK; + (E)DI++; + }while(BL!=0); +} + +inline char STRNCMPI((E)SI,(E)DI,(E)CX) +{ + (E)AX=0; + LOOPNZ((E)CX){ + $lodsb + IF(AL>='a')&&(AL<='z')AL-=0x20; + AH=DSBYTE[EDI]; + IF(AH>='a')&&(AH<='z')AH-=0x20; + EDI++; + IF(AL==0)||(AH==0)||(AL!=AH)BREAK; + } + AL=AL-AH; +}*/ + + + +inline fastcall unsigned int strlen( EDI) +{ + $xor eax, eax + $mov ecx, -1 + $REPNE $SCASB + EAX-=2+ECX; +} + + +inline fastcall strcpy( EDI, ESI) +{ + $cld +l2: + $lodsb + $stosb + $test al,al + $jnz l2 +} + + +inline fastcall strcat( EDI, ESI) +{ + asm { + mov ebx, edi + xor ecx, ecx + xor eax, eax + dec ecx + repne scasb + dec edi + mov edx, edi + mov edi, esi + xor ecx, ecx + xor eax, eax + dec ecx + repne scasb + xor ecx, 0ffffffffh + mov edi, edx + mov edx, ecx + mov eax, edi + shr ecx, 2 + rep movsd + mov ecx, edx + and ecx, 3 + rep movsb + mov eax, ebx + } +} + +dword itoa( ESI) +{ + unsigned char buffer[11]; + EDI = #buffer; + ECX = 10; + if (ESI < 0) + { + $mov al, '-' + $stosb + $neg esi + } + + $mov eax, esi + $push -'0' +f2: + $xor edx, edx + $div ecx + $push edx + $test eax, eax + $jnz f2 +f3: + $pop eax + $add al, '0' + $stosb + $jnz f3 + + $mov al, '\0' + $stosb + + return #buffer; +} + + + +inline fastcall dword atoi( EDI) +{ + ESI=EDI; + IF(DSBYTE[ESI]=='-')ESI++; + EAX=0; + BH=AL; + do{ + BL=DSBYTE[ESI]-'0'; + EAX=EAX*10+EBX; + ESI++; + }while(DSBYTE[ESI]>0); + IF(DSBYTE[EDI]=='-') -EAX; +} + + +inline fastcall signed int strchr( ESI,BL) +{ + int jj=0; + do{ + jj++; + $lodsb + IF(AL==BL) return jj; + } while(AL!=0); + return 0; +} + + +inline fastcall signed int strrchr( ESI,BL) +{ + int jj=0, last=0; + do{ + jj++; + $lodsb + IF(AL==BL) last=jj; + } while(AL!=0); + return last; +} + + +inline fastcall strupr( ESI) +{ + do{ + AL=DSBYTE[ESI]; + IF(AL>='a')IF(AL<='z')DSBYTE[ESI]=AL&0x5f; + IF (AL>=160) && (AL<=175) DSBYTE[ESI] = AL - 32; //а-п + IF (AL>=224) && (AL<=239) DSBYTE[ESI] = AL - 80; //а-п + ESI++; + }while(AL!=0); +} + +inline fastcall strlwr( ESI) +{ + do{ + $LODSB + IF(AL>='A')&&(AL<='Z'){ + AL+=0x20; + DSBYTE[ESI-1]=AL; + CONTINUE; + } + }while(AL!=0); +} + +inline fastcall strttl( EDX) +{ + AL=DSBYTE[EDX]; + IF(AL>='a')&&(AL<='z')DSBYTE[EDX]=AL&0x5f; + IF (AL>=160) && (AL<=175) DSBYTE[EDX] = AL - 32; //а-п + IF (AL>=224) && (AL<=239) DSBYTE[EDX] = AL - 80; //а-п + do{ + EDX++; + AL=DSBYTE[EDX]; + IF(AL>='A')&&(AL<='Z'){DSBYTE[EDX]=AL|0x20; CONTINUE;} + IF(AL>='Ђ')&&(AL<='Џ')DSBYTE[EDX]=AL|0x20; // -Ї + IF (AL>=144) && (AL<=159) DSBYTE[EDX] = AL + 80; //а-п + }while(AL!=0); +} + + + +inline fastcall dword strstr( EBX, EDX) +{ + asm { + MOV EDI, EDX + XOR ECX, ECX + XOR EAX, EAX + DEC ECX + REPNE SCASB + NOT ECX + DEC ECX + JE LS2 + MOV ESI, ECX + XOR ECX, ECX + MOV EDI, EBX + DEC ECX + REPNE SCASB + NOT ECX + SUB ECX, ESI + JBE LS2 + MOV EDI, EBX + LEA EBX, DSDWORD[ ESI-1] +LS1: MOV ESI, EDX + LODSB + REPNE SCASB + JNE LS2 + MOV EAX, ECX + PUSH EDI + MOV ECX, EBX + REPE CMPSB + POP EDI + MOV ECX, EAX + JNE LS1 + LEA EAX, DSDWORD[ EDI-1] + JMP SHORT LS3 +LS2: XOR EAX, EAX +LS3: + } +} + + + + +/* strtok( LPSTR dest, src, divs); +src - указатель на исходную строку или результат предыдущего вызова +dest - указатель на буфер, куда будет скопировано слово +divs - указатель на строку, содержащую символы-разделители +Возвращает: 0, если слов больше нет + не 0, если слово скопировано в dest (передайте это значение + в качестве src для последующего поиска) */ + +inline fastcall dword strtok( EDX, ESI, EBX) +{ + asm { + XOR ECX, ECX + MOV EDI, EBX + XOR EAX, EAX + DEC ECX + REPNE SCASB + XOR ECX, 0FFFFFFFFH + DEC ECX + PUSH ECX +L1: LODSB + OR AL, AL + JZ L4 + MOV EDI, EBX + MOV ECX, SSDWORD[ ESP] + REPNE SCASB + JZ L1 + DEC ESI +L2: LODSB + MOV EDI, EBX + MOV ECX, SSDWORD[ ESP] + REPNE SCASB + JZ L3 + MOV DSBYTE[ EDX], AL + INC EDX + JMP SHORT L2 +L3: MOV EAX, ESI +L4: POP ECX + } DSBYTE[ EDX] = 0; +} + +#define strncpy strcpyn +#define strnmov strmovn +#define stricmp strcmpi +#define strcmpn strncmp +#define strncmpi strcmpni +#define stricmpn strcmpni +#define strnicmp strcmpni +#define strincmp strcmpni +#define strcmpin strcmpni \ No newline at end of file diff --git a/programs/cmm/lib/truetype.h b/programs/cmm/lib/truetype.h new file mode 100644 index 0000000000..5d8c3057fd --- /dev/null +++ b/programs/cmm/lib/truetype.h @@ -0,0 +1,29 @@ +//это вставить после загрузки основных библиотек + +char fontinfo[28]; + +dword libtruetype = #att; + +char att[] = "/sys/lib/truetype.obj"; //"truetype.obj\0"; + +dword truetype = #att_truetype; +dword get_length = #att_get_length; +dword get_width = #att_get_width; +dword text_out = #att_text_out; +dword init_font = #att_init_font; + +dword am3__ = 0x0; +dword bm3__ = 0x0; + +//import libimg , \ + +char att_truetype[] = "truetype"; +char att_get_length[] = "get_length"; +char att_get_width[] = "get_width"; +char att_text_out[] = "text_out"; +char att_init_font[] = "init_font"; + +//load_dll2(libtruetype, #truetype,0); + +//а это - в момент отрисовки окна +//text_out stdcall (#text, -1, 40, 0xFF0000, 100, 100); diff --git a/programs/cmm/new_end/compile.bat b/programs/cmm/new_end/compile.bat new file mode 100644 index 0000000000..8479ff818e --- /dev/null +++ b/programs/cmm/new_end/compile.bat @@ -0,0 +1,6 @@ +..\C--\C-- end.c +del end +rename end.com end +..\C--\kpack end +pause +del warning.txt diff --git a/programs/cmm/new_end/end.c b/programs/cmm/new_end/end.c new file mode 100644 index 0000000000..1b044e4e02 --- /dev/null +++ b/programs/cmm/new_end/end.c @@ -0,0 +1,161 @@ +#include "..\lib\kolibri.h" +#include "..\lib\figures.h" +#include "..\lib\strings.h" +#include "..\lib\random.h" +#include "..\lib\mem.h" +#include "..\lib\file_system.h" + +#ifndef ru + char *BUTTONS_CAPTIONS[]={ + "Перезагрузка [Enter]"w, 13, + "Выключение [End]"w, 181, + "Ядро [Home]"w, 180, + "Отмена [Esc]"w, 27, + 0}; +#else + char *BUTTONS_CAPTIONS[]={ + " Reboot [Enter]",13, + " Power off [End]",181, + " Kernel [Home]",180, + " Close [Esc]",27, + 0}; +#endif + +system_colors sc; + +unsigned char moon[6*6] = FROM "moon.raw"; + +int WIN_SIZE_X, WIN_SIZE_Y; +int PANEL_X, PANEL_Y; + +#define NIGHT_PALEL_HEIGHT 45 +#define STARS_COUNT 30 + +#define PANEL_SIZE_X 260 +#define PANEL_SIZE_Y 165 + +dword stars_col[4]={0xD2CF19, 0x716900, 0x002041}; //0x005BFF - голубой, редко + + + + +void main() +{ + int key; + + Pause(10); + + WIN_SIZE_X=GetScreenWidth()+1; + WIN_SIZE_Y=GetScreenHeight()+1; + + PANEL_X=WIN_SIZE_X-PANEL_SIZE_X/2; + PANEL_Y=WIN_SIZE_Y-PANEL_SIZE_Y/2; + + loop() + { + WaitEventTimeout(130); + switch(EAX & 0xFF) + { + case evButton: + key=GetButtonID(); + if (key==1) ExitProcess(); + GOTO _BUTTON_MARK; + + case evKey: + key = GetKey(); + _BUTTON_MARK: + if (key== 13) ExitSystem(REBOOT); //ENTER + if (key==180) ExitSystem(KERNEL); //HOME + if (key==181) ExitSystem(TURN_OFF); //END + if (key== 27) ExitProcess(); //ESC + if (key== 19) //CTRL+S + { + RunProgram("rdsave",0); + ExitProcess(); + } + break; + + case evReDraw: + draw_window(); + break; + default: + draw_stars(); + } + } +} + + + +void draw_window() +{ + int x, y; + sc.get(); + + DefineAndDrawWindow(0,0,WIN_SIZE_X, WIN_SIZE_Y, 0x01, 0, 0, 0x01fffFFF); + + draw_main_area(PANEL_X, PANEL_Y, PANEL_SIZE_X, PANEL_SIZE_Y); + + //draw grid + for (y=0; yPANEL_Y) && (yi!4kNf7mBKj#RV8gNWdi^1c}GM;DW-#l6?Llif6^)G&-c7}!O={YuU}v{9^vU*${*6@%t;N{9(jz$ zzvvEzRqw5~48JRdT8PZ6*fs>RkmN+_S)*xLoCd3ST)K>;(#$@r8ThQ3KF%oH$cqs3 ze{R+-oqih19!_}!w46DueU+^s1wYqHJX7O7ywiOK3?QMdEkC;N@4>fA@4VC%rgZ0N ze@g@o<7841RI&3-EU&FqE{1t095tlh7CQ8f6OeO+=6BDrq;ewzx5E6YPd(m)*H1*- zFtQR%^l2dZkwA?~R=u44RRjp}1Ml23x0NH>r5h##O$!`BhrklVL? z8BPn3E7K|DiWT{&P)2MD#$ZF=mSzfgq_RFDU|6YOTogaaUi%!Aq$BFmY1gT=lPO<~ z{DF!*4mSWNWIN_SIZE_X) WIN_SIZE_X=strlen(#param)*6+8; + + TEXT_X=-6*strlen(#param)+WIN_SIZE_X/2; + TEXT_Y=WIN_SIZE_Y/2-3; + + //изяяящный костыль, реализующий многопоточность :) + while (!GetPixelColor(SCREEN_SIZE_X-1, SCREEN_SIZE_X, WIN_Y)) WIN_Y+=45; + + + loop() + { + WaitEventTimeout(500); + switch(EAX & 0xFF) + { + case evButton: + if (GetButtonID()==1) ExitProcess(); + break; + + case evKey: + break; + + case evReDraw: + DefineAndDrawWindow(SCREEN_SIZE_X-WIN_SIZE_X,WIN_Y,WIN_SIZE_X, WIN_SIZE_Y, 0x01, 0, 0, 0x01fffFFF); + DefineButton(0,0, WIN_SIZE_X, WIN_SIZE_Y, 1+BT_HIDE+BT_NOFRAME, 0); + draw_grid(); + WriteText(TEXT_X-1,TEXT_Y, 0x80, 0,#param,0); //тень + WriteText(TEXT_X+1,TEXT_Y, 0x80, 0,#param,0); + WriteText(TEXT_X,TEXT_Y-1, 0x80, 0,#param,0); + WriteText(TEXT_X,TEXT_Y+1, 0x80, 0,#param,0); + WriteText(TEXT_X-1,TEXT_Y-1, 0x80, 0,#param,0); + WriteText(TEXT_X+1,TEXT_Y+1, 0x80, 0,#param,0); + WriteText(TEXT_X-1,TEXT_Y+1, 0x80, 0,#param,0); + WriteText(TEXT_X+1,TEXT_Y-1, 0x80, 0,#param,0); + + WriteText(TEXT_X,TEXT_Y, 0x80, 0xFFFfff,#param,0); + break; + default: + ExitProcess(); + } + } +} + + + +void draw_grid() +{ + int x, y; + + for (y=0; y<=WIN_SIZE_Y; y++) + { + for (x=0; x<=WIN_SIZE_X; x++) + { + if (! y&1) && (! x&1) PutPixel(x, y, 0); + if ( y&1) && ( x&1) PutPixel(x, y, 0); + //PutPixel(x, y, GetPixelColor(SCREEN_SIZE_X-WIN_SIZE_X+x, SCREEN_SIZE_X, y)); + } + } +} + + + + + +stop: diff --git a/programs/cmm/rb/@rb b/programs/cmm/rb/@rb new file mode 100644 index 0000000000000000000000000000000000000000..4e6dd7f37efc3250769ecfd5f7c97751fdc43a9a GIT binary patch literal 1389 zcmV-z1(NzpP(w@52><{=00001Mv*2LLXK;4&&M|Tjc%vK0}Me?4_$hC;)0cpbNH%b zzYHXa`ULbvu-%|{;Gb@A4Ljb<{hh!)yW`3bfcW#PPHmSh%Z7pb$6(Sf>Lh?Vtt!f1 z-ZxT1D8xtv2%BOuIOU|@g4XS;(g=%^+XsfYE`ADLtn!9rBatO7+?>%_NmtLb609et zD+#LeP>nUnJ#iT*@%ujV*z_4FDFD{Iu6D+wrPSiLfZ zA&xYQo(~o6*{%|vPQoH7Ba|xIycyg&w{SOPhZmXl=5(?cW*v6Hgv50Ot|pdjI*aW` z;+kFVQDq%kf%n2U_W5FDw2iCu(mLY=07C%)Qc*Bu~wBSQMS z0e#%pC<|YDyBw<9F}$i6GV4eAc>~(Ew@tyu-Zyxc$D7O3oa_lt2P>S#nE#op@`ths zDiMuWT6;n|=gkS8PL_zR`+|0BL8dOwTxF9eEer|0sa33?19-;eXk^r{=%n`k>caL! ziS2a>TRw=)=p*h*-V z)7)fz?9QY4irL)0_2@Y?TBh3kzV8~3&|WXNDtn1j?(mHG;}<2BmSry|I1lP@xy~Qb zc>`a4-$M=^m0BCX&K#ITu|LH6iXe+%RMUr7ZqZmLJVqH6$M8tK80O#vNhyiv_k%JE zqf5g@qpy(pz@v9wzIIpY(}rZ0rcW9bz~&73FCo?*v2EHBZt=PC)kx`}&TOSpC*deA zXUvGo{V-)lt>J%J^h)!7y0<|^VTBwr93R$q?~*2LG09DLvA61%12p2%HuM?^ws|NA z=_L!(MVC0IhN?j?t8y@Xq1|BSv}+dwKqO1^-MXE%EuB1el|31k+i$LM~g$rjDwF=m4HLm|dpX@Fl~qCw z#?0dV9*zJ2e7EI%D~PO4!k-);YZXNYt>*?ED*^IlFt5GW|%-rIr7A;=FIJ~=HS{8_$>Cz#af6TWQYJ=B%W+5vDrFJ$pB1Kdbm4*%Y^ zaO=5?V2Yw3@fo%|6)Wh8*{Z^r>lvXDX_9Rqojv6iUOI1S+G+kvUiIafhQM*}n0jCd z7L^j(DGg>!t26EFds<2Wq*nSIptRZzNgN!b=PL+ysaWnQY9my$2jlEHKr8Z`!PL)J zl#(GKJ*rrHk~f&>utjTQQ88i^;bF-jyiN>x4kzL)7|w++ifv2j%+*Py-U;&j^CUHz zkn(cv3Rpi3Ao1b!f$~f)U!DnQzi^(aBeVDuc-Zw^vziIyY z9U9vxc3dv2)YejS|!2ucZ&w z3$a3G>w_vj3De~#1F0eTD4stnp{L30q8?CCor8KbJtPnx7CBMyvx-RLM440tk@-Zw zw|`uQTd~_49#_{~FTygflWW0o$=2sGT@YeD$pJ$g_!PuBVk+GetActiveProcess()) ExitProcess(); + id1=m.y-1/ITEM_HEIGHT; + if (m.y<0) || (id1+1>items_num) || (m.x<0) || (m.x>ITEM_WIDTH) break; + if (m.lkm) || (m.pkm) + { + //feel clicking + DrawBar(1, items_cur*ITEM_HEIGHT+2, ITEM_WIDTH-1, ITEM_HEIGHT-2, sc.work_graph); + WriteText(8,items_cur*ITEM_HEIGHT+6,0x80,sc.work_button_text,ITEMS_LIST[items_cur*3],0); + Pause(4); + + ItemProcess(items_cur); + } + if (items_cur<>id1) + { + items_cur=id1; + goto _ITEMS_DRAW; + } + + break; + + case evButton: + break; + + case evKey: + key = GetKey(); + if (key==27) ExitProcess(); + if (key==178) && (items_cur) + { + items_cur--; + goto _ITEMS_DRAW; + } + if (key==177) && (items_cur+1lang.h + +..\C--\C-- tmpdisk.c +del tmpdisk +rename tmpdisk.com tmpdisk +rem ..\C--\kpack tmpdisk +pause +del warning.txt diff --git a/programs/cmm/tmpdisk/compile_ru.bat b/programs/cmm/tmpdisk/compile_ru.bat new file mode 100644 index 0000000000..607b6a52f5 --- /dev/null +++ b/programs/cmm/tmpdisk/compile_ru.bat @@ -0,0 +1,9 @@ +del lang.h +echo #define LANG_RUS 1 >lang.h + +..\C--\C-- tmpdisk.c /lst +del tmpdisk +rename tmpdisk.com tmpdisk +rem ..\C--\kpack tmpdisk +pause +del warning.txt diff --git a/programs/cmm/tmpdisk/icons.ico b/programs/cmm/tmpdisk/icons.ico new file mode 100644 index 0000000000000000000000000000000000000000..20125965b55978c789c4a0260920767b184f1ac8 GIT binary patch literal 8846 zcmds*TZola6vw~8EHCIxM@P~bYUn9ng1n^!Ap{ZhkYu1;)Q2F0dWa~rAP6gwz=tlF zNtD^eB&0GO%^pVWA}A4AP>tc(s0VG36peavwg3Cf@0@kE-?@0Yn0>JPuf6vAum9R> ze{*I$S=N?~$a;FRfIZoJ9a%Oj%d(DuT0eMMmK_TI_}QiPZR4`+*3K-uF60DCHaD2^ z^gJE%(r4`a$L(U<{mWKc*P3t2*14e={XA5xo^^eEv}(WBT5-;eHg#)p(tYysP%$4* z*VDfEwMxHSJIp~o`4KgnP*0qJfdT95>#IV=tMZ4n(-?W6KR=p6_I*sXq>a&o*7DJU zt2KOlzb7Ak^3Y!R!yn~4q^?jpGHL4Zh=$MiG3lu;`(9u7?|bk(9~VcO^dOWePF}#F&pc&{Z3ud z7Se+>c@IGP^<2eL{YF}i_Eir}(9b~nzL!*={=AO&J(pae&*2`@p9#;EkJY<>`c+L| zPitS#_adLO3-t)$c%FQ(@9S_T&f{z1`+WJ-76)B&wN@OCa=pIdXp$p@FZ45zj~)n5 zYtQq(&+++n3H9E@C-vW8_*PiMqS6n^R0EuZ1ey-xB^Cwqa z`UCUywTGz|nnGX8$C*W%pXQ*Oo?mfhgEqOoM(Wq;=gstGHHEZ3!=0JX}SxAR-$=Bn1V9mX#4t1$5OwX^F%>SLr3_$HO4{4%>zSmT)=c%sO zK%f4E7+ltk(C6c$1y^f&$eTYrpN}tOzaDDO@1qA_dy08|_Q148tu^r!(ab}%bzjW? zVq*Gzz`woL_Z0eCq9+*NQ_KzDY5dooR_};&h+kOKZxc2ZEqm=y{5;?@SBU8yBrcBU z`#t&f)_NyXK6T-yD2`%aBfhUEA09Ot@s&pnarLu7Pg&iri9O^DIq4DxV{*1=KkNxJk{w6 z`(1(4wXJAZKKFr*y!V-ilQ$38HQP&^8GBDzSMTxjd4W@SX_vJ>^g_HIq1M;-mNchq zIbv0M;Y_i&kaP6|tIAi}UmS|-aVta5p%?Y*d78oamAh@k{3jwu`Pm)IqQB$o{urP5 z^6tPbR`DinJQ>dOY|MLfeQ(HHZsXSeWNmjYkFnKTK8yR;e;Ure{Y2$_@16{LyX=a4 zR@mq#KeWQD2d#ViaqC!n&_>)<>Ou9!Jobjo{Ob1#FPu+voVD+aP26z2G*`_x#5{N8 z-79R#5i9d_f83AGuHP3k!_1=}xb3g>$6m&)=(EK?S9rQV<>-DiYuV(Fj@a}sPuW$% zy{GMlV9HrEaIT^k-W|2SJx$;5uQl4MSCm*ioO&hh< znlay}>WI_mQI6-Smu7j=_^W*~2larjy37HeHF{dt%U8XnH=c=S6T*X|{j@e3a6OMb zP&wp*%E!=a1>07(TdUTwafTJP&aw9O)2y&d)@zan*YoHJ^m@dERedJC!AbEvUg%S?MvrnhzwS=6SIiqV zd`x~-pTl#B^GdXp%RIDS#nb$Ux%A=n6q{OH5IMrw!*HL}gy;K1N1Q62yHj$6UIR{< Rm(0WK)brE-PyFB3e*%L&7DNC5 literal 0 HcmV?d00001 diff --git a/programs/cmm/tmpdisk/icons.raw b/programs/cmm/tmpdisk/icons.raw new file mode 100644 index 0000000000000000000000000000000000000000..ad860e4c64aef1abd449ae0ce0ee10d97c05d65c GIT binary patch literal 2352 zcmc(dUr1AN6vq{@oT0OuliV%^z4;QPt{OrFJ@$}fU}es?e5j`ovY;2M;Y$zwfy{?8 z(q!ta72r7tXINRK1dJzGv2&vPEW6 zh-|PYR}3Tpxfwi7B{tHHw<&4x94AGvwKq4!K z>LtZv@2eH{^s9_uon9H97Ncg%E$eaE7CkDhQiedZA6TOdK|yYZY+o3LV9i~CiNq^{ z^%(JNZt&ccrxqq_OB9p974a6PbT$(NXk4X zTj_0Cv!|zI2IRq#H^|gNf;C#m(_-Fs@{0A4Lz;W$yDN}HM$}KQx6NHkwFXDA?S9T(YSNDZi@v1eNB2pe(tn5=!LAXX2+-QOD ztMhO*xeWw);g6 zXtV`j`?;GSk)ihl#BJc-j3l=9tJ|+XD{i@pTs<7!9TZoGd&WoM`*b{1Wo1ED5@L+* zDPg4uL%L`7lzQiP3~L4VV~#-$A&)OrJy{fbK*L87Ii!)N#hl*tf2Q;8?ahsi<^cvH tg2_85G02}kd`!e*zYDzm3-W3IBlBQSh`d3&a0@S(TlrHm?=Af!;3sW`&gTFC literal 0 HcmV?d00001 diff --git a/programs/cmm/tmpdisk/t_console.c b/programs/cmm/tmpdisk/t_console.c new file mode 100644 index 0000000000..5c0e839e9b --- /dev/null +++ b/programs/cmm/tmpdisk/t_console.c @@ -0,0 +1,87 @@ +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////// консоль //////////////////// +///////////////////////////////////////////////////////////////////////////////////////// + +/*#ifdef LANG_RUS + char *rezult_text[]={ + "операция успешно завершена"w, + "неизвестный IOCTL, неверный размер предоставляемых данных..."w, + "номер диска должен быть от 0 до 9"w, + "размер создаваемого диска слишком велик"w, + "размер создаваемого диска слишком мал"w, + "ошибка выделения памяти"w, + "неизвестная ошибка O_o"w, + 0}; +#else*/ + char *rezult_text[]={ + "operation compleated successfully", + "unknown IOCTL code, wrong input/output size...", + "DiskId must be from 0 to 9", + "DiskSize is too large", + "DiskSize is too small", + "memory allocation failed", + "unknown error O_o", + 0}; +//#endif + +void Console_Work() +{ + unsigned int disk_size, driver_rezult; + char size_t[256]; + + strlwr(#param); + + switch (param[0]) + { + case '?': //помощь по коммандам + case 'h': + debug("tmpdisk command line parameters:"); + debug("a[number]s[size in MB] - add RAM disk"); + debug("d[number] - delete RAM disk"); + ExitProcess(); + break; + case 'd': //удалить диск + debug("trying to delete disk"); + del_disk.DiskId = param[1]-'0'; + ioctl.handle = driver_handle; + ioctl.io_code = DEV_DEL_DISK; + ioctl.input = #del_disk; + ioctl.inp_size = sizeof(del_disk); + ioctl.output = 0; + ioctl.out_size = 0; + break; + case 'a': //добавить диск + debug("trying to add disk"); + disk_size= strchr(#param, 's'); + if (!disk_size) + { + add_disk.DiskSize = GetFreeRAM() / 5; + debug("disk size is not specified"); + strcpy(#size_t, "10% from free RAM will be used, new DiskSize: "); + driver_rezult=itoa(add_disk.DiskSize/2048); + strcat(#size_t, driver_rezult); + //strcat(#size_t, itoa(add_disk.DiskSize/2048)); + strcat(#size_t, " MB"); + debug(#size_t); + } + else + add_disk.DiskSize = atoi(#param+disk_size)*2048; + + add_disk.DiskId = param[1]-'0'; + ioctl.handle = driver_handle; + ioctl.io_code = DEV_ADD_DISK; + ioctl.input = #add_disk; + ioctl.inp_size = sizeof(add_disk); + ioctl.output = 0; + ioctl.out_size = 0; + break; + default: + debug("unknown command line parameters"); + debug("use 'h' or '?' for help"); + ExitProcess(); + } + + driver_rezult = RuleDriver(#ioctl); + if (driver_rezult<7) debug(rezult_text[driver_rezult]); +} + diff --git a/programs/cmm/tmpdisk/t_window.c b/programs/cmm/tmpdisk/t_window.c new file mode 100644 index 0000000000..3951415fa6 --- /dev/null +++ b/programs/cmm/tmpdisk/t_window.c @@ -0,0 +1,266 @@ +#include "..\lib\figures.h" +#include "..\lib\mem.h" +#include "..\lib\dll.h" +#include "..\lib\edit_box_lib.h" + +#ifdef LANG_RUS + unsigned char *but_text[]={ + "Добавить диск [F2]"w, + "Удалить диск [Del]"w, + "Добавить [Ctrl+Enter]"w, + 0}; + + ?define INTRO_TEXT_1 "Здесь будет отображаться список"w + ?define INTRO_TEXT_2 "виртуальных дисков в системе."w + ?define INTRO_TEXT_3 "Попробуйте добавить один..."w + + ?define NOTIFY_TEXT_NO_DISK "Для начала добавьте хотя бы один диск"w + ?define NOTIFY_TEXT_DISK_LIMIT "Достигнут предел количества виртуальных дисков"w + +#else + unsigned char *but_text[]={ + "Add disk [F2]", + "Delete disk [Del]", + "Add [Ctrl+Enter]", + 0}; + + ?define INTRO_TEXT_1 " There will be list of mounted" + ?define INTRO_TEXT_2 " virtual disks." + ?define INTRO_TEXT_3 " Try to add one..." + + ?define NOTIFY_TEXT_NO_DISK "You need to have at least one disk" + ?define NOTIFY_TEXT_DISK_LIMIT "Reached the limit of the number of virtual disks" +#endif + +struct path_string { unsigned char Item[256]; }; +path_string disk_list[40]; + +dword devbuf; +int disk_num; +int selected; + +system_colors sc; +proc_info Form; + +int mouse_dd; +unsigned char dsize[30]; +edit_box edit1= {40,20,200,0xffffff,0x94AECE,0x94AECE,0x94AECE,0,4,#dsize,#mouse_dd,100000000000010b}; + +unsigned char icons[14*56] = FROM "icons.raw"; + + + +void Main_Window() +{ + unsigned int id; + unsigned char key; + + mem_Init(); + if (load_dll2(boxlib, #edit_box_draw,0)!=0) + { + notify("error: library doesn't exists /rd/1/lib/box_lib.obj"); + ExitProcess(); + } + SetEventMask(0x27); + loop() + { + switch(WaitEvent()) + { + case evMouse: + //edit_box_mouse stdcall (#edit1); + break; + case evButton: + id=GetButtonID(); + if (id==1) ExitProcess(); + if (id==10) AddDisk(); + if (id==11) //del + { + _DEL_DISK: + if (disk_num==0) + { + notify(NOTIFY_TEXT_NO_DISK); + break; + } + param[0]='d'; + param[1]=disk_list[selected].Item[3]; + Console_Work(); + Pause(15); + GetDisks(); + DrawTmpDisks(); + } + if (id>=20) + { + if (selected==id-20) OpenTmpDisk(); + selected=id-20; + DrawTmpDisks(); + } + break; + case evKey: + key = GetKey(); + if (key==182) if (disk_num<>0) goto _DEL_DISK; + if (key==51) AddDisk(); + if (key==13) OpenTmpDisk(); + if (key==178) + { + if (selected==0) break; + selected--; + DrawTmpDisks(); + } + if (key==177) + { + if (selected+2>disk_num) break; + selected++; + DrawTmpDisks(); + } + if (key==176) + { + if (selected<3) break; + selected-=3; + DrawTmpDisks(); + } + if (key==179) + { + if (selected+4>disk_num) break; + selected+=3; + DrawTmpDisks(); + } + //EAX=key<<8; + //edit_box_key stdcall(#edit1); + break; + case evReDraw: + Draw_Window(); + } + } +} + + +void OpenTmpDisk() +{ + unsigned char eol_param[256]; + if (!disk_num) return; + strcpy(#eol_param, "/tmp#/1/"); + eol_param[4]=disk_list[selected].Item[3]; + RunProgram("/sys/File managers/Eolite", #eol_param); +} + + +void GetDisks() +{ + unsigned int j, fcount=30; + unsigned char disk_name[256]; + + mem_Free(devbuf); + devbuf= mem_Alloc(32); + ReadDir(0, devbuf, "/"); + fcount=ESDWORD[devbuf+8]; + mem_Free(devbuf); + devbuf = mem_Alloc(fcount+1*304+32); + ReadDir(fcount, devbuf, "/"); + + disk_num=0; + for (j=0; j12) disk_num=12; +} + + +unsigned int disk_pos_x[]={13,13,13,83,83,83,153,153,153,223,223,223}; +unsigned int disk_pos_y[]={40,65,90,40,65,90,40,65,90,40,65,90}; + +void DrawTmpDisks() +{ + int i; + DrawBar(0,31, Form.width-9,Form.height-GetSkinHeight()-5-30, 0xFFFFFF); + if (disk_num==0) + { + WriteText(17,45, 0x90, 0x777777, INTRO_TEXT_1, 0); + WriteText(17,45+15, 0x90, 0x777777, INTRO_TEXT_2, 0); + WriteText(17,45+42, 0x90, 0x777777, INTRO_TEXT_3, 0); + return; + }; + if (selected>=disk_num) selected=disk_num-1; //восстанавливает выделение - хорошая фича + for (i=0; i<10; i++) DeleteButton(20+i); + for (i=0; i=10) + { + notify(NOTIFY_TEXT_DISK_LIMIT); + return; + } + param[0]='a'; + for (i=0; i<9; i++) + { + for (j=0; j<=disk_num; j++) + { + if (i+48==disk_list[j].Item[3]) continue 1; + } + break; + } + param[1]=i+48; + Console_Work(); + Pause(5); + GetDisks(); + DrawTmpDisks(); +} + +void Draw_Window() +{ + int i, x; + + sc.get(); + DefineAndDrawWindow(170,150,314,250,0x74,sc.work,"Virtual Disk Manager 0.4",0); + GetProcessInfo(#Form, SelfInfo); + if (Form.status_window>2) return; //если свернуто в заголовок, ничего не рисуем + + //рисуем панель + DrawBar(0,0, Form.width-9,30, sc.work); + DrawBar(0,30, Form.width-9,1, sc.work_graph); + x=6; + for (i=0; i<2; i++) + { + DefineButton(x,5, strlen(but_text[i])*6+28,19, 10+i, sc.work_button); + _PutImage(x+3,8, 14,14, i*14*14*3+#icons); + WriteText(x+22,11, 0x80, sc.work_button_text, but_text[i], 0); + x+=strlen(but_text[i])*6+37; + } + + //получаем список доступных дисков + GetDisks(); + //выводим доступные диски + DrawTmpDisks(); + //AddPanel(); +} + +/*void AddPanel() +{ + DrawBar(0,Form.height-GetSkinHeight()-40, Form.width-9,1, sc.work_graph); + DrawBar(0,Form.height-GetSkinHeight()-39, Form.width-9,35, sc.work); + + strcpy(#dsize, itoa(GetFreeRAM()/10)); + //strcpy(#dsize, "100"); + edit1.size=edit1.pos=strlen(#dsize); + edit_box_draw stdcall(#edit1); //рисуем строку адреса + //DefineButton(-strlen(but_text[2])+Form.width-9,200, strlen(but_text[2])*6+28,19, 12, sc.work_button); + //_PutImage(-strlen(but_text[2])+Form.width-9+3,200+3, 14,14, 2*14*14*3+#icons); +}*/ + + + + + + diff --git a/programs/cmm/tmpdisk/tmpdisk.c b/programs/cmm/tmpdisk/tmpdisk.c new file mode 100644 index 0000000000..7bc5c7f26f --- /dev/null +++ b/programs/cmm/tmpdisk/tmpdisk.c @@ -0,0 +1,71 @@ +#include "..\lib\kolibri.h" +#include "..\lib\strings.h" +#include "..\lib\file_system.h" + +#include "lang.h" + +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////// область данных //////////////////// +///////////////////////////////////////////////////////////////////////////////////////// + +struct ioctl_struct +{ + dword handle; + dword io_code; + dword input; + dword inp_size; + dword output; + dword out_size; +}; + +#define DEV_ADD_DISK 1 //input = structure add_disk_struc +#define DEV_DEL_DISK 2 //input = structure del_disk_struc + +struct add_disk_struc +{ + dword DiskSize; // in sectors, 1 sector = 512 bytes. Include FAT service data + unsigned char DiskId; // from 0 to 9 +}; + +struct del_disk_struc +{ + unsigned char DiskId; //from 0 to 9 +}; + + +ioctl_struct ioctl; +add_disk_struc add_disk; +del_disk_struc del_disk; + +int driver_handle; + +///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////// код //////////////////// +///////////////////////////////////////////////////////////////////////////////////////// +#include "t_console.c" +#include "t_window.c" + + +void main() +{ + debug("========= tmpdisk 0.4 ========="); + driver_handle = LoadDriver("tmpdisk"); + if (driver_handle==0) + { + notify("error: /rd1/1/lib/tmpdisk.obj driver loading failed"); + notify("program terminated"); + ExitProcess(); + } + else + debug("tmpdisk.obj driver loaded successfully"); + + if (param) + Console_Work(); + else + Main_Window(); + + + ExitProcess(); +} + +stop: