diff --git a/src/common/commandoption.c b/src/common/commandoption.c index 80ddcb923..727292fa2 100644 --- a/src/common/commandoption.c +++ b/src/common/commandoption.c @@ -1,6 +1,7 @@ #include "commandoption.h" #include "common/printing.h" #include "common/time.h" +#include "common/jsonconfig.h" #include "fastfetch_datatext.h" #include "modules/modules.h" #include "util/stringUtils.h" @@ -8,7 +9,27 @@ #include #include -static inline yyjson_mut_val* genJson(FFModuleBaseInfo* baseInfo) +static inline yyjson_mut_val* genJsonConfig(FFModuleBaseInfo* baseInfo) +{ + yyjson_mut_doc* doc = instance.state.migrateConfigDoc; + if (__builtin_expect(!doc, true)) return NULL; + + yyjson_mut_val* modules = yyjson_mut_obj_get(doc->root, "modules"); + if (!modules) + modules = yyjson_mut_obj_add_arr(doc, doc->root, "modules"); + + yyjson_mut_val* module = yyjson_mut_arr_add_obj(doc, modules); + FF_STRBUF_AUTO_DESTROY type = ffStrbufCreateS(baseInfo->name); + ffStrbufLowerCase(&type); + yyjson_mut_obj_add_strbuf(doc, module, "type", &type); + + if (baseInfo->generateJsonConfig) + baseInfo->generateJsonConfig(baseInfo, doc, module); + + return module; +} + +static inline yyjson_mut_val* genJsonResult(FFModuleBaseInfo* baseInfo) { yyjson_mut_doc* doc = instance.state.resultDoc; if (__builtin_expect(!doc, true)) return NULL; @@ -31,7 +52,7 @@ bool ffParseModuleCommand(const char* type) FFModuleBaseInfo* baseInfo = *modules; if (ffStrEqualsIgnCase(type, baseInfo->name)) { - if (!genJson(baseInfo)) + if (!genJsonConfig(baseInfo) && !genJsonResult(baseInfo)) baseInfo->printModule(baseInfo); return true; } @@ -88,7 +109,7 @@ static void parseStructureCommand(const char* line, FFlist* customValues) if (customValue->printKey) ffStrbufAppend(&options.moduleArgs.key, &customValue->key); ffStrbufAppend(&options.moduleArgs.outputFormat, &customValue->value); - ffPrintCustom(&options); + if (!genJsonConfig((FFModuleBaseInfo*) &options)) ffPrintCustom(&options); return; } } @@ -135,9 +156,19 @@ void ffPrintCommandOption(FFdata* data) } #if defined(_WIN32) - if (!instance.config.noBuffer) fflush(stdout); + if (!resultDoc && !instance.config.noBuffer) fflush(stdout); #endif startIndex = colonIndex + 1; } } + +void ffMigrateCommandOptionToJsonc(FFdata* data) +{ + //If we don't have a custom structure, use the default one + if(data->structure.length == 0) + ffStrbufAppendS(&data->structure, FASTFETCH_DATATEXT_STRUCTURE); + instance.config.stat = false; + ffPrintCommandOption(data); + yyjson_mut_write_fp(stdout, instance.state.migrateConfigDoc, YYJSON_WRITE_INF_AND_NAN_AS_NULL | YYJSON_WRITE_PRETTY_TWO_SPACES, NULL, NULL); +} diff --git a/src/common/commandoption.h b/src/common/commandoption.h index c938fe2a8..1c9ed9721 100644 --- a/src/common/commandoption.h +++ b/src/common/commandoption.h @@ -24,5 +24,6 @@ bool ffParseModuleCommand(const char* type); bool ffParseModuleOptions(const char* key, const char* value); void ffPrepareCommandOption(FFdata* data); void ffPrintCommandOption(FFdata* data); +void ffMigrateCommandOptionToJsonc(FFdata* data); #endif diff --git a/src/common/init.c b/src/common/init.c index eab996eaa..bfabc8129 100644 --- a/src/common/init.c +++ b/src/common/init.c @@ -381,6 +381,7 @@ static void destroyState(void) ffPlatformDestroy(&instance.state.platform); yyjson_doc_free(instance.state.configDoc); yyjson_mut_doc_free(instance.state.resultDoc); + yyjson_mut_doc_free(instance.state.migrateConfigDoc); } void ffDestroyInstance(void) diff --git a/src/common/jsonconfig.c b/src/common/jsonconfig.c index 6e13334d5..0c1fdc1e5 100644 --- a/src/common/jsonconfig.c +++ b/src/common/jsonconfig.c @@ -35,6 +35,18 @@ bool ffJsonConfigParseModuleArgs(const char* key, yyjson_val* val, FFModuleArgs* return false; } +void ffJsonConfigGenerateModuleArgsConfig(yyjson_mut_doc* doc, yyjson_mut_val* module, FFModuleArgs* defaultModuleArgs, FFModuleArgs* moduleArgs) +{ + if (!ffStrbufEqual(&defaultModuleArgs->key, &moduleArgs->key)) + yyjson_mut_obj_add_strbuf(doc, module, "key", &moduleArgs->key); + if (!ffStrbufEqual(&defaultModuleArgs->outputFormat, &moduleArgs->outputFormat)) + yyjson_mut_obj_add_strbuf(doc, module, "format", &moduleArgs->outputFormat); + if (!ffStrbufEqual(&defaultModuleArgs->keyColor, &moduleArgs->keyColor)) + yyjson_mut_obj_add_strbuf(doc, module, "keyColor", &moduleArgs->keyColor); + if (moduleArgs->keyWidth != defaultModuleArgs->keyWidth) + yyjson_mut_obj_add_uint(doc, module, "keyWidth", moduleArgs->keyWidth); +} + const char* ffJsonConfigParseEnum(yyjson_val* val, int* result, FFKeyValuePair pairs[]) { if (yyjson_is_int(val)) diff --git a/src/common/jsonconfig.h b/src/common/jsonconfig.h index afb0fd865..b7824cdd0 100644 --- a/src/common/jsonconfig.h +++ b/src/common/jsonconfig.h @@ -8,6 +8,7 @@ void ffPrintJsonConfig(bool prepare); const char* ffParseGeneralJsonConfig(void); const char* ffParseDisplayJsonConfig(void); const char* ffParseLibraryJsonConfig(void); +void ffJsonConfigGenerateModuleArgsConfig(yyjson_mut_doc* doc, yyjson_mut_val* module, FFModuleArgs* defaultModuleArgs, FFModuleArgs* moduleArgs); yyjson_api_inline bool yyjson_mut_obj_add_strbuf(yyjson_mut_doc *doc, yyjson_mut_val *obj, diff --git a/src/common/option.h b/src/common/option.h index 3207e576d..401f7a33b 100644 --- a/src/common/option.h +++ b/src/common/option.h @@ -19,6 +19,7 @@ typedef struct FFModuleBaseInfo void (*printModule)(void* options); void (*generateJsonResult)(void* options, struct yyjson_mut_doc* doc, struct yyjson_mut_val* module); void (*printHelpFormat)(void); + void (*generateJsonConfig)(void* options, struct yyjson_mut_doc* doc, struct yyjson_mut_val* obj); } FFModuleBaseInfo; static inline void ffOptionInitModuleBaseInfo( @@ -28,7 +29,8 @@ static inline void ffOptionInitModuleBaseInfo( void* parseJsonObject, // void (*const parseJsonObject)(void* options, yyjson_val *module) void* printModule, // void (*const printModule)(void* options) void* generateJsonResult, // void (*const generateJsonResult)(void* options, yyjson_mut_doc* doc, yyjson_mut_val* obj) - void (*printHelpFormat)(void) + void (*printHelpFormat)(void), + void* generateJsonConfig // void (*const generateJsonConfig)(void* options, yyjson_mut_doc* doc, yyjson_mut_val* obj) ) { baseInfo->name = name; @@ -37,6 +39,7 @@ static inline void ffOptionInitModuleBaseInfo( baseInfo->printModule = (__typeof__(baseInfo->printModule)) printModule; baseInfo->generateJsonResult = (__typeof__(baseInfo->generateJsonResult)) generateJsonResult; baseInfo->printHelpFormat = printHelpFormat; + baseInfo->generateJsonConfig = (__typeof__(baseInfo->generateJsonConfig)) generateJsonConfig; } typedef struct FFModuleArgs diff --git a/src/fastfetch.c b/src/fastfetch.c index 2268822b0..48b5431ca 100644 --- a/src/fastfetch.c +++ b/src/fastfetch.c @@ -481,6 +481,26 @@ static void parseOption(FFdata* data, const char* key, const char* value) generateConfigFile(false, value); else if(ffStrEqualsIgnCase(key, "--gen-config-force")) generateConfigFile(true, value); + else if (ffStrEqualsIgnCase(key, "--migrate-config")) + { + yyjson_mut_doc_free(instance.state.migrateConfigDoc); + + if (ffOptionParseBoolean(value)) + { + if (instance.state.configDoc) + { + fputs("Error: existing jsonc config file detected. Exiting\n", stderr); + exit(477); + } + + yyjson_mut_doc* doc = instance.state.migrateConfigDoc = yyjson_mut_doc_new(NULL); + yyjson_mut_val* root = yyjson_mut_obj(doc); + yyjson_mut_doc_set_root(doc, root); + yyjson_mut_obj_add_str(doc, root, "$schema", "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json"); + } + else + instance.state.migrateConfigDoc = NULL; + } else if(ffStrEqualsIgnCase(key, "--thread") || ffStrEqualsIgnCase(key, "--multithreading")) instance.config.multithreading = ffOptionParseBoolean(value); else if(ffStrEqualsIgnCase(key, "--stat")) @@ -719,20 +739,22 @@ error: static void parseConfigFiles(FFdata* data) { - for(uint32_t i = instance.state.platform.configDirs.length; i > 0; --i) + if (__builtin_expect(!instance.state.migrateConfigDoc, true)) { - FFstrbuf* dir = ffListGet(&instance.state.platform.configDirs, i - 1); - uint32_t dirLength = dir->length; + for (uint32_t i = instance.state.platform.configDirs.length; i > 0; --i) + { + FFstrbuf* dir = ffListGet(&instance.state.platform.configDirs, i - 1); + uint32_t dirLength = dir->length; - ffStrbufAppendS(dir, "fastfetch/config.jsonc"); - bool success = parseJsoncFile(dir->chars); - ffStrbufSubstrBefore(dir, dirLength); - if (success) return; + ffStrbufAppendS(dir, "fastfetch/config.jsonc"); + bool success = parseJsoncFile(dir->chars); + ffStrbufSubstrBefore(dir, dirLength); + if (success) return; + } } - - for(uint32_t i = instance.state.platform.configDirs.length; i > 0; --i) + for (uint32_t i = instance.state.platform.configDirs.length; i > 0; --i) { - if(!data->loadUserConfig) + if (!data->loadUserConfig) return; FFstrbuf* dir = ffListGet(&instance.state.platform.configDirs, i - 1); @@ -773,20 +795,8 @@ static void parseArguments(FFdata* data, int argc, const char** argv) } } -int main(int argc, const char** argv) +static void ffRun(FFdata* data) { - ffInitInstance(); - - //Data stores things only needed for the configuration of fastfetch - FFdata data; - ffStrbufInit(&data.structure); - ffListInit(&data.customValues, sizeof(FFCustomValue)); - data.loadUserConfig = true; - - if(!getenv("NO_CONFIG")) - parseConfigFiles(&data); - parseArguments(&data, argc, argv); - if (instance.state.configDoc) { const char* error = NULL; @@ -803,12 +813,12 @@ int main(int argc, const char** argv) } } - const bool useJsonConfig = data.structure.length == 0 && instance.state.configDoc; + const bool useJsonConfig = data->structure.length == 0 && instance.state.configDoc; - if(useJsonConfig) + if (useJsonConfig) ffPrintJsonConfig(true /* prepare */); else - ffPrepareCommandOption(&data); + ffPrepareCommandOption(data); ffStart(); @@ -819,14 +829,33 @@ int main(int argc, const char** argv) if (useJsonConfig) ffPrintJsonConfig(false); else - ffPrintCommandOption(&data); + ffPrintCommandOption(data); if (instance.state.resultDoc) - { yyjson_mut_write_fp(stdout, instance.state.resultDoc, YYJSON_WRITE_INF_AND_NAN_AS_NULL | YYJSON_WRITE_PRETTY_TWO_SPACES, NULL, NULL); - } + else + ffFinish(); +} - ffFinish(); +int main(int argc, const char** argv) +{ + ffInitInstance(); + + //Data stores things only needed for the configuration of fastfetch + FFdata data = { + .structure = ffStrbufCreate(), + .customValues = ffListCreate(sizeof(FFCustomValue)), + .loadUserConfig = true, + }; + + if(!getenv("NO_CONFIG")) + parseConfigFiles(&data); + parseArguments(&data, argc, argv); + + if (__builtin_expect(!instance.state.migrateConfigDoc, true)) + ffRun(&data); + else + ffMigrateCommandOptionToJsonc(&data); // Migrate ffStrbufDestroy(&data.structure); FF_LIST_FOR_EACH(FFCustomValue, customValue, data.customValues) diff --git a/src/fastfetch.h b/src/fastfetch.h index cbb307a15..54fc39407 100644 --- a/src/fastfetch.h +++ b/src/fastfetch.h @@ -176,6 +176,7 @@ typedef struct FFstate FFPlatform platform; yyjson_doc* configDoc; yyjson_mut_doc* resultDoc; + yyjson_mut_doc* migrateConfigDoc; } FFstate; typedef struct FFinstance diff --git a/src/modules/battery/battery.c b/src/modules/battery/battery.c index c48bc389b..ad09a31c7 100644 --- a/src/modules/battery/battery.c +++ b/src/modules/battery/battery.c @@ -156,6 +156,22 @@ void ffParseBatteryJsonObject(FFBatteryOptions* options, yyjson_val* module) } } +void ffGenerateBatteryJsonConfig(FFBatteryOptions* options, yyjson_mut_doc* doc, yyjson_mut_val* module) +{ + __attribute__((__cleanup__(ffDestroyBatteryOptions))) FFBatteryOptions defaultOptions; + ffInitBatteryOptions(&defaultOptions); + + ffJsonConfigGenerateModuleArgsConfig(doc, module, &defaultOptions.moduleArgs, &options->moduleArgs); + + #ifdef __linux__ + if (!ffStrbufEquals(&defaultOptions.dir, &options->dir)) + yyjson_mut_obj_add_strbuf(doc, module, "dir", &options->dir); + #endif + + if (options->temp != defaultOptions.temp) + yyjson_mut_obj_add_bool(doc, module, "temp", options->temp); +} + void ffGenerateBatteryJsonResult(FFBatteryOptions* options, yyjson_mut_doc* doc, yyjson_mut_val* module) { FF_LIST_AUTO_DESTROY results = ffListCreate(sizeof(FFBatteryResult)); @@ -202,7 +218,16 @@ void ffPrintBatteryHelpFormat(void) void ffInitBatteryOptions(FFBatteryOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_BATTERY_MODULE_NAME, ffParseBatteryCommandOptions, ffParseBatteryJsonObject, ffPrintBattery, ffGenerateBatteryJsonResult, ffPrintBatteryHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_BATTERY_MODULE_NAME, + ffParseBatteryCommandOptions, + ffParseBatteryJsonObject, + ffPrintBattery, + ffGenerateBatteryJsonResult, + ffPrintBatteryHelpFormat, + ffGenerateBatteryJsonConfig + ); ffOptionInitModuleArg(&options->moduleArgs); options->temp = false; diff --git a/src/modules/bios/bios.c b/src/modules/bios/bios.c index 68f63e340..e9b7e3a2b 100644 --- a/src/modules/bios/bios.c +++ b/src/modules/bios/bios.c @@ -80,6 +80,14 @@ void ffParseBiosJsonObject(FFBiosOptions* options, yyjson_val* module) } } +void ffGenerateBiosJsonConfig(FFBiosOptions* options, yyjson_mut_doc* doc, yyjson_mut_val* module) +{ + __attribute__((__cleanup__(ffDestroyBiosOptions))) FFBiosOptions defaultOptions; + ffInitBiosOptions(&defaultOptions); + + ffJsonConfigGenerateModuleArgsConfig(doc, module, &defaultOptions.moduleArgs, &options->moduleArgs); +} + void ffGenerateBiosJsonResult(FF_MAYBE_UNUSED FFBiosOptions* options, yyjson_mut_doc* doc, yyjson_mut_val* module) { FFBiosResult bios; @@ -127,7 +135,16 @@ void ffPrintBiosHelpFormat(void) void ffInitBiosOptions(FFBiosOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_BIOS_MODULE_NAME, ffParseBiosCommandOptions, ffParseBiosJsonObject, ffPrintBios, ffGenerateBiosJsonResult, ffPrintBiosHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_BIOS_MODULE_NAME, + ffParseBiosCommandOptions, + ffParseBiosJsonObject, + ffPrintBios, + ffGenerateBiosJsonResult, + ffPrintBiosHelpFormat, + ffGenerateBiosJsonConfig + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/bluetooth/bluetooth.c b/src/modules/bluetooth/bluetooth.c index ae8e64779..3439796cc 100644 --- a/src/modules/bluetooth/bluetooth.c +++ b/src/modules/bluetooth/bluetooth.c @@ -157,7 +157,16 @@ void ffPrintBluetoothHelpFormat(void) void ffInitBluetoothOptions(FFBluetoothOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_BLUETOOTH_MODULE_NAME, ffParseBluetoothCommandOptions, ffParseBluetoothJsonObject, ffPrintBluetooth, ffGenerateBluetoothJsonResult, ffPrintBluetoothHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_BLUETOOTH_MODULE_NAME, + ffParseBluetoothCommandOptions, + ffParseBluetoothJsonObject, + ffPrintBluetooth, + ffGenerateBluetoothJsonResult, + ffPrintBluetoothHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); options->showDisconnected = false; } diff --git a/src/modules/board/board.c b/src/modules/board/board.c index e7664eb34..5f6f633b8 100644 --- a/src/modules/board/board.c +++ b/src/modules/board/board.c @@ -119,7 +119,16 @@ void ffPrintBoardHelpFormat(void) void ffInitBoardOptions(FFBoardOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_BOARD_MODULE_NAME, ffParseBoardCommandOptions, ffParseBoardJsonObject, ffPrintBoard, ffGenerateBoardJsonResult, ffPrintBoardHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_BOARD_MODULE_NAME, + ffParseBoardCommandOptions, + ffParseBoardJsonObject, + ffPrintBoard, + ffGenerateBoardJsonResult, + ffPrintBoardHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/break/break.c b/src/modules/break/break.c index 5ec50ace9..cdd8ba2c9 100644 --- a/src/modules/break/break.c +++ b/src/modules/break/break.c @@ -20,7 +20,16 @@ void ffParseBreakJsonObject(FF_MAYBE_UNUSED FFBreakOptions* options, FF_MAYBE_UN void ffInitBreakOptions(FF_MAYBE_UNUSED FFBreakOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_BREAK_MODULE_NAME, ffParseBreakCommandOptions, ffParseBreakJsonObject, ffPrintBreak, NULL, NULL); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_BREAK_MODULE_NAME, + ffParseBreakCommandOptions, + ffParseBreakJsonObject, + ffPrintBreak, + NULL, + NULL, + NULL + ); } void ffDestroyBreakOptions(FF_MAYBE_UNUSED FFBreakOptions* options) diff --git a/src/modules/brightness/brightness.c b/src/modules/brightness/brightness.c index b49a04d7e..fde35952e 100644 --- a/src/modules/brightness/brightness.c +++ b/src/modules/brightness/brightness.c @@ -172,7 +172,16 @@ void ffPrintBrightnessHelpFormat(void) void ffInitBrightnessOptions(FFBrightnessOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_BRIGHTNESS_MODULE_NAME, ffParseBrightnessCommandOptions, ffParseBrightnessJsonObject, ffPrintBrightness, ffGenerateBrightnessJsonResult, ffPrintBrightnessHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_BRIGHTNESS_MODULE_NAME, + ffParseBrightnessCommandOptions, + ffParseBrightnessJsonObject, + ffPrintBrightness, + ffGenerateBrightnessJsonResult, + ffPrintBrightnessHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); options->ddcciSleep = 10; diff --git a/src/modules/chassis/chassis.c b/src/modules/chassis/chassis.c index c3b953e43..816059f67 100644 --- a/src/modules/chassis/chassis.c +++ b/src/modules/chassis/chassis.c @@ -120,7 +120,16 @@ void ffPrintChassisHelpFormat(void) void ffInitChassisOptions(FFChassisOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_CHASSIS_MODULE_NAME, ffParseChassisCommandOptions, ffParseChassisJsonObject, ffPrintChassis, ffGenerateChassisJsonResult, ffPrintChassisHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_CHASSIS_MODULE_NAME, + ffParseChassisCommandOptions, + ffParseChassisJsonObject, + ffPrintChassis, + ffGenerateChassisJsonResult, + ffPrintChassisHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/colors/colors.c b/src/modules/colors/colors.c index 4cbe89df4..f33e9c682 100644 --- a/src/modules/colors/colors.c +++ b/src/modules/colors/colors.c @@ -129,7 +129,16 @@ void ffParseColorsJsonObject(FFColorsOptions* options, yyjson_val* module) void ffInitColorsOptions(FFColorsOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_COLORS_MODULE_NAME, ffParseColorsCommandOptions, ffParseColorsJsonObject, ffPrintColors, NULL, NULL); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_COLORS_MODULE_NAME, + ffParseColorsCommandOptions, + ffParseColorsJsonObject, + ffPrintColors, + NULL, + NULL, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); ffStrbufSetStatic(&options->moduleArgs.key, " "); options->symbol = FF_COLORS_SYMBOL_BLOCK; diff --git a/src/modules/command/command.c b/src/modules/command/command.c index d5b86d30e..59114dacd 100644 --- a/src/modules/command/command.c +++ b/src/modules/command/command.c @@ -134,7 +134,16 @@ void ffPrintCommandHelpFormat(void) void ffInitCommandOptions(FFCommandOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_COMMAND_MODULE_NAME, ffParseCommandCommandOptions, ffParseCommandJsonObject, ffPrintCommand, ffGenerateCommandJsonResult, ffPrintCommandHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_COMMAND_MODULE_NAME, + ffParseCommandCommandOptions, + ffParseCommandJsonObject, + ffPrintCommand, + ffGenerateCommandJsonResult, + ffPrintCommandHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); ffStrbufInitStatic(&options->shell, diff --git a/src/modules/cpu/cpu.c b/src/modules/cpu/cpu.c index 0fe0dea42..fab9d77fa 100644 --- a/src/modules/cpu/cpu.c +++ b/src/modules/cpu/cpu.c @@ -185,7 +185,16 @@ void ffPrintCPUHelpFormat(void) void ffInitCPUOptions(FFCPUOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_CPU_MODULE_NAME, ffParseCPUCommandOptions, ffParseCPUJsonObject, ffPrintCPU, ffGenerateCPUJsonResult, ffPrintCPUHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_CPU_MODULE_NAME, + ffParseCPUCommandOptions, + ffParseCPUJsonObject, + ffPrintCPU, + ffGenerateCPUJsonResult, + ffPrintCPUHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); options->temp = false; options->freqNdigits = 2; diff --git a/src/modules/cpuusage/cpuusage.c b/src/modules/cpuusage/cpuusage.c index 69e938af1..7a2418850 100644 --- a/src/modules/cpuusage/cpuusage.c +++ b/src/modules/cpuusage/cpuusage.c @@ -154,7 +154,16 @@ void ffPrintCPUUsageHelpFormat(void) void ffInitCPUUsageOptions(FFCPUUsageOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_CPUUSAGE_MODULE_NAME, ffParseCPUUsageCommandOptions, ffParseCPUUsageJsonObject, ffPrintCPUUsage, ffGenerateCPUUsageJsonResult, ffPrintCPUUsageHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_CPUUSAGE_MODULE_NAME, + ffParseCPUUsageCommandOptions, + ffParseCPUUsageJsonObject, + ffPrintCPUUsage, + ffGenerateCPUUsageJsonResult, + ffPrintCPUUsageHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/cursor/cursor.c b/src/modules/cursor/cursor.c index 7b4d20171..4f6dfd3e1 100644 --- a/src/modules/cursor/cursor.c +++ b/src/modules/cursor/cursor.c @@ -111,7 +111,16 @@ void ffPrintCursorHelpFormat(void) void ffInitCursorOptions(FFCursorOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_CURSOR_MODULE_NAME, ffParseCursorCommandOptions, ffParseCursorJsonObject, ffPrintCursor, ffGenerateCursorJsonResult, ffPrintCursorHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_CURSOR_MODULE_NAME, + ffParseCursorCommandOptions, + ffParseCursorJsonObject, + ffPrintCursor, + ffGenerateCursorJsonResult, + ffPrintCursorHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/custom/custom.c b/src/modules/custom/custom.c index baccd127c..4aed00daf 100644 --- a/src/modules/custom/custom.c +++ b/src/modules/custom/custom.c @@ -27,6 +27,14 @@ bool ffParseCustomCommandOptions(FFCustomOptions* options, const char* key, cons return false; } +void ffGenerateCustomJsonConfig(FFCustomOptions* options, yyjson_mut_doc* doc, yyjson_mut_val* module) +{ + __attribute__((__cleanup__(ffDestroyCustomOptions))) FFCustomOptions defaultOptions; + ffInitCustomOptions(&defaultOptions); + + ffJsonConfigGenerateModuleArgsConfig(doc, module, &defaultOptions.moduleArgs, &options->moduleArgs); +} + void ffParseCustomJsonObject(FFCustomOptions* options, yyjson_val* module) { yyjson_val *key_, *val; @@ -46,7 +54,16 @@ void ffParseCustomJsonObject(FFCustomOptions* options, yyjson_val* module) void ffInitCustomOptions(FFCustomOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_CUSTOM_MODULE_NAME, ffParseCustomCommandOptions, ffParseCustomJsonObject, ffPrintCustom, NULL, NULL); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_CUSTOM_MODULE_NAME, + ffParseCustomCommandOptions, + ffParseCustomJsonObject, + ffPrintCustom, + NULL, + NULL, + ffGenerateCustomJsonConfig + ); ffOptionInitModuleArg(&options->moduleArgs); ffStrbufSetStatic(&options->moduleArgs.key, " "); } diff --git a/src/modules/datetime/datetime.c b/src/modules/datetime/datetime.c index 6c4bb29ce..08b9f356f 100644 --- a/src/modules/datetime/datetime.c +++ b/src/modules/datetime/datetime.c @@ -201,7 +201,16 @@ void ffPrintDateTimeHelpFormat(void) void ffInitDateTimeOptions(FFDateTimeOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_DATETIME_MODULE_NAME, ffParseDateTimeCommandOptions, ffParseDateTimeJsonObject, ffPrintDateTime, ffGenerateDateTimeJsonResult, ffPrintDateTimeHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_DATETIME_MODULE_NAME, + ffParseDateTimeCommandOptions, + ffParseDateTimeJsonObject, + ffPrintDateTime, + ffGenerateDateTimeJsonResult, + ffPrintDateTimeHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/de/de.c b/src/modules/de/de.c index 83b361733..4c804ebc7 100644 --- a/src/modules/de/de.c +++ b/src/modules/de/de.c @@ -94,7 +94,16 @@ void ffPrintDEHelpFormat(void) void ffInitDEOptions(FFDEOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_DE_MODULE_NAME, ffParseDECommandOptions, ffParseDEJsonObject, ffPrintDE, ffGenerateDEJsonResult, ffPrintDEHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_DE_MODULE_NAME, + ffParseDECommandOptions, + ffParseDEJsonObject, + ffPrintDE, + ffGenerateDEJsonResult, + ffPrintDEHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/disk/disk.c b/src/modules/disk/disk.c index 0fbcc86b8..0bd94e0d0 100644 --- a/src/modules/disk/disk.c +++ b/src/modules/disk/disk.c @@ -428,7 +428,16 @@ void ffPrintDiskHelpFormat(void) void ffInitDiskOptions(FFDiskOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_DISK_MODULE_NAME, ffParseDiskCommandOptions, ffParseDiskJsonObject, ffPrintDisk, ffGenerateDiskJsonResult, ffPrintDiskHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_DISK_MODULE_NAME, + ffParseDiskCommandOptions, + ffParseDiskJsonObject, + ffPrintDisk, + ffGenerateDiskJsonResult, + ffPrintDiskHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); ffStrbufInit(&options->folders); diff --git a/src/modules/diskio/diskio.c b/src/modules/diskio/diskio.c index ef1b72801..c54d16e69 100644 --- a/src/modules/diskio/diskio.c +++ b/src/modules/diskio/diskio.c @@ -215,7 +215,16 @@ void ffPrintDiskIOHelpFormat(void) void ffInitDiskIOOptions(FFDiskIOOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_DISKIO_MODULE_NAME, ffParseDiskIOCommandOptions, ffParseDiskIOJsonObject, ffPrintDiskIO, ffGenerateDiskIOJsonResult, ffPrintDiskIOHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_DISKIO_MODULE_NAME, + ffParseDiskIOCommandOptions, + ffParseDiskIOJsonObject, + ffPrintDiskIO, + ffGenerateDiskIOJsonResult, + ffPrintDiskIOHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); ffStrbufInit(&options->namePrefix); diff --git a/src/modules/display/display.c b/src/modules/display/display.c index 13f83c689..56b858ccd 100644 --- a/src/modules/display/display.c +++ b/src/modules/display/display.c @@ -228,7 +228,16 @@ void ffPrintDisplayHelpFormat(void) void ffInitDisplayOptions(FFDisplayOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_DISPLAY_MODULE_NAME, ffParseDisplayCommandOptions, ffParseDisplayJsonObject, ffPrintDisplay, ffGenerateDisplayJsonResult, ffPrintDisplayHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_DISPLAY_MODULE_NAME, + ffParseDisplayCommandOptions, + ffParseDisplayJsonObject, + ffPrintDisplay, + ffGenerateDisplayJsonResult, + ffPrintDisplayHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); options->compactType = FF_DISPLAY_COMPACT_TYPE_NONE; options->preciseRefreshRate = false; diff --git a/src/modules/font/font.c b/src/modules/font/font.c index 589a15331..aa8432987 100644 --- a/src/modules/font/font.c +++ b/src/modules/font/font.c @@ -109,7 +109,16 @@ void ffPrintFontHelpFormat(void) void ffInitFontOptions(FFFontOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_FONT_MODULE_NAME, ffParseFontCommandOptions, ffParseFontJsonObject, ffPrintFont, ffGenerateFontJsonResult, ffPrintFontHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_FONT_MODULE_NAME, + ffParseFontCommandOptions, + ffParseFontJsonObject, + ffPrintFont, + ffGenerateFontJsonResult, + ffPrintFontHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/gamepad/gamepad.c b/src/modules/gamepad/gamepad.c index 39194b30c..7db46fee8 100644 --- a/src/modules/gamepad/gamepad.c +++ b/src/modules/gamepad/gamepad.c @@ -119,7 +119,16 @@ void ffPrintGamepadHelpFormat(void) void ffInitGamepadOptions(FFGamepadOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_GAMEPAD_MODULE_NAME, ffParseGamepadCommandOptions, ffParseGamepadJsonObject, ffPrintGamepad, ffGenerateGamepadJsonResult, ffPrintGamepadHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_GAMEPAD_MODULE_NAME, + ffParseGamepadCommandOptions, + ffParseGamepadJsonObject, + ffPrintGamepad, + ffGenerateGamepadJsonResult, + ffPrintGamepadHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/gpu/gpu.c b/src/modules/gpu/gpu.c index 3189549fa..e73267609 100644 --- a/src/modules/gpu/gpu.c +++ b/src/modules/gpu/gpu.c @@ -285,7 +285,16 @@ void ffPrintGPUHelpFormat(void) void ffInitGPUOptions(FFGPUOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_GPU_MODULE_NAME, ffParseGPUCommandOptions, ffParseGPUJsonObject, ffPrintGPU, ffGenerateGPUJsonResult, ffPrintGPUHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_GPU_MODULE_NAME, + ffParseGPUCommandOptions, + ffParseGPUJsonObject, + ffPrintGPU, + ffGenerateGPUJsonResult, + ffPrintGPUHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); options->forceVulkan = false; diff --git a/src/modules/host/host.c b/src/modules/host/host.c index 28c5ab5f3..a3740e773 100644 --- a/src/modules/host/host.c +++ b/src/modules/host/host.c @@ -142,7 +142,16 @@ void ffPrintHostHelpFormat(void) void ffInitHostOptions(FFHostOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_HOST_MODULE_NAME, ffParseHostCommandOptions, ffParseHostJsonObject, ffPrintHost, ffGenerateHostJsonResult, ffPrintHostHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_HOST_MODULE_NAME, + ffParseHostCommandOptions, + ffParseHostJsonObject, + ffPrintHost, + ffGenerateHostJsonResult, + ffPrintHostHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/icons/icons.c b/src/modules/icons/icons.c index eff569649..02a8c9899 100644 --- a/src/modules/icons/icons.c +++ b/src/modules/icons/icons.c @@ -80,7 +80,16 @@ void ffPrintIconsHelpFormat(void) void ffInitIconsOptions(FFIconsOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_ICONS_MODULE_NAME, ffParseIconsCommandOptions, ffParseIconsJsonObject, ffPrintIcons, ffGenerateIconsJsonResult, ffPrintIconsHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_ICONS_MODULE_NAME, + ffParseIconsCommandOptions, + ffParseIconsJsonObject, + ffPrintIcons, + ffGenerateIconsJsonResult, + ffPrintIconsHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/kernel/kernel.c b/src/modules/kernel/kernel.c index 4fab5cd7d..cf3838107 100644 --- a/src/modules/kernel/kernel.c +++ b/src/modules/kernel/kernel.c @@ -78,7 +78,16 @@ void ffPrintKernelHelpFormat(void) void ffInitKernelOptions(FFKernelOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_KERNEL_MODULE_NAME, ffParseKernelCommandOptions, ffParseKernelJsonObject, ffPrintKernel, ffGenerateKernelJsonResult, ffPrintKernelHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_KERNEL_MODULE_NAME, + ffParseKernelCommandOptions, + ffParseKernelJsonObject, + ffPrintKernel, + ffGenerateKernelJsonResult, + ffPrintKernelHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/lm/lm.c b/src/modules/lm/lm.c index 95aa56896..61f3573ec 100644 --- a/src/modules/lm/lm.c +++ b/src/modules/lm/lm.c @@ -118,7 +118,16 @@ void ffPrintLMHelpFormat(void) void ffInitLMOptions(FFLMOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_LM_MODULE_NAME, ffParseLMCommandOptions, ffParseLMJsonObject, ffPrintLM, ffGenerateLMJsonResult, ffPrintLMHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_LM_MODULE_NAME, + ffParseLMCommandOptions, + ffParseLMJsonObject, + ffPrintLM, + ffGenerateLMJsonResult, + ffPrintLMHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/locale/locale.c b/src/modules/locale/locale.c index 18e4e67a7..ec28ee864 100644 --- a/src/modules/locale/locale.c +++ b/src/modules/locale/locale.c @@ -80,7 +80,16 @@ void ffPrintLocaleHelpFormat(void) void ffInitLocaleOptions(FFLocaleOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_LOCALE_MODULE_NAME, ffParseLocaleCommandOptions, ffParseLocaleJsonObject, ffPrintLocale, ffGenerateLocaleJsonResult, ffPrintLocaleHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_LOCALE_MODULE_NAME, + ffParseLocaleCommandOptions, + ffParseLocaleJsonObject, + ffPrintLocale, + ffGenerateLocaleJsonResult, + ffPrintLocaleHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/localip/localip.c b/src/modules/localip/localip.c index f95b1cfc0..8d5877a14 100644 --- a/src/modules/localip/localip.c +++ b/src/modules/localip/localip.c @@ -324,7 +324,16 @@ void ffPrintLocalIpHelpFormat(void) void ffInitLocalIpOptions(FFLocalIpOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_LOCALIP_MODULE_NAME, ffParseLocalIpCommandOptions, ffParseLocalIpJsonObject, ffPrintLocalIp, ffGenerateLocalIpJsonResult, ffPrintLocalIpHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_LOCALIP_MODULE_NAME, + ffParseLocalIpCommandOptions, + ffParseLocalIpJsonObject, + ffPrintLocalIp, + ffGenerateLocalIpJsonResult, + ffPrintLocalIpHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); options->showType = FF_LOCALIP_TYPE_IPV4_BIT; diff --git a/src/modules/media/media.c b/src/modules/media/media.c index 7769dc4fa..d9472afc4 100644 --- a/src/modules/media/media.c +++ b/src/modules/media/media.c @@ -162,7 +162,16 @@ void ffPrintMediaHelpFormat(void) void ffInitMediaOptions(FFMediaOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_MEDIA_MODULE_NAME, ffParseMediaCommandOptions, ffParseMediaJsonObject, ffPrintMedia, ffGenerateMediaJsonResult, ffPrintMediaHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_MEDIA_MODULE_NAME, + ffParseMediaCommandOptions, + ffParseMediaJsonObject, + ffPrintMedia, + ffGenerateMediaJsonResult, + ffPrintMediaHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/memory/memory.c b/src/modules/memory/memory.c index 018ab2def..3e727ca98 100644 --- a/src/modules/memory/memory.c +++ b/src/modules/memory/memory.c @@ -120,7 +120,16 @@ void ffPrintMemoryHelpFormat(void) void ffInitMemoryOptions(FFMemoryOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_MEMORY_MODULE_NAME, ffParseMemoryCommandOptions, ffParseMemoryJsonObject, ffPrintMemory, ffGenerateMemoryJsonResult, ffPrintMemoryHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_MEMORY_MODULE_NAME, + ffParseMemoryCommandOptions, + ffParseMemoryJsonObject, + ffPrintMemory, + ffGenerateMemoryJsonResult, + ffPrintMemoryHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/monitor/monitor.c b/src/modules/monitor/monitor.c index cd42ddf35..99ee0da98 100644 --- a/src/modules/monitor/monitor.c +++ b/src/modules/monitor/monitor.c @@ -152,7 +152,16 @@ void ffPrintMonitorHelpFormat(void) void ffInitMonitorOptions(FFMonitorOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_MONITOR_MODULE_NAME, ffParseMonitorCommandOptions, ffParseMonitorJsonObject, ffPrintMonitor, ffGenerateMonitorJsonResult, ffPrintMonitorHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_MONITOR_MODULE_NAME, + ffParseMonitorCommandOptions, + ffParseMonitorJsonObject, + ffPrintMonitor, + ffGenerateMonitorJsonResult, + ffPrintMonitorHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/netio/netio.c b/src/modules/netio/netio.c index 8f76365fd..8428bbbf0 100644 --- a/src/modules/netio/netio.c +++ b/src/modules/netio/netio.c @@ -203,7 +203,16 @@ void ffPrintNetIOHelpFormat(void) void ffInitNetIOOptions(FFNetIOOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_NETIO_MODULE_NAME, ffParseNetIOCommandOptions, ffParseNetIOJsonObject, ffPrintNetIO, ffGenerateNetIOJsonResult, ffPrintNetIOHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_NETIO_MODULE_NAME, + ffParseNetIOCommandOptions, + ffParseNetIOJsonObject, + ffPrintNetIO, + ffGenerateNetIOJsonResult, + ffPrintNetIOHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); ffStrbufInit(&options->namePrefix); diff --git a/src/modules/opencl/opencl.c b/src/modules/opencl/opencl.c index fd9015cb3..951a42d5c 100644 --- a/src/modules/opencl/opencl.c +++ b/src/modules/opencl/opencl.c @@ -103,7 +103,16 @@ void ffPrintOpenCLHelpFormat(void) void ffInitOpenCLOptions(FFOpenCLOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_OPENCL_MODULE_NAME, ffParseOpenCLCommandOptions, ffParseOpenCLJsonObject, ffPrintOpenCL, ffGenerateOpenCLJsonResult, ffPrintOpenCLHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_OPENCL_MODULE_NAME, + ffParseOpenCLCommandOptions, + ffParseOpenCLJsonObject, + ffPrintOpenCL, + ffGenerateOpenCLJsonResult, + ffPrintOpenCLHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/opengl/opengl.c b/src/modules/opengl/opengl.c index b579c7526..fbf819c90 100644 --- a/src/modules/opengl/opengl.c +++ b/src/modules/opengl/opengl.c @@ -141,7 +141,16 @@ void ffPrintOpenGLHelpFormat(void) void ffInitOpenGLOptions(FFOpenGLOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_OPENGL_MODULE_NAME, ffParseOpenGLCommandOptions, ffParseOpenGLJsonObject, ffPrintOpenGL, ffGenerateOpenGLJsonResult, ffPrintOpenGLHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_OPENGL_MODULE_NAME, + ffParseOpenGLCommandOptions, + ffParseOpenGLJsonObject, + ffPrintOpenGL, + ffGenerateOpenGLJsonResult, + ffPrintOpenGLHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); #if defined(__linux__) || defined(__FreeBSD__) diff --git a/src/modules/os/os.c b/src/modules/os/os.c index 037c769ca..408fa8f86 100644 --- a/src/modules/os/os.c +++ b/src/modules/os/os.c @@ -206,7 +206,16 @@ void ffPrintOSHelpFormat(void) void ffInitOSOptions(FFOSOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_OS_MODULE_NAME, ffParseOSCommandOptions, ffParseOSJsonObject, ffPrintOS, ffGenerateOSJsonResult, ffPrintOSHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_OS_MODULE_NAME, + ffParseOSCommandOptions, + ffParseOSJsonObject, + ffPrintOS, + ffGenerateOSJsonResult, + ffPrintOSHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/packages/packages.c b/src/modules/packages/packages.c index be900d904..a795a02c5 100644 --- a/src/modules/packages/packages.c +++ b/src/modules/packages/packages.c @@ -206,7 +206,16 @@ void ffPrintPackagesHelpFormat(void) void ffInitPackagesOptions(FFPackagesOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_PACKAGES_MODULE_NAME, ffParsePackagesCommandOptions, ffParsePackagesJsonObject, ffPrintPackages, ffGeneratePackagesJsonResult, ffPrintPackagesHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_PACKAGES_MODULE_NAME, + ffParsePackagesCommandOptions, + ffParsePackagesJsonObject, + ffPrintPackages, + ffGeneratePackagesJsonResult, + ffPrintPackagesHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/player/player.c b/src/modules/player/player.c index ff0860f63..8d90c2c18 100644 --- a/src/modules/player/player.c +++ b/src/modules/player/player.c @@ -128,7 +128,16 @@ void ffPrintPlayerHelpFormat(void) void ffInitPlayerOptions(FFPlayerOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_PLAYER_MODULE_NAME, ffParsePlayerCommandOptions, ffParsePlayerJsonObject, ffPrintPlayer, ffGeneratePlayerJsonResult, ffPrintPlayerHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_PLAYER_MODULE_NAME, + ffParsePlayerCommandOptions, + ffParsePlayerJsonObject, + ffPrintPlayer, + ffGeneratePlayerJsonResult, + ffPrintPlayerHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/poweradapter/poweradapter.c b/src/modules/poweradapter/poweradapter.c index 626861b22..6ae9ab738 100644 --- a/src/modules/poweradapter/poweradapter.c +++ b/src/modules/poweradapter/poweradapter.c @@ -129,7 +129,16 @@ void ffPrintPowerAdapterHelpFormat(void) void ffInitPowerAdapterOptions(FFPowerAdapterOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_POWERADAPTER_MODULE_NAME, ffParsePowerAdapterCommandOptions, ffParsePowerAdapterJsonObject, ffPrintPowerAdapter, ffGeneratePowerAdapterJsonResult, ffPrintPowerAdapterHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_POWERADAPTER_MODULE_NAME, + ffParsePowerAdapterCommandOptions, + ffParsePowerAdapterJsonObject, + ffPrintPowerAdapter, + ffGeneratePowerAdapterJsonResult, + ffPrintPowerAdapterHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/processes/processes.c b/src/modules/processes/processes.c index ea9517234..05a28ba02 100644 --- a/src/modules/processes/processes.c +++ b/src/modules/processes/processes.c @@ -81,7 +81,16 @@ void ffPrintProcessesHelpFormat(void) void ffInitProcessesOptions(FFProcessesOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_PROCESSES_MODULE_NAME, ffParseProcessesCommandOptions, ffParseProcessesJsonObject, ffPrintProcesses, ffGenerateProcessesJsonResult, ffPrintProcessesHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_PROCESSES_MODULE_NAME, + ffParseProcessesCommandOptions, + ffParseProcessesJsonObject, + ffPrintProcesses, + ffGenerateProcessesJsonResult, + ffPrintProcessesHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/publicip/publicip.c b/src/modules/publicip/publicip.c index 7a469536e..9a83a01fa 100644 --- a/src/modules/publicip/publicip.c +++ b/src/modules/publicip/publicip.c @@ -122,7 +122,16 @@ void ffPrintPublicIpHelpFormat(void) void ffInitPublicIpOptions(FFPublicIpOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_PUBLICIP_MODULE_NAME, ffParsePublicIpCommandOptions, ffParsePublicIpJsonObject, ffPrintPublicIp, ffGeneratePublicIpJsonResult, ffPrintPublicIpHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_PUBLICIP_MODULE_NAME, + ffParsePublicIpCommandOptions, + ffParsePublicIpJsonObject, + ffPrintPublicIp, + ffGeneratePublicIpJsonResult, + ffPrintPublicIpHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); ffStrbufInit(&options->url); diff --git a/src/modules/separator/separator.c b/src/modules/separator/separator.c index 5d0c87e6d..2c71c01f4 100644 --- a/src/modules/separator/separator.c +++ b/src/modules/separator/separator.c @@ -111,7 +111,16 @@ void ffParseSeparatorJsonObject(FFSeparatorOptions* options, yyjson_val* module) void ffInitSeparatorOptions(FFSeparatorOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_SEPARATOR_MODULE_NAME, ffParseSeparatorCommandOptions, ffParseSeparatorJsonObject, ffPrintSeparator, NULL, NULL); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_SEPARATOR_MODULE_NAME, + ffParseSeparatorCommandOptions, + ffParseSeparatorJsonObject, + ffPrintSeparator, + NULL, + NULL, + NULL + ); ffStrbufInit(&options->string); } diff --git a/src/modules/shell/shell.c b/src/modules/shell/shell.c index a74a0eb6e..5a7b237d0 100644 --- a/src/modules/shell/shell.c +++ b/src/modules/shell/shell.c @@ -101,7 +101,16 @@ void ffPrintShellHelpFormat(void) void ffInitShellOptions(FFShellOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_SHELL_MODULE_NAME, ffParseShellCommandOptions, ffParseShellJsonObject, ffPrintShell, ffGenerateShellJsonResult, ffPrintShellHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_SHELL_MODULE_NAME, + ffParseShellCommandOptions, + ffParseShellJsonObject, + ffPrintShell, + ffGenerateShellJsonResult, + ffPrintShellHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/sound/sound.c b/src/modules/sound/sound.c index 2c00a388f..235cdb220 100644 --- a/src/modules/sound/sound.c +++ b/src/modules/sound/sound.c @@ -189,7 +189,16 @@ void ffPrintSoundHelpFormat(void) void ffInitSoundOptions(FFSoundOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_SOUND_MODULE_NAME, ffParseSoundCommandOptions, ffParseSoundJsonObject, ffPrintSound, ffGenerateSoundJsonResult, ffPrintSoundHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_SOUND_MODULE_NAME, + ffParseSoundCommandOptions, + ffParseSoundJsonObject, + ffPrintSound, + ffGenerateSoundJsonResult, + ffPrintSoundHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); options->soundType = FF_SOUND_TYPE_MAIN; diff --git a/src/modules/swap/swap.c b/src/modules/swap/swap.c index d0c3d080a..96e092a86 100644 --- a/src/modules/swap/swap.c +++ b/src/modules/swap/swap.c @@ -127,7 +127,16 @@ void ffPrintSwapHelpFormat(void) void ffInitSwapOptions(FFSwapOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_SWAP_MODULE_NAME, ffParseSwapCommandOptions, ffParseSwapJsonObject, ffPrintSwap, ffGenerateSwapJsonResult, ffPrintSwapHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_SWAP_MODULE_NAME, + ffParseSwapCommandOptions, + ffParseSwapJsonObject, + ffPrintSwap, + ffGenerateSwapJsonResult, + ffPrintSwapHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/terminal/terminal.c b/src/modules/terminal/terminal.c index 6cb379575..d157cec38 100644 --- a/src/modules/terminal/terminal.c +++ b/src/modules/terminal/terminal.c @@ -100,7 +100,16 @@ void ffPrintTerminalHelpFormat(void) void ffInitTerminalOptions(FFTerminalOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_TERMINAL_MODULE_NAME, ffParseTerminalCommandOptions, ffParseTerminalJsonObject, ffPrintTerminal, ffGenerateTerminalJsonResult, ffPrintTerminalHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_TERMINAL_MODULE_NAME, + ffParseTerminalCommandOptions, + ffParseTerminalJsonObject, + ffPrintTerminal, + ffGenerateTerminalJsonResult, + ffPrintTerminalHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/terminalfont/terminalfont.c b/src/modules/terminalfont/terminalfont.c index a1be63293..b4719274f 100644 --- a/src/modules/terminalfont/terminalfont.c +++ b/src/modules/terminalfont/terminalfont.c @@ -126,7 +126,16 @@ void ffPrintTerminalFontHelpFormat(void) void ffInitTerminalFontOptions(FFTerminalFontOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_TERMINALFONT_MODULE_NAME, ffParseTerminalFontCommandOptions, ffParseTerminalFontJsonObject, ffPrintTerminalFont, ffGenerateTerminalFontJsonResult, ffPrintTerminalFontHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_TERMINALFONT_MODULE_NAME, + ffParseTerminalFontCommandOptions, + ffParseTerminalFontJsonObject, + ffPrintTerminalFont, + ffGenerateTerminalFontJsonResult, + ffPrintTerminalFontHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/terminalsize/terminalsize.c b/src/modules/terminalsize/terminalsize.c index 3d94d09c4..432912ac4 100644 --- a/src/modules/terminalsize/terminalsize.c +++ b/src/modules/terminalsize/terminalsize.c @@ -95,7 +95,16 @@ void ffPrintTerminalSizeHelpFormat(void) void ffInitTerminalSizeOptions(FFTerminalSizeOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_TERMINALSIZE_MODULE_NAME, ffParseTerminalSizeCommandOptions, ffParseTerminalSizeJsonObject, ffPrintTerminalSize, ffGenerateTerminalSizeJsonResult, ffPrintTerminalSizeHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_TERMINALSIZE_MODULE_NAME, + ffParseTerminalSizeCommandOptions, + ffParseTerminalSizeJsonObject, + ffPrintTerminalSize, + ffGenerateTerminalSizeJsonResult, + ffPrintTerminalSizeHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/theme/theme.c b/src/modules/theme/theme.c index 2f373d0ae..40b50c0b0 100644 --- a/src/modules/theme/theme.c +++ b/src/modules/theme/theme.c @@ -80,7 +80,16 @@ void ffPrintThemeHelpFormat(void) void ffInitThemeOptions(FFThemeOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_THEME_MODULE_NAME, ffParseThemeCommandOptions, ffParseThemeJsonObject, ffPrintTheme, ffGenerateThemeJsonResult, ffPrintThemeHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_THEME_MODULE_NAME, + ffParseThemeCommandOptions, + ffParseThemeJsonObject, + ffPrintTheme, + ffGenerateThemeJsonResult, + ffPrintThemeHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/title/title.c b/src/modules/title/title.c index d1283be27..5757c4a48 100644 --- a/src/modules/title/title.c +++ b/src/modules/title/title.c @@ -169,7 +169,16 @@ void ffPrintTitleHelpFormat(void) void ffInitTitleOptions(FFTitleOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_TITLE_MODULE_NAME, ffParseTitleCommandOptions, ffParseTitleJsonObject, ffPrintTitle, ffGenerateTitleJsonResult, ffPrintTitleHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_TITLE_MODULE_NAME, + ffParseTitleCommandOptions, + ffParseTitleJsonObject, + ffPrintTitle, + ffGenerateTitleJsonResult, + ffPrintTitleHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); ffStrbufSetStatic(&options->moduleArgs.key, " "); diff --git a/src/modules/uptime/uptime.c b/src/modules/uptime/uptime.c index dbef0de67..432c2c3a0 100644 --- a/src/modules/uptime/uptime.c +++ b/src/modules/uptime/uptime.c @@ -144,7 +144,16 @@ void ffPrintUptimeHelpFormat(void) void ffInitUptimeOptions(FFUptimeOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_UPTIME_MODULE_NAME, ffParseUptimeCommandOptions, ffParseUptimeJsonObject, ffPrintUptime, ffGenerateUptimeJsonResult, ffPrintUptimeHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_UPTIME_MODULE_NAME, + ffParseUptimeCommandOptions, + ffParseUptimeJsonObject, + ffPrintUptime, + ffGenerateUptimeJsonResult, + ffPrintUptimeHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/users/users.c b/src/modules/users/users.c index 8df069fb4..9a53c43e6 100644 --- a/src/modules/users/users.c +++ b/src/modules/users/users.c @@ -176,7 +176,16 @@ void ffPrintUsersHelpFormat(void) void ffInitUsersOptions(FFUsersOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_USERS_MODULE_NAME, ffParseUsersCommandOptions, ffParseUsersJsonObject, ffPrintUsers, ffGenerateUsersJsonResult, ffPrintUsersHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_USERS_MODULE_NAME, + ffParseUsersCommandOptions, + ffParseUsersJsonObject, + ffPrintUsers, + ffGenerateUsersJsonResult, + ffPrintUsersHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); options->compact = false; diff --git a/src/modules/version/version.c b/src/modules/version/version.c index 860a56079..0fce05a4f 100644 --- a/src/modules/version/version.c +++ b/src/modules/version/version.c @@ -121,7 +121,16 @@ void ffPrintVersionHelpFormat(void) void ffInitVersionOptions(FFVersionOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_VERSION_MODULE_NAME, ffParseVersionCommandOptions, ffParseVersionJsonObject, ffPrintVersion, ffGenerateVersionJsonResult, ffPrintVersionHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_VERSION_MODULE_NAME, + ffParseVersionCommandOptions, + ffParseVersionJsonObject, + ffPrintVersion, + ffGenerateVersionJsonResult, + ffPrintVersionHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/vulkan/vulkan.c b/src/modules/vulkan/vulkan.c index 5fa1bca9c..78f1a892e 100644 --- a/src/modules/vulkan/vulkan.c +++ b/src/modules/vulkan/vulkan.c @@ -137,7 +137,16 @@ void ffPrintVulkanHelpFormat(void) void ffInitVulkanOptions(FFVulkanOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_VULKAN_MODULE_NAME, ffParseVulkanCommandOptions, ffParseVulkanJsonObject, ffPrintVulkan, ffGenerateVulkanJsonResult, ffPrintVulkanHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_VULKAN_MODULE_NAME, + ffParseVulkanCommandOptions, + ffParseVulkanJsonObject, + ffPrintVulkan, + ffGenerateVulkanJsonResult, + ffPrintVulkanHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/wallpaper/wallpaper.c b/src/modules/wallpaper/wallpaper.c index c5c7de2cb..720daa428 100644 --- a/src/modules/wallpaper/wallpaper.c +++ b/src/modules/wallpaper/wallpaper.c @@ -90,7 +90,16 @@ void ffPrintWallpaperHelpFormat(void) void ffInitWallpaperOptions(FFWallpaperOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_WALLPAPER_MODULE_NAME, ffParseWallpaperCommandOptions, ffParseWallpaperJsonObject, ffPrintWallpaper, ffGenerateWallpaperJsonResult, ffPrintWallpaperHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_WALLPAPER_MODULE_NAME, + ffParseWallpaperCommandOptions, + ffParseWallpaperJsonObject, + ffPrintWallpaper, + ffGenerateWallpaperJsonResult, + ffPrintWallpaperHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/weather/weather.c b/src/modules/weather/weather.c index 47c5f1bc8..42e2d4d5b 100644 --- a/src/modules/weather/weather.c +++ b/src/modules/weather/weather.c @@ -117,7 +117,16 @@ void ffPrintWeatherHelpFormat(void) void ffInitWeatherOptions(FFWeatherOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_WEATHER_MODULE_NAME, ffParseWeatherCommandOptions, ffParseWeatherJsonObject, ffPrintWeather, ffGenerateWeatherJsonResult, ffPrintWeatherHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_WEATHER_MODULE_NAME, + ffParseWeatherCommandOptions, + ffParseWeatherJsonObject, + ffPrintWeather, + ffGenerateWeatherJsonResult, + ffPrintWeatherHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); ffStrbufInit(&options->location); diff --git a/src/modules/wifi/wifi.c b/src/modules/wifi/wifi.c index 766eac1ec..8ca221c61 100644 --- a/src/modules/wifi/wifi.c +++ b/src/modules/wifi/wifi.c @@ -161,7 +161,16 @@ void ffPrintWifiHelpFormat(void) void ffInitWifiOptions(FFWifiOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_WIFI_MODULE_NAME, ffParseWifiCommandOptions, ffParseWifiJsonObject, ffPrintWifi, ffGenerateWifiJsonResult, ffPrintWifiHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_WIFI_MODULE_NAME, + ffParseWifiCommandOptions, + ffParseWifiJsonObject, + ffPrintWifi, + ffGenerateWifiJsonResult, + ffPrintWifiHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/wm/wm.c b/src/modules/wm/wm.c index 973eabac7..15005b788 100644 --- a/src/modules/wm/wm.c +++ b/src/modules/wm/wm.c @@ -94,7 +94,16 @@ void ffPrintWMHelpFormat(void) void ffInitWMOptions(FFWMOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_WM_MODULE_NAME, ffParseWMCommandOptions, ffParseWMJsonObject, ffPrintWM, ffGenerateWMJsonResult, ffPrintWMHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_WM_MODULE_NAME, + ffParseWMCommandOptions, + ffParseWMJsonObject, + ffPrintWM, + ffGenerateWMJsonResult, + ffPrintWMHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); } diff --git a/src/modules/wmtheme/wmtheme.c b/src/modules/wmtheme/wmtheme.c index f47260aed..f3b8c3177 100644 --- a/src/modules/wmtheme/wmtheme.c +++ b/src/modules/wmtheme/wmtheme.c @@ -78,7 +78,16 @@ void ffPrintWMthemeHelpFormat(void) void ffInitWMThemeOptions(FFWMThemeOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_WMTHEME_MODULE_NAME, ffParseWMThemeCommandOptions, ffParseWMThemeJsonObject, ffPrintWMTheme, ffGenerateWMThemeJsonResult, ffPrintWMthemeHelpFormat); + ffOptionInitModuleBaseInfo( + &options->moduleInfo, + FF_WMTHEME_MODULE_NAME, + ffParseWMThemeCommandOptions, + ffParseWMThemeJsonObject, + ffPrintWMTheme, + ffGenerateWMThemeJsonResult, + ffPrintWMthemeHelpFormat, + NULL + ); ffOptionInitModuleArg(&options->moduleArgs); }