The easiest solution is probably for Quickfort to read DF's interface.txt to discover these bindings. Though that could get a bit tricky since some players run multiple versions of DF on the same box, between which keybindings might vary.
...uh...that doesn't seem easier at all :-| but then, I don't know your codebase.
If you're referring just to reading DF's own interface.txt -- as opposed to, say, QF having its own copy of said file and parsing that -- then you are probably right. Using a QF-local version makes the most sense, while offering the user the ability to specify a different location for the file via a command line argument.
If you're talking about parsing interface.txt at all, well, it's just because in order to produce an output using DF macro syntax, I need to know what to convert the keystroke commands from the CSV files into.
For example, this is taken from interface.txt in 40d16:
[BIND:DESIGNATE_DIG]
[KEY:d]
If a CSV blueprint contains cells with "d" commands in them, then I need to produce an output that looks something like this:
[BIND:MACRO1]
[SYM:F7]
[MACRO:DESIGNATE_DIG:1]
So, how should I determine that "d" cells in the CSV blueprint correspond to the "DESIGNATE_DIG" label on the output side? Somehow, I need to have a mapping of keys to macro command labels. This mapping is essentially what interface.txt contains.
The alternative would be to hand-code all the mappings. Compared to that, I think it'll be much simpler to just create an interface.txt parser, along with some special logic to handle multikey commands, e.g. "wu" to create a butcher's workshop (HOTKEY_BUILDING_WORKSHOP, HOTKEY_BUILDING_WORKSHOP_BUTCHER).
Note that the seemingly simpler alternative of sending the keystrokes straight through as [MACRO:STRING_...] commands does not work as one might like. It would be cool if this worked for "d" blueprint commands:
[MACRO:STRING_A100:1] # decimal 100 = ASCII 'd'
Unfortunately this doesn't work; the STRING_ macro commands seem to be reserved exclusively for spots in the UI that actually take text input (e.g. naming stuff).
If there is a simpler alternative and I've just missed it do let me know