__REV = 0 macro $Revision a { match =: Num =$,a \{ if __REV < Num __REV = Num end if \} } $Revision$ ; structure definition helper macro struct name, [arg] { common name@struct equ name struc name arg { } macro declare_sizeof xname,value { sizeof.#xname = value } macro struct_helper name { match xname,name \{ virtual at 0 xname xname declare_sizeof xname, $ - xname name equ sizeof.#xname end virtual \} } ends fix } struct_helper name@struct ;// mike.dld, 2006-29-01 [ ; macros definition macro diff16 title,l1,l2 { local s,d s = l2-l1 display title,': 0x' repeat 16 d = 48 + s shr ((16-%) shl 2) and $0F if d > 57 d = d + 65-57-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 } include 'kglobals.inc' ; \begin{diamond}[29.09.2006] ; may be useful for kernel debugging ; example 1: ; dbgstr 'Hello, World!' ; example 2: ; dbgstr 'Hello, World!', save_flags macro dbgstr string*, f { local a iglobal_nested a db 'K : ',string,13,10,0 endg_nested if ~ f eq pushfd end if push esi mov esi, a call sys_msg_board_str pop esi if ~ f eq popfd end if } ; \end{diamond}[29.09.2006] macro Mov op1,op2,op3 ; op1 = op2 = op3 { mov op2,op3 mov op1,op2 } macro __list_add new, prev, next { mov [next+LHEAD.prev], new mov [new+LHEAD.next], next mov [new+LHEAD.prev], prev mov [prev+LHEAD.next], new } macro list_add new, head { mov eax, [head+LHEAD.next] __list_add new, head, eax } macro list_add_tail new, head { mov eax, [head+LHEAD.prev] __list_add new, eax, head }