-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathmicrorl.h
More file actions
154 lines (127 loc) · 5.89 KB
/
microrl.h
File metadata and controls
154 lines (127 loc) · 5.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/* =====================================================================
Copyright © 2016, Avnet (R)
www.avnet.com
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
either express or implied. See the License for the specific
language governing permissions and limitations under the License.
@file microrl.h
@version 1.0
@date Sept 2017
======================================================================== */
/**
@file microrl.h
@brief Function prototypes for read line library with basic VT100 support.
*/
#ifndef _MICRORL_H_
#define _MICRORL_H_
#include "microrl_config.h"
//#define true 1
//#define false 0
/* define the Key codes */
#define KEY_NUL 0 /**< ^@ Null character */
#define KEY_SOH 1 /**< ^A Start of heading, = console interrupt */
#define KEY_STX 2 /**< ^B Start of text, maintenance mode on HP console */
#define KEY_ETX 3 /**< ^C End of text */
#define KEY_EOT 4 /**< ^D End of transmission, not the same as ETB */
#define KEY_ENQ 5 /**< ^E Enquiry, goes with ACK; old HP flow control */
#define KEY_ACK 6 /**< ^F Acknowledge, clears ENQ logon hand */
#define KEY_BEL 7 /**< ^G Bell, rings the bell... */
#define KEY_BS 8 /**< ^H Backspace, works on HP terminals/computers */
#define KEY_HT 9 /**< ^I Horizontal tab, move to next tab stop */
#define KEY_LF 10 /**< ^J Line Feed */
#define KEY_VT 11 /**< ^K Vertical tab */
#define KEY_FF 12 /**< ^L Form Feed, page eject */
#define KEY_CR 13 /**< ^M Carriage Return*/
#define KEY_SO 14 /**< ^N Shift Out, alternate character set */
#define KEY_SI 15 /**< ^O Shift In, resume defaultn character set */
#define KEY_DLE 16 /**< ^P Data link escape */
#define KEY_DC1 17 /**< ^Q XON, with XOFF to pause listings; "okay to send". */
#define KEY_DC2 18 /**< ^R Device control 2, block-mode flow control */
#define KEY_DC3 19 /**< ^S XOFF, with XON is TERM=18 flow control */
#define KEY_DC4 20 /**< ^T Device control 4 */
#define KEY_NAK 21 /**< ^U Negative acknowledge */
#define KEY_SYN 22 /**< ^V Synchronous idle */
#define KEY_ETB 23 /**< ^W End transmission block, not the same as EOT */
#define KEY_CAN 24 /**< ^X Cancel line, MPE echoes !!! */
#define KEY_EM 25 /**< ^Y End of medium, Control-Y interrupt */
#define KEY_SUB 26 /**< ^Z Substitute */
#define KEY_ESC 27 /**< ^[ Escape, next character is not echoed */
#define KEY_FS 28 /**< ^\ File separator */
#define KEY_GS 29 /**< ^] Group separator */
#define KEY_RS 30 /**< ^^ Record separator, block-mode terminator */
#define KEY_US 31 /**< ^_ Unit separator */
#define KEY_semi 59 /**< ; End of command string */
#define KEY_DEL 127 /**< Delete (not a real control character...) */
#define IS_CONTROL_CHAR(x) ((x)<=31)
// direction of history navigation
#define _HIST_UP 0
#define _HIST_DOWN 1
// esc seq internal codes
#define _ESC_BRACKET 1
#define _ESC_HOME 2
#define _ESC_END 3
#ifdef _USE_HISTORY
// history struct, contain internal variable
// history store in static ring buffer for memory saving
typedef struct {
char ring_buf [_RING_HISTORY_LEN];
int begin;
int end;
int cur;
} ring_history_t;
#endif
// microrl struct, contain internal library data
typedef struct {
#ifdef _USE_ESC_SEQ
char escape_seq;
char escape;
#endif
#if (defined(_ENDL_CRLF) || defined(_ENDL_LFCR))
char tmpch;
#endif
#ifdef _USE_HISTORY
ring_history_t ring_hist; // history object
#endif
char * prompt_str; // pointer to prompt string
int prompt_len; // length of prompt string without esc characters
char cmdline [_COMMAND_LINE_LEN]; // cmdline buffer
int cmdlen; // last position in command line
int cursor; // input cursor
int (*execute) (int argc, const char * const * argv ); // ptr to 'execute' callback
char ** (*get_completion) (int argc, const char * const * argv ); // ptr to 'completion' callback
void (*print) (const char *); // ptr to 'print' callback
#ifdef _USE_CTLR_C
void (*sigint) (void);
#endif
} microrl_t;
// init internal data, calls once at start up
extern void microrl_init (microrl_t * pThis, void (*print)(const char*), char *prmpt, int prmpt_len);
extern void microrl_setprompt (microrl_t * pThis, char * prmpt, int prmpt_len) ;
// set echo mode (true/false), using for disabling echo for password input
// echo mode will enabled after user press Enter.
void microrl_set_echo (int);
// set pointer to callback complition func, that called when user press 'Tab'
// callback func description:
// param: argc - argument count, argv - pointer array to token string
// must return NULL-terminated string, contain complite variant splitted by 'Whitespace'
// If complite token found, it's must contain only one token to be complitted
// Empty string if complite not found, and multiple string if there are some token
extern void microrl_set_complete_callback (microrl_t * pThis, char ** (*get_completion)(int, const char* const*));
// pointer to callback func, that called when user press 'Enter'
// execute func param: argc - argument count, argv - pointer array to token string
extern void microrl_set_execute_callback (microrl_t * pThis, int (*execute)(int, const char* const*));
// set callback for Ctrl+C terminal signal
#ifdef _USE_CTLR_C
extern void microrl_set_sigint_callback (microrl_t * pThis, void (*sigintf)(void));
#endif
// insert char to cmdline (for example call in usart RX interrupt)
extern void microrl_insert_char (microrl_t * pThis, int ch);
void new_line_handler(microrl_t * pThis);
extern microrl_t *prl;
#endif