flat assembler
Message board for the users of flat assembler.
Index
> Windows > [solved]:playing with 16bit winincludes Goto page Previous 1, 2, 3 Next |
Author |
|
DimonSoft 24 Mar 2020, 19:14
Parameter preparation for CreateWindow looks like the author(s) tried being 8086-compatible too hard.
|
|||
24 Mar 2020, 19:14 |
|
DimonSoft 24 Mar 2020, 21:04
But 8086 did support push mem instruction.
|
|||
24 Mar 2020, 21:04 |
|
Tomasz Grysztar 24 Mar 2020, 21:11
DimonSoft wrote: But 8086 did support push mem instruction. |
|||
24 Mar 2020, 21:11 |
|
ProMiNick 25 Mar 2020, 00:18
https://yadi.sk/d/f3kzyjRlFrocHQ updated according to header sets with 8.3 filenames.
Fore folders same restriction? I found sources with edit creation (hope pascal calling convention mean they are win16) https://yadi.sk/i/crPorEoRQqtddw (everything exept code in russian) And I download Microsoft Windows 3.1 DDK, Microsoft Windows 3.1 SDK, Microsoft Windows 95 DDK, Windows Chicago - Build 331 SDK, Borland C++ 4.0 (CD), Borland C++ 4.52, Borland Turbo CPP 4.5 for Windows, Turbo C++ For Win3.1 (5.25) Hope in one of this toolset I will be able to compile edit sources or found something analogy usefull. And than reversing output will be simple task. I am not from generation which had books about assembly (I hope only for internet, accessibility of ancient tools & my code reversing skills). |
|||
25 Mar 2020, 00:18 |
|
Tomasz Grysztar 25 Mar 2020, 09:36
ProMiNick wrote: https://yadi.sk/d/f3kzyjRlFrocHQ updated according to header sets with 8.3 filenames. ProMiNick wrote: I am not from generation which had books about assembly (I hope only for internet, accessibility of ancient tools & my code reversing skills). So yes, the internet has changed it all for the better. I only brought this old book here, because for legacy stuff the books from that era may sometimes have interesting little insights or clues that might be missing from the later content. But even then the internet might probably give much more - you could for example search Usenet archives. While writing my file formats tutorial I was digging through old Usenet messages to find some information on the history of formats like PE/ELF/Mach-O, and it was truly a fascinating journey. |
|||
25 Mar 2020, 09:36 |
|
ProMiNick 25 Mar 2020, 23:18
https://yadi.sk/d/HTs1wxZvp6BmYw name of package shortened to 8 symbols, (mostly) all content except contents of DOC & PROJECTS are forced to 8.3 format.
PROJECTS are same as DEMOS but in unfinished state. I moved minipad there. Moreover I found working donor (5kb) with asm source code with EDIT control. [EDITED]: https://yadi.sk/d/HTs1wxZvp6BmYw package updated - absolutely all names are in 8.3 format. new part to 32/64: Code: HRESULT equ -$80000000+$80000000 xor ;SignExt that looks very nice for eye S_OK = HRESULT(0) S_FALSE = HRESULT(1) E_NOTIMPL = HRESULT($80004001) |
|||
25 Mar 2020, 23:18 |
|
DimonSoft 28 Mar 2020, 16:04
ProMiNick wrote:
Why would one need to sign-extend an HRESULT? It’s not a number but a well defined set of bit fields, some of which are numbers. |
|||
28 Mar 2020, 16:04 |
|
ProMiNick 28 Mar 2020, 16:05
https://yadi.sk/d/HTs1wxZvp6BmYw updated
all examples above require run as admin on systems with UAC - fixed: NE..ProgramFlags db NE_I086; was NE_INST - it is assumed to make modifications in registry and so on invoke LoadIcon,0,IDI_APPLICATION & invoke LoadCursor,0,IDC_ARROW got garbage from stack & trash it - fixed invoke LoadIcon,0,dword IDI_APPLICATION ; added dword that makes param occupy 2 words invoke LoadCursor,0,dword IDC_ARROW however no one of that fixes dosn`t fix minipad crash on EDIT CreateWindow. (donor shrinked from $1200+ bytes to $800+ bytes, Borland HLL logic cuted & zerofilled) all still in process... |
|||
28 Mar 2020, 16:05 |
|
ProMiNick 28 Mar 2020, 17:26
DimonSoft wrote:
No matter in what mode 32 or 64 bit HRESULT is always 32bit set. Its extension no matter zero extension or sign extension because extension is ignored. BUT! Only sign extended values could be encoded in large amount of instructions. So sign extension it is only encode trick (specificaly required by fasm in 64bit mode). Only one instruction type allow zero extended: mov REG,uint64, all the rest like passing value to stack directly require sign extension. Code: use64 HRESULT equ -$80000000+$80000000 xor E_FAIL = HRESULT($80004005) push E_FAIL ; OK, the reason force fasm to compile things that we need ; we need to pass 32 bit value of HRESULT to stack with indeterminant high part and we did this push $80004005 ; error _________________ I don`t like to refer by "you" to one person. My soul requires acronim "thou" instead. |
|||
28 Mar 2020, 17:26 |
|
ProMiNick 31 Mar 2020, 01:11
https://yadi.sk/d/HTs1wxZvp6BmYw updated
fix: errorcausing visual controls required NE.InitHeapSize other than zero, I don`t search minimal acepted value, just set it to $400 and error is gone. [img]https://ibb.co/z6ZHxtT[/img]single instance example with try to launch second one [EDITED] https://yadi.sk/d/HTs1wxZvp6BmYw again updated [2020/04/01] added support for cdecl calling convention in addition to pascal (direct & indirect calls) added even stdcall (ONLY for direct call - win16 have no such api so no needance in indirect calls) fix: rudiment from 32bit in proc16.inc completely cleared (initialization of locals was with dword cells - now with word ones) fix: in proc16 macro was code for detection not pascal calling convention, but args allways were defined in that convention, now definition corresponds to convention. |
|||
31 Mar 2020, 01:11 |
|
ProMiNick 03 Apr 2020, 03:08
https://yadi.sk/d/HTs1wxZvp6BmYw updated again
some common parts of NE format goes from final files to format includes & increased format flexibility Code: macro entry address* { match any:rest,address:: \{ match off::,rest \\{ store dword idxof@\#any shl 16 + off at :NewExe+NE.EntryPoint \\} match :,rest \\{ store word any at :NewExe+NE.EntryPoint \\} \} purge entry } macro stack size* { store word size at :NewExe+NE.InitStackSize purge stack } macro heap size* { store word size at :NewExe+NE.InitHeapSize purge heap } macro filealign value* { assert value>=0 assert bsr value = bsf value assert value <513 if value FORCE_FILE_ALIGN_SHIFT = bsr value else FORCE_FILE_ALIGN_SHIFT = 0 end if purge filealign } macro rsrcalign value* { assert value>=0 assert bsr value = bsf value assert value <513 if value FORCE_RSRC_ALIGN_SHIFT = bsr value else FORCE_RSRC_ALIGN_SHIFT = 0 end if purge rsrcalign } FILE_ALIGN_SHIFT = 4 RSRC_ALIGN_SHIFT = 4 REAL_FILE_ALIGN_SHIFT = 4 REAL_RSRC_ALIGN_SHIFT = 4 ERROR_LEVEL equ if defined FORCE_FILE_ALIGN_SHIFT FILE_ALIGN_SHIFT = FORCE_FILE_ALIGN_SHIFT if FILE_ALIGN_SHIFT REAL_FILE_ALIGN_SHIFT = FILE_ALIGN_SHIFT else REAL_FILE_ALIGN_SHIFT = 9 end if end if if defined FORCE_RSRC_ALIGN_SHIFT RSRC_ALIGN_SHIFT = FORCE_RSRC_ALIGN_SHIFT if RSRC_ALIGN_SHIFT REAL_RSRC_ALIGN_SHIFT = RSRC_ALIGN_SHIFT else REAL_RSRC_ALIGN_SHIFT = 9 end if end if and atleast ready win16 NE prototype of resource macros (fasm legacy as base): Code: ; Macroinstructions for making resources macro directory [type,label] { common local max,count,prev count = 0 max = 0 forward count = count + 1 if type eqtype 1 label#.@type = -8000 or type if type > max max = type end if else local ..end label#.@type =$%-root@resource db ..end-$-1,type ..end: end if common resource@typecount = count prev = root@resource+2 repeat max forward if type eqtype 1 if % = type label#.@start = prev prev = label#.@start+label#.@size end if end if common end repeat forward if type eqtype '' label#.@start = prev prev = label#.@start+label#.@size end if } macro resource dir,[id,lang,label] { common local min,max,count,current count = 0 max = 0 min = $7FFF forward count = count + 1 if id eqtype 1 label#.@id = -8000 or id if id > max max = id end if if id < min min = id end if else local ..end label#.@id =$%-root@resource db ..end-$-1,id ..end: end if common resource@idx = resource@idx + count dir#.@size = sizeof.RESTYPEINFO + count * sizeof.RESNAMEINFO store word dir#.@type at :dir#.@start+RESTYPEINFO.rtTypeID store word count at :dir#.@start+RESTYPEINFO.rtResourceCount current = dir#.@start + sizeof.RESTYPEINFO repeat max-min+1 forward if id eqtype 1 if min+%-1 = id store word label#.@offset shr REAL_RSRC_ALIGN_SHIFT at :current +RESTYPEINFO.rnOffset store word label#.@length shr REAL_RSRC_ALIGN_SHIFT at :current +RESTYPEINFO.rnLength store word label#.@flags at :current +RESTYPEINFO.rnFlags store word label#.@id at :current +RESTYPEINFO.rnID current = current + sizeof.RESNAMEINFO end if end if common end repeat forward if id eqtype '' store word label#.@offset shr REAL_RSRC_ALIGN_SHIFT at :current +RESTYPEINFO.rnOffset store word label#.@length shr REAL_RSRC_ALIGN_SHIFT at :current +RESTYPEINFO.rnLength store word label#.@flags at :current +RESTYPEINFO.rnFlags store word label#.@id at :current +RESTYPEINFO.rnID current = current + sizeof.RESNAMEINFO end if } macro bitmap label,bitmap_file { align 1 shl REAL_RSRC_ALIGN_SHIFT label#.@offset file bitmap_file:0Eh label#.@length = $ - label#.@offset label#.@flags = NE_NSDISCARD + NE_NSDPL + NE_NSPRELOAD + NE_NSMOVE align 4 } macro icon group,[label,icon_file] { common local count count = 0 forward local size,position virtual at 0 file icon_file:6,16 load size dword from 8 load position dword from 12 end virtual align 1 shl REAL_RSRC_ALIGN_SHIFT label#.@offset file icon_file:position,size label#.@length = size label#.@flags = NE_NSDISCARD + NE_NSDPL + NE_NSPRELOAD + NE_NSMOVE count = count+1 common local header align 1 shl REAL_RSRC_ALIGN_SHIFT group#.@offset dw 0,1,count group#.@length = 6 + count*14 group#.@flags = NE_NSDISCARD + NE_NSDPL + NE_NSPRELOAD + NE_NSMOVE forward file icon_file:6,12 dw label#.@id common align 1 shl REAL_RSRC_ALIGN_SHIFT } macro cursor group,[label,cursor_file] { common local count count = 0 forward local width,height,size,position virtual at 0 file cursor_file:6,16 load width byte from 0 load height byte from 1 load size dword from 8 load position dword from 12 end virtual align 1 shl REAL_RSRC_ALIGN_SHIFT label#.@offset file cursor_file:10,4 file cursor_file:position,size label#.@length = size+4 label#.@flags = NE_NSDISCARD + NE_NSDPL + NE_NSPRELOAD + NE_NSMOVE count = count+1 common local header align 1 shl REAL_RSRC_ALIGN_SHIFT group#.@offset dw 0,2,count group#.@length = 6 + count*14 group#.@flags = NE_NSDISCARD + NE_NSDPL + NE_NSPRELOAD + NE_NSMOVE forward dw width,height,1,0 dd size+4 dw label#.@id common align 1 shl REAL_RSRC_ALIGN_SHIFT } macro dialog label,title,x,y,cx,cy,style,exstyle,menu,fontname,fontsize { local size,items align 1 shl REAL_RSRC_ALIGN_SHIFT label#.@offset dd style or DS_SETFONT,exstyle +0 label#.@length = size label#.@flags = NE_NSDISCARD + NE_NSDPL + NE_NSPRELOAD + NE_NSMOVE dw items,x,y,cx,cy if menu+0 <> 0 dw 0FFFFh end if du menu+0,0,title,0 if fontname eq du 8,'MS Sans Serif',0 else du fontsize+0,fontname,0 end if align 4 dialog_size equ size = $ - data dialog_items equ items = dialog_items_counter dialog_items_counter = 0 } macro dialogitem class,title,id,x,y,cx,cy,style,exstyle { dd style or WS_CHILD,exstyle +0 dw x,y,cx,cy,id if class eq 'BUTTON' dw 0FFFFh,80h else if class eq 'EDIT' dw 0FFFFh,81h else if class eq 'STATIC' dw 0FFFFh,82h else if class eq 'LISTBOX' dw 0FFFFh,83h else if class eq 'SCROLLBAR' dw 0FFFFh,84h else if class eq 'COMBOBOX' dw 0FFFFh,85h else du class,0 end if if title eqtype 0 dw 0FFFFh,title else if ~ title eq du title end if dw 0 end if dw 0 align 4 dialog_items_counter = dialog_items_counter + 1 } macro enddialog { dialog_items dialog_size } macro accelerator label,[fvirt,key,cmd] { common local size align 1 shl REAL_RSRC_ALIGN_SHIFT label#.@offset: accel_count = 0 forward accel_count = accel_count + 1 common size = accel_count * 8 label#.@length = size label#.@flags = NE_NSDISCARD + NE_NSDPL + NE_NSPRELOAD + NE_NSMOVE forward accel_count = accel_count - 1 if accel_count = 0 dw fvirt or 80h,key else dw fvirt,key end if dd cmd } macro versioninfo label,fileos,filetype,filesubtype,lang,cp,[name,value] { common local size,vivalue,visize align 1 shl REAL_RSRC_ALIGN_SHIFT label#.@offset dw size,visize,0 label#.@length = size label#.@flags = NE_NSDISCARD + NE_NSDPL + NE_NSPRELOAD + NE_NSMOVE du 'VS_VERSION_INFO',0,0 vivalue dd 0FEEF04BDh,00010000h local version,count,shift,char,filever,productver filever = 0 productver = 0 forward if name eq 'FileVersion' | name eq 'ProductVersion' virtual at 0 db value count = $ version = 0 shift = 16 repeat count load char from %-1 if char='.' if shift mod 32 shift = shift-16 else shift = shift+32+16 end if else version = (version and not (0FFFFh shl shift)) or ((version shr shift and 0FFFFh)*10+char-'0') shl shift end if end repeat end virtual if name eq 'FileVersion' filever = version else if name eq 'ProductVersion' productver = version end if end if common dq filever,productver dd 0,0,fileos,filetype+0,filesubtype+0,0,0 visize = $ - vivalue local sfi_data,sfi_size sfi_data dd sfi_size du 1,'StringFileInfo',0 local str_data,str_size str_data dd str_size du 1,'040904E4',0 forward local vs_data,vs_size,value_data,value_size align 4 vs_data dw vs_size,value_size/2 du 1,name,0 align 4 value_data du value,0 value_size = $ - value_data vs_size = $ - vs_data common align 4 str_size = $ - str_data sfi_size = $ - sfi_data local vfi_data,vfi_size,var_data,var_size vfi_data dd vfi_size du 1,'VarFileInfo',0,0 var_data dw var_size,4 du 0,'Translation',0,0 dw lang,cp+0 var_size = $ - var_data vfi_size = $ - vfi_data size = $ - data }macro versioninfo label,fileos,filetype,filesubtype,lang,cp,[name,value] { common local data,size,vivalue,visize label dd RVA data,size,0,0 data dw size,visize,0 du 'VS_VERSION_INFO',0,0 vivalue dd 0FEEF04BDh,00010000h local version,count,shift,char,filever,productver filever = 0 productver = 0 forward if name eq 'FileVersion' | name eq 'ProductVersion' virtual at 0 db value count = $ version = 0 shift = 16 repeat count load char from %-1 if char='.' if shift mod 32 shift = shift-16 else shift = shift+32+16 end if else version = (version and not (0FFFFh shl shift)) or ((version shr shift and 0FFFFh)*10+char-'0') shl shift end if end repeat end virtual if name eq 'FileVersion' filever = version else if name eq 'ProductVersion' productver = version end if end if common dq filever,productver dd 0,0,fileos,filetype+0,filesubtype+0,0,0 visize = $ - vivalue local sfi_data,sfi_size sfi_data dd sfi_size du 1,'StringFileInfo',0 local str_data,str_size str_data dd str_size du 1,'040904E4',0 forward local vs_data,vs_size,value_data,value_size align 4 vs_data dw vs_size,value_size/2 du 1,name,0 align 4 value_data du value,0 value_size = $ - value_data vs_size = $ - vs_data common align 4 str_size = $ - str_data sfi_size = $ - sfi_data local vfi_data,vfi_size,var_data,var_size vfi_data dd vfi_size du 1,'VarFileInfo',0,0 var_data dw var_size,4 du 0,'Translation',0,0 dw lang,cp+0 var_size = $ - var_data vfi_size = $ - vfi_data size = $ - data } macro resdata label { local size align 1 shl REAL_RSRC_ALIGN_SHIFT label#.@offset = $ label#.@length = size label#.@flags = NE_NSDISCARD + NE_NSDPL + NE_NSPRELOAD + NE_NSMOVE ressize equ size = $ - data } macro endres { ressize align 1 shl REAL_RSRC_ALIGN_SHIFT } for now missed menu (fasm legacy menuex but called menu) versioninfo I guess for now a bit incorrect - later I will test & fix room for resource table now looks like this: Code: ResourceTable: root@resource = $% if resource@typecount .rscAlignShift dw REAL_RSRC_ALIGN_SHIFT .rscTypes db resource@typecount*sizeof.RESTYPEINFO+resource@count*sizeof.RESNAMEINFO dup(0) .rscEndTypes dw 0 end if Code: postpone { segment@count = segment@idx resource@count = resource@idx resource@typecount = resource@typeidx } segment@idx = 0 resource@typeidx = 0 resource@idx = 0 code@idx = 0 data@idx = 0 cseg1st = 0 added RT_NAME_TABLE = 15 (New(or not new, but bit obsolete) predefined resource it gives ability to define IDs of resources as integers but makes to them literal aliases so way that resource could be loaded as ID as alias. [EDITED] https://yadi.sk/d/HTs1wxZvp6BmYw updated again [2020/04/03/14:31] add resources.inc to win16.inc & tryed to make resources. fixes: resource@typecount = count replaced to resource@typeidx = count add to minipad win16 2 resources (that already implemented icon & group_icon) all compiled succes (even IDA Pro see 2 resources in file with expected content) BUT app logo dosn`t changed & wintitle logo changed to windefault |
|||
03 Apr 2020, 03:08 |
|
ProMiNick 03 Apr 2020, 13:03
https://yadi.sk/d/HTs1wxZvp6BmYw updated again
now NT host systems draws app icon, but 9x host systems dosn`t draw it. wintitle logo still changed to windefault (checked combinations with addition to ID $8000 and addition $80000000) fixes in resources -8000 replaced on $8000 all resource size calculations corrected with adder - 1 + 1 shl REAL_RSRC_ALIGN_SHIFT [EDITED] https://yadi.sk/d/HTs1wxZvp6BmYw updated again [2020/04/03/17:50] fix in macro icon group replaced dw label#.@id with dw label#.@id and $7FFF (solution maybe not universal, but for current state it is OK) now all NT & 9x systems draws app icon, wintitle logo still errored. format for resource RT_NAME_TABLE = 15 for NE Code: macro nametable label,[type,ID,alias] { common local data,size align 1 shl REAL_RSRC_ALIGN_SHIFT label#.@offset: label#.@length = size - 1 + 1 shl REAL_RSRC_ALIGN_SHIFT label#.@flags = NE_NSDISCARD + NE_NSDPL + NE_NSSHARED + NE_NSMOVE forward local ..end dw ..end-$,type,ID db 0,alias,0 ..end: common dw 0 ; included in size or not? size = $ - label#.@offset align 1 shl REAL_RSRC_ALIGN_SHIFT } for PE(what if exists): Code: macro nametable label,[type,ID,alias] { common local data,size label dd RVA data,size,0,0 data: forward local ..end dw ..end-$,type,ID db 0,alias,0 ..end: common dw 0 align 4 } |
|||
03 Apr 2020, 13:03 |
|
ProMiNick 04 Apr 2020, 17:41
https://yadi.sk/d/HTs1wxZvp6BmYw updated again
little victory: minipad in projects created with icon in title, with menu (all behavior same as 32bit variant has). Fact that it work a kind of miracle - because of that it still in projects not in demos. menu resource for NE realized this way: Code: macro menu label,helpID { common local size,items align 1 shl REAL_RSRC_ALIGN_SHIFT label#.@offset dw 0 ; menu version label#.@length = size - 1 + 1 shl REAL_RSRC_ALIGN_SHIFT label#.@flags = NE_NSDISCARD + NE_NSDPL + NE_NSSHARED + NE_NSMOVE macro menuitem string,id:0,option:0 \{ dw option if option and MF_POPUP menu_level = menu_level +1 else dw id end if if option and MF_END menu_level = menu_level -1 end if match any,string \\{ db string \\} db 0 \} macro menuseparator option:0 \{ dw option or MF_SEPARATOR ; direct separator if option and MF_POPUP menu_level = menu_level +1 else dw 0 end if if option and MF_END menu_level = menu_level -1 end if db 0 \} ; no string - indirect separator match any,helpID \{ dw helpID+0 \} items: menu_size equ size = $ - label#.@offset menu_level = 1 macro endmenu \{ if menu_level err unresolved internal menu structure end if menu_size purge menuitem, menuseparator, endmenu \} } in donor I added one more example - smartpad (tryed to clone abilities & behavior of that donor, there are used names table resource & toolbar) i going finaly update minipad to support all such features before it will be moved to demo. |
|||
04 Apr 2020, 17:41 |
|
ProMiNick 04 Apr 2020, 23:21
https://yadi.sk/d/HTs1wxZvp6BmYw updated again
2 more resource type validated (dialog & accelerators): Code: macro dlgdefprop prop:''& { local ..done ..done = $ match any =, more,prop \{ db prop,0 \} if $ = ..done if prop eqtype '' if prop eq '' db 0 else db prop,0 end if else if ~prop db 0 else dw -1,prop ;maybe not end if end if end if } macro dlgdefchild class:''& { local ..done,tmpclass ..done = $ ;match any =, more,class \{ db class,0 \} ;need testing if $ = ..done if class eqtype '' if class eq 'BUTTON' db 80h else if class eq 'EDIT' db 81h else if class eq 'STATIC' db 82h else if class eq 'LISTBOX' db 83h else if class eq 'SCROLLBAR' db 84h else if class eq 'COMBOBOX' db 85h else if class eq '' db 0 else db class,0 ;maybe for class 1 byte only, so no literal end if else if ((class) and 1Fh) =10 | ((class) and 1Fh) =16 | ((class)-((class) and 80h))>18h | (class)<0 .err unsupported classID = class end if db class end if end if } macro dialog label,class,title,x,y,cx,cy,style,exstyle,menu,fontname,fontsize { local size,items align 1 shl REAL_RSRC_ALIGN_SHIFT label#.@offset dd style label#.@length = size - 1 + 1 shl REAL_RSRC_ALIGN_SHIFT label#.@flags = NE_NSDISCARD + NE_NSDPL + NE_NSSHARED + NE_NSMOVE db items dw x,y,cx,cy dlgdefprop menu dlgdefprop class dlgdefprop title if (style) and DS_SETFONT if fontname eq db 8,'MS Sans Serif',0 else db fontsize,fontname,0 end if end if dialog_size equ size = $ - label#.@offset dialog_items equ items = dialog_items_counter dialog_items_counter = 0 } macro dialogitem class,title,id,x,y,cx,cy,style,exstyle { dw x,y,cx,cy,id dd style or WS_CHILD dlgdefchild class dlgdefprop title db 0 dialog_items_counter = dialog_items_counter + 1 } macro enddialog { dialog_items dialog_size align 1 shl REAL_RSRC_ALIGN_SHIFT } macro accelerator label,[fvirt,key,cmd] { common local size align 1 shl REAL_RSRC_ALIGN_SHIFT label#.@offset: accel_count = 0 forward accel_count = accel_count + 1 common size = accel_count * 5 label#.@length = size - 1 + 1 shl REAL_RSRC_ALIGN_SHIFT label#.@flags = NE_NSDPL + NE_NSSHARED + NE_NSMOVE forward accel_count = accel_count - 1 if accel_count = 0 db fvirt or 80h else db fvirt end if dw key,cmd } couple of fix in flag testing: such things: Code: what syntax should be if (style) and DS_SETFONT ;if style macro param so and-operand related to whole expression what syntax wrong if style and DS_SETFONT ;if style macro param so and-operand related to its last member |
|||
04 Apr 2020, 23:21 |
|
ProMiNick 05 Apr 2020, 12:14
https://yadi.sk/d/HTs1wxZvp6BmYw updated again
added 1 more resource: Code: macro versioninfo label,fileos,filetype,filesubtype,lang,cp,[name,value] { common local size,vivalue,visize align 1 shl REAL_RSRC_ALIGN_SHIFT label#.@offset dw size db visize,0 label#.@length = size - 1 + 1 shl REAL_RSRC_ALIGN_SHIFT label#.@flags = NE_NSDISCARD + NE_NSDPL + NE_NSPRELOAD + NE_NSMOVE db 'VS_VERSION_INFO',0 vivalue dd 0FEEF04BDh,00010000h local version,count,shift,char,filever,productver filever = 0 productver = 0 forward if name eq 'FileVersion' | name eq 'ProductVersion' virtual at 0 db value count = $ version = 0 shift = 16 repeat count load char from %-1 if char='.' if shift mod 32 shift = shift-16 else shift = shift+32+16 end if else version = (version and not (0FFFFh shl shift)) or ((version shr shift and 0FFFFh)*10+char-'0') shl shift end if end repeat end virtual if name eq 'FileVersion' filever = version else if name eq 'ProductVersion' productver = version end if end if common dq filever,productver dd 0,0,fileos,filetype+0,filesubtype+0,0,0 visize = $ - vivalue local sfi_data,sfi_size sfi_data dd sfi_size db 'StringFileInfo',0 align 4 local str_data,str_size str_data dd str_size db '040904E4',0 forward local vs_data,vs_size,value_data,value_size align 4 vs_data dw vs_size,value_size db name,0 align 4 value_data db value,0 value_size = $ - value_data vs_size = $ - vs_data common align 4 str_size = $ - str_data sfi_size = $ - sfi_data local vfi_data,vfi_size,var_data,var_size vfi_data dd vfi_size db 'VarFileInfo',0 var_data dw var_size,4 db 'Translation',0 dw lang,cp+0 var_size = $ - var_data vfi_size = $ - vfi_data size = $ - label#.@offset } now win16 minipad closest to ideal (it is completely analog of minipad 32 or 64 in all sences, but unique abilities of win16 dosn`t catched yet - I mean use of RT_NAME_TABLE resource) how looks like resource part of it: Code: directory RT_MENU,menus,\ RT_ICON,icons,\ RT_GROUP_ICON,group_icons,\ RT_NAME_TABLE,names_table,\ RT_VERSION,versions resource menus,\ IDR_MENU,LANG_ENGLISH+SUBLANG_DEFAULT,main_menu resource icons,\ 1,LANG_NEUTRAL,icon_data resource group_icons,\ IDR_ICON,LANG_NEUTRAL,main_icon resource names_table,\ 1,LANG_NEUTRAL,rsrc_names resource versions,\ 1,LANG_NEUTRAL,version menu main_menu,0 menuitem '&File',0,MF_POPUP menuitem '&New',IDM_NEW menuseparator menuitem 'E&xit',IDM_EXIT,MF_END menuitem '&Help',0,MF_POPUP + MF_END menuitem '&About...',IDM_ABOUT,MF_END endmenu icon main_icon,icon_data,'minipad\logo.ico' nametable rsrc_names,RT_ICON,$8000 or 1,'APP_ICON',\ RT_MENU,$8000 or IDR_MENU,'APP_MENU' versioninfo version,VOS_DOS_WINDOWS16,VFT_APP,VFT2_UNKNOWN,LANG_ENGLISH+SUBLANG_DEFAULT,0,\ 'FileDescription','MiniPad - example program',\ 'LegalCopyright','No rights reserved.',\ 'FileVersion','1.0',\ 'ProductVersion','1.0',\ 'OriginalFilename','MINIPAD.EXE' |
|||
05 Apr 2020, 12:14 |
|
ProMiNick 06 Apr 2020, 01:50
https://yadi.sk/d/HTs1wxZvp6BmYw updated!!!!!
minipad atlast moved from projects to demos (in addition to completely reproduction of win32|64 analog behavior added use of resource RT_NAME_TABLE). all windowses accept exes as valid (IDApro dislike smthing & messaging file structure as corrupted) ToDo list: implement exports, fix IDA dislike of one of resources, maybe RT_NAME_TABLE deserve to be probed under PE. |
|||
06 Apr 2020, 01:50 |
|
ProMiNick 06 Apr 2020, 08:57
https://yadi.sk/d/HTs1wxZvp6BmYw updated
fix: on versions before setting on fastload flag will crash program, even without that flag IDA messaging about corruption. Now fastload is fully functional. |
|||
06 Apr 2020, 08:57 |
|
Tomasz Grysztar 06 Apr 2020, 09:28
I tried your latest "Minipad" demos, but none of the versions work on my Windows 3.11 - they either cause an exception or even hang the entire system. I may investigate more later in a spare time.
|
|||
06 Apr 2020, 09:28 |
|
ProMiNick 06 Apr 2020, 10:35
All versions before was with switched off NE_GANGL flag.
Try comment line Code: fastloadstart Or maybe one of resources unsupported in win3.1 (versioninfo was last added) Is that helps? I thought I had VM with windows 3.1, but I hadn`t - there are DOS only with WINDOWS as folder, but without WINDOWS as subsystem. So I can`t test. https://yadi.sk/d/HTs1wxZvp6BmYw updated again. dialog example in projects: now creates dialog, but... ...no processing of DialogProc even initdialog not processed, however controls interactive but dialog is unclosable. |
|||
06 Apr 2020, 10:35 |
|
Goto page Previous 1, 2, 3 Next < Last Thread | Next Thread > |
Forum Rules:
|
Copyright © 1999-2024, Tomasz Grysztar. Also on GitHub, YouTube.
Website powered by rwasa.