From 141e5e9d21dba318b3cb644692007a6b22b289b4 Mon Sep 17 00:00:00 2001 From: "Alexey Teplov (" Date: Fri, 13 Feb 2009 09:06:11 +0000 Subject: [PATCH] delete dir box_lib git-svn-id: svn://kolibrios.org@1033 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/develop/box_lib/C--/lib/RANDOM.H-- | 52 - programs/develop/box_lib/C--/lib/kolibri.h-- | 558 -------- programs/develop/box_lib/C--/lib/load_bmp.h-- | 67 - programs/develop/box_lib/C--/lib/memory.h-- | 36 - .../develop/box_lib/C--/trunk/EditBox2.c-- | 96 -- .../develop/box_lib/C--/trunk/compile.bat | 5 - .../develop/box_lib/C--/trunk/use_library.h-- | 112 -- programs/develop/box_lib/trunk/box_lib.asm | 534 -------- programs/develop/box_lib/trunk/config.inc | 1 - programs/develop/box_lib/trunk/editbox.mac | 1164 ----------------- programs/develop/box_lib/trunk/editbox_ex.asm | 245 ---- programs/develop/box_lib/trunk/editbox_ex.mac | 77 -- programs/develop/box_lib/trunk/macros.inc | 502 ------- programs/develop/box_lib/trunk/proc32.inc | 270 ---- programs/develop/box_lib/trunk/readme.txt | 13 - programs/develop/box_lib/trunk/run.bat | 4 - programs/develop/box_lib/trunk/struct.inc | 180 --- 17 files changed, 3916 deletions(-) delete mode 100644 programs/develop/box_lib/C--/lib/RANDOM.H-- delete mode 100644 programs/develop/box_lib/C--/lib/kolibri.h-- delete mode 100644 programs/develop/box_lib/C--/lib/load_bmp.h-- delete mode 100644 programs/develop/box_lib/C--/lib/memory.h-- delete mode 100644 programs/develop/box_lib/C--/trunk/EditBox2.c-- delete mode 100644 programs/develop/box_lib/C--/trunk/compile.bat delete mode 100644 programs/develop/box_lib/C--/trunk/use_library.h-- delete mode 100644 programs/develop/box_lib/trunk/box_lib.asm delete mode 100644 programs/develop/box_lib/trunk/config.inc delete mode 100644 programs/develop/box_lib/trunk/editbox.mac delete mode 100644 programs/develop/box_lib/trunk/editbox_ex.asm delete mode 100644 programs/develop/box_lib/trunk/editbox_ex.mac delete mode 100644 programs/develop/box_lib/trunk/macros.inc delete mode 100644 programs/develop/box_lib/trunk/proc32.inc delete mode 100644 programs/develop/box_lib/trunk/readme.txt delete mode 100644 programs/develop/box_lib/trunk/run.bat delete mode 100644 programs/develop/box_lib/trunk/struct.inc diff --git a/programs/develop/box_lib/C--/lib/RANDOM.H-- b/programs/develop/box_lib/C--/lib/RANDOM.H-- deleted file mode 100644 index 11b60c117f..0000000000 --- a/programs/develop/box_lib/C--/lib/RANDOM.H-- +++ /dev/null @@ -1,52 +0,0 @@ -/******************************************************************************* - - 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 - фы  ухэхЁрЎшш ёыєўрщэ√ї ўшёхы - -:int random(int max) -// get pseudo-random number - яюыєўшЄ№ яёхтфюёыєўрщэюх ўшёыю -{ - $rdtsc // eax & edx - $xor eax,edx - $not eax - - EBX = generator; - $ror ebx,3 - $xor ebx,0xdeadbeef - EBX += EAX; - generator = EBX; - - EAX += EBX; - EAX = EAX % max; - return EAX; -} - -: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/develop/box_lib/C--/lib/kolibri.h-- b/programs/develop/box_lib/C--/lib/kolibri.h-- deleted file mode 100644 index 30900b9146..0000000000 --- a/programs/develop/box_lib/C--/lib/kolibri.h-- +++ /dev/null @@ -1,558 +0,0 @@ -#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 = #stop+0x100; -dword x86esp_reg = #stop+0x100; -dword I_Param = 0x0; -dword I_Icon = 0x0; -dword skin_width; - -//Events -#define evMouse 6 -#define evButton 3 -#define evKey 2 -#define evReDraw 1 -#define evNet 8 - -//Button options -#define BT_DEL 0x80000000 -#define BT_HIDE 0x40000000 -#define BT_NOFRAME 0x20000000 - -#define OLD -1 -#define true 1 -#define false 0 - -struct FileInfo{ - dword read, firstBlock, qnBlockRead, retPtr, Work; - byte filedir; -}; -//------------------------------------------------------------------------- -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 -} - - -int vert; -struct mouse{ - dword x,y,lkm,pkm; - 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 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]; -}; -//--------------------------------------------------------------------------- -struct proc_info{ - 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 getme(); -}; - -void proc_info::getme() -{ - EAX = 9; - EBX = #use_cpu; - ECX = -1; - $int 0x40 -} -//------------------------------------------------------------------------------- - -/* - Отрисовка окна - {x_start|y_start}, {x_size|y_size}, color_back, color_title, color_frames - - DrawWindow( - EBX = [x_start][x_size] - ECX = [y_start][y_size] - EDX, ESI, EDI = [00RRGGBB] - ) -*/ - -inline fastcall void DrawWindow(dword EBX, ECX, EDX, ESI, EDI){ -#speed - EAX = 0; // function 0 : define and draw window - $int 0x40 -#codesize -} - -inline fastcall void DrawButton(dword EBX, ECX, EDX, ESI){ - EAX = 8; - $int 0x40 -} - -inline fastcall dword WaitEvent(){ - EAX = 10; // wait here for event - $int 0x40 -} - -inline fastcall void ExitProcess(){ - EAX = -1; // close this program - $int 0x40 -} - -/* -02 = GET KEY - - ret: al 0 successful -> ah = key - al 1 no key in buffer -*/ -inline fastcall word GetKey(){ - EAX = 2; // just read this key from buffer - $int 0x40 -// EAX = EAX >> 8; -} - -/* -17 = GET PRESSED BUTTON ID - - ret: al 0 successful -> ah = id number - al 1 no key in buffer -*/ -inline fastcall word GetButtonID(){ - EAX = 17; // Get ID - $int 0x40 - EAX = EAX >> 8; -} - -/* -04 = WRITE TEXT TO WINDOW - - ebx [x start]*65536 + [y start] - ecx text color 0x00RRGGBB - edx pointer to text beginning - esi text length - ret: nothing changed -*/ -inline fastcall void WriteTextXY(dword EBX, ECX, EDX, ESI){ -#speed - EAX = 4; - $int 0x40; -#codesize -} - -/* -13 = DRAW BAR - - ebx [x start]*65536 + [x size] - ecx [y start]*65536 + [y size] - edx color 0x00RRGGBB - ret: nothing changed -*/ -inline fastcall void kos_DrawBar(dword EBX, ECX, EDX){ -#speed - EAX = 13; - $int 0x40 -#codesize -} - -/* function EBX=5 (GetBackgroun) ECX[]->EDX[], length ESI -inline fastcall void GetBackground(dword ECX, EDX, ESI){ -#speed - EAX = 39; - EBX = 5; - $int 0x40 -#codesize -}*/ - -//CODED by Veliant -/*eax = 38 - эюьхЁ ЇєэъЎшш -ebx = [ъююЁфшэрЄр эрўрыр яю юёш x]*65536 + [ъююЁфшэрЄр ъюэЎр яю юёш x] -ecx = [ъююЁфшэрЄр эрўрыр яю юёш y]*65536 + [ъююЁфшэрЄр ъюэЎр яю юёш y] -edx = 0x00RRGGBB - ЎтхЄ -edx = 0x01xxxxxx - ЁшёютрЄ№ шэтхЁёэvщ юЄЁхчюъ (ьырф°шх 24 сшЄр шуэюЁшЁє│Єё ) */ -inline fastcall void DrawLine(dword EBX, ECX, EDX){ - EAX = 38; - $int 0x40 -} - -inline fastcall void DrawTitle(dword ECX) -{ - EAX = 71; - EBX = 1; - $int 0x40; -} - -inline fastcall dword GetSkinWidth() -{ - EAX = 48; - EBX = 4; - $int 0x40 -} - -inline fastcall void ChangeSkin(){ - EAX = 48; - EBX = 8; - ECX = #file_path; - $int 0x40 -} - -inline fastcall dword GetScreenWidth() -{ - EAX = 14; - EBX = 4; - $int 0x40 - $shr eax, 16 - $and eax,0x0000FFFF -} - -inline fastcall void DeleteButton(dword EDX) -{ - EAX = 8; - EDX = EDX + BT_DEL; - $int 0x40; -} - -inline fastcall dword LoadLibrary(dword ECX) -{ - $mov eax, 68 - $mov ebx, 19 - $int 0x40 -} - -inline fastcall dword strlen(dword EDI) -{ -#speed - ECX=0; - EAX=0; - ECX--; - $REPNE $SCASB - EAX=EAX-2-ECX; -#codesize -} - -//-1 - не равны -// 0 - не равны -inline fastcall dword strcmp(dword ESI,EDI) -{ - dword strcmp_i,ret=-1,len1,len2,sovpadenij=0,str1,str2; - str1=ESI; - str2=EDI; - len1=strlen(str1); - len2=strlen(str2); - IF (len1==len2) - { - FOR (strcmp_i=0;strcmp_i=97) && (EDX<=122) ESBYTE[str+i] = DL - 32; //a-z - IF (EDX>=160) && (EDX<=175) ESBYTE[str+i] = DL - 32; //р-я - IF (EDX>=224) && (EDX<=239) ESBYTE[str+i] = DL - 80; //Ё-  - IF (EDX == 241) ESBYTE[EAX] = 240; //┐ - } - EAX = str; - //EAX = ESDWORD[EAX]; - //if (EAX != 0x5249443C) $int 3; -} - -inline fastcall dword lowcase(dword ESI) -{ - dword str=ESI, i; - FOR (i=0;i=65) && (EDX<=90) ESBYTE[str+i] = DL + 32; //a-z - IF (EDX>=128) && (EDX<=143) ESBYTE[str+i] = DL + 32; //р-я - IF (EDX>=144) && (EDX<=159) ESBYTE[str+i] = DL + 80; //Ё-  - IF (EDX == 240) ESBYTE[EAX] = 241; //┐ - } - EAX = str; - //EAX = ESDWORD[EAX]; - //if (EAX != 0x5249443C) $int 3; -} - -inline fastcall void dostowin (dword ESI) -{ - dword stroka,dlina; - stroka = ESI; - while (BL=ESBYTE[ESI]) - { - IF (BL>128) - IF (BL>=240) ESBYTE[ESI] = BL - 16; - ELSE ESBYTE[ESI] = BL - 64; - ESI++; - } -} - -void WindowRedrawStatus(dword i) -{ - EAX = 12; // function 12:tell os about windowdraw - EBX = i; // 1, start of draw - $int 0x40 -} - -void DefineAndDrawWindow(dword x,y,sizeX,sizeY,byte mainAreaType,dword mainAreaColour,byte headerType,dword headerColour,borderColour) -{ - dword arg1, arg2, arg3, arg4; - // - arg1 = x << 16 + sizeX; - arg2 = y << 16 + sizeY; - arg3 = mainAreaType << 24 | mainAreaColour; - arg4 = headerType << 24 | headerColour; - // - $mov eax, 0 - $mov ebx, arg1 - $mov ecx, arg2 - $mov edx, arg3 - $mov esi, arg4 - $mov edi, borderColour - $int 0x40 -} - -void DefineButton(dword x,y,w,h,id,color) -{ - DrawButton(x<<16+w, skin_width+y<<16+h, id, color); -} - -void WriteText(dword x,y,byte fontType, dword color, text, len) -{ - EBX = x<<16+skin_width+y; - ECX = fontType<<24+color; - EDX = text; - ESI = len; - EAX = 4; - $int 0x40; -} - -inline fastcall void PutPixel(dword EBX,ECX,EDX) //Coded by Leency :D -{ - EAX=1; - $int 0x40 -} - -void DrawBar(dword x,y,w,h,color) -{ - kos_DrawBar(x<<16+w,skin_width+y<<16+h,color); -} - -void DrawRegion(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 DrawFlatButton(dword x,y,width,height,id,color,text) -{ - DrawRegion(x,y,width,height,0x94AECE); - DrawBar(x+1,y+1,width-1,1,0xFFFFFF); //яюыюёр уюЁ схыр  - DrawBar(x+1,y+height-1,width-2,1,0xC7C7C7); //Єхэ№ тхЁЄ - DrawBar(x+1,y+1,1,height-1,0xFFFFFF); //яюыюёр тхЁЄ схыр  - DrawBar(x+width-1,y+2,1,height-2,0xC7C7C7); //Єхэ№ тхЁЄ - DrawBar(x+2,y+2,width-3,height-3,color); //чрыштър - IF (id<>0) DefineButton(x,y,width,height,id+BT_HIDE,0xEFEBEF); //юяЁхфхы хь ъэюяъє - WriteText(-strlen(text)*6+width/2+x+1,height/2-3+y,0x80,0,text,strlen(text)); -} - - -void PutImage(dword buf,w,h,x,y) -{ - int i,r,g,b; - EDI=buf; - EAX = 7; - EBX = buf; - ECX = w<<16+h; - EDX = x<<16+y+skin_width; - $int 0x40 -} - - -void copystr(dword s,d) -{ - $mov esi,s - $mov edi,d - $cld -l1: - $lodsb - $stosb - $test al,al - $jnz l1 -} - - -int pos,razr,backup,j=0,chislo; -char buffer[11]=""; -inline fastcall dword IntToStr(dword ESI) -{ - chislo=ESI; - ECX=12; - $push edi - $mov edi,#buffer - $xor al,al - $cld - $rep $stosb - pos=razr=backup=j=0; - if (chislo<0) - { - buffer[pos]='-'; - chislo=-1*chislo; - pos++; - } - backup=chislo; - do - { - backup=backup/10; - razr++; - } - while (backup!=0); - razr--; - FOR (j=razr+pos;j>pos-1;j--) - { - backup=chislo/10; - backup=backup*10; - buffer[j]=chislo-backup+48; - chislo=chislo/10; - } - //return #buffer; - $pop edi; - EAX = #buffer; -} - - -inline fastcall dword MoveSize(dword EBX,ECX,EDX,ESI) -{ - EAX = 67; - $int 0x40 -} - - -f70 CopyFile_f; -BDVK CopyFile_atr; -inline fastcall dword CopyFile(dword EBX,ECX) -{ - dword s, d, bufer=0; - s = EBX; - d = ECX; - - CopyFile_f.func = 5; - CopyFile_f.param1 = 0; - CopyFile_f.param2 = 0; - CopyFile_f.param3 = 0; - CopyFile_f.param4 = #CopyFile_atr; - CopyFile_f.rezerv = 0; - CopyFile_f.name = s; - $mov eax, 70 - $mov ebx, #CopyFile_f - $int 0x40 - - if (EAX == 0) - { - bufer = malloc(CopyFile_atr.sizelo); - CopyFile_f.func = 0; - CopyFile_f.param1 = 0; - CopyFile_f.param2 = 0; - CopyFile_f.param3 = CopyFile_atr.sizelo; - CopyFile_f.param4 = bufer; - CopyFile_f.rezerv = 0; - CopyFile_f.name = s; - $mov eax, 70 - $mov ebx, #CopyFile_f - $int 0x40 - - IF (EAX == 0) - { - CopyFile_f.func = 2; - CopyFile_f.param1 = 0; - CopyFile_f.param2 = 0; - CopyFile_f.param3 = CopyFile_atr.sizelo; - CopyFile_f.param4 = bufer; - CopyFile_f.rezerv = 0; - CopyFile_f.name = d; - $mov eax, 70 - $mov ebx, #CopyFile_f - $int 0x40 - } - } - -} diff --git a/programs/develop/box_lib/C--/lib/load_bmp.h-- b/programs/develop/box_lib/C--/lib/load_bmp.h-- deleted file mode 100644 index 3df7e80d8e..0000000000 --- a/programs/develop/box_lib/C--/lib/load_bmp.h-- +++ /dev/null @@ -1,67 +0,0 @@ -//Load BMP by Veliant - -struct readimage{ - dword func, param1, param2, size, buffer; - byte z; - dword name; -}; - -void Put_Image(dword x,y,w,h,name) -{ - int i, j, size, off, off2; - byte r, g, b; - readimage image; - dword buf; - size=w*h*3+100; - buf=malloc(size); - image.func = 0; - image.param1 = 0; - image.param2 = 0; - image.size = size; - image.buffer = buf; - image.z = 0; - image.name = #path; - EAX = 70; - EBX = #image; - $int 0x40; - - for(i=0;i OF если меньше - add ebx,dword ch_size ;добавить размер - cmp ax,bx ;сравнить - jg check_box_mouse_end ;ZF = 0 и SF = OF если больше - - shr eax,16 ;разделим на 65536 или просто сдвинем биты на 16 значений - movzx ebx,word ch_left ;произведем аналогичное сравнение - cmp ax,bx ;сравнить регистры - jl check_box_mouse_end ;если меньше - add ebx,dword ch_size ;добавить длину стороны прямоугольника - add ebx,esi ;Учесть в значении по х еще и длину надписи к чекбоксу - cmp ax,bx ;стравнить регистры - jg check_box_mouse_end ;если больше - - bts dword ch_flags,1 ;извлечение значения заданного бита в флаг cf и изменение его значения на 1. - jc @f ;CF=1 то перейти на нижнюю @@ - - call check_box_draw_ch ;отобразить включенный чек бокс -; mov dword [esp+24],1 ;дальнейшая проверка чек боксов бесмыслена, по этому в стек, где располагается ecx поместитм 0 - jmp check_box_mouse_end ;выйти -@@: - btr word ch_flags,1 ;извлечение значения заданного бита в флаг cf и изменение его значения на нулевое. - call check_box_clear_ch ;выключить чек бокс т.е. на месте закрашенного прямоугольника отобразить цвет фона. -check_box_mouse_end: -popa ;восстановить регистры из стека -ret 4 ;выйти - -;-------------------------------------------------- -;radiobutton Group -;-------------------------------------------------- -option_box_draw_box: -option_group equ [edi] -op_left equ [edi+4] ;координата начала рисования по х -op_top equ [edi+6] ;координата начала рисования по у -op_text_margin equ [edi+8] ;=4 расстояние от прямоугольника чек бокса до надписи -op_size equ [edi+12] ;12 размер квадрата чек бокса -op_color equ [edi+16] -op_border_color equ [edi+20] ; or [edi+4] ;цвет рамки checkbox ее можно задать самостоятельно -op_text_color equ [edi+24];[edi+4] ;цвет текста -op_text_ptr equ [edi+28] ;указатель на начало текстовой строки -op_text_length equ [edi+32] -op_flags equ [edi+36] ;флаги - - pusha ;сохраним все регистры - - movzx ebx,word op_left - shl ebx,16 - add ebx,dword op_size - movzx ecx,word op_top - shl ecx,16 - add ecx,dword op_size - mov edx,dword op_border_color - mov eax,13 - mcall ;рисуем рамку - - mov edx,dword op_color - add ebx,1 shl 16 - 2 - add ecx,1 shl 16 - 2 - mcall ;закрашиваем внутренности чекбокса - -; mov eax,dword option_group -; mov dword eax,[eax] -; cmp eax,edi -; jne @f -; call option_box_draw_op ;нарисовать включенный чек бокс - - -;---------------------------- -;расчет куда будет произведен вывод текста -;---------------------------- -@@: movzx ebx,word op_left ;загрузить значение х для чек бокса - add ebx,dword op_size - add ebx,dword op_text_margin;добавить размер стороны и расстояние на котором начнется вывод текста - shl ebx,16 ;сдвинем на 16 разрядов в лево (умножим на 65536) - mov bx,word op_top ;загрузим значение по y - add ebx,op_size - mov ecx,dword op_text_color ;загрузим цвет надписи + flags - sub ebx,7 ;добавим значение длины стороны -9+2 - - mov edx,dword op_text_ptr ;укажем адрес от куда нужно выводить строку - mov esi,dword op_text_length - ;внесем в eax значение вывода надписи на канву - mov eax,4 - mcall ;Вывод -popa ;восстановить значения регистров из стека -ret ;выйдем из процедуры - -option_box_clear_op: ;очистка чек бокса - mov edx,dword op_color ;цвет внутри чек бокса - jmp @f ;безусловный прыжок на нижнюю метку @@ - - -option_box_draw_op: ;нарисовать включенный чек бокс - mov edx,dword op_border_color ;загрузить цвет -@@: - movzx ebx,word op_left ;загрузить координату по х - mov eax,dword op_size - push ax - shr eax,2 - add ebx,eax ;добавить (сторона прямоугольника/3) - shl ebx,16 ;сдвинем на 16 разрядов в лево (умножим на 65536) - pop bx - shr bx,1 ;загрузить (сторона прямоугольника/2) - mov bp,bx ;сохраним регистр bx в регистре указателя базы - - movzx ecx,word op_top ;загрузить координату по у - mov eax,dword op_size - shr eax,2 - add ecx,eax ;добавить (сторона прямоугольника/4) - shl ecx,16 ;сдвинем на 16 разрядов в лево (умножим на 65536) - mov cx,bp ;загрузим значения регистра указателя базы в cx - mov eax,13 ;в eax - значения функции для вывода полосы т.е. по сути прямоугольника, который отображает включенный компонент чек бокс - mcall ;вывод -ret ;выйти из процедуры -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;Обработчик mouse -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -option_box_mouse_op: ;обработка мыши -pusha - mov eax,37 ;будем что то делать если у нас что - нить нажато - mov ebx,2 ;внести в регистр значение 2 - mcall ;проверка не нажал ли пользователь кнопку мышки - test eax,eax ;проверка если у нас в eax=0, то установим флаг и выйдем - jnz @f ;перейти на нижнюю метку @@ - - jmp option_box_mouse_end - ;если ничего не произошло, то восстановим значения регистров из стека - ;выход -@@: - mov esi,dword op_text_length ;загрузить кол-во символов в текстовой строке - ;Умножение на 6 Быстрое умножение можно воспользоваться любым мз методов, но на старых Процессорах (386,486,P1)быстрее будет с инструкцией Lea - ;lea esi,[eax*2+eax] - ;shl eax,1 - imul esi,6 ; или можно и так умножить на 6 - xor ebx,ebx - add esi,dword op_text_margin ;добавить 3 - расстояние от чек бокса до надписи - - mov eax,37 ;получим координаты мышки - inc ebx ;добавить 1 - mcall ;получить координаты курсора относительно окна - - movzx ebx,word op_top ;загрузить в bx значение координаты у - cmp ax,bx ;сравнить с с координатой курсора - jl option_box_mouse_end ;SF <> OF если меньше - add ebx,dword op_size ;добавить размер - cmp ax,bx ;сравнить - jg option_box_mouse_end ;ZF = 0 и SF = OF если больше - - shr eax,16 ;разделим на 65536 или просто сдвинем биты на 16 значений - movzx ebx,word op_left ;произведем аналогичное сравнение - cmp ax,bx ;сравнить регистры - jl option_box_mouse_end ;если меньше - add ebx,dword op_size ;добавить длину стороны прямоугольника - add ebx,esi ;Учесть в значении по х еще и длину надписи к чекбоксу - cmp ax,bx ;стравнить регистры - jg option_box_mouse_end ;если больше - mov eax,dword option_group - mov [eax],edi - -option_box_mouse_end: -popa ;восстановить регистры из стека -ret ;выйти - -option_box_draw: - pusha - - mov eax,dword [esp+36] -@@: mov edi,dword [eax] - test edi,edi - je option_check - call option_box_draw_box - add eax,4 - jmp @b - -option_check: - mov eax,dword [esp+36] -@@: mov edi,dword [eax] - test edi,edi - je @f - - mov ebx,dword [edi] - mov ebx,dword [ebx] - cmp edi,ebx - jne .clear_op - - pusha - call option_box_draw_op - popa - add eax,4 - jmp @b - -.clear_op: - pusha - call option_box_clear_op - popa - add eax,4 - jmp @b - - -@@: popa - ret 4 - ; exit вообще :) - - -option_box_mouse: - pusha - - mov eax,dword [esp+36] -@@: mov edi,dword [eax] - test edi,edi - je option_check - call option_box_mouse_op - add eax,4 - jmp @b - - -align 16 -EXPORTS: - - dd sz_edit_box, edit_box - dd sz_edit_box_key, edit_box_key - dd sz_edit_box_mouse, edit_box_mouse - dd szVersion_ed, 0x00000001 - dd sz_check_box_draw, check_box_draw - dd sz_check_box_mouse, check_box_mouse - dd szVersion_ch, 0x00000001 - dd sz_option_box_draw, option_box_draw - dd sz_option_box_mouse, option_box_mouse - dd szVersion_op, 0x00000001 - dd 0,0 - -sz_edit_box db 'edit_box',0 -sz_edit_box_key db 'edit_box_key',0 -sz_edit_box_mouse db 'edit_box_mouse',0 -szVersion_ed db 'version_ed',0 -sz_check_box_draw db 'check_box_draw',0 -sz_check_box_mouse db 'check_box_mouse',0 -szVersion_ch db 'version_ch',0 -sz_option_box_draw db 'option_box_draw',0 -sz_option_box_mouse db 'option_box_mouse',0 -szVersion_op db 'version_op',0 - -;;;;;;;;;;; -;;Data -;;;;;;;;;;; -align 16 -mouse_flag dd 0x0 diff --git a/programs/develop/box_lib/trunk/config.inc b/programs/develop/box_lib/trunk/config.inc deleted file mode 100644 index dc70bf9760..0000000000 --- a/programs/develop/box_lib/trunk/config.inc +++ /dev/null @@ -1 +0,0 @@ -__CPU_type fix p5 diff --git a/programs/develop/box_lib/trunk/editbox.mac b/programs/develop/box_lib/trunk/editbox.mac deleted file mode 100644 index aa0d068631..0000000000 --- a/programs/develop/box_lib/trunk/editbox.mac +++ /dev/null @@ -1,1164 +0,0 @@ -;Макрос для вывода основных функций которые испльзуются боксом -macro use_general_func -{ -;debug_func -;---------------------------------------------------------- -;--- процедура прорисовки выделеной части ----------------- -;---------------------------------------------------------- -edit_box.draw_shift: - test word ed_flags,ed_shift_bac ;установка флага, выделенной области - jz @f - mov ebp,shift_color - mov ebx,dword ed_shift_pos - call edit_box_key.sh_cl_ -@@: ret -;---------------------------------------------------------- -;--- процедура прорисовки текста -------------------------- -;---------------------------------------------------------- -edit_box.draw_text: -;--- вычисляем, сколько помещается символов --- -;--- чтобы мусор не рисовать --- - call edit_box.get_n - mov esi,ed_size - mov ebx,ed_offset - sub esi,ebx - cmp eax,esi - jae @F - mov esi,eax ;чтобы не выходить за пределы экрана -;--- рисуем текст --- -@@: mov eax,4 - mov ebx,ed_left - mov edx,ed_offset - add ebx,2 - shl ebx,16 - add ebx,ed_top - mov ecx,ed_text_color - add ebx,4 - add edx,ed_text - mcall -ret -;---------------------------------------------------------- -;--- процедура прорисовки фона ---------------------------- -;входные данные -;eax -;edx - color -;---------------------------------------------------------- -;вход только цвет edx -edit_box.draw_bg: - mov ebx,ed_left - add ebx,1 - mov edx,ed_color - shl ebx,16 - add ebx,ed_width - sub ebx,1 -edit_box.draw_bg_eax: - mov ecx,ed_top - mov eax,13 - add ecx,1 - shl ecx,16 - add ecx,ed_height - dec ecx - mcall -ret -;---------------------------------------------------------- -;--- процедура получения количества символов в текущей щирине компонента -;---------------------------------------------------------- -edit_box.get_n: - mov eax,ed_width ;получем ширину компонента - xor edx,edx ;результат распологается в паре edx:eax в eax - остаток - sub eax,4 ;вычтим 4 - mov ebx,6 ;загрузми делитель - div ebx ;размделим на 6 -ret -;---------------------------------------------------------- -;--- процедура рисования курсора -------------------------- -;---------------------------------------------------------- -;входные ebp- цвет -edit_box.clear_cursor: - mov edx,ebp - mov ebx,cl_curs_x - mov ecx,cl_curs_y - jmp edit_box.draw_curs -edit_box.draw_cursor: - mov edx,ed_text_color - mov ebx,ed_pos - mov ecx,ed_offset - sub ebx,ecx - - lea ebx,[ebx*2+ebx] - shl ebx,1 - ;imul ebx,6 - add ebx,ed_left - mov ecx,ed_top - inc ebx - add ecx,2 - mov ebp,ebx - shl ebx,16 - mov bx,bp - mov ebp,ecx - - shl ecx,16 - mov cx,bp - add ecx,ed_height-4 - - mov cl_curs_x,ebx - mov cl_curs_y,ecx -edit_box.draw_curs: - mcall 38 -ret -;---------------------------------------------------------- -;--- процедура рисования рамки ---------------------------- -;---------------------------------------------------------- -edit_box.draw_border: -;--- цвет рамки --- - test word ed_flags,ed_focus - mov edx,ed_focus_border_color - jne @f - mov edx,ed_blur_border_color -@@: -;--- сверху --- - mov eax,38 - mov ebx,ed_left - mov ecx,ebx - shl ebx,16 - mov bx,cx - add ebx,ed_width - mov ecx,ed_top - mov esi,ecx - shl ecx,16 - mov cx,si - mcall -;--- снизу --- - mov esi,ecx - add ecx,ed_height - mov ebp,ecx - shl ecx,16 - mov cx,bp - mcall -;--- слева --- - mov cx,si - mov ebp,ebx - sub ebx,ed_width - mcall -;--- справа --- - mov ebx,ebp - shl ebx,16 - mov bx,bp - mcall -ret -;---------------------------------------------------------- -;--- проверка, зашел ли курсор за границы и, если надо, --- -;--- изменяем смещение ------------------------------------ -;--- если смещение было установка флага ed_offset_cl иначе -; если ничего не изменилось то выставление ed_offset_fl -; в общей битовой маррице состояния компонентов word ed_flags -;---------------------------------------------------------- -edit_box.check_offset: -pushad - mov ecx,ed_pos - mov ebx,ed_offset - cmp ebx,ecx - ja edit_box.sub_8 - - push ebx - call edit_box.get_n ;получим кол-во символов в паре регистров edx:eax - pop ebx - mov edx,ebx - add edx,eax ;ed_offset+width editbox - inc edx ;необходимо для номального положения курсора в крайней левой позиции - cmp edx,ecx - ja @f - - mov edx,ed_size - cmp edx,ecx - je edit_box.add_end - - sub edx,ecx - cmp edx,8 - jbe edit_box.add_8 - add ebx,8 - jmp edit_box.chk_d - -edit_box.sub_8: cmp ecx,0 - je edit_box.sub_min - cmp ebx,8 - jbe edit_box.sub_min - sub ebx,8 ;ebx=ed_offset - jmp edit_box.chk_d -edit_box.sub_min: - xor ebx,ebx - jmp edit_box.chk_d - -edit_box.add_end:sub edx,eax - mov ebx,edx - jmp edit_box.chk_d -edit_box.add_8: add ebx,edx -edit_box.chk_d: mov ed_offset,ebx - call edit_box.draw_bg - and word ed_flags,ed_offset_cl -edit_ex -@@: - or word ed_flags,ed_offset_fl -edit_ex -} - -macro use_key_func -{ -;Обработка Shift для снятия выделения неизвестной области -edit_box_key.shift: ;;;;;;;SHIFT - test word ed_flags,ed_shift - je edit_box_key.f_exit - -@@: mov ebp,shift_color - or word ed_flags,ed_shift_bac ;установка флага, выделенной области - mov ebx,dword ed_shift_pos - call edit_box_key.sh_cl_ - jmp edit_box.draw_cursor_text -;;;;;;;;;;;;;;;;;;;;; -edit_box_key.f_exit: call edit_box.check_offset - and word ed_flags,ed_shift_cl - call edit_box_key.enable_null - jmp edit_box.draw_cursor_text -edit_box_key.sh_cl_: -;;;;;;SHIFT end -;обработка очистки, при левом - правом движении выделения -;для обработки снятия выделения -;входные параметры ebp=color ebx=ed_shift_pos - mov eax,dword ed_pos - cmp eax,ebx - - jae edit_box_key.sh_n - push eax ;меньшее в eax - push ebx ;большее - jmp edit_box_key.sh_n1 - ;если иначе -edit_box_key.sh_n: push ebx - push eax -edit_box_key.sh_n1: - call edit_box.check_offset - call edit_box.get_n - mov edx,eax ;size of ed_box - mov ecx,ed_offset - add eax,ecx ;eax = w_off= ed_offset+width - mov edx,eax ;save - pop ebx ;большее - pop eax ;меньшее - - cmp eax,ecx ;сравнение с меньшего с offset. - jae edit_box_key.f_f ;если больше - xor eax,eax - cmp edx,ebx ;cравним размер w_off с большим - jb @f - sub ebx,ecx - jmp edit_box_key.nxt_f -@@: mov ebx,edx - sub ebx,ecx - jmp edit_box_key.nxt_f -edit_box_key.f_f: - sub eax,ecx - cmp edx,ebx ;cравним размер w_off с большим - jle @f - sub ebx,ecx - sub ebx,eax - jmp edit_box_key.nxt_f -@@: - mov ebx,edx - sub ebx,ecx - sub ebx,eax -edit_box_key.nxt_f: - mov edx,ebx - lea ebx,[eax*2+eax] - shl ebx,1 - add ebx,ed_left - inc ebx - shl ebx,16 - lea ecx,[edx*2+edx] - shl ecx,1 - mov bx,cx - inc ebx - mov edx,ebp;shift_color - - call edit_box.draw_bg_eax -@@: call edit_box_key.enable_null - ret -;;;;;;;;;;;;;;;;;;;;; -;Установка- снятие выделения в один символ -;;;;;;;;;;;;;;;;;;;;; -edit_box_key.drw_sim: - mov eax,dword ed_pos - call edit_box_key.draw_rectangle ;нарисовать прямоугольник с заданным цветом - jmp @b -;;;;;;;;;;;;;;;;;;;;; -;Фукция установки выделения при движения влево и вправо и нажатии shift -;Логика: -;;;;;;;;;; -edit_box_key.draw_wigwag: -;функция установки переменных - mov ebp,shift_color - call edit_box.clear_cursor - - or word ed_flags,ed_shift_bac ;установка флага, выделенной области - mov ebp,shift_color - mov eax,dword ed_pos - test word ed_flags,ed_left_fl - jz edit_box_key.low - jmp @f -;;;;;;;;;; -;Фукция удаления выделения при движения влево и вправо и нажатии shift -;Логика: -;;;;;;;;;; -edit_box_key.draw_wigwag_cl: -;функция установки переменных - mov ebp,ed_color - call edit_box.clear_cursor - - mov ebp,ed_color - mov eax,dword ed_pos - test word ed_flags,ed_left_fl - jz edit_box_key.low -@@: call edit_box_key.draw_rectangle ;нарисовать прямоугольник закрашиваемой области - ret -edit_box_key.low: dec eax - jmp @b -;входной параметр ebx - ed_pos -edit_box_key.sh_first_sh: - test word ed_flags,ed_shift - je @f - mov dword ed_shift_pos_old,ebx - test word ed_flags,ed_shift_on - jne @f - mov dword ed_shift_pos,ebx - or word ed_flags,ed_shift_on -@@: ret -;Обработка крайних положений в editbox при нажатом shift -;производит снятие выделение, если нет shift -;иначе вообще выходит -edit_box_key.sh_st_of: - test word ed_flags,ed_shift - jne @f - test word ed_flags,ed_shift_bac - je @f - mov ebp,ed_color - mov ebx,dword ed_shift_pos - call edit_box_key.sh_cl_ ;очистка выделеного фрагмента - and word ed_flags,ed_shift_cl ; очистка от того что убрали выделение - jmp edit_box.draw_cursor_text -@@: - and word ed_flags,ed_shift_off -edit_ex -;проверка состояния shift был ли он нажат раньше? -edit_box_key.sh_enable: - test word ed_flags,ed_shift - jne edit_box_key.sh_ext_en ;нарисовать закрашеный прямоугольник - - test word ed_flags,ed_shift_bac - je @f - call edit_box.check_offset - - mov ebp,ed_color - mov ebx,dword ed_shift_pos - call edit_box_key.sh_cl_ ;очистка выделеного фрагмента - call edit_box_key.draw_wigwag_cl - and word ed_flags,ed_shift_cl ; 1вар не нужно - ret - -@@: mov ebp,ed_color - call edit_box.clear_cursor - call edit_box.check_offset - ret -edit_box_key.sh_ext_en: - call edit_box.check_offset - test word ed_flags,ed_offset_fl - je @f -;Рисование закрашеных прямоугольников и очистка их - mov eax,dword ed_shift_pos - mov ebx,dword ed_pos - mov ecx,dword ed_shift_pos_old -;проверка и рисование закрашеных областей - cmp eax,ecx - je edit_box_key.1_shem - jb edit_box_key.smaller - cmp ecx,ebx - ja edit_box_key.1_shem - call edit_box_key.draw_wigwag_cl ;clear - jmp edit_box_key.sh_e_end -edit_box_key.smaller: - cmp ecx,ebx - jb edit_box_key.1_shem - call edit_box_key.draw_wigwag_cl ;clear - jmp edit_box_key.sh_e_end -;alike = -edit_box_key.1_shem: call edit_box_key.draw_wigwag -edit_box_key.sh_e_end: and word ed_flags,ed_shift_off - ret -@@: mov ebp,shift_color - mov ebx,dword ed_shift_pos - call edit_box_key.sh_cl_ - jmp edit_box_key.sh_e_end -;функция для обработки shift при нажатии home and end -edit_box_key.sh_home_end: - mov ebp,ed_color - call edit_box.clear_cursor - test word ed_flags,ed_shift_bac - je @f - mov ebp,ed_color - mov ebx,dword ed_shift_pos_old - call edit_box_key.sh_cl_ - -@@: test word ed_flags,ed_shift - je edit_box_key.sh_exit_ ;выйти - mov ebp,shift_color - mov ebx,dword ed_shift_pos - call edit_box_key.sh_cl_ - or word ed_flags,ed_shift_bac ;установка флага, выделенной области - jmp edit_box_key.sh_e_end -edit_box_key.sh_exit_: call edit_box.check_offset - ret -;функция внесения 0 по адресу ed_size+1 -edit_box_key.enable_null: - pusha - mov eax,ed_size - mov ebx,ed_text - test eax,eax - add eax,ebx - jne @f - inc eax -@@: xor ebx,ebx - mov [eax],bl -edit_ex -;- удаление символа -;Входные данные edx=ed_size;ecx=ed_pos -edit_box_key.del_char: - mov esi,ed_text - test word ed_flags,ed_shift_on - je @f - mov eax,dword ed_shift_pos - mov ebx,esi - cmp eax,ecx - jae edit_box_key.dh_n - - mov ed_pos,eax ;что бы не было убегания курсора - mov ebp,ecx - sub ebp,eax - add ebx,eax ;eax меньше - sub edx,ecx - add esi,ecx - - mov dword ed_shift_pos,ebp - jmp edit_box_key.del_ch_sh - ;если иначе -edit_box_key.dh_n: - mov ebp,eax - sub ebp,ecx - add ebx,ecx - sub edx,eax - add esi,eax - mov dword ed_shift_pos,ebp - jmp edit_box_key.del_ch_sh - -@@: add esi,ecx ;указатель + смещение к реальному буфферу - mov ebx,esi - inc esi - cld - - sub edx,ecx -edit_box_key.del_ch_sh: - - push edi - mov edi,ebx -@@: - lodsb - stosb - dec edx - jns @b - - pop edi - ret -;вычислить закрашиваемую область -;соглашение в ebp - передается ed_size -edit_box_key.clear_bg: - call edit_box.get_n ;получить размер в символах ширины компонента - push eax - mov ebx,ed_offset - add eax,ebx ;eax = w_off= ed_offset+width - mov ebx,ebp ;ed_size - - cmp eax,ebx - jb @f - mov eax,ed_pos - sub ebx,eax - mov ecx,ed_offset - sub eax,ecx - jmp edit_box_key.nxt -@@: mov ebx,ed_pos - push ebx - sub eax,ebx - mov ebx,eax ;It is don't optimal - - pop eax ;ed_pos - mov ecx,ed_offset - sub eax,ecx -edit_box_key.nxt: - mov ebp,eax ;проверка на выход закрашиваемой области за пределы длины - add ebp,ebx - pop edx - cmp ebp,edx - je @f - inc ebx - -@@: mov edx,ebx - lea ebx,[eax*2+eax] - shl ebx,1 - add ebx,ed_left - inc ebx - shl ebx,16 - lea ecx,[edx*2+edx] - shl ecx,1 - mov bx,cx - mov edx,ed_color - call edit_box.draw_bg_eax - ret -;;;;;;;;;;;;;;;;;;; -;;; Обработка примитивов -;;;;;;;;;;;;;;;;;;;; -;Нарисовать прямоугольник, цвет передается в ebp -;входные параметры: -;eax=dword ed_pos -;ebp=-цвет ed_color or shift_color -edit_box_key.draw_rectangle: - mov ecx,dword ed_offset - sub eax,ecx - lea ebx,[eax*2+eax] - shl ebx,1 - inc ebx - add ebx,ed_left - shl ebx,16 - add ebx,6 - mov edx,ebp - call edit_box.draw_bg_eax - ret -;;;;;;;;;;;;;;;;;; -;;Проверка нажат ли shift -;;;;;;;;;;;;;;;;;; -edit_box_key.check_shift: -pusha ;сохраним все регистры - mcall 66,3,1 - test al,0x03 - je @f - or word ed_flags,ed_shift ;установим флаг -@@:edit_ex -} -;макрос клавиш на которые происходит реакция -macro use_key_process backspase,delete,left,right,home,end,insert -{ -if backspase eq -else - cmp ah,8 - jz edit_box_key.backspace -end if -if delete eq -else - cmp ah,0xb6 - jz edit_box_key.delete -end if -if left eq -else - cmp ah,176 - jz edit_box_key.left -end if -if right eq -else - cmp ah,179 - jz edit_box_key.right -end if -if home eq -else - cmp ah,180 - jz edit_box_key.home -end if -if home eq -else - cmp ah,181 - jz edit_box_key.end -end if -if insert eq -else - cmp ah,185 ;insert - jz edit_box_key.insert -end if -} -macro use_key_no_process up,down,esc -{ -if up eq -else - cmp ah,177 - jz edit_box.editbox_exit -end if -if down eq -else - cmp ah,178 - jz edit_box.editbox_exit -end if -if esc eq -else - cmp ah,27 ;ESC - клавиша )) - jz edit_box.editbox_exit -end if -} - -macro use_key_figures_only -{ - test word ed_flags,ed_figure_only ; только цифры ? - jz @f - cmp ah,'0' - jb edit_box.editbox_exit - cmp ah,'9' - ja edit_box.editbox_exit -@@: -} -macro are_key_shift_press -{ - test word ed_flags,ed_shift_on - je @f - ;Входные данные edx=ed_size;ecx=ed_pos - push eax - mov edx,ed_size - mov ecx, ed_pos - pusha -;;;;;;;;;;;;;;;;;;;;; -;clear input arrea - mov ebp,ed_color - mov ebx,dword ed_shift_pos - call edit_box_key.sh_cl_ - mov ebp,ed_size - call edit_box_key.clear_bg -;;;;;;;;;;;;;;;;;;;;; - popa - call edit_box_key.del_char -;;;; - mov eax,dword ed_shift_pos - mov ebx,ed_size - sub ebx,eax - mov ed_size,ebx - pop eax -@@: -} -macro are_key_cur_end -{ - mov ecx,ed_size - mov edx, ed_max - test word ed_flags,ed_insert - jne @f - cmp ecx,edx - jae edit_box.editbox_exit -@@: mov ebx, ed_pos - cmp ebx,edx - jl @f ; если меньше или равно - jmp edit_box.editbox_exit - -@@: ; сдвигаем символы после курсора вправо - mov ecx,ed_size - push edi eax - mov ebp,edi - mov esi,ed_text ; Указатель на буфер - ;Будем работать со строкой - add esi,ecx ;add ed_size добавим max size - mov edi,esi - - cmp ecx,ebx ;Если у нас позиция курсора = текущему размеру напечатанных символов т.е. курсор стоит в конце - je edit_box_key.In_k - - test word [ebp+40],ed_insert ;IF insert is enable т.к. edi изменен адресуем через ebp - jne edit_box_key.ins_v -;clear -pusha - mov edi,ebp - mov ebp,ed_size - call edit_box_key.clear_bg -popa - sub ecx,ebx ;Найдем кол-во символов для передвижения. - inc edi ;Сместим наши символы в право - std - inc ecx - @@: - ;-------- - lodsb - stosb - ;-------- - loop @b -edit_box_key.In_k: cld - pop eax - mov al,ah - stosb - pop edi -; вставляем код клавиши туда, где курсор - ; увеличиваем значение размера и позиции - inc dword ed_size - inc dword ed_pos - call edit_box_key.draw_all2 - jmp edit_box_key.shift -} -macro use_work_key -{ -edit_box_key.insert: test word ed_flags,ed_insert ;not word ed_insert - je @f - and word ed_flags,ed_insert_cl - - jmp edit_box.editbox_exit -@@: - or word ed_flags,ed_insert - jmp edit_box.editbox_exit -edit_box_key.ins_v: - dec dword [ebp+42];ed_size ;processing is insert - sub esi,ecx - add esi,ebx - mov edi,esi -;clear -pusha - mov edi,ebp - mov ebp,ed_pos - call edit_box_key.clear_bg -popa - jmp edit_box_key.In_k -;;;;;;;;;;;;;;;;;;;;;;;;;;;; -edit_box_key.delete: - mov edx,ed_size - mov ecx,ed_pos - cmp edx,ecx - jg edit_box_key.bac_del - test word ed_flags,ed_shift_on - jne edit_box_key.del_bac -edit_ex -edit_box_key.bac_del: - call edit_box_key.del_char - jmp edit_box_key.draw_all -;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;--- нажата клавиша backspace --- -edit_box_key.backspace: - ; проверяем, курсор у левого края ? - mov ecx,ed_pos - test ecx,ecx - jnz edit_box_key.del_bac - test word ed_flags,ed_shift_on - jne edit_box_key.bac_del - -edit_ex -edit_box_key.del_bac: - mov edx,ed_size - cmp edx,ecx ;if ed_pos=ed_size - je @f - dec ecx - call edit_box_key.del_char -@@: test word ed_flags,ed_shift_on - jne edit_box_key.bac_del - dec dword ed_pos -edit_box_key.draw_all: - push edit_box_key.shift;.draw_cursor_text;eax - - test word ed_flags,ed_shift_on - je @f - mov eax,dword ed_shift_pos - mov ebx,ed_size - sub ebx,eax - mov ed_size,ebx - - mov ebp,ed_color - call edit_box.clear_cursor - call edit_box.check_offset - call edit_box.draw_bg - ret -@@: dec dword ed_size - -edit_box_key.draw_all2: - and word ed_flags,ed_shift_cl - mov ebp,ed_color - call edit_box.clear_cursor - call edit_box.check_offset - mov ebp,ed_size - call edit_box_key.clear_bg - ret -;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;--- нажата клавиша left --- -edit_box_key.left: mov ebx,ed_pos - test ebx,ebx - jz edit_box_key.sh_st_of - or word ed_flags,ed_left_fl - call edit_box_key.sh_first_sh - dec dword ed_pos - call edit_box_key.sh_enable - jmp edit_box.draw_cursor_text -;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;--- нажата клавиша right --- -edit_box_key.right: mov ebx,ed_pos - cmp ebx,ed_size - je edit_box_key.sh_st_of - and word ed_flags,ed_right_fl - call edit_box_key.sh_first_sh - inc dword ed_pos - call edit_box_key.sh_enable - jmp edit_box.draw_cursor_text -;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -edit_box_key.home: - mov ebx,ed_pos - test ebx,ebx - jz edit_box_key.sh_st_of - call edit_box_key.sh_first_sh - xor eax,eax - mov ed_pos,eax - call edit_box_key.sh_home_end - jmp edit_box.draw_cursor_text -;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -edit_box_key.end: - mov ebx,ed_pos - cmp ebx,dword ed_size - je edit_box_key.sh_st_of - call edit_box_key.sh_first_sh - mov eax,ed_size - mov ed_pos,eax - call edit_box_key.sh_home_end - jmp edit_box.draw_cursor_text -} - -macro use_mouse_func -{ -;---------------------------------------------------------- -;--- Обработка .mouse_wigwag -;---------------------------------------------------------- -edit_box_mouse.mouse_wigwag: - shr eax,16 - or word ed_flags,ed_shift_bac+ed_shift_on+ed_shift -;;;;;;;;;;;;;;;;;; -;;процедура обработки положения выделенного текста, когда происходит выход за пределы editbox -;;;;;;;;;;;;;;;;;; - test ax,0x8000 - jnz edit_box_mouse.mleft - - mov ebx,ed_left - cmp eax,ebx - jb edit_box_mouse.mleft - - add ebx,ed_width - cmp eax,ebx - ja edit_box_mouse.mright - - sub ebx,ed_width - - xor edx,edx - sub eax,ebx ; вычтим из координат мышки по оси х координаты до editbox по оси х - mov ebx,6 - div ebx -;;;;;;;;;;;;;;;;;; -;;процедура обработки положения выделенного текста, в пределах области editbox -;;;;;;;;;;;;;;;;;; -;Получили координаты в eax мышки, т.е. куда она переместилась -;Рисование закрашеных прямоугольников и очистка их - add eax,ed_offset ;добавим смещение - cmp eax,dword ed_size ;если вышли за пределы, то ничего не делать - ja edit_box_mouse.mwigvag -edit_box_mouse.mdraw: - mov dword ed_pos,eax ;сохраним новое значение -;Рисование закрашеных прямоугольников и очистка их - mov ecx,dword ed_shift_pos - mov ebx,dword ed_shift_pos_old - mov dword ed_shift_pos_old,eax ;внесем новое значение старой позиции курсора -;проверка и рисование закрашеных областей - cmp ecx,ebx ;выясняем куда было движение на один шаг назад - je edit_box_mouse.m1_shem ;движения не было ранее - jb edit_box_mouse.msmaller ;движение было -> - cmp ebx,eax ;движение было до этого <- и тут мы проверяем сейчас куда движение происходит - ja edit_box_mouse.m1_shem ;если было движение <- то нужно закрасить область - je edit_box_mouse.mwigvag ;если изменения не было, то ничего не делать - mov ebp,ed_color ;тут нужно очистить область c ed_pos ed_shift_pos_old -;входные параметры ebp=color ebx=ed_shift_pos - call edit_box_key.sh_cl_ - jmp edit_box_mouse.mwigvag -edit_box_mouse.msmaller: - cmp ebx,eax - jb edit_box_mouse.m1_shem - mov ebp,ed_color -;входные параметры ebp=color ebx=ed_shift_pos - call edit_box_key.sh_cl_ - jmp edit_box_mouse.mwigvag -;alike = -edit_box_mouse.m1_shem: - mov ebp,shift_color -;входные параметры ebp=color ebx=ed_shift_pos - mov ebx,ecx - call edit_box_key.sh_cl_ - jmp edit_box_mouse.mwigvag -edit_box_mouse.mwigvag: - and word ed_flags,ed_shift_mcl - jmp edit_box.draw_cursor_text -; popa -; ret -edit_box_mouse.mleft: - mov eax,ed_pos - cmp eax,0 - jbe edit_box_mouse.mwigvag - dec eax - call edit_box.check_offset - push eax - mov ebx,ed_shift_pos - mov ebp,shift_color - call edit_box_key.sh_cl_ - pop eax - jmp edit_box_mouse.mdraw -edit_box_mouse.mright: - mov eax,ed_pos - mov ebx,ed_size - cmp eax,ebx - jae edit_box_mouse.mwigvag - inc eax - call edit_box.check_offset - mov ebx,ed_shift_pos - mov ebp,shift_color - push eax - call edit_box_key.sh_cl_ - pop eax - jmp edit_box_mouse.mdraw -} - -macro use_work_mouse -;---------------------------------------------------------- -;--- А не удерживаем ли мы клавишу мышки, перемещая курсор, во все разные стороны? -;---------------------------------------------------------- -{ - test word ed_flags,ed_mouse_on - jne edit_box_mouse.mouse_wigwag -;---------------------------------------------------------- -;--- проверяем, попадает ли курсор в edit box ------------- -;---------------------------------------------------------- - mov ebx,ed_top - cmp ax,bx - jl edit_box_mouse._blur;.mouse_end_no_focus - - add ebx,ed_height - cmp ax,bx - jg edit_box_mouse._blur;.mouse_end_no_focus - - shr eax,16 - - mov ebx,ed_left - cmp ax,bx - jl edit_box_mouse._blur;.mouse_end_no_focus - - add ebx,ed_width - - cmp ax,bx - jg edit_box_mouse._blur;.mouse_end_no_focus - -;--- изменяем позицию курсора --- - push eax - mov ebp,ed_color - call edit_box.clear_cursor - pop eax -edit_box_mouse._mvpos: - xor edx,edx - sub eax,ed_left - - mov ebx,6 - div bx - add eax,ed_offset - cmp eax,ed_size - jna edit_box_mouse._mshift - mov eax,ed_size - -edit_box_mouse._mshift: -;;;;;;; -;;Секция обработки shift и выделения по shift -;;;;;;; - test word ed_flags,ed_shift_bac - je @f - mov ebp,dword ed_color - mov ebx,dword ed_shift_pos - push eax - call edit_box_key.sh_cl_ - and word ed_flags,ed_shift_bac_cl - pop eax -@@: - test word ed_flags,ed_mouse_on - jne @f - - mov dword ed_shift_pos,eax - or word ed_flags,ed_mouse_on - mov dword ed_pos,eax - mov dword [mouse_flag],edi ;установим идентификатор - bts word ed_flags,1 ;установка фокуса - jmp edit_box_mouse.m_sh -@@: - cmp eax,dword ed_shift_pos ;если позиции не изменились - je edit_box.editbox_exit - mov ed_pos,eax - mov ebp,dword shift_color - mov ebx,dword ed_shift_pos - call edit_box_key.sh_cl_ - or word ed_flags,ed_mous_adn_b ;установим бит что мы выделили +shift_on + -edit_box_mouse.m_sh: call edit_box.draw_text - call edit_box.draw_cursor -;---------------------------------------------------------- -;--- процедура установки фокуса --------------------------- -;---------------------------------------------------------- - jmp edit_box_mouse.drc -edit_box_mouse._blur: - test word ed_flags,ed_always_focus - jne edit_box.editbox_exit - btr word ed_flags,1 ; если не в фокусе, выходим - jnc edit_box.editbox_exit - - mov ebp,ed_color - call edit_box.clear_cursor -edit_box_mouse.drc: call edit_box.draw_border - jmp edit_box.editbox_exit -} - - -; Макрос выхода -macro edit_ex -{ -popad -ret -} -macro debug -{ - ;----------- отладка - pushad -; mov dword [ed_buffer.2],0 -; mov eax,edi - mov eax,dword [ed_buffer.2] - mov edi,ed_buffer.3 - call .str - ;рисование фона - mov eax,13 - mov ebx,178*65536+70 - mov ecx,28*65536+10 - xor edx,edx - int 0x40 - ;вывод значения на экран - mov eax,4 - mov ebx,180*65536+30 - mov ecx,0x10DDBBCC - mov edx,ed_buffer.3 - mov esi,8 - int 0x40 - popad - ;----------- отладка -} -macro debug_func -{ -.str: - mov ecx,0x0a ;задается система счисления изменяются регистры ebx,eax,ecx,edx входные параметры eax - число - ;преревод числа в ASCII строку взодные данные ecx=система счисленя edi адрес куда записывать, будем строку, причем конец переменной - cmp eax,ecx ;сравнить если в eax меньше чем в ecx то перейти на @@-1 т.е. на pop eax - jb @f - xor edx,edx ;очистить edx - div ecx ;разделить - остаток в edx - push edx ;положить в стек - ;dec edi ;смещение необходимое для записи с конца строки - call .str;перейти на саму себя т.е. вызвать саму себя и так до того момента пока в eax не станет меньше чем в ecx - pop eax - @@: ;cmp al,10 ;проверить не меньше ли значение в al чем 10 (для системы счисленя 10 данная команда - лишная)) - ;sbb al,$69 ;- честно данная инструкция меня заставляет задуматься т.е. я не знаю как это работает - ;das ;после данной команды как бы происходит уменьшение al на 66h (в книге написано другое) - or al,0x30 ;данная команда короче чем две выше - stosb ;записать элемент из регистра al в ячеку памяти es:edi - - ret ;вернуться чень интересный ход т.к. пока в стеке храниться кол-во вызовов то столько раз мы и будем вызываться -} - -;;;;;;;;;;;;;;; -;For LibGui -;;;;;;;;;;;;;;; -macro srt_ed_libgui -{ -ed_width equ [EditBox.ed_width] ;ширина компонента -ed_left equ [EditBox.ed_left] ;положение по оси х -ed_top equ [EditBox.ed_top] ;положение по оси у -ed_color equ [EditBox.ed_color] ;цвет фона компонента -shift_color equ [EditBox.shift_color] ;=0x6a9480 -ed_focus_border_color equ [EditBox.ed_focus_border_color] ;цвет рамки компонента -ed_blur_border_color equ [EditBox.ed_blur_border_color] ;цвет не активного компонента -ed_text_color equ [EditBox.ed_text_color] ;цвет текста -ed_max equ [EditBox.ed_max] ;кол-во символов которые можно максимально ввести -ed_text equ [EditBox.ed_text] ;указатель на буфер -ed_flags equ [EditBox.ed_flags] ;флаги -ed_size equ [EditBox.ed_size] ;кол-во символов -ed_pos equ [EditBox.ed_poz] ;позиция курсора -ed_offset equ [EditBox.ed_offset] ;смещение -cl_curs_x equ [EditBox.cl_curs_x] ;предыдущее координата курсора по х -cl_curs_y equ [EditBox.cl_curs_y] ;предыдущее координата курсора по у -ed_shift_pos equ [EditBox.ed_shift_pos] ;положение курсора -ed_shift_pos_old equ [EditBox.ed_shift_pos_old] ;старое положение курсора -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;Bit mask from editbox -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -ed_figure_only= 1000000000000000b ;одни символы -ed_always_focus= 100000000000000b -ed_focus= 10b ;фокус приложения -ed_shift_on= 1000b ;если не установлен -значит впервые нажат shift,если был установлен, значит мы уже что - то делали удерживая shift -ed_shift_on_off=1111111111110111b -ed_shift= 100b ;включается при нажатии на shift т.е. если нажимаю -ed_shift_off= 1111111111111011b -ed_shift_bac= 10000b ;бит для очистки выделеного shift т.е. при установке говорит что есть выделение -ed_shift_bac_cl=1111111111101111b ;очистка при удалении выделения -ed_shift_cl= 1111111111100011b -ed_shift_mcl= 1111111111111011b -ed_left_fl= 100000b -ed_right_fl= 1111111111011111b -ed_offset_fl= 1000000b -ed_offset_cl= 1111111110111111b -ed_insert= 10000000b -ed_insert_cl= 1111111101111111b -ed_mouse_on = 100000000b -ed_mous_adn_b= 100011000b -ed_mouse_on_off=1111111011111111b -ed_height=24 ; высота -} - -ed_struc_size=72 -struc edit_box width,left,top,color,shift_color,focus_border_color,\ - blur_border_color,text_color,max,text,flags,size,pos -{ -.width dd width -.left dd left -.top dd top -.color dd color -.shift_color dd shift_color -.focus_border_color dd focus_border_color -.blur_border_color dd blur_border_color -.text_color dd text_color -.max dd max -.text dd text -.flags dd flags+0 -.size dd size+0 -.pos dd pos+0 -.offset dd 0 -.cl_curs_x dd 0 -.cl_curs_y dd 0 -.shift dd 0 -.shift_old dd 0 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;Bit mask from editbox -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -ed_figure_only= 1000000000000000b ;одни символы -ed_always_focus= 100000000000000b -ed_focus= 10b ;фокус приложения -ed_shift_on= 1000b ;если не установлен -значит впервые нажат shift,если был установлен, значит мы уже что - то делали удерживая shift -ed_shift_on_off=1111111111110111b -ed_shift= 100b ;включается при нажатии на shift т.е. если нажимаю -ed_shift_off= 1111111111111011b -ed_shift_bac= 10000b ;бит для очистки выделеного shift т.е. при установке говорит что есть выделение -ed_shift_bac_cl=1111111111101111b ;очистка при удалении выделения -ed_shift_cl= 1111111111100011b -ed_shift_mcl= 1111111111111011b -ed_left_fl= 100000b -ed_right_fl= 1111111111011111b -ed_offset_fl= 1000000b -ed_offset_cl= 1111111110111111b -ed_insert= 10000000b -ed_insert_cl= 1111111101111111b -ed_mouse_on = 100000000b -ed_mous_adn_b= 100011000b -ed_mouse_on_off=1111111011111111b -ed_height=14 ; высота - -} diff --git a/programs/develop/box_lib/trunk/editbox_ex.asm b/programs/develop/box_lib/trunk/editbox_ex.asm deleted file mode 100644 index 13ffc4394a..0000000000 --- a/programs/develop/box_lib/trunk/editbox_ex.asm +++ /dev/null @@ -1,245 +0,0 @@ -;заголовок приложения -use32 ; транслятор, использующий 32 разрядных команды - org 0x0 ; базовый адрес кода, всегда 0x0 - db 'MENUET01' ; идентификатор исполняемого файла (8 байт) - dd 0x1 ; версия формата заголовка исполняемого файла - dd start ; адрес, на который система передаёт управление - ; после загрузки приложения в память - dd i_end ; размер приложения - dd mem ; Объем используемой памяти, для стека отведем 0х100 байт и выровним на грницу 4 байта - dd mem ; расположим позицию стека в области памяти, сразу за телом программы. Вершина стека в диапазоне памяти, указанном выше - dd 0x0 ; указатель на строку с параметрами. - dd way_of_ini -include 'macros.inc' -include 'editbox_ex.mac' -start: -;Get way for ini file. - mov edi,way_of_ini - mov ecx,1024 - xor eax,eax - cld - repne scasb - test ecx,ecx - jz @f - - mov esi,1024 - sub esi,ecx - mov ecx,esi - std - mov al,'/' - repne scasb - test ecx,ecx - jz next_way - add edi,2 -@@: - mov esi,ini_file - cld - -@@: lodsb - test al,al - jz @f - stosb - jmp @b - -@@: xor eax,eax - stosb - -; load DLL - mov ecx,way_of_ini - mov eax, 68 - mov ebx, 19 - mcall - test eax, eax - jz next_way - jmp import_init_ -next_way: - mov ecx,ini_file - mov eax, 68 - mov ebx, 19 - mcall - test eax, eax - jz exit - - - -import_init_: -; initialize import - mov edx, eax - mov esi,myimport -import_loop: - lodsd - test eax, eax - jz import_done - push edx -import_find: - mov ebx, [edx] - test ebx, ebx - jz exit;import_not_found - push eax -@@: - mov cl, [eax] - cmp cl, [ebx] - jnz import_find_next - test cl, cl - jz import_found - inc eax - inc ebx - jmp @b -import_find_next: - pop eax - add edx, 8 - jmp import_find -import_found: - pop eax - mov eax, [edx+4] - mov [esi-4], eax - pop edx - jmp import_loop -import_done: - - mcall 40,0x27 ;установить маску для ожидаемых событий -red_win: - call draw_window ;первоначально необходимо нарисовать окно -align 4 -still: ;основной обработчик - mcall 10 ;Ожидать события - dec eax - jz red_win - dec eax - jz key - dec eax - jz button - - push dword edit1 - call [edit_box_mouse] - - push dword edit2 - call [edit_box_mouse] - - push dword check1 - call [check_box_mouse] - - push dword check2 - call [check_box_mouse] - - push dword Option_boxs - call [option_box_mouse] - - push dword Option_boxs2 - call [option_box_mouse] - - jmp still ;если ничего из перечисленного то снова в цикл -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -button: - mcall 17 ;получить идентификатор нажатой клавиши - test ah,ah ;если в ah 0, то перейти на обработчик событий still - jz still -exit: mcall -1 -key: - mcall 2 ;загрузим значение 2 в регистор eax и получим код нажатой клавиши - - push dword edit1 - call [edit_box_key] - - push dword edit2 - call [edit_box_key] - - jmp still - -;>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -align 4 -draw_window: ;рисование окна приложения - mcall 12,1 - mcall 0,(50*65536+390),(30*65536+200),0xb3AABBCC,0x805080DD,hed - - push dword edit1 - call [edit_box_draw] - - push dword edit2 - call [edit_box_draw] - - push dword check1 - call [check_box_draw] - - push dword check2 - call [check_box_draw] - - push dword Option_boxs - call [option_box_draw] - - push dword Option_boxs2 - call [option_box_draw] - - mcall 12,2 - ret -;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -;DATA данные -ini_file db '/sys/lib/box_lib.obj',0 -myimport: - -edit_box_draw dd aEdit_box_draw -edit_box_key dd aEdit_box_key -edit_box_mouse dd aEdit_box_mouse -version_ed dd aVersion_ed - -check_box_draw dd aCheck_box_draw -check_box_mouse dd aCheck_box_mouse -version_ch dd aVersion_ch - -option_box_draw dd aOption_box_draw -option_box_mouse dd aOption_box_mouse -version_op dd aVersion_op - - dd 0 - dd 0 - -aEdit_box_draw db 'edit_box',0 -aEdit_box_key db 'edit_box_key',0 -aEdit_box_mouse db 'edit_box_mouse',0 -aVersion_ed db 'version_ed',0 - -aCheck_box_draw db 'check_box_draw',0 -aCheck_box_mouse db 'check_box_mouse',0 -aVersion_ch db 'version_ch',0 - -aOption_box_draw db 'option_box_draw',0 -aOption_box_mouse db 'option_box_mouse',0 -aVersion_op db 'version_op',0 - - - - -check1 check_box 10,45,6,12,0x80AABBCC,0,0,check_text,14,ch_flag_en -check2 check_box 10,60,6,12,0x80AABBCC,0,0,check_text2,15 - -edit1 edit_box 350,3,5,0xffffff,0x6f9480,0,0xAABBCC,0,308,hed,ed_focus,hed_end-hed-1,hed_end-hed-1 -edit2 edit_box 350,3,25,0xffffff,0x6a9480,0,0,0,99,ed_buffer,ed_figure_only - -op1 option_box option_group1,10,90,6,12,0xffffff,0,0,op_text.1,op_text.e1-op_text.1 -op2 option_box option_group1,10,105,6,12,0xFFFFFF,0,0,op_text.2,op_text.e2-op_text.2 -op3 option_box option_group1,10,120,6,12,0xffffff,0,0,op_text.3,op_text.e3-op_text.3 -op11 option_box option_group2,120,90,6,12,0xffffff,0,0,op_text.1,op_text.e1-op_text.1 -op12 option_box option_group2,120,105,6,12,0xffffff,0,0,op_text.2,op_text.e2-op_text.2 -op13 option_box option_group2,120,120,6,12,0xffffff,0,0,op_text.3,op_text.e3-op_text.3 - -option_group1 dd op1 ;указатели, они отображаются по умолчанию, когда выводится -option_group2 dd op12 ;приложение -Option_boxs dd op1,op2,op3,0 -Option_boxs2 dd op11,op12,op13,0 -hed db 'BOXs load from lib date 27.09.2007',0 -hed_end: -rb 256 -check_text db 'First checkbox' -check_text2 db 'Second checkbox' -op_text: ; Сопровождающий текст для чек боксов -.1 db 'Option_Box #1' -.e1: -.2 db 'Option_Box #2' -.e2: -.3 db 'Option_Box #3' -.e3: -ed_buffer rb 100 -way_of_ini rb 1024 -i_end: -rb 1024 -mem: \ No newline at end of file diff --git a/programs/develop/box_lib/trunk/editbox_ex.mac b/programs/develop/box_lib/trunk/editbox_ex.mac deleted file mode 100644 index e9200b74bc..0000000000 --- a/programs/develop/box_lib/trunk/editbox_ex.mac +++ /dev/null @@ -1,77 +0,0 @@ -ed_struc_size=72 -struc edit_box width,left,top,color,shift_color,focus_border_color,\ - blur_border_color,text_color,max,text,flags,size,pos -{ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;Bit mask from editbox -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -ed_figure_only= 1000000000000000b ;одни символы -ed_always_focus= 100000000000000b -ed_focus= 10b ;фокус приложения -ed_shift_on= 1000b ;если не установлен -значит впервые нажат shift,если был установлен, значит мы уже что - то делали удерживая shift -ed_shift_on_off=1111111111110111b -ed_shift= 100b ;включается при нажатии на shift т.е. если нажимаю -ed_shift_off= 1111111111111011b -ed_shift_bac= 10000b ;бит для очистки выделеного shift т.е. при установке говорит что есть выделение -ed_shift_bac_cl=1111111111101111b ;очистка при удалении выделения -ed_shift_cl= 1111111111100011b -ed_shift_mcl= 1111111111111011b -ed_left_fl= 100000b -ed_right_fl= 1111111111011111b -ed_offset_fl= 1000000b -ed_offset_cl= 1111111110111111b -ed_insert= 10000000b -ed_insert_cl= 1111111101111111b -ed_mouse_on = 100000000b -ed_mous_adn_b= 100011000b -ed_mouse_on_off=1111111011111111b -ed_height=14 ; высота - -.width dd width -.left dd left -.top dd top -.color dd color -.shift_color dd shift_color -.focus_border_color dd focus_border_color -.blur_border_color dd blur_border_color -.text_color dd text_color -.max dd max -.text dd text -.flags dd flags+0 -.size dd size+0 -.pos dd pos+0 -.offset dd 0 -.cl_curs_x dd 0 -.cl_curs_y dd 0 -.shift dd 0 -.shift_old dd 0 -} -struc check_box left,top,ch_text_margin,ch_size,color,border_color,text_color,text,ch_text_length,flags -{ ;структура параметров для чек бокса -ch_flag_en=10b -.left: dw left ;+0 ;положение по х -.top: dw top ;положение по у -.ch_text_margin: dd ch_text_margin ;расстояние от прямоугольника чек бокса до надписи -.ch_size: dd ch_size ;размер квадрата чек бокса, для примера 12 -.color: dd color ;цвет внутри чекбокса -.border_color: dd border_color ;цвет рамки -.text_color: dd text_color ;цвет надписи -.text: dd text ;адрес в коде программы где расположен текст -.ch_text_length: dd ch_text_length ;длинна строки с символами -.flags: dd flags+0 ; флаги -} -struc option_box point_gr,left,top,op_text_margin,op_size,color,border_color,text_color,text,op_text_length,flags -{ ;структура параметров для чек бокса -op_flag_en=10b -.option_group: dd point_gr -.left: dw left ;+0 ;положение по х -.top: dw top ;положение по у -.ch_text_margin: dd op_text_margin ;расстояние от прямоугольника чек бокса до надписи -.ch_size: dd op_size ;размер квадрата чек бокса, для примера 12 -.color: dd color ;цвет внутри чекбокса -.border_color: dd border_color ;цвет рамки -.text_color: dd text_color ;цвет надписи -.text: dd text ;адрес в коде программы где расположен текст -.ch_text_length: dd op_text_length ;длинна строки с символами -.flags: dd flags+0 ; флаги -} diff --git a/programs/develop/box_lib/trunk/macros.inc b/programs/develop/box_lib/trunk/macros.inc deleted file mode 100644 index e5de532755..0000000000 --- a/programs/develop/box_lib/trunk/macros.inc +++ /dev/null @@ -1,502 +0,0 @@ -@^ fix macro comment { -^@ fix } - - -macro m2m dest,src { - push src - pop dest -} - - -macro iglobal { - IGlobals equ IGlobals, - macro __IGlobalBlock { } - -macro uglobal { - UGlobals equ UGlobals, - macro __UGlobalBlock { } - -endg fix } ; Use endg for ending iglobal and uglobal blocks. - - -macro IncludeIGlobals{ - macro IGlobals dummy,[n] \{ __IGlobalBlock - purge __IGlobalBlock \} - match I, IGlobals \{ I \} } - -macro IncludeUGlobals{ - macro UGlobals dummy,[n] \{ - \common - \local begin, size - begin = $ - virtual at $ - \forward - __UGlobalBlock - purge __UGlobalBlock - \common - size = $ - begin - end virtual - rb size - \} - match U, UGlobals \{ U \} } - -uglobal -endg - -iglobal -endg - - -; new application structure -macro meos_app_start - { - use32 - org 0x0 - - db 'MENUET01' - dd 0x01 - dd __start - dd __end - dd __memory - dd __stack - - if used __params & ~defined __params - dd __params - else - dd 0x0 - end if - - dd 0x0 - } -MEOS_APP_START fix meos_app_start - -macro code - { - __start: - } -CODE fix code - -macro data - { - __data: - IncludeIGlobals - } -DATA fix data - -macro udata - { - if used __params & ~defined __params - __params: - db 0 - __end: - rb 255 - else - __end: - end if - __udata: - IncludeUGlobals - } -UDATA fix udata - -macro meos_app_end - { - align 32 - rb 2048 - __stack: - __memory: - } -MEOS_APP_END fix meos_app_end - - -; macro for defining multiline text data -struc mstr [sstring] - { - forward - local ssize - virtual at 0 - db sstring - ssize = $ - end virtual - dd ssize - db sstring - common - dd -1 - } - -; macro for defining multiline text data -struc mls [sstring] - { - forward - local ssize - virtual at 0 - db sstring ; mod - ssize = $ - end virtual - db ssize - db sstring - common - db -1 ; mod - } - - - -; strings -macro sz name,[data] { ; from MFAR [mike.dld] - common - if used name - name db data - .size = $-name - end if -} - -macro lsz name,[lng,data] { ; from MFAR [mike.dld] - common - if used name - label name - forward - if lang eq lng - db data - end if - common - .size = $-name - end if -} - -macro szc name,elsz,[data] { ; from MFAR [mike.dld] - common - local s,m - m = 0 - if used name - label name - forward - virtual at 0 - db data - s = $ - end virtual - d#elsz s - if m < s - m = s - end if - db data - common - .size = $-name - .maxl = m - end if -} - -macro lszc name,elsz,[lng,data] { ; from MFAR [mike.dld] - common - local s,m,c - m = 0 - c = 0 - if used name - label name - forward - if lang eq lng - virtual at 0 - db data - s = $ - end virtual - d#elsz s - if m < s - m = s - end if - db data - c = c+1 - end if - common - .size = $-name - .maxl = m - .count = c - end if -} - - -; easy system call macro -macro mpack dest, hsrc, lsrc -{ - if (hsrc eqtype 0) & (lsrc eqtype 0) - mov dest, (hsrc) shl 16 + lsrc - else - if (hsrc eqtype 0) & (~lsrc eqtype 0) - mov dest, (hsrc) shl 16 - add dest, lsrc - else - mov dest, hsrc - shl dest, 16 - add dest, lsrc - end if - end if -} - -macro __mov reg,a,b { ; mike.dld - if (~a eq)&(~b eq) - mpack reg,a,b - else if (~a eq)&(b eq) - mov reg,a - end if -} - - -include 'config.inc' -;__CPU_type equ p5 -SYSENTER_VAR equ 0 - -macro mcall a,b,c,d,e,f,i { ; mike.dld, updated by Ghost for Fast System Calls - local ..ret_point - __mov eax,a - __mov ebx,b - __mov ecx,c - __mov edx,d - __mov esi,e - __mov edi,f - __mov ebp,i - - if __CPU_type eq p5 - int 0x40 - else - if __CPU_type eq p6 - push ebp - mov ebp, esp - push ..ret_point ; it may be 2 or 5 byte - sysenter - ..ret_point: - pop edx - pop ecx - - else - if __CPU_type eq k6 - push ecx - syscall - pop ecx - else - display 'ERROR : unknown CPU type' - int 0x40 - end if - end if - end if -} - - -; ------------------------- -macro header a,[b] { - common - use32 - org 0 - db 'MENUET',a - forward - if b eq - dd 0 - else - dd b - end if } -macro section name { align 16 - label name } -macro func name { - if ~used name - display 'FUNC NOT USED: ',`name,13,10 - else - align 4 - name: - ;diff16 `name,0,name -;pushad -;pushfd -;dps `name -;newline -;mcall 5,1 -;popfd -;popad -} -macro endf { end if } - -macro diff16 title,l1,l2 - { - local s,d - s = l2-l1 - display title,': 0x' - repeat 8 - d = '0' + s shr ((8-%) shl 2) and $0F - if d > '9' - d = d + 'A'-'9'-1 - end if - display d - end repeat - display 13,10 - } - -macro diff10 title,l1,l2 - { - local s,d,z,m - s = l2-l1 - z = 0 - m = 1000000000 - display title,': ' - repeat 10 - d = '0' + s / m - s = s - (s/m)*m - m = m / 10 - if d <> '0' - z = 1 - end if - if z <> 0 - display d - end if - end repeat - display 13,10 - } - -; optimize the code for size -__regs fix - -macro add arg1,arg2 - { - if (arg2 eqtype 0) - if (arg2) = 1 - inc arg1 - else - add arg1,arg2 - end if - else - add arg1,arg2 - end if - } - -macro sub arg1,arg2 - { - if (arg2 eqtype 0) - if (arg2) = 1 - dec arg1 - else - sub arg1,arg2 - end if - else - sub arg1,arg2 - end if - } - -macro mov arg1,arg2 - { - if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0')) - if (arg2) = 0 - xor arg1,arg1 - else if (arg2) = 1 - xor arg1,arg1 - inc arg1 - else if (arg2) = -1 - or arg1,-1 - else if (arg2) > -128 & (arg2) < 128 - push arg2 - pop arg1 - else - mov arg1,arg2 - end if - else - mov arg1,arg2 - end if - } - - -macro RGB [a] { - common - match (r=,g=,b),a \{ - \dd ((r) shl 16) or ((g) shl 8) or (b) - \} -} - - -struc POINT _t,_dx,_dy { - .x _t _dx - .y _t _dy -} - -; structure definition helper -include 'struct.inc' - -struct RECT - left dd ? - top dd ? - right dd ? - bottom dd ? -ends - -struct BOX - left dd ? - top dd ? - width dd ? - height dd ? -ends - -; structures used in MeOS -struct process_information - cpu_usage dd ? ; +0 - window_stack_position dw ? ; +4 - window_stack_value dw ? ; +6 - dw ? ; +8 - process_name rb 12 ; +10 - memory_start dd ? ; +22 - used_memory dd ? ; +26 - PID dd ? ; +30 - box BOX ; +34 - slot_state dw ? ; +50 - dw ? ; +52 - client_box BOX ; +54 - wnd_state db ? ; +70 - rb (1024-71) -ends - -struct system_colors - frame dd ? - grab dd ? - grab_button dd ? - grab_button_text dd ? - grab_text dd ? - work dd ? - work_button dd ? - work_button_text dd ? - work_text dd ? - work_graph dd ? -ends - -struct FILEDATE - Second db ? - Minute db ? - Hour db ? - db ? - Day db ? - Month db ? - Year dw ? -ends - -struct FILEINFO - Attributes dd ? - IsUnicode db ? - db 3 dup(?) - DateCreate FILEDATE - DateAccess FILEDATE - DateModify FILEDATE - Size dq ? -ends - -; constants - -; events -EV_IDLE = 0 -EV_TIMER = 0 -EV_REDRAW = 1 -EV_KEY = 2 -EV_BUTTON = 3 -EV_EXIT = 4 -EV_BACKGROUND = 5 -EV_MOUSE = 6 -EV_IPC = 7 -EV_STACK = 8 - -; event mask bits for function 40 -EVM_REDRAW = 1b -EVM_KEY = 10b -EVM_BUTTON = 100b -EVM_EXIT = 1000b -EVM_BACKGROUND = 10000b -EVM_MOUSE = 100000b -EVM_IPC = 1000000b -EVM_STACK = 10000000b \ No newline at end of file diff --git a/programs/develop/box_lib/trunk/proc32.inc b/programs/develop/box_lib/trunk/proc32.inc deleted file mode 100644 index aa3ffc9702..0000000000 --- a/programs/develop/box_lib/trunk/proc32.inc +++ /dev/null @@ -1,270 +0,0 @@ - -; Macroinstructions for defining and calling procedures - -macro stdcall proc,[arg] ; directly call STDCALL procedure - { common - if ~ arg eq - reverse - pushd arg - common - end if - call proc } - -macro invoke proc,[arg] ; indirectly call STDCALL procedure - { common - if ~ arg eq - reverse - pushd arg - common - end if - call [proc] } - -macro ccall proc,[arg] ; directly call CDECL procedure - { common - size@ccall = 0 - if ~ arg eq - reverse - pushd arg - size@ccall = size@ccall+4 - common - end if - call proc - if size@ccall - add esp,size@ccall - end if } - -macro cinvoke proc,[arg] ; indirectly call CDECL procedure - { common - size@ccall = 0 - if ~ arg eq - reverse - pushd arg - size@ccall = size@ccall+4 - common - end if - call [proc] - if size@ccall - add esp,size@ccall - end if } - -macro proc [args] ; define procedure - { common - match name params, args> - \{ define@proc name, \{ prologue name,flag,parmbytes,localbytes,reglist \} - macro locals - \{ virtual at ebp-localbytes+current - macro label def \\{ match . type,def> \\\{ deflocal@proc .,label, - \\\{ epilogue name,flag,parmbytes,localbytes,reglist \\\} \\} \} - macro finish@proc \{ localbytes = (((current-1) shr 2)+1) shl 2 - end if \} } - -macro defargs@proc [arg] - { common - if ~ arg eq - forward - local ..arg,current@arg - match argname:type, arg - \{ current@arg equ argname - label ..arg type - argname equ ..arg - if dqword eq type - dd ?,?,?,? - else if tbyte eq type - dd ?,?,? - else if qword eq type | pword eq type - dd ?,? - else - dd ? - end if \} - match =current@arg,current@arg - \{ current@arg equ arg - arg equ ..arg - ..arg dd ? \} - common - args@proc equ current@arg - forward - restore current@arg - common - end if } - -macro deflocal@proc name,def,[val] - { common - match vars, all@vars \{ all@vars equ all@vars, \} - all@vars equ all@vars name - forward - local ..var,..tmp - match =label,def \{ ..tmp equ \} - match tmp,..tmp \{ ..var def val \} - match ,..tmp \{ label ..var val \} - match =?, val \{ ..tmp equ \} - match any =dup (=?), val \{ ..tmp equ \} - match tmp : value, ..tmp : val - \{ tmp: end virtual - initlocal@proc ..var,def value - virtual at tmp\} - common - match first rest, ..var, \{ name equ first \} } - -macro initlocal@proc name,def - { virtual at name - def - size@initlocal = $ - name - end virtual - position@initlocal = 0 - while size@initlocal > position@initlocal - virtual at name - def - if size@initlocal - position@initlocal < 2 - current@initlocal = 1 - load byte@initlocal byte from name+position@initlocal - else if size@initlocal - position@initlocal < 4 - current@initlocal = 2 - load word@initlocal word from name+position@initlocal - else - current@initlocal = 4 - load dword@initlocal dword from name+position@initlocal - end if - end virtual - if current@initlocal = 1 - mov byte [name+position@initlocal],byte@initlocal - else if current@initlocal = 2 - mov word [name+position@initlocal],word@initlocal - else - mov dword [name+position@initlocal],dword@initlocal - end if - position@initlocal = position@initlocal + current@initlocal - end while } - -macro endp - { purge ret,locals,endl - finish@proc - purge finish@proc - restore regs@proc - match all,args@proc \{ restore all \} - restore args@proc - match all,all@vars \{ restore all \} } - -macro local [var] - { common - locals - forward done@local equ - match varname[count]:vartype, var - \{ match =BYTE, vartype \\{ varname rb count - restore done@local \\} - match =WORD, vartype \\{ varname rw count - restore done@local \\} - match =DWORD, vartype \\{ varname rd count - restore done@local \\} - match =PWORD, vartype \\{ varname rp count - restore done@local \\} - match =QWORD, vartype \\{ varname rq count - restore done@local \\} - match =TBYTE, vartype \\{ varname rt count - restore done@local \\} - match =DQWORD, vartype \\{ label varname dqword - rq count+count - restore done@local \\} - match , done@local \\{ virtual - varname vartype - end virtual - rb count*sizeof.\#vartype - restore done@local \\} \} - match :varname:vartype, done@local:var - \{ match =BYTE, vartype \\{ varname db ? - restore done@local \\} - match =WORD, vartype \\{ varname dw ? - restore done@local \\} - match =DWORD, vartype \\{ varname dd ? - restore done@local \\} - match =PWORD, vartype \\{ varname dp ? - restore done@local \\} - match =QWORD, vartype \\{ varname dq ? - restore done@local \\} - match =TBYTE, vartype \\{ varname dt ? - restore done@local \\} - match =DQWORD, vartype \\{ label varname dqword - dq ?,? - restore done@local \\} - match , done@local \\{ varname vartype - restore done@local \\} \} - match ,done@local - \{ var - restore done@local \} - common - endl } diff --git a/programs/develop/box_lib/trunk/readme.txt b/programs/develop/box_lib/trunk/readme.txt deleted file mode 100644 index c418269c74..0000000000 --- a/programs/develop/box_lib/trunk/readme.txt +++ /dev/null @@ -1,13 +0,0 @@ - ╥хяыют └ыхъёхщ, ╫хы сшэёъ. -╧ЁшьхЁ яЁюёЄюую шёяы№чютрэш  editbox т сшсышюЄхъх, -EditBox яхЁхяшёрэ фы  ЁрсюЄ√ т сшсышюЄхъх. -─рЄр 25.06.2008 -ёфхырэр яюффхЁцър чряєёър рёёхьсыхЁэюую яЁшьхЁр яЁш Ёрёяюыюцхэшш Єхъє∙хщ сшсышюЄхъш яю 2-ь ьхёЄрь -1. /sys/lib/box_lib.obj ш ъюуфр сшсышюЄхър эрїюфшЄ№ё  т яряъх ё яЁюуЁрььющ. - -─рЄр 21.09.2007 -╤фхырэ єяюЁ эр яюффЁхцъє ╤ ш яхЁхфрўш ярЁрьхЄЁют т ёЄхъх stdcall. -═р фрээ√щ ьюьхэЄ, эюёшЄ ¤ъёяхЁхьхэЄры№э√щ, ЄхёЄют√щ їрЁръЄхЁ. -┴шсышюЄхъє box_lib.obj эєцэю яюьхёЄшЄ№ т яряъє ё т√яюыэ ■∙хщё  яЁюуЁрььющ editbox_ex, шыш яю рфЁхёє /sys/lib/? эю Єюуфр эєцэю яюфьхэшЄ№ яєЄ№ т Їрщых ini_file эр яєЄ№ ъ сшсышюЄхъх -. ╧ЁшьхЁ ёрь т√ўшёы хЄ яєЄ№ ъ сшсышюЄхъх, эх чртшёшью юЄ ётюхую ьхёЄюЁрёяюыюцхэш  -24.09.2007 - ёфхыры яюффЁхцъє checkbox. ─юсртшы ю°шсъш, яЁюуЁрььр уы■ўшЄ юўхэ№ ёхЁ№хчэю :( \ No newline at end of file diff --git a/programs/develop/box_lib/trunk/run.bat b/programs/develop/box_lib/trunk/run.bat deleted file mode 100644 index d4c84e2bf4..0000000000 --- a/programs/develop/box_lib/trunk/run.bat +++ /dev/null @@ -1,4 +0,0 @@ -@fasm.exe box_lib.asm -@fasm.exe editbox_ex.asm editbox_ex.kex -REM ..\FASM\kpack.exe editbox_ex -@klbrinwin.exe editbox_ex.kex \ No newline at end of file diff --git a/programs/develop/box_lib/trunk/struct.inc b/programs/develop/box_lib/trunk/struct.inc deleted file mode 100644 index 947a84e89a..0000000000 --- a/programs/develop/box_lib/trunk/struct.inc +++ /dev/null @@ -1,180 +0,0 @@ - -; Macroinstructions for defining data structures - -macro struct name - { fields@struct equ name - match child parent, name \{ fields@struct equ child,fields@\#parent \} - sub@struct equ - struc db [val] \{ \common fields@struct equ fields@struct,.,db, \} - struc dw [val] \{ \common fields@struct equ fields@struct,.,dw, \} - struc du [val] \{ \common fields@struct equ fields@struct,.,du, \} - struc dd [val] \{ \common fields@struct equ fields@struct,.,dd, \} - struc dp [val] \{ \common fields@struct equ fields@struct,.,dp, \} - struc dq [val] \{ \common fields@struct equ fields@struct,.,dq, \} - struc dt [val] \{ \common fields@struct equ fields@struct,.,dt, \} - struc rb count \{ fields@struct equ fields@struct,.,db,count dup (?) \} - struc rw count \{ fields@struct equ fields@struct,.,dw,count dup (?) \} - struc rd count \{ fields@struct equ fields@struct,.,dd,count dup (?) \} - struc rp count \{ fields@struct equ fields@struct,.,dp,count dup (?) \} - struc rq count \{ fields@struct equ fields@struct,.,dq,count dup (?) \} - struc rt count \{ fields@struct equ fields@struct,.,dt,count dup (?) \} - macro db [val] \{ \common \local anonymous - fields@struct equ fields@struct,anonymous,db, \} - macro dw [val] \{ \common \local anonymous - fields@struct equ fields@struct,anonymous,dw, \} - macro du [val] \{ \common \local anonymous - fields@struct equ fields@struct,anonymous,du, \} - macro dd [val] \{ \common \local anonymous - fields@struct equ fields@struct,anonymous,dd, \} - macro dp [val] \{ \common \local anonymous - fields@struct equ fields@struct,anonymous,dp, \} - macro dq [val] \{ \common \local anonymous - fields@struct equ fields@struct,anonymous,dq, \} - macro dt [val] \{ \common \local anonymous - fields@struct equ fields@struct,anonymous,dt, \} - macro rb count \{ \local anonymous - fields@struct equ fields@struct,anonymous,db,count dup (?) \} - macro rw count \{ \local anonymous - fields@struct equ fields@struct,anonymous,dw,count dup (?) \} - macro rd count \{ \local anonymous - fields@struct equ fields@struct,anonymous,dd,count dup (?) \} - macro rp count \{ \local anonymous - fields@struct equ fields@struct,anonymous,dp,count dup (?) \} - macro rq count \{ \local anonymous - fields@struct equ fields@struct,anonymous,dq,count dup (?) \} - macro rt count \{ \local anonymous - fields@struct equ fields@struct,anonymous,dt,count dup (?) \} - macro union \{ fields@struct equ fields@struct,,union,< - sub@struct equ union \} - macro struct \{ fields@struct equ fields@struct,,substruct,< - sub@struct equ substruct \} - virtual at 0 } - -macro ends - { match , sub@struct \{ restruc db,dw,du,dd,dp,dq,dt - restruc rb,rw,rd,rp,rq,rt - purge db,dw,du,dd,dp,dq,dt - purge rb,rw,rd,rp,rq,rt - purge union,struct - match name=,fields,fields@struct \\{ fields@struct equ - make@struct name,fields - fields@\\#name equ fields \\} - end virtual \} - match any, sub@struct \{ fields@struct equ fields@struct> \} - restore sub@struct } - -macro make@struct name,[field,type,def] - { common - if $ - display 'Error: definition of ',`name,' contains illegal instructions.',0Dh,0Ah - err - end if - local define - define equ name - forward - local sub - match , field \{ make@substruct type,name,sub def - define equ define,.,sub, \} - match any, field \{ define equ define,.#field,type, \} - common - match fields, define \{ define@struct fields \} } - -macro define@struct name,[field,type,def] - { common - local list - list equ - forward - if ~ field eq . - name#field type def - sizeof.#name#field = $ - name#field - else - rb sizeof.#type - end if - local value - match any, list \{ list equ list, \} - list equ list - common - sizeof.#name = $ - restruc name - match values, list \{ - struc name value \\{ - match any, fields@struct \\\{ fields@struct equ fields@struct,.,name, \\\} - match , fields@struct \\\{ label . - forward - match , value \\\\{ field type def \\\\} - match any, value \\\\{ field type value - if ~ field eq . - rb sizeof.#name#field - ($-field) - end if \\\\} - common \\\} \\} \} } - -macro enable@substruct - { macro make@substruct substruct,parent,name,[field,type,def] - \{ \common - \local define - define equ parent,name - \forward - \local sub - match , field \\{ match any, type \\\{ enable@substruct - make@substruct type,name,sub def - purge make@substruct - define equ define,.,sub, \\\} \\} - match any, field \\{ define equ define,.\#field,type, \\} - \common - match fields, define \\{ define@\#substruct fields \\} \} } - -enable@substruct - -macro define@union parent,name,[field,type,def] - { common - virtual at 0 - forward - if ~ field eq . - virtual at 0 - parent#field type def - sizeof.#parent#field = $ - parent#field - end virtual - if sizeof.#parent#field > $ - rb sizeof.#parent#field - $ - end if - else if sizeof.#type > $ - rb sizeof.#type - $ - end if - common - sizeof.#name = $ - end virtual - struc name [value] \{ \common - label .\#name - last@union equ - forward - match any, last@union \\{ virtual at .\#name - field type def - end virtual \\} - match , last@union \\{ match , value \\\{ field type def \\\} - match any, value \\\{ field type value \\\} \\} - last@union equ field - common rb sizeof.#name - ($ - .\#name) \} } - -macro define@substruct parent,name,[field,type,def] - { common - virtual at 0 - forward - if ~ field eq . - parent#field type def - sizeof.#parent#field = $ - parent#field - else - rb sizeof.#type - end if - local value - common - sizeof.#name = $ - end virtual - struc name value \{ - label .\#name - forward - match , value \\{ field type def \\} - match any, value \\{ field type value - if ~ field eq . - rb sizeof.#parent#field - ($-field) - end if \\} - common \} }