Blog index

Below are a collection of likely nerdy topics that have been stuck in my head for a few years, dumped here for posterity. As a long time Windows developer, topics might reflect that bias.

C/C++ 7.0 add on for OS/2
Although intended as an add-on, it's still a complete compiler (06 Jan 2024)
zdir - an OS/2 Family sdir
Rewriting my favorite tool into a hybrid 16 bit DOS-OS/2 program (20 Sep 2023)
A C runtime for Visual C++ to target OS/2
Recycling minicrt into a 16 bit environment (19 Sep 2023)
Making OS/2 family programs with Visual C++
Visual C++ doesn't help you write OS/2 programs, but won't stop you either (18 Sep 2023)
Making nice UI on NT 3.1 and above
The subsystem version controls the appearance, but the subsystem version can be controlled (13 Sep 2023)
Buffer overflows using NT 3.1
Strange bugs that are visible with a debug memory allocator (05 Aug 2023)
Why make (and ymake)
Improving execution speed of an almost traditional syntax (07 May 2021)
GetDiskFreeSpace used to require a volume root
GetDiskFreeSpace made sense at the time, but don't use it now (28 Jul 2017)
NT 3.51 attempts to run 4.0 applications
NT 3.51 was the current release of NT when Windows 95 shipped, so it always tries to run Windows 95 (4.0) applications (23 Jul 2017)
Clang/LLVM system requirements for Windows
The reason finding system requirements for Clang is hard is because it's a hard question to answer (16 Jul 2017)
Visual C++ 6 linking for NT 3.1
Visual C++ 6 could target NT 3.1, but the linker has some strange quirks (27 May 2017)
Being native Windows and OS/2
Windows Libraries for OS/2 was impressive technology, even if relatively unknown (12 May 2017)
Marking NE binaries compatible
Sometimes binaries need to declare support for a new thing and work on an old thing (07 May 2017)
Using \\?\ to exceed MAX_PATH
MAX_PATH is an outdated limit that's not needed on any recent version of Windows, but there's a key piece missing to eradicate it (26 Mar 2017)
\\?\ is what you want, despite ugliness
Many people use \\?\ to overcome MAX_PATH, but it really should be used anyway (17 Mar 2017)
Implementing Autoconf in NMAKE
NMAKE is the most primitive make still in existence but it has a powerful hidden primitive (11 Mar 2017)
A visual history of Visual C++
A catalog of the versions of Visual C++ over the years with screenshots (04 Mar 2017)
A good compiler with bad defaults
Visual C++ 6 is a venerable piece of code, but changing defaults left a bad first impression (01 Mar 2017)
Patching closed software for beginners
Without source code, programs can be debugged and altered. (25 Feb 2017)
Shimming real software
Without source code, real programs can be made to work on old versions of Windows. (22 Feb 2017)
Import table shimming
Without source code, many function dependencies can be shimmed. (20 Feb 2017)
Import table reductions with minicrt
With source code, many function dependencies can be removed. (18 Feb 2017)
Import table dependencies
Programs can depend on functions that aren't available and won't work. (16 Feb 2017)
PE subsystem version field, part 2
The PE subsystem version determines if programs will work. (14 Feb 2017)
PE subsystem version
The PE subsystem version changes how programs are displayed. (12 Feb 2017)