X-Git-Url: http://cloudbase.mooo.com/gitweb/z180-stamp.git/blobdiff_plain/447a805f04115a0e32a1b9ad6be7c0177c3f8977..8eb73d1751705942b4f0891a90a669ce63b98866:/avr/env.c diff --git a/avr/env.c b/avr/env.c index 952c88a..b45f0af 100644 --- a/avr/env.c +++ b/avr/env.c @@ -398,14 +398,18 @@ int saveenv(void) static -int env_item_print(env_item_t *ep) +int env_item_print(env_item_t *ep, bool mode) { int len; char *ev = ep->envvar; + if (mode) { + len = printf_P(PSTR("setenv %s "), ev) - 7; + len += printf_P(PSTR("'%s'\n"), ev + len) - 2; + } else { len = printf_P(PSTR("%s="), ev); len += printf_P(PSTR("%s\n"), ev + len); - + } return len; } @@ -416,7 +420,7 @@ int env_item_print(env_item_t *ep) * Returns -1 in case of error, or length of printed string */ static -int env_print(const MEMX char *name) +int env_print(const MEMX char *name, bool mode) { int len = -1; @@ -424,12 +428,12 @@ int env_print(const MEMX char *name) env_item_t *ep = envlist_search(name); if (ep != NULL) - len = env_item_print(ep); + len = env_item_print(ep, mode); } else { /* print whole list */ len = 0; for (int i = 0 ; i < entrycount; i++) { - len += env_item_print(&env_list[i]); + len += env_item_print(&env_list[i], mode); } } return len; @@ -646,27 +650,44 @@ bool getenv_yesno(const MEMX char *name) command_ret_t do_env_print(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { + (void) cmdtp; (void) flag; + + bool mode = 0; command_ret_t rc = CMD_RET_SUCCESS; - (void) cmdtp; (void) flag; + /* reset getopt() */ + optind = 0; + + int opt; + while ((opt = getopt(argc, argv, PSTR("s"))) != -1) { + switch (opt) { + case 's': + mode = 1; + break; + default: /* '?' */ + return CMD_RET_USAGE; + } + } - if (argc == 1) { + if (optind == argc) { /* print all env vars */ - int size = env_print(NULL); + int size = env_print(NULL, mode); if (size < 0) return CMD_RET_FAILURE; - printf_P(PSTR("\nEnvironment size: %d/%d bytes\n"), - size, ENV_SIZE); + if (mode == 0) + printf_P(PSTR("\nEnvironment size: %d/%d bytes\n"), + size, ENV_SIZE); return CMD_RET_SUCCESS; } /* print selected env vars */ - for (int i = 1; i < argc; ++i) { - int rc = env_print(argv[i]); + while (optind < argc) { + int rc = env_print(argv[optind], mode); if (rc < 0) { - printf_P(PSTR("## Error: \"%s\" not defined\n"), argv[i]); + printf_P(PSTR("## Error: \"%s\" not defined\n"), argv[optind]); rc = CMD_RET_FAILURE; } + optind++; } return rc;