Hi there,
When I run the Masm installer, the first screen I get is entirely inaccessible with my screen reader of choice, NVDA. All I hear is "graphic", and have to simulate a left mouse click in the middle of the window to click the next button. Is it possible for this to be looked into/fixed? All the other controls and screens read beautifully, it's just the first one.
Thanks!
BTW, sorry if this is the wrong section, I wasn't entirely sure where to post this :undecided:
Are you talking about the Masm32 SDK installer? It was not clear to me from your post.
If that is the case the image or graphic is what needs to be clicked upon.
After clicking on that, another small window opens asking what hard drive or partition to install the Masm32 SDK into. It has a listing of all of the partitions on your computer.
You are supposed to select one, then click "OK".
A Message box then pops up, informing that the installer will run a test to determine if the MAsm32 SDK can be successfully installed on your computer. One button there "OK", when clicked another message box for the Disk Write test and another "OK" button. When clicked, another message box for the Disk Read test and another "OK" button. Yet another message box for the the succesful testing of a test executable... click "OK" to continue.
Another message box that Delete operation of the test file succeeded, click "OK".
The final box opens, click "Extract" to proceed.
A very cumbersome process to be sure... especially considering your needs.
Maybe stoo23 can arrange to have a complete Masm32 SDK installation zipped to a zip file and host it for you to download.
Then you would only need to extract the contents where you want to have the Masm32 SDK to be installed.
Yes, the SDK installer.
Quote from: Quin on May 01, 2025, 09:11:33 AMYes, the SDK installer.
It is a tedious process. See my modified post above.
Hi,
I think you misunderstood me.
The only part that needs any modification is the first screen you mentioned. The hard drive selection onward works perfectly, it's just that first screen. The graphic needs to be given an accessible role of button, so the screen reader will see it as a tabbable and clickable control.
QuoteThe graphic needs to be given an accessible role of button, so the screen reader will see it as a tabbable and clickable control.
Thanks for that. Perhaps some of the members may be able to make that change.
I will bring it to their attention if they do not respond appropriately here.
I have also sent you an email.
Quote from: Quin on May 01, 2025, 10:52:20 AMHi,
I think you misunderstood me.
The only part that needs any modification is the first screen you mentioned. The hard drive selection onward works perfectly, it's just that first screen. The graphic needs to be given an accessible role of button, so the screen reader will see it as a tabbable and clickable control.
I am not sure if that can be easily fixed. The author of the Masm32 SDK hutch--' has sadly passed away, and we do not have access to the installer source files.
Perhaps another member might be able to come up with a solution that will work for you.
In the meantime, I have been in contact with stoo23 who might have an alternative solution ...
Quote from: zedd on May 01, 2025, 11:13:47 AMQuote from: Quin on May 01, 2025, 10:52:20 AMHi,
I think you misunderstood me.
The only part that needs any modification is the first screen you mentioned. The hard drive selection onward works perfectly, it's just that first screen. The graphic needs to be given an accessible role of button, so the screen reader will see it as a tabbable and clickable control.
I am not sure if that can be easily fixed. The author of the Masm32 SDK hutch--' has sadly passed away, and we do not have access to the installer source files.
Maybe just ... rewrite the damn thing?
Quote from: NoCforMe on May 01, 2025, 11:43:10 AMMaybe just ... rewrite the damn thing?
I have neither the authority, time, ambition, or sufficient knowledge to do that so that AV software will not reject it. Sorry Charlie.
I
can make an installer, but AV software definitely won't like it. :badgrin:
Maybe YOU would like to take a crack at it, though. :greensml:
Quote from: zedd on May 01, 2025, 11:48:54 AMQuote from: NoCforMe on May 01, 2025, 11:43:10 AMMaybe just ... rewrite the damn thing?
I have neither the authority, time, ambition, or sufficient knowledge to do that so that AV software will not reject it. Sorry Charlie.
I didn't mean you personally.
Surely someone here is capable of writing an installer that won't set AV alarms off.
Quote from: NoCforMe on May 01, 2025, 12:06:03 PMI didn't mean you personally.
It sounded that way, though. My bad.
Warning - old school hacking ahead :biggrin:
The MASM32 SDK installer is basically 3 parts
- the main worker
- the test exe (in the .data section using bin2db)
- the package as a 7zip SFX (also in the .data section using bin2db)
The one thing that seems to need changing is the main "install" picture, which is a static not a button.
We could change a few things in the main worker and have it install the MASM64 SDK too :biggrin:
Hi,
Quote from: sinsi on May 01, 2025, 04:04:13 PMWe could change a few things in the main worker and have it install the MASM64 SDK too :biggrin:
If so, it should be optionable. Maybe either one or both?
Regards,
Steve N.
Quote from: zedd on May 01, 2025, 11:48:54 AMQuote from: NoCforMe on May 01, 2025, 11:43:10 AMMaybe just ... rewrite the damn thing?
I have neither the authority, time, ambition, or sufficient knowledge to do that so that AV software will not reject it. Sorry Charlie.
I can make an installer, but AV software definitely won't like it. :badgrin:
The current masm32 installer suffers from this problem too from my experience, when trying to download the installer in firefox it warns me that it contains a virus.
Sad to hear about the creator passing away and us not having access to the source files. Guess it shows that you should always set up doomsday situations for projects :sad:
Quote from: NoCforMe on May 01, 2025, 11:43:10 AMQuote from: zedd on May 01, 2025, 11:13:47 AMQuote from: Quin on May 01, 2025, 10:52:20 AMHi,
I think you misunderstood me.
The only part that needs any modification is the first screen you mentioned. The hard drive selection onward works perfectly, it's just that first screen. The graphic needs to be given an accessible role of button, so the screen reader will see it as a tabbable and clickable control.
I am not sure if that can be easily fixed. The author of the Masm32 SDK hutch--' has sadly passed away, and we do not have access to the installer source files.
Maybe just ... rewrite the damn thing?
I second this.
Long time ago, probably a decade or more ago, I had asked Hutch as to why he used the SFX bit wrapped inside the installer, and why not use only the installer script.
I was deep into making installers of things and I even remember doing verification of the drive string, etc.
Anyway, the only reason I am replying is to show support for the idea of using *only* an NSIS script.
Regards,
Shantanu Gadgil
Found the old thread; it was indeed more than a decade, nineteen years to the month! :sad: :rolleyes:
https://masmforum.com/board/index.php/topic,4767.msg35668.html#msg35668
If someone has access to the old attachments, it could be a viable starting point.
(I have no idea where my original script is)
An NSIS installer would be amazing, I personally love the NSIS syntax and it's much simpler and easier to maintain.
QuoteIf someone has access to the old attachments, it could be a viable starting point.
(I have no idea where my original script is)
Well, that is perhaps unfortunate.
As can be noted by;
Quote[attachment deleted by admin]
placed at the bottom of your initial post on the old forum, https://masmforum.com/board/index.php/topic,4767.msg35668.html#msg35668 (https://masmforum.com/board/index.php/topic,4767.msg35668.html#msg35668) an action taken by Hutch at some time in the past, the File/Attachment, would no longer Exist on the server :(
Sorry
@stoo
Hutch removed ALL attachments from that forum. Not specifically targeting anyone from what I understand. But for other reasons.
The attachment you are looking for *might* be in the 2012 archive. This one, https://masm32.com/board/index.php?board=39.0 (https://masm32.com/board/index.php?board=39.0)]
If not, check the other one.... from 2005... https://masm32.com/board/index.php?board=38.0 (https://masm32.com/board/index.php?board=38.0) It could have been placed there instead possibly.
Shantanu, do you remember the name of the missing attachment??
@shantanu, the attachments were a problem for hutch (too many GB iirc) so they were put into archives under Forum Links, so if you remember the attachment name you should be able to find it.
As for the installer, hutch fought many battles to keep MASM32 free of any kind of licencing and I think we should respect that.
How many people can say that they took on Microsoft and won?
shantanu, does this look like it??
This is #2446 at Archive 2 (https://masm32.com/board/index.php?board=39.0)
And is also attached Here!
SetCompressor /FINAL /SOLID lzma
SetCompressorDictSize 32
!define SW_NAME MASM32
name 'test abc dir'
outfile 'test.exe'
showinstdetails show
InstallDir "C:\MASM32"
DirText "Choose the drive on which you want to install ${SW_NAME}."
section -
Setoutpath '$INSTDIR'
File /r ".\INSTALL\*.*"
sectionend
Function .onVerifyInstDir
;try to COPY 7 letters, should NOT get seven letters!!!
;copy the (expected) letters "MASM32" from the path: X:\MASM32
StrCpy '$R0' '$INSTDIR' 7 3
StrCmp $R0 'MASM32' PathOK
Abort ; if $INSTDIR is not the expected path, don't install there
PathOK:
FunctionEnd
Quote from: sinsi on May 02, 2025, 07:16:35 AMAs for the installer, hutch fought many battles to keep MASM32 free of any kind of licencing and I think we should respect that.
Yes, absotively.
Should be doable with a re-write.
Quote from: NoCforMe on May 02, 2025, 07:36:07 AMQuote from: sinsi on May 02, 2025, 07:16:35 AMAs for the installer, hutch fought many battles to keep MASM32 free of any kind of licencing and I think we should respect that.
Yes, absotively.
Should be doable with a re-write.
+1, I wouldn't want to go against the philosophy of the masm project at all. But I don't see why this wish can't be upheld with a rewrite.
You'll have to forgive the "respected members" here.
They mean well. But they tend to be conservative, which is to say likely to object to anyone who suggests "moving their cheese".
I find that quite annoying, and an impediment to moving forward with the whole MASM package. Which is an incredibly useful thing, worth not only preserving but improving.
But, to use the well-known tautology, it is what it is.
QuoteHutch removed ALL attachments from that forum.
Well, Not completely it would seem, as I Have found the odd attachment there AND there Are still quite a few .zip files referred to in the Attachments Folder on the server with listings in phpMyAdmin as well, .... sadly, not that one obviously :rolleyes:
Quote from: stoo23 on May 02, 2025, 08:13:09 AMQuoteHutch removed ALL attachments from that forum.
Well, Not completely it would seem, as I Have found the odd attachment there AND there Are still quite a few .zip files referred to in the Attachments Folder on the server with listings in phpMyAdmin as well, .... sadly, not that one obviously :rolleyes:
obviously I did not know that, thanks. From what hutch had said in the past, I thought all of them had been removed. I rarely visit the U.K. forum since I was never a member there during its lifespan.
I believe though that I found shantanu's missing attachment... in post #20. It is a sample install script for NSIS. That script though, may not work with a modern version of Nullsofts software. I have no way of testing it, so I cannot confirm.
So how complicated is that installation program really?
Does it really require that scripting language to rewrite it?
Another possibility would be to write it in something besides assembly language, which should sidestep the AV issue.
Someone could write it in (cough, cough), say, C ...
Quote from: NoCforMe on May 02, 2025, 07:59:00 AMYou'll have to forgive the "respected members" here.
They mean well. But they tend to be conservative, which is to say likely to object to anyone who suggests "moving their cheese".
I find that quite annoying, and an impediment to moving forward with the whole MASM package. Which is an incredibly useful thing, worth not only preserving but improving.
But, to use the well-known tautology, it is what it is.
I can't follow the logic here, it seems so contradictory :shrug:
The biggest impediment to both 32 and 64 bit SDKs is translating the Windows SDK header files, specifically equates and structures. The API calls are easy, the .lib files have all the definitions.
Even hutch had problems with the Windows 7 headers (before the win8 UWP crap), he had a program
that could do the basic parsing but still needed to go through
every .inc file to fix it.
install.exe uses 7zWin.sfx v4.23
https://superuser.com/questions/283698/create-7-zip-sfx-executable (https://superuser.com/questions/283698/create-7-zip-sfx-executable)
Making sfx from masm32 folder is easy, but after that have to run those library generating batch-files.
So making masm64 could be easy with 7Zip.
This tiny code extract masm32.7z from install.exe
If someone add a setup.exe to that folder, it can call all those bat-files, what hutch make for making libs.
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
#ifdef USE_MSVCRT
#pragma nodefaultlib
#endif
int __cdecl main(void)
{
HANDLE hFile = CreateFile("install.exe", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (hFile != INVALID_HANDLE_VALUE) {
HANDLE hMapping = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
if (hMapping) {
HANDLE hFile2;
BYTE *pMem = MapViewOfFile(hMapping, FILE_MAP_READ, 0, 0, 0);
if (pMem) {
BYTE *pPtr = pMem + 0x2FA50;
if ((hFile2 = CreateFile("masm32.7z", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
FILE_FLAG_SEQUENTIAL_SCAN, NULL)) != INVALID_HANDLE_VALUE) {
DWORD dwRWCnt;
WriteFile(hFile2, pPtr, 4842572, &dwRWCnt, NULL);
CloseHandle(hFile2);
if (dwRWCnt)
printf("masm32.7z written %d bytes\n", dwRWCnt);
}
UnmapViewOfFile(pMem);
} else
printf("File open error");
CloseHandle(hMapping);
} else
printf("FileMapping error");
CloseHandle(hFile);
} else
printf("File open error");
return 0;
}
Hi Timo,
Thanks. To generate a SFX archive is easy, a typical approach is :
copy /b SFXstub.exe + archive.7z Installer.exe
7Zip can make installer from folder, like links #6 message tell.
Just select Create SFX archive
Have to do more tests, if it search setup.exe from archive folder.
Quote from: sinsi on May 02, 2025, 03:58:39 PMThe biggest impediment to both 32 and 64 bit SDKs is translating the Windows SDK header files, specifically equates and structures. The API calls are easy, the .lib files have all the definitions.
Yes, certainly in the case of the 64-bit package.
But despite the problems you mentioned, the MASM32 package is in pretty good shape.
It's true that there's stuff missing from the include files, as I've discovered over the years through my own programming. I've actually collected a good number of missing items myself and put them in my own files. Sure, it would be nice to bring it up to date at some point.
But it's still a very usable tool for programming as-is.
Can't say the same for the 64-bit package, but since I don't use it, I leave that to others.
Quote from: sinsi on May 02, 2025, 03:58:39 PMThe biggest impediment to both 32 and 64 bit SDKs is translating the Windows SDK header files, specifically equates and structures. The API calls are easy, the .lib files have all the definitions.
You don't have to do this now. MS publish a C# dll (https://www.nuget.org/packages/Microsoft.Windows.SDK.Win32Metadata/63.0.31-preview) that contains the SDK functions, types, constants etc as metadata you can parse. The point being that C# has built-in support for examining net code with reflection so you can use the normal C# functions to parse out the SDK bits instead of having to build half a custom C++ compiler.
The good news is that I've already done most of the hard work (https://github.com/adeyblue/FBWinHeaderGen) parsing it to produce modern headers/lib package for FreeBasic and, since parsing it is language agnostic, producing an inc/lib set for different languages is in theory as simple as just changing FileOutput.cs to write out what structs, functions, enums, interfaces etc look like in your language.
The bad news is:
- Well, it's written in C#, so you have to know C# to modify it. I use fasm not masm and I don't use asm enough to justify spending the time on it
- The organisation isn't like the SDK. Instead of things like winnt.h or winuser.h, things are in arbitrary namespaces like ui.windowsandmessaging and media.audio.directsound. Of course, if you're writing the output files you can put things in whatever files you want, but that's extra organising you'd need to organise.
Most of the complexity in FileOutput.cs is because FreeBasic is like C and you can't use a type before it is defined and things are spread out over 300+ namespaces, so work goes into checking if this thing needs to be forward declared or if this other header needs to be included or not first. If an asm generator made all params and members dword or qword, you don't need any of that gubbins and it'd be much simpler
That's nice, I'm sure, but it sounds like a fair amount of work to adapt it to the MASM32 package.
We need a solution that's more native to MASM, not cobbled together out of a C# DLL plus designed for a non-MASM assembler.
@adeyblue
It would be nice, if those things can be compiled without VS, as Windows have csc compiler in Windows folder.
Once i had to test it with my special normal Win32 dll, as user wanted to use it in C# program.
Hopefully soon back in actual topic issue.
@adeyblue, that looks very useful. If I can follow the code and figure out which lists store what it should be easy enough to output an ASM .inc file (haha).
Definitely food for thought :thumbsup:
Still off-topic but that Win32 metadata looks very interesting indeed.
Using ILDASM.EXE from VS, here is some of the contents
.method public hidebysig static pinvokeimpl("KERNEL32.dll" nomangle lasterr winapi)
valuetype Windows.Win32.Foundation.HANDLE
CreateFileMappingA([in] valuetype Windows.Win32.Foundation.HANDLE hFile,
[in][opt] valuetype Windows.Win32.Security.SECURITY_ATTRIBUTES* lpFileMappingAttributes,
[in] valuetype Windows.Win32.System.Memory.PAGE_PROTECTION_FLAGS flProtect,
[in] uint32 dwMaximumSizeHigh,
[in] uint32 dwMaximumSizeLow,
[in][opt] valuetype Windows.Win32.Foundation.PSTR lpName) cil managed
{
.custom instance void Windows.Win32.Foundation.Metadata.SupportedOSPlatformAttribute::.ctor(string) = ( 01 00 0F 77 69 6E 64 6F 77 73 35 2E 31 2E 32 36 // ...windows5.1.26
30 30 00 00 ) // 00..
.custom instance void Windows.Win32.Foundation.Metadata.AnsiAttribute::.ctor() = ( 01 00 00 00 )
.custom instance void Windows.Win32.Foundation.Metadata.DocumentationAttribute::.ctor(string) = ( 01 00 53 68 74 74 70 73 3A 2F 2F 6C 65 61 72 6E // ..Shttps://learn
2E 6D 69 63 72 6F 73 6F 66 74 2E 63 6F 6D 2F 77 // .microsoft.com/w
69 6E 64 6F 77 73 2F 77 69 6E 33 32 2F 61 70 69 // indows/win32/api
2F 77 69 6E 62 61 73 65 2F 6E 66 2D 77 69 6E 62 // /winbase/nf-winb
61 73 65 2D 63 72 65 61 74 65 66 69 6C 65 6D 61 // ase-createfilema
70 70 69 6E 67 61 00 00 ) // ppinga..
.param [6]
.custom instance void Windows.Win32.Foundation.Metadata.ConstAttribute::.ctor() = ( 01 00 00 00 )
}
.method public hidebysig static pinvokeimpl("KERNEL32.dll" nomangle lasterr winapi)
valuetype Windows.Win32.Foundation.HANDLE
CreateFileMappingW([in] valuetype Windows.Win32.Foundation.HANDLE hFile,
[in][opt] valuetype Windows.Win32.Security.SECURITY_ATTRIBUTES* lpFileMappingAttributes,
[in] valuetype Windows.Win32.System.Memory.PAGE_PROTECTION_FLAGS flProtect,
[in] uint32 dwMaximumSizeHigh,
[in] uint32 dwMaximumSizeLow,
[in][opt] valuetype Windows.Win32.Foundation.PWSTR lpName) cil managed
{
.custom instance void Windows.Win32.Foundation.Metadata.SupportedOSPlatformAttribute::.ctor(string) = ( 01 00 0F 77 69 6E 64 6F 77 73 35 2E 31 2E 32 36 // ...windows5.1.26
30 30 00 00 ) // 00..
.custom instance void Windows.Win32.Foundation.Metadata.UnicodeAttribute::.ctor() = ( 01 00 00 00 )
.custom instance void Windows.Win32.Foundation.Metadata.DocumentationAttribute::.ctor(string) = ( 01 00 57 68 74 74 70 73 3A 2F 2F 6C 65 61 72 6E // ..Whttps://learn
2E 6D 69 63 72 6F 73 6F 66 74 2E 63 6F 6D 2F 77 // .microsoft.com/w
69 6E 64 6F 77 73 2F 77 69 6E 33 32 2F 61 70 69 // indows/win32/api
2F 6D 65 6D 6F 72 79 61 70 69 2F 6E 66 2D 6D 65 // /memoryapi/nf-me
6D 6F 72 79 61 70 69 2D 63 72 65 61 74 65 66 69 // moryapi-createfi
6C 65 6D 61 70 70 69 6E 67 77 00 00 ) // lemappingw..
.param [6]
.custom instance void Windows.Win32.Foundation.Metadata.ConstAttribute::.ctor() = ( 01 00 00 00 )
}
Parameter names, types, and count, whether it is Ansi or Wide, it even has a link to the MS help page.