Bad idea: build a captcha library that embeds DOSBox so it can make you beat levels/puzzles from DOS games to continue.
-
Foone🏳️⚧️replied to Foone🏳️⚧️ last edited by [email protected]
I figured out the hypothetical 4-argument strcmp:
it's a locale-specific strnnicmp.That's stricmp (compare insensitively) and also strncmp (compare only the first n characters), but with TWO LENGTHS! Why? To compare two strings of different lengths, case-insensitively.
-
and you might say "why would you compare two strings you know are of different lengths, of course they're not equal"
Well, if the compare is case insensitive, they might still match... in a german locale!
-
To greatly oversimplify, the german letter "ß" is lowercase, and in uppercase you write it "SS".
So if you have two strings, one reading "straße" and one reading "STRASSE", they are different lengths (6 vs 7), but case insensitively comparing them should return a match.
-
Try it out on your local javascript console:
>> "Straße".length
6
>> "Straße".toUpperCase().length
7 -
so yeah hypothetically if you had a version of stricmp that was strncmp and compared two strings of different length, this might still be a match, if your locale treated the German Eszett this way.
-
enough writing about FICTIONAL C LIBRARY FUNCTIONS, what the hell writing brain, let's get back to reverse engineering
-
someone should write a fictional programming library reference book.
like, fit enough interesting ideas in about what the fictional world needs functions for, worldbuild in the cracks, but stay clearly still a dry list of man pages?
-
@foone Once upon a time, eszett was a lowercase-only letter, and supposed to become SS when upcased.
But then, Unicode happened, and now there's an uppercase eszett.
1E9E;LATIN CAPITAL LETTER SHARP S;Lu;0;L;;;;;N;;;;00DF;
-
@foone huh, it'd fit right in with the debugging simulator / mystery game I'm totally going to make one day in my copious free time
-
@clayote lemme know if you do (or just wanna share your ideas), it sounds exactly up my alley!
-
writer-brain grabs the mic:
C'S MEMORY HANDLING IS SO BAD IT CAN BE EXPLOITED BY THE GERMAN LANGUAGE ITSELF -
@foone The idea is that a fictionalized version of the Hans Reiser murder happened, and to find out who the killer is, and why they did it, and where the body is, you have to reverse engineer his "home automation" software that kills people. To do this, you use something much like Ghidra, or probably closer to a scripting language's debugger for playability's sake, and have to red-team his underhanded murder code to find out which totally innocuous functions aren't.
-
@clayote that sounds awesome!
-
@foone Germany also considers
ch
andsch
to be ligatures, so there's distinct code points for them (and fortz
andts
), and yet they miight need to be considered equal with the common form where each letter is encoded distinctly.And there's a telegraph convention of representing the umlaut as a separate
E
, so München becomesMUENCHEN
(mind thech
!) and Köln bcomesKOELN
This was adopted from a so-old-it-was-mediæval scribal practice, from before umlauts were invented, of marking what would eventually be umlaut by writing a small 'e' atop the base letter. Which, curiously, Unicode doesn't appear to support.
-
the funniest part? I'm back in reverse engineering mode.
it's not even a 3-argument version of strcmp. it's just a weird strcmp(char*,char*): It only takes two arguments! not even three!
-
how do you confuse a two-argument function for a FOUR argument function?
borland. borland is how you do that.
-
DirectSound?!
this windows 3.x-ass program uses DirectX?!
-
@foone was this windows 3.x-ass program written by copilot?
-
@onelson It's been stuck on a CD-ROM since 1997, so NOPE
-
haha, 1991-1997 programmer: you made the LoadDirectSoundFuncptrs return a 0 for success, but you only ever return 0. your code smells with your bad decisions, which I can see THROUGH TIME from 30 years later