int main (int argc, char *argv[]) { ProgramExitStatus exitStatus = PROG_EXIT_SUCCESS; { static const OptionsDescriptor descriptor = { OPTION_TABLE(programOptions), .applicationName = "ktbtest", .argumentsSummary = "key-table" }; PROCESS_OPTIONS(descriptor, argc, argv); } { char **const paths[] = { &opt_driversDirectory, &opt_tablesDirectory, NULL }; fixInstallPaths(paths); } if (argc) { const char *keyTableName = (argc--, *argv++); char *keyTablePath = makeKeyTablePath(opt_tablesDirectory, keyTableName); if (keyTablePath) { KEY_NAME_TABLES_REFERENCE keyNameTables; { const char *file = locatePathName(keyTablePath); size_t length = strrchr(file, '.') - file; char name[length + 1]; memcpy(name, file, length); name[length] = 0; keyNameTables = getKeyNameTables(name); } if (keyNameTables) { if (opt_listKeyNames) if (!listKeyNames(keyNameTables, listLine, NULL)) exitStatus = PROG_EXIT_FATAL; if (exitStatus == PROG_EXIT_SUCCESS) { KeyTable *keyTable = compileKeyTable(keyTablePath, keyNameTables); if (keyTable) { if (opt_listKeyTable) if (!listKeyTable(keyTable, listLine, NULL)) exitStatus = PROG_EXIT_FATAL; destroyKeyTable(keyTable); } else { exitStatus = PROG_EXIT_FATAL; } } } else { exitStatus = PROG_EXIT_FATAL; } free(keyTablePath); } else { exitStatus = PROG_EXIT_FATAL; } } else { logMessage(LOG_ERR, "missing key table name"); exitStatus = PROG_EXIT_SYNTAX; } return exitStatus; }
int main (int argc, char *argv[]) { ProgramExitStatus exitStatus = PROG_EXIT_SUCCESS; { static const OptionsDescriptor descriptor = { OPTION_TABLE(programOptions), .applicationName = "brltty-ktb", .argumentsSummary = "key-table" }; PROCESS_OPTIONS(descriptor, argc, argv); } driverObject = NULL; if (argc) { const char *tableName = (argc--, *argv++); KeyTableDescriptor ktd; int gotKeyTableDescriptor; { const char *file = locatePathName(tableName); const char *delimiter = strrchr(file, '.'); size_t length = delimiter? (delimiter - file): strlen(file); char name[length + 1]; memcpy(name, file, length); name[length] = 0; gotKeyTableDescriptor = getKeyTableDescriptor(&ktd, name); } if (gotKeyTableDescriptor) { if (opt_listKeyNames) { if (!listKeyNames(ktd.names, hlpWriteLine, NULL)) { exitStatus = PROG_EXIT_FATAL; } } if (exitStatus == PROG_EXIT_SUCCESS) { KeyTable *keyTable = compileKeyTable(ktd.path, ktd.names); if (keyTable) { if (opt_audit) { if (!auditKeyTable(keyTable, ktd.path)) { exitStatus = PROG_EXIT_FATAL; } } if (opt_listHelpScreen) { if (!listKeyTable(keyTable, NULL, hlpWriteLine, NULL)) { exitStatus = PROG_EXIT_FATAL; } } if (opt_listRestructuredText) { RestructuredTextData rst = { .headerLevel = 0, .elementLevel = 0, .elementBullet = WC_C(' '), .blankLine = 0 }; if (!listKeyTable(keyTable, &rstMethods, rstWriteLine, &rst)) { exitStatus = PROG_EXIT_FATAL; } } destroyKeyTable(keyTable); } else { exitStatus = PROG_EXIT_FATAL; } } free(ktd.path); } else {