dropping and reordering variables, make them read full cases and
let the caller take care of any changes.
Instead of providing a system or portable file writer with a raw
case in the format needed for output, provide it with a regular
case. The writer takes care of any needed translation.
Instead of treating `struct file_handle' as a class to subclass
into data files, system files, and portable files, instead use it
as a helper that coordinates access. Now it is opaque, too.
Break dictionary functions into separate header file.
Get rid of procedure-specific union in struct variable, using
instead a void * pointer and a destructor function.