The specified font is selected by storing a function pointer to the font-rendering
function in the optr variable.
Once that's done, it's a simple matter of storing the function pointer into a
new field (called render) within the OCB:

Then, in io_read(), we replaced the hard-coded call to render_7segment():

render_7segment (string, input, optx, opty);

with a call through the OCB's new pointer:

(*ocb -> render) (string, input, optx, opty);

Fairly painless.
Of course, we needed to create a new font and font-rendering module, which probably took more
time to do than the actual modifications.
See the source in 8x8.c for the details of the new font.