syncfiles/src/convert.c
Dietrich Epp c96bb9cd0a Implement extended ASCII converter engine
This adds support for the simplest 8-bit character encodings, which are
compatible with ASCII.
2022-03-23 01:26:25 -04:00

39 lines
873 B
C

#include "src/convert.h"
struct ConvertEngine {
ConvertBuildf build;
ConvertRunf run;
};
const struct ConvertEngine kEngines[][2] = {
{{Convert1fBuild, Convert1fRun}, {Convert1rBuild, Convert1rRun}}};
int ConverterBuild(struct Converter *c, Handle data, Size datasz,
ConvertDirection direction, OSErr *errp)
{
int engine, r;
const struct ConvertEngine *funcs;
Handle out;
if (datasz == 0) {
return kErrorBadData;
}
engine = (UInt8) * *data - 1;
if (engine < 0 || (int)(sizeof(kEngines) / sizeof(*kEngines)) <= engine) {
/* Invalid engine. */
return kErrorBadData;
}
funcs = &kEngines[engine][direction];
if (funcs->build == NULL || funcs->run == NULL) {
/* Invalid engine. */
return kErrorBadData;
}
r = funcs->build(&out, data, datasz, errp);
if (r != 0) {
return r;
}
c->data = out;
c->run = funcs->run;
return 0;
}