diff --git a/programs/system/cpuid/trunk/CPUID b/programs/system/cpuid/trunk/CPUID deleted file mode 100644 index c70adac129..0000000000 Binary files a/programs/system/cpuid/trunk/CPUID and /dev/null differ diff --git a/programs/system/cpuid/trunk/FASM.EXE b/programs/system/cpuid/trunk/FASM.EXE deleted file mode 100644 index 18e2e3aa32..0000000000 Binary files a/programs/system/cpuid/trunk/FASM.EXE and /dev/null differ diff --git a/programs/system/cpuid/trunk/config.inc b/programs/system/cpuid/trunk/config.inc deleted file mode 100644 index 541f904386..0000000000 --- a/programs/system/cpuid/trunk/config.inc +++ /dev/null @@ -1,5 +0,0 @@ - - - __CPU_type fix p5 - - diff --git a/programs/system/cpuid/trunk/gif2img.inc b/programs/system/cpuid/trunk/gif2img.inc deleted file mode 100644 index 4413ae4e2b..0000000000 --- a/programs/system/cpuid/trunk/gif2img.inc +++ /dev/null @@ -1,301 +0,0 @@ -COLOR_ORDER equ MENUETOS -gif_hash_offset = gif_hash_area - -macro gif2img gifsrc,imgsrc -{ -local hasharea, ReadGIF, nextblock,_null -local globalColor, img_count, cur_info, img_start -local codesize, compsize, bit_count, CC, EOI, Palette -local block_ofs, table_ptr, gifmacend -local no_gc, block_skip, no_comm, noextblock, uselocal -local setPal, filltable, reinit, cycle, zadd, noinc -local notintable, er, zend, nxt, continue, ex, Gif_skipmap -local Gif_get_sym, shift, nextbl, noblock, loop1, exx -local Gif_output, next, loop2 - -_null fix 0x1000 ; 0x1000 - -if ~gifsrc eq esi - mov esi,gifsrc -end if -if ~imgsrc eq edi - mov edi,imgsrc -end if - - if defined gif_hash_offset - mov eax,gif_hash_offset - else - mov eax,hasharea - end if - - call ReadGIF - jmp gifmacend - - if defined gif_hash_offset - else - hasharea: - times 4096 dd 0 ;4096 - end if - -ReadGIF: - push esi edi - mov [table_ptr],eax - mov [cur_info],edi - xor eax,eax - mov [globalColor],eax - mov [img_count],eax - inc eax - cmp dword[esi],'GIF8' - jne er ; signature - mov ecx,[esi+0xa] - inc eax - add esi,0xd - mov edi,esi - bt ecx,7 - jnc nextblock - mov [globalColor],esi - call Gif_skipmap -nextblock: - cmp byte[edi],0x21 - jne noextblock - inc edi - cmp byte[edi],0xf9 ; Graphic Control Ext - jne no_gc - add edi,7 - jmp nextblock -no_gc: - cmp byte[edi],0xfe ; Comment Ext - jne no_comm - inc edi -block_skip: - movzx eax,byte[edi] - lea edi,[edi+eax+1] - cmp byte[edi],0 - jnz block_skip - inc edi - jmp nextblock -no_comm: - cmp byte[edi],0xff ; Application Ext - jne nextblock - add edi,13 - jmp block_skip -noextblock: - cmp byte[edi],0x2c ; image beginning - jne er - inc [img_count] - inc edi - mov esi,[cur_info] - xchg esi,edi -; movsd -; movsd - - mov bp,word[esi+4] - movzx ebx,bp - mov [edi],ebx - - mov bp,word[esi+6] - movzx ebx,bp - mov [edi+4],ebx - - add edi,8 - add esi,8 - - push edi - movzx ecx,word[esi] - inc esi - bt ecx,7 - jc uselocal - push [globalColor] - mov edi,esi - jmp setPal -uselocal: - call Gif_skipmap - push esi -setPal: - movzx ecx,byte[edi] - inc ecx - mov [codesize],ecx - dec ecx - pop [Palette] - lea esi,[edi+1] - mov edi,[table_ptr] - xor eax,eax - cld - lodsb ; eax - block_count - add eax,esi - mov [block_ofs],eax - mov [bit_count],8 - mov eax,1 - shl eax,cl - mov [CC],eax - inc eax - mov [EOI],eax - lea ecx,[eax-1] - mov eax, _null shl 16 -filltable: - stosd - inc eax - loop filltable - pop edi - mov [img_start],edi -reinit: - mov edx,[EOI] - inc edx - push [codesize] - pop [compsize] - call Gif_get_sym - cmp eax,[CC] - je reinit - call Gif_output -cycle: - movzx ebx,ax - call Gif_get_sym - cmp eax,edx - jae notintable - cmp eax,[CC] - je reinit - cmp eax,[EOI] - je zend - call Gif_output -zadd: - push eax - mov eax,[table_ptr] - mov [eax+edx*4],ebx - pop eax - cmp edx,0xFFF - jae cycle - inc edx - bsr ebx,edx - cmp ebx,[compsize] - jne noinc - inc [compsize] -noinc: - jmp cycle -notintable: - push eax - mov eax,ebx - call Gif_output - push ebx - movzx eax,bx - call Gif_output - pop ebx eax - jmp zadd -er: - pop edi - jmp ex -zend: -; mov eax,[.cur_info] ; skip offset to next frame -; mov [eax],edi - mov [cur_info],edi - add esi,2 - xchg esi,edi -nxt: - cmp byte[edi],0 - jnz continue - inc edi - jmp nxt -continue: -; cmp byte[edi],0x3b ;read next frame -; jne nextblock - xor eax,eax - stosd - mov ecx,[img_count] -ex: - pop edi esi - ret - -Gif_skipmap: -; in: ecx - image descriptor, esi - pointer to colormap -; out: edi - pointer to area after colormap - - and ecx,111b - inc ecx ; color map size - mov ebx,1 - shl ebx,cl - lea ebx,[ebx*2+ebx] - lea edi,[esi+ebx] - ret - -Gif_get_sym: - mov ecx,[compsize] - push ecx - xor eax,eax -shift: - ror byte[esi],1 - rcr eax,1 - dec [bit_count] - jnz loop1 - inc esi - cmp esi,[block_ofs] - jb noblock - push eax - xor eax,eax - lodsb - test eax,eax - jnz nextbl - mov eax,[EOI] - sub esi,2 - add esp,8 - jmp exx -nextbl: - add eax,esi - mov [block_ofs],eax - pop eax -noblock: - mov [bit_count],8 -loop1: - loop shift - pop ecx - rol eax,cl -exx: - xor ecx,ecx - ret - -Gif_output: - push esi eax edx - mov edx,[table_ptr] -next: - push word[edx+eax*4] - mov ax,word[edx+eax*4+2] - inc ecx - cmp ax,_null - jnz next - shl ebx,16 - mov bx,[esp] -loop2: - pop ax - - lea esi,[eax+eax*2] - add esi,[Palette] - - if COLOR_ORDER eq MENUETOS - mov esi,[esi] - bswap esi - shr esi,8 - mov [edi],esi - add edi,3 - else - movsw - movsb - end if - - loop loop2 - pop edx eax esi - ret - - globalColor dd 1 - img_count dd 1 - cur_info dd 1 ; image table pointer - img_start dd 1 - codesize dd 1 - compsize dd 1 - bit_count dd 1 - CC dd 1 - EOI dd 1 - Palette dd 1 - block_ofs dd 1 - table_ptr dd 1 - -gifmacend: -} - diff --git a/programs/system/cpuid/trunk/gif_lite.inc b/programs/system/cpuid/trunk/gif_lite.inc deleted file mode 100644 index 22322ef959..0000000000 --- a/programs/system/cpuid/trunk/gif_lite.inc +++ /dev/null @@ -1,485 +0,0 @@ -; GIF LITE v3.0 by Willow -; Written in pure assembler by Ivushkin Andrey aka Willow -; Modified by Diamond -; -; This include file will contain functions to handle GIF image format -; -; Created: August 15, 2004 -; Last changed: June 24, 2007 - -; Requires kglobals.inc (iglobal/uglobal macro) -; (program must 'include "kglobals.inc"' and say 'IncludeUGlobal' -; somewhere in uninitialized data area). - -; Configuration: [changed from program which includes this file] -; 1. The constant COLOR_ORDER: must be one of -; PALETTE - for 8-bit image with palette (sysfunction 65) -; MENUETOS - for MenuetOS and KolibriOS color order (sysfunction 7) -; OTHER - for standard color order -; 2. Define constant GIF_SUPPORT_INTERLACED if you want to support interlaced -; GIFs. -; 3. Single image mode vs multiple image mode: -; if the program defines the variable 'gif_img_count' of type dword -; somewhere, ReadGIF will enter multiple image mode: gif_img_count -; will be initialized with image count, output format is GIF_list, -; the function GetGIFinfo retrieves Nth image info. Otherwise, ReadGIF -; uses single image mode: exit after end of first image, output is -;
- -if ~ (COLOR_ORDER in ) -; This message may not appear under MenuetOS, so watch... - display 'Please define COLOR_ORDER: PALETTE, MENUETOS or OTHER',13,10 -end if - -if defined gif_img_count -; virtual structure, used internally - -struct GIF_list - NextImg rd 1 - Left rw 1 - Top rw 1 - Width rw 1 - Height rw 1 - Delay rd 1 - Displacement rd 1 ; 0 = not specified - ; 1 = do not dispose - ; 2 = restore to background color - ; 3 = restore to previous -if COLOR_ORDER eq PALETTE - Image rd 1 -end if -ends - -struct GIF_info - Left rw 1 - Top rw 1 - Width rw 1 - Height rw 1 - Delay rd 1 - Displacement rd 1 -if COLOR_ORDER eq PALETTE - Palette rd 1 -end if -ends - -; **************************************** -; FUNCTION GetGIFinfo - retrieve Nth image info -; **************************************** -; in: -; esi - pointer to image list header -; ecx - image_index (0...img_count-1) -; edi - pointer to GIF_info structure to be filled - -; out: -; eax - pointer to RAW data, or 0, if error - -GetGIFinfo: - push esi ecx edi - xor eax,eax - jecxz .eloop - .lp: - mov esi,[esi] - test esi,esi - jz .error - loop .lp - .eloop: - lodsd - movsd - movsd - movsd - movsd -if COLOR_ORDER eq PALETTE - lodsd - mov [edi],esi -else - mov eax,esi -end if - .error: - pop edi ecx esi - ret - -end if - -_null fix 0x1000 - -; **************************************** -; FUNCTION ReadGIF - unpacks GIF image -; **************************************** -; in: -; esi - pointer to GIF file in memory -; edi - pointer to output image list - -; out: -; eax - 0, all OK; -; eax - 1, invalid signature; -; eax >=8, unsupported image attributes -; - -ReadGIF: - push esi edi - mov [.cur_info],edi - xor eax,eax - mov [.globalColor],eax -if defined gif_img_count - mov [gif_img_count],eax - mov [.anim_delay],eax - mov [.anim_disp],eax -end if - inc eax - cmp dword[esi],'GIF8' - jne .ex ; signature - mov ecx,[esi+0xa] - add esi,0xd - mov edi,esi - test cl,cl - jns .nextblock - mov [.globalColor],esi - call .Gif_skipmap - .nextblock: - cmp byte[edi],0x21 - jne .noextblock - inc edi -if defined gif_img_count - cmp byte[edi],0xf9 ; Graphic Control Ext - jne .no_gc - movzx eax,word [edi+3] - mov [.anim_delay],eax - mov al,[edi+2] - shr al,2 - and eax,7 - mov [.anim_disp],eax - add edi,7 - jmp .nextblock - .no_gc: -end if - inc edi - .block_skip: - movzx eax,byte[edi] - lea edi,[edi+eax+1] - test eax,eax - jnz .block_skip - jmp .nextblock - .noextblock: - mov al,8 - cmp byte[edi],0x2c ; image beginning - jne .ex -if defined gif_img_count - inc [gif_img_count] -end if - inc edi - mov esi,[.cur_info] -if defined gif_img_count - add esi,4 -end if - xchg esi,edi -if defined GIF_SUPPORT_INTERLACED - movzx ecx,word[esi+4] - mov [.width],ecx - movzx eax,word[esi+6] - imul eax,ecx -if ~(COLOR_ORDER eq PALETTE) - lea eax,[eax*3] -end if - mov [.img_end],eax - inc eax - mov [.row_end],eax - and [.pass],0 - test byte[esi+8],40h - jz @f -if ~(COLOR_ORDER eq PALETTE) - lea ecx,[ecx*3] -end if - mov [.row_end],ecx -@@: -end if -if defined gif_img_count - movsd - movsd - mov eax,[.anim_delay] - stosd - mov eax,[.anim_disp] - stosd -else - movzx eax,word[esi+4] - stosd - movzx eax,word[esi+6] - stosd - add esi,8 -end if - push edi - mov ecx,[esi] - inc esi - test cl,cl - js .uselocal - push [.globalColor] - mov edi,esi - jmp .setPal - .uselocal: - call .Gif_skipmap - push esi - .setPal: - movzx ecx,byte[edi] - inc ecx - mov [.codesize],ecx - dec ecx -if ~(COLOR_ORDER eq PALETTE) - pop [.Palette] -end if - lea esi,[edi+1] - mov edi,.gif_workarea - xor eax,eax - lodsb ; eax - block_count - add eax,esi - mov [.block_ofs],eax - mov [.bit_count],8 - mov eax,1 - shl eax,cl - mov [.CC],eax - mov ecx,eax - inc eax - mov [.EOI],eax - mov eax, _null shl 16 - .filltable: - stosd - inc eax - loop .filltable -if COLOR_ORDER eq PALETTE - pop eax - pop edi - push edi - scasd - push esi - mov esi,eax - mov ecx,[.CC] -@@: - lodsd - dec esi - bswap eax - shr eax,8 - stosd - loop @b - pop esi - pop eax - mov [eax],edi -else - pop edi -end if -if defined GIF_SUPPORT_INTERLACED - mov [.img_start],edi - add [.img_end],edi - add [.row_end],edi -end if - .reinit: - mov edx,[.EOI] - inc edx - push [.codesize] - pop [.compsize] - call .Gif_get_sym - cmp eax,[.CC] - je .reinit - call .Gif_output - .cycle: - movzx ebx,ax - call .Gif_get_sym - cmp eax,edx - jae .notintable - cmp eax,[.CC] - je .reinit - cmp eax,[.EOI] - je .end - call .Gif_output - .add: - mov dword [.gif_workarea+edx*4],ebx - cmp edx,0xFFF - jae .cycle - inc edx - bsr ebx,edx - cmp ebx,[.compsize] - jne .noinc - inc [.compsize] - .noinc: - jmp .cycle - .notintable: - push eax - mov eax,ebx - call .Gif_output - push ebx - movzx eax,bx - call .Gif_output - pop ebx eax - jmp .add - .end: -if defined GIF_SUPPORT_INTERLACED - mov edi,[.img_end] -end if -if defined gif_img_count - mov eax,[.cur_info] - mov [eax],edi - mov [.cur_info],edi - add esi,2 - xchg esi,edi - .nxt: - cmp byte[edi],0 - jnz .continue - inc edi - jmp .nxt - .continue: - cmp byte[edi],0x3b - jne .nextblock - xchg esi,edi - and dword [eax],0 -end if - xor eax,eax - .ex: - pop edi esi - ret - -.Gif_skipmap: -; in: ecx - image descriptor, esi - pointer to colormap -; out: edi - pointer to area after colormap - - and ecx,111b - inc ecx ; color map size - mov ebx,1 - shl ebx,cl - lea ebx,[ebx*2+ebx] - lea edi,[esi+ebx] - ret - -.Gif_get_sym: - mov ecx,[.compsize] - push ecx - xor eax,eax - .shift: - ror byte[esi],1 - rcr eax,1 - dec [.bit_count] - jnz .loop1 - inc esi - cmp esi,[.block_ofs] - jb .noblock - push eax - xor eax,eax - lodsb - test eax,eax - jnz .nextbl - mov eax,[.EOI] - sub esi,2 - add esp,8 - jmp .exx - .nextbl: - add eax,esi - mov [.block_ofs],eax - pop eax - .noblock: - mov [.bit_count],8 - .loop1: - loop .shift - pop ecx - rol eax,cl - .exx: - xor ecx,ecx - ret - -.Gif_output: - push esi eax edx - mov edx,.gif_workarea - .next: - push word[edx+eax*4] - mov ax,word[edx+eax*4+2] - inc ecx - cmp ax,_null - jnz .next - shl ebx,16 - mov bx,[esp] - .loop2: - pop ax - - if COLOR_ORDER eq PALETTE - stosb - else - lea esi,[eax+eax*2] - add esi,[.Palette] - - if COLOR_ORDER eq MENUETOS - mov esi,[esi] - bswap esi - shr esi,8 - mov [edi],esi - add edi,3 - else - movsb - movsb - movsb - end if - end if - -if defined GIF_SUPPORT_INTERLACED - cmp edi,[.row_end] - jb .norowend - mov eax,[.width] -if ~(COLOR_ORDER eq PALETTE) - lea eax,[eax*3] -end if - push eax - sub edi,eax - add eax,eax - cmp [.pass],3 - jz @f - add eax,eax - cmp [.pass],2 - jz @f - add eax,eax -@@: - add edi,eax - pop eax - cmp edi,[.img_end] - jb .nextrow - mov edi,[.img_start] - inc [.pass] - add edi,eax - cmp [.pass],3 - jz @f - add edi,eax - cmp [.pass],2 - jz @f - add edi,eax - add edi,eax -@@: -.nextrow: - add eax,edi - mov [.row_end],eax - xor eax,eax -.norowend: -end if - - loop .loop2 - pop edx eax esi - ret - -uglobal -align 4 - ReadGIF.globalColor rd 1 - ReadGIF.cur_info rd 1 ; image table pointer - ReadGIF.codesize rd 1 - ReadGIF.compsize rd 1 - ReadGIF.bit_count rd 1 - ReadGIF.CC rd 1 - ReadGIF.EOI rd 1 -if ~(COLOR_ORDER eq PALETTE) - ReadGIF.Palette rd 1 -end if - ReadGIF.block_ofs rd 1 -if defined GIF_SUPPORT_INTERLACED - ReadGIF.row_end rd 1 - ReadGIF.img_end rd 1 - ReadGIF.img_start rd 1 - ReadGIF.pass rd 1 - ReadGIF.width rd 1 -end if -if defined gif_img_count - ReadGIF.anim_delay rd 1 - ReadGIF.anim_disp rd 1 -end if - ReadGIF.gif_workarea rb 16*1024 -endg diff --git a/programs/system/cpuid/trunk/lang.inc b/programs/system/cpuid/trunk/lang.inc deleted file mode 100644 index dc151ef654..0000000000 --- a/programs/system/cpuid/trunk/lang.inc +++ /dev/null @@ -1 +0,0 @@ -lang fix en \ No newline at end of file diff --git a/programs/system/cpuid/trunk/load_lib.mac b/programs/system/cpuid/trunk/load_lib.mac deleted file mode 100644 index 249dd534e3..0000000000 --- a/programs/system/cpuid/trunk/load_lib.mac +++ /dev/null @@ -1,617 +0,0 @@ -;13.03.2013 - use @notify -;08.06.2010 - new macros @use_library_mem -;08.05.2009 - bugfix -;14.04.2009 - a macros for code load library the box_lib.obj from '/sys/lib/' or current dirrectory. -; The macros for load any library/libraries: -; Copyright (c) 2009, -; All rights reserved. -; -; Redistribution and use in source and binary forms, with or without -; modification, are permitted provided that the following conditions are met: -; * Redistributions of source code must retain the above copyright -; notice, this list of conditions and the following disclaimer. -; * Redistributions in binary form must reproduce the above copyright -; notice, this list of conditions and the following disclaimer in the -; documentation and/or other materials provided with the distribution. -; * Neither the name of the nor the -; names of its contributors may be used to endorse or promote products -; derived from this software without specific prior written permission. -; -; THIS SOFTWARE IS PROVIDED BY Alexey Teplov aka ''AS IS'' AND ANY -; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -; DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY -; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -;***************************************************************************** -; This macros based on source code: -; - Alexey Teplov / Алексей Теплов -; Mario79, Mario - Marat Zakiyanov / Марат Закиянов -; Diamondz - Evgeny Grechnikov / Евгений Гречников -;------------------------ -; DESCRIPTION -; Macro load_library -; Logick of work. -; A first time we must to check system path, where I belive find a system library. System path is "/sys/lib/". -; If I cannot found my library, i must to check second way. Second way is current dirrectory. -; If we cannot load library, we must show the error message: -; "I'm sorry,the programm cannot found system library box_lib.obj." -; "The find was make on 2 ways: /sys/lib/ and current dirrectory." -; -; -;--------------------------------------------------------------------- -; Macro sys_load_library -; A first time we must to check own path in current dirrectory the program, where I belive find a system library. -; If I cannot found my library, i must to check second way. Second way is system path a "/sys/lib/". -; If we cannot load library, we must show the error message: -; "I'm sorry,the programm cannot found system library box_lib.obj." -; "The find was make on 2 ways: /sys/lib/ and current dirrectory." -; -;--------------------------------------------------------------------- -; How can I use it? -;--------------------------------------------------------------------- -;-Example using single load library -;-universal load library/librarys -;load_library library_name__, cur_dir_path__, library_path__, system_path__, \ -;err_message_found_lib__, head_f_l__, myimport, err_message_import__, head_f_i__ -;-if return code =-1 then exit, else normally work -; cmp eax,-1 -; jz exit -;- Well, if you get -; -;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -;DATA данные -;Всегда соблюдать последовательность в имени. -;system_path__ db '/sys/lib/' -;library_name__ db 'box_lib.obj',0 -; Если есть желание разъединить, то нужно использовать следующию конструкцию -;system_path__ db '/sys/lib/box_lib.obj',0 -;... любая последовательность других команд и определений. -;library_name__ db 'box_lib.obj',0 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;err_message_found_lib__ db 'Sorry I cannot found library box_lib.obj',0 -;head_f_i__: -;head_f_l__ db 'System error',0 -;err_message_import__ db 'Error on load import library 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 - -;--------------------------------------------------------------------- -macro @use_library -{ -local lp1 -local lp2 -local lp3 -local lp4 -local lp5 -local lp6 -local file_name - -library_fun_memory_alloc equ 0 ;не использовать в макросах проверку на функции 'lib_init' - -align 4 -arrea_xx dd 0 -file_name db '/rd/1/@notify',0 - -align 4 -run_notify_struct: - .Function dd 7 - .Position dd 0 - .Flags dd ? - .Count dd 0 - .Buffer dd 0 - db 0 - .FileName dd file_name -;--------------------------------------------------------------------- - -@library_name equ dword [esp+16] -@cur_dir_path equ dword [esp+12] -@library_path equ dword [esp+8] -@point_dir_name equ dword [esp+4] - -align 4 -@copy_path: - mov esi,@cur_dir_path - mov edi,@library_path - xor eax,eax - cld -align 4 -.lp1: - lodsb - stosb - test eax,eax - jnz .lp1 - mov esi,edi - dec esi ;переход на символ конца строки @cur_dir_path - std -align 4 -.lp2: - lodsb - cmp al,'/' - jnz .lp2 - mov edi,esi - add edi,2 - cld - mov esi,@point_dir_name - test esi,esi - jz .str_lp4 - - ;проверка относительных путей c двумя точками '../' - cmp word[esi],'..' - jne .lp3 - dec edi ;для перехода на '/' -.lp6: - add esi,3 ;пропускаем одно поднятие '../' -.lp5: - dec edi ;идем по папкам - cmp byte[edi],'/' - jnz .lp5 - cmp word[esi],'..' - je .lp6 - inc edi ;для перехода на '/' - - ;копирование относительного пути -align 4 -.lp3: - lodsb - stosb - test eax,eax - jnz .lp3 - dec edi -.str_lp4: - mov esi,@library_name -align 4 -.lp4: - lodsb - stosb - test eax,eax - jnz .lp4 -;--------------------------------------------------------------------- - ret -} - - - -macro @use_library_mem mem_alloc,mem_free,mem_realloc,dll_load -{ -@use_library -library_fun_memory_alloc equ mem_alloc -library_fun_memory_free equ mem_free -library_fun_memory_realloc equ mem_realloc -library_fun_dll_load equ dll_load -} - - -macro sys_load_library library_name__, cur_dir_path__, library_path__, system_path__, err_message_found_lib__, head_f_l__, myimport, err_message_import__, head_f_i__,point_dir_name__ -{ -local end_steep -local exit -;--------------------------------------------------------------------- -; loading Box_Lib library - - mcall 68,19,system_path__ ; load of sys directory - test eax,eax - jnz end_steep - -if point_dir_name__ eq - copy_path library_name__, cur_dir_path__, library_path__,0x0 -else - copy_path library_name__, cur_dir_path__, library_path__,point_dir_name__ ;the macros making way /current pach a program/+ name system library -end if - - mcall 68,19,library_path__ ; load of alternative - test eax,eax - jnz end_steep - show_error_window err_message_found_lib__, head_f_l__ ;show error message /create window - jmp exit - - -align 4 -end_steep: - - import_boxlib myimport, err_message_import__, head_f_i__ ;import -exit: - test eax,eax - jz @f - - notify_window_run [arrea_xx] ; создаем окно @notify - or eax,-1 -@@: - -;--------------------------------------------------------------------- -} - - -macro load_library library_name__, cur_dir_path__, library_path__, system_path__, err_message_found_lib__, head_f_l__, myimport, err_message_import__, head_f_i__,point_dir_name__ -{ -local end_steep -local exit -;--------------------------------------------------------------------- -; loading Box_Lib library - -if point_dir_name__ eq - copy_path library_name__, cur_dir_path__, library_path__,0x0 -else - copy_path library_name__, cur_dir_path__, library_path__,point_dir_name__ ;the macros making way /current pach a program/+ name system library -end if - - mcall 68,19,library_path__ ; load of alternative - test eax,eax - jnz end_steep - - mcall 68,19,system_path__ ; load of sys directory - test eax,eax - jnz end_steep - - show_error_window err_message_found_lib__, head_f_l__ ;show error message /create window - jmp exit - -align 4 -end_steep: - - import_boxlib myimport, err_message_import__, head_f_i__ ;import -exit: - test eax,eax - jz @f - - notify_window_run [arrea_xx] ; создаем окно @notify - or eax,-1 -@@: - -;--------------------------------------------------------------------- -} -macro sys_load_libraries _start,_end -{ -local exit_lp2 -local lp2 -local lp -local end_steep -local next -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -library_name__ equ [ebp] -cur_dir_path__ equ [ebp+4] -library_path__ equ [ebp+8] -system_path__ equ [ebp+12] -err_message_found_lib__ equ [ebp+16] -head_f_l__ equ [ebp+20] -my_import equ [ebp+24] -err_message_import__ equ [ebp+28] -head_f_i__ equ [ebp+32] -point_dir_name__ equ [ebp+36] -adr_load_lib equ dword [ebp+40] -status_lib equ dword [ebp+44] - - mov ebp,_start - mov ecx,((_end-_start)/ll_struc_size) - -align 4 -lp: push ecx - mcall 68,19,system_path__ ; load of sys directory - test eax,eax - jnz end_steep - - copy_path library_name__, cur_dir_path__, library_path__,point_dir_name__ ;the macros making way /current pach a program/+ name system library - - mcall 68,19,library_path__ ; load of alternative - test eax,eax - jnz end_steep - - or status_lib,0x1 ; status of code - enable error - not found library - - show_error_window err_message_found_lib__, head_f_l__, ;show error message /create window - jmp next - -align 4 -end_steep: - mov adr_load_lib,eax ;save adr lib in memory - import_boxlib my_import, err_message_import__, head_f_i__ ;import - - test eax,eax - jz next - - or status_lib,0x2 ; status of code - enable error - import error - -next: - pop ecx - add ebp,ll_struc_size - dec ecx - jnz lp - -;---------------------------------- - mov ebp,_start - mov ecx,((_end-_start)/ll_struc_size) - -align 4 -lp2: - mov eax,status_lib - test eax,eax - jz @f - - notify_window_run [arrea_xx] ; создаем окно @notify - or eax,-1 - jmp exit_lp2 - -@@: - add ebp,ll_struc_size - dec ecx - jnz lp2 -exit_lp2: -} - -macro load_libraries _start,_end -{ -local lp2 -local exit_lp2 -local lp -local end_steep -local next -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -library_name__ equ [ebp] -cur_dir_path__ equ [ebp+4] -library_path__ equ [ebp+8] -system_path__ equ [ebp+12] -err_message_found_lib__ equ [ebp+16] -head_f_l__ equ [ebp+20] -my_import equ [ebp+24] -err_message_import__ equ [ebp+28] -head_f_i__ equ [ebp+32] -point_dir_name__ equ [ebp+36] -adr_load_lib equ dword [ebp+40] -status_lib equ dword [ebp+44] - - mov ebp,_start - mov ecx,((_end-_start)/ll_struc_size) - -align 4 -lp: push ecx - - copy_path library_name__, cur_dir_path__, library_path__,point_dir_name__ ;the macros making way /current pach a program/+ name system library - - mcall 68,19,library_path__ ; load of alternative - test eax,eax - jnz end_steep - - mcall 68,19,system_path__ ; load of sys directory - test eax,eax - jnz end_steep - - or status_lib,0x1 ; status of code - enable error - not found library - - show_error_window err_message_found_lib__, head_f_l__ ;show error message /create window - jmp next - -align 4 -end_steep: - mov adr_load_lib,eax ;save adr lib in memory - - import_boxlib my_import, err_message_import__, head_f_i__ ;import - - test eax,eax - jz next - - or status_lib,0x2 ; status of code - enable error - import error - -next: - pop ecx - add ebp,ll_struc_size - dec ecx - jnz lp - -;----------------------------------------------- - mov ebp,_start - mov ecx,((_end-_start)/ll_struc_size) - -align 4 -lp2: - mov eax,status_lib - test eax,eax - jz @f - - notify_window_run [arrea_xx] ; создаем окно @notify - or eax,-1 - jmp exit_lp2 - -@@: - add ebp,ll_struc_size - dec ecx - jnz lp2 -exit_lp2: - -} - - -macro copy_path lib_name,dir_path,lib_path,point_dir_name -{ -pushad ;save all registers - push dword lib_name - push dword dir_path - push dword lib_path - push dword point_dir_name - call @copy_path - - add esp,16 - ;notify_window_run lib_path ;unblok for test load path -popad ;restore all registers -} - -; готовим текст для показа через @notify: -; 1) выделяем память в [arrea_xx] -; 2) копируем err_message и head в [arrea_xx] -macro show_error_window err_message, head -{ -local lp0 -local lp1 - -pushad - mcall 68,11 - mcall 68,12,4096 - push eax - pop dword [arrea_xx] - - mov edi,eax - mov esi,dword head - cld -align 4 -lp0: - movsb - cmp byte[esi],0 - jne lp0 - mov word[edi],'. ' - add edi,2 - mov esi,dword err_message -align 4 -lp1: - movsb - cmp byte[esi],0 - jne lp1 - mov byte[edi],0 -popad - or eax,-1 ;увы -} - -; включаем показ сообщения через @notify: -macro notify_window_run message -{ -push eax ebx - mov eax,message ;параметры для командной строки - mov [run_notify_struct.Flags], eax - mov eax,70 ;run @notify - mov ebx,run_notify_struct - int 0x40 -pop ebx eax -} - - -;входные параметры: -;eax - адрес библиотеки в памяти -;myimport - импортируемые функции -macro import_boxlib myimport, err_message_import__, head_f_i__ -{ -local import_loop -local import_find -local lp -local import_find_next -local import_found -local import_done -local exit -local e.exit -local import_not_found -; initialize import - - mov edx, eax - mov esi,myimport -import_loop: - lodsd ;mov eax,dword[esi] ;add esi,4 ;получаем в eax указатель на имя импортируемой функции - test eax, eax - jz import_done ;если указатель на имя функции = 0 (в пользовательской программе) - push edx ;сохраняем начало библиотечных указателей на функции -import_find: - mov ebx, [ds:edx] - test ebx, ebx - jz import_not_found ;если указатель на имя функции = 0 (в библиотеке) - push eax ;eax - указатель на имя экспортируемой функции (в пользовательской программе) -lp: - mov cl, [ds:eax] - cmp cl, [ds:ebx] ;сравниваем имена функций в библиотеке и в пользовательской программе - jnz import_find_next ;если названия не совпали - test cl, cl - jz import_found ;если названия совпали, и уже конец строки (cl=0) - inc eax - inc ebx - jmp lp -import_find_next: - pop eax - add edx, 8 ;8 = 4 байта указатель на название и 4 байта указатель на функцию - jmp import_find -import_found: - pop ebx ;востанавливаем указатель на имя функции (который был в eax) и освобождаем стек - mov eax, [ds:edx+4] ;eax = указатель на функцию (в библиотеке) - mov [esi-4], eax ;копируем указатель (на функцию) в программу, -4 ставим потому что esi было сдвинуто командой lodsd - pop edx ;устанавливаем edx на начало библиотечных функций -;--- проверяем совпадает ли имя экспортированной функции с 'lib_init' -if library_fun_memory_alloc eq 0 -else - cmp dword[ebx],'lib_' - jne import_loop - cmp dword[ebx+4],'init' - jne import_loop -;--- если имя функции совпало с 'lib_init' попадаем сюда - ;подключение функций для работы с памятью - ;push eax - ;call dll.Init - pushad - mov esi,eax - mov eax,library_fun_memory_alloc - mov ebx,library_fun_memory_free - mov ecx,library_fun_memory_realloc - mov edx,library_fun_dll_load - call dword esi - popad -end if - jmp import_loop -import_not_found: - add esp,4 - show_error_window err_message_import__, head_f_i__ ;show error message /create window - jmp e.exit -import_done: - xor eax,eax ;=0 все загрузилось удачно -e.exit: -;--------------------------------------------------------------------- -} -ll_struc_size = 48;($-library_name__) ; constant size of struct -struc l_libs library_name__, cur_dir_path__, library_path__, system_path__, err_message_found_lib__, head_f_l__, my_import, err_message_import__, head_f_i__,point_dir_name; struct for loading libraries -{ -.library_name__ dd library_name__ ; имя загружаемой библиотеки -.cur_dir_path__ dd cur_dir_path__ ; указатель на буфер в котором содержиться путь от куда была запущена программа - -.library_path__ dd library_path__ ; указатель на буфер в котором будет софоримирован путь к библиотеки, если нужно вычислить путь до либы с места запуска программы, обычно нужно, в случаях, если либа расположена в той же папке -.complete_path dd system_path__ ; путь который четко содержит путь - -.err_message_found_lib__ dd err_message_found_lib__ -.head_f_l__ dd head_f_l__ -.my_import dd my_import -.err_message_import__ dd err_message_import__ -.head_f_i__ dd head_f_i__ -if point_dir_name eq -.point_dir_name__ dd 0x0 -else -.point_dir_name__ dd point_dir_name ; имя вложенной дирректории в кторой храняться подгружаемые модули. -end if -.adr_load_lib dd 0x0 -.status_lib dd 0x0 ;status of load library -; -} diff --git a/programs/system/cpuid/trunk/macros.inc b/programs/system/cpuid/trunk/macros.inc deleted file mode 100644 index 9a42c0d50d..0000000000 --- a/programs/system/cpuid/trunk/macros.inc +++ /dev/null @@ -1,532 +0,0 @@ - - - @^ fix macro comment { - ^@ fix } - - ; ------------------------- - macro library [lname,fname] - { - forward - dd __#lname#_library_table__,__#lname#_library_name__ - common - dd 0 - forward - align 4 - __#lname#_library_name__ db fname,0 - } - - macro import lname,[name,sname] - { - common - align 4 - __#lname#_library_table__: - forward - if used name - name dd __#name#_import_name__ - end if - common - dd 0 - forward - if used name - align 4 - __#name#_import_name__ db sname,0 - end if - } - - macro export [name,sname] - { - forward - dd __#name#_export_name__,name - common - dd 0 - forward - align 4 - __#name#_export_name__ db sname,0 - } - ; ------------------------- - - 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 szZ name,[data] { ; same as sz, but with 0 at the end of line (ASCIIZ string) [dunkaist] - common - if used name - name db data,0 - .size = $-name-1 - end if - } - sz0 fix szZ - - 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 { ; mike.dld - __mov eax,a - __mov ebx,b - __mov ecx,c - __mov edx,d - __mov esi,e - __mov edi,f - - int 0x40 - } - - - ; ------------------------- - 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 KolibriOS - 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 - - diff --git a/programs/system/cpuid/trunk/struct.inc b/programs/system/cpuid/trunk/struct.inc deleted file mode 100644 index 5b60756e32..0000000000 --- a/programs/system/cpuid/trunk/struct.inc +++ /dev/null @@ -1,184 +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 \} } - -