private.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. /*
  2. * shell.h - private interface to the shell class
  3. */
  4. #include "clish/shell.h"
  5. #include "clish/pargv.h"
  6. #include "clish/variable.h"
  7. #include "lub/bintree.h"
  8. #include "tinyrl/tinyrl.h"
  9. /*-------------------------------------
  10. * PRIVATE TYPES
  11. *------------------------------------- */
  12. /*-------------------------------------------------------- */
  13. /*
  14. * iterate around commands
  15. */
  16. typedef struct {
  17. const char *last_cmd;
  18. clish_nspace_visibility_t field;
  19. } clish_shell_iterator_t;
  20. /* this is used to maintain a stack of file handles */
  21. typedef struct clish_shell_file_s clish_shell_file_t;
  22. struct clish_shell_file_s {
  23. clish_shell_file_t *next;
  24. FILE *file;
  25. bool_t stop_on_error; /* stop on error for file input */
  26. };
  27. typedef struct {
  28. char *line;
  29. clish_view_t *view;
  30. char *viewid;
  31. } clish_shell_pwd_t;
  32. struct clish_shell_s {
  33. lub_bintree_t view_tree; /* Maintain a tree of views */
  34. lub_bintree_t ptype_tree; /* Maintain a tree of ptypes */
  35. const clish_shell_hooks_t *client_hooks; /* Client callback hooks */
  36. void *client_cookie; /* Client callback cookie */
  37. clish_view_t *global; /* Reference to the global view. */
  38. clish_view_t *view; /* Reference to the current view. */
  39. clish_command_t *startup; /* This is the startup command */
  40. clish_shell_state_t state; /* The current state */
  41. char *overview; /* Overview text for this shell. */
  42. char *viewid; /* The current view ID string */
  43. tinyrl_t *tinyrl; /* Tiny readline instance */
  44. clish_shell_file_t *current_file; /* file currently in use for input */
  45. clish_shell_pwd_t **cfg_pwdv; /* Levels for the config file structure */
  46. unsigned cfg_pwdc;
  47. konf_client_t *client;
  48. char * lockfile;
  49. pthread_t pthread;
  50. char * default_shebang;
  51. char * fifo_name; /* The name of temporary fifo file. */
  52. bool_t interactive; /* Is shell interactive. */
  53. /* Static params for var expanding. The refactoring is needed. */
  54. clish_param_t *param_depth;
  55. clish_param_t *param_pwd;
  56. clish_param_t *param_interactive;
  57. };
  58. /**
  59. * Initialise a command iterator structure
  60. */
  61. void
  62. clish_shell_iterator_init(clish_shell_iterator_t * iter,
  63. clish_nspace_visibility_t field);
  64. /**
  65. * get the next command which is an extension of the specified line
  66. */
  67. const clish_command_t *clish_shell_find_next_completion(const clish_shell_t *
  68. instance, const char *line, clish_shell_iterator_t * iter);
  69. /**
  70. * Pop the current file handle from the stack of file handles, shutting
  71. * the file down and freeing any associated memory. The next file handle
  72. * in the stack becomes associated with the input stream for this shell.
  73. *
  74. * \return
  75. * BOOL_TRUE - the current file handle has been replaced.
  76. * BOOL_FALSE - there is only one handle on the stack which cannot be replaced.
  77. */
  78. bool_t clish_shell_pop_file(clish_shell_t * instance);
  79. clish_view_t *clish_shell_find_view(clish_shell_t * instance, const char *name);
  80. void clish_shell_insert_view(clish_shell_t * instance, clish_view_t * view);
  81. clish_pargv_status_t clish_shell_parse(const clish_shell_t * instance,
  82. const char *line, const clish_command_t ** cmd, clish_pargv_t ** pargv);
  83. char *clish_shell_word_generator(clish_shell_t * instance,
  84. const char *line, unsigned offset, unsigned state);
  85. const clish_command_t *clish_shell_resolve_command(const clish_shell_t *
  86. instance, const char *line);
  87. const clish_command_t *clish_shell_resolve_prefix(const clish_shell_t *
  88. instance, const char *line);
  89. void clish_shell_insert_ptype(clish_shell_t * instance, clish_ptype_t * ptype);
  90. void clish_shell_tinyrl_history(clish_shell_t * instance, unsigned int *limit);
  91. tinyrl_t *clish_shell_tinyrl_new(FILE * instream,
  92. FILE * outstream, unsigned stifle);
  93. void clish_shell_tinyrl_delete(tinyrl_t * instance);
  94. void clish_shell_param_generator(clish_shell_t * instance, lub_argv_t *matches,
  95. const clish_command_t * cmd, const char *line, unsigned offset);
  96. char **clish_shell_tinyrl_completion(tinyrl_t * tinyrl,
  97. const char *line, unsigned start, unsigned end);