Thread with 45 posts

jump to expanded post

everyone who's ever used WINE has seen this little box that pops up while it's creating or updating the wineprefix. this is drawn by wineboot.exe, which makes sense.

anyway how does it do the actual prefix setup? by executing an honest-to-god .inf file!!! https://gitlab.winehq.org/wine/wine/-/blob/master/loader/wine.inf.in

Open thread at this post

on Windows 10 this INF file creates a start menu entry, but the space becomes an underscore ^^;

[version]
signature=$chicago$
[DefaultInstall]
UpdateInis=AddLink
[AddLink]
setup.ini,progman.groups,,"group1=""Test Group"""
setup.ini,group1,,"""Shortcut Name"",""%11%\notepad.exe""
Open thread at this post

ah, WINE is cheeky and most DLLs it ships with are “fake”, with it instead loading code from host binaries. what's fun is that you can't just swap out those DLLs, because WINE always assumes they are fake and won't load them. you have to set WINEDLLOVERRIDES to make that work

Open thread at this post

so I've been trying to get WINE to copy ReactOS's mspaint.exe into the wineprefix's system32. wine.inf has a wildcard that copies any exe files in /usr/lib/wine/x86_64-windows into system32, but that skips ones without a special signature in the DOS stub! so I'm using CopyFiles

Open thread at this post

so on Windows, file types, extensions and associations are defined in the registry in HKEY_CLASSES_ROOT, e.g.

[HKEY_CLASSES_ROOT\.bmp]
@="Paint.Picture"
[HKEY_CLASSES_ROOT\Paint.Picture]
@="Bitmap Image"
[HKEY_CLASSES_ROOT\Paint.Picture\shell\edit\command]
@="mspaint.exe \"%1\""
Open thread at this post

filetypes can have an icon, often from an exe/dll, e.g.

[HKEY_CLASSES_ROOT\txtfile\DefaultIcon]
@="notepad.exe"

but what about the exe file type… those have their own icons, are they special-cased?

[HKEY_CLASSES_ROOT\exefile\DefaultIcon]
@="%1"

nope! string interpolation! :3

Open thread at this post

I tried the creating-shortcuts-with-an-INF-file trick on Windows 95!

  • It brings up the “Updating Shortcuts” window we remember from the first boot after installing Windows 95!
  • It creates a setup.old file, presumably renamed from setup.ini after execution!
  • No underscores! :)
Open thread at this post

then I discovered that, with a fresh install of Win95, there's a setup.old file with a bizarre mess of entries, many with no target for the shortcut, only a name. I thought it might be leftover developer mess, but it turns out name-only lines remove shortcuts: upgrade cleanup!

Open thread at this post

ahh, writing C89 code dealing with the Windows API… it's been so long since we've done serious C programming, we've really missed this. genuinely. it's like coming home…

gotta love some DWORDs and WCHARs and a SetupGetLineTextW( &context, NULL, NULL, NULL, NULL, 0, &size )

Open thread at this post

…and it is already supported by WINE, so we don't even have to patch WINE's implementation of setupapi, we can get straight to adding the shortcuts! Software development sometimes looks like wasting a lot of time on unnecessary work, missing a solution right under your nose.

Open thread at this post

Using git-worktree for the first time in our life… we're doing our WINE development on top of master, but the released versions of loss32 will be based off WINE stable, and so we'd like to avoid rebuilding everything when we switch branch. Can't believe we never used it before…

Open thread at this post
the esoteric programmer , @esoteric_programmer@social.stealthy.club
(open profile)

@hikari now I wonder how wine dlls which connect to native code are made and if I can, somehow, not write them in C, because knowing how those UIA things work kinda, which is definitely something few people know even exists, we could translate windows accessibility calls properly to at-spi, instead of relying on an installed nvda which can't read its own shortcuts because wine has weird ideas about global shortcuts and the like

Open remote post (opens in a new window)
the esoteric programmer , @esoteric_programmer@social.stealthy.club
(open profile)

@hikari yeah, I tried, and last time I got hit by abstractions, like I'm compiling for x86_64-pc-windows-gnu or something, so then the unix things aren't available because of course they wouldn't on windows. That's pretty much where the blocker is now, the rest is relatively not mind-breakingly hard from what I know, but I wasn't able to progress past that point, so yeah, bummer :p

Open remote post (opens in a new window)
the esoteric programmer , @esoteric_programmer@social.stealthy.club
(open profile)

@hikari but yeah, maybe you can include a windows screenreader in your project and see how much of the issues are simply because we don't run wine with a full windows desktop like thing? for example, when I tried to run nvda with a normal wine prefix, it reads some things, but any attempt to use its keyboard shortcuts fails

Open remote post (opens in a new window)
Moses Izumi , @moses_izumi@fe.disroot.org
(open profile)
@hikari
Yeah, shipping a full-blown Win32 development (and reverse-engineering) toolchain with your desktop environment would be neat.

Encouraging casual users to pick up programming, let alone compile software from scratch, is one of those things that the "friendly GUI-centric Linux distro" scene hasn't really bothered with.

[I'm just some guy who used to write simple ZDoom mods]
Open remote post (opens in a new window)