help.c 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /*
  2. * Copyright (c) 2022, Egahp
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #include <stdio.h>
  7. #include <stdint.h>
  8. #include <stdbool.h>
  9. #include <string.h>
  10. #include "csh.h"
  11. /*!< help */
  12. static int help(int argc, char **argv)
  13. {
  14. chry_shell_t *csh = (void *)argv[argc + 1];
  15. uint16_t longest_name;
  16. bool enable_function = true;
  17. bool enable_variable = true;
  18. while (argc > 1) {
  19. argc--;
  20. argv++;
  21. }
  22. if (enable_function) {
  23. csh_printf(csh, "total function %d\r\n",
  24. ((uintptr_t)csh->cmd_tbl_end - (uintptr_t)csh->cmd_tbl_beg) / sizeof(chry_syscall_t));
  25. }
  26. longest_name = 0;
  27. for (const chry_syscall_t *call = csh->cmd_tbl_beg; call < csh->cmd_tbl_end; call++) {
  28. uint16_t len = strlen(call->name);
  29. longest_name = len > longest_name ? len : longest_name;
  30. }
  31. for (const chry_syscall_t *call = csh->cmd_tbl_beg; call < csh->cmd_tbl_end; call++) {
  32. uint16_t len = strlen(call->name);
  33. csh_printf(csh, " \033[32m%s\033[m", call->name);
  34. for (int k = len; k < longest_name; k++) {
  35. csh_printf(csh, " ");
  36. }
  37. csh_printf(csh, " -> ");
  38. csh_printf(csh, call->path);
  39. csh_printf(csh, "\r\n");
  40. }
  41. if (enable_variable) {
  42. if (enable_function) {
  43. csh_printf(csh, "\r\n");
  44. }
  45. csh_printf(csh, "total variable %d\r\n",
  46. ((uintptr_t)csh->var_tbl_end - (uintptr_t)csh->var_tbl_beg) / sizeof(chry_sysvar_t));
  47. }
  48. longest_name = 0;
  49. for (const chry_sysvar_t *var = csh->var_tbl_beg; var < csh->var_tbl_end; var++) {
  50. uint16_t len = strlen(var->name);
  51. longest_name = len > longest_name ? len : longest_name;
  52. }
  53. for (const chry_sysvar_t *var = csh->var_tbl_beg; var < csh->var_tbl_end; var++) {
  54. uint16_t len = strlen(var->name);
  55. csh_printf(csh, " $\033[33m%s\033[m", var->name);
  56. for (int k = len; k < longest_name; k++) {
  57. csh_printf(csh, " ");
  58. }
  59. char cr = var->attr & CSH_VAR_READ ? 'r' : '-';
  60. char cw = var->attr & CSH_VAR_WRITE ? 'w' : '-';
  61. csh_printf(csh, " %c%c %3d\r\n", cr, cw, var->attr & CSH_VAR_SIZE);
  62. }
  63. return 0;
  64. }
  65. CSH_SCMD_EXPORT(help, );