c81e7dbaf706cb9c1118bffece1aaa6d3c13e1c2
4 #include <readline/readline.h>
5 #include <readline/history.h>
9 static char *cs_answer
= (char *)NULL
;
11 char *cleanStringToCString(CleanString s
){
12 unsigned long len
= CleanStringLength(s
);
13 char *cs
= (char *)malloc(len
+1);
15 printf("malloc failed...\n");
18 memcpy(cs
, CleanStringCharacters(s
), len
);
23 void cleanReadLine(CleanString prompt
, int history
, CleanString
*result
)
25 char *cs_prompt
= cleanStringToCString(prompt
);
27 //Get the answer and add to history if not empty
30 cs_answer
= (char *)NULL
;
32 cs_answer
= readline(cs_prompt
);
34 if(cs_answer
&& *cs_answer
&& history
){
35 add_history(cs_answer
);
38 if(!cs_answer
){ //In case of an EOF
39 CleanStringVariable(answer
, 1);
40 *result
= (CleanString
) answer
;
41 memcpy(CleanStringCharacters(answer
), "", 1);
42 CleanStringLength(answer
) = 1;
43 } else { //In case of a proper response
44 CleanStringVariable(answer
, strlen(cs_answer
));
45 *result
= (CleanString
) answer
;
46 memcpy(CleanStringCharacters(answer
), cs_answer
, strlen(cs_answer
));
47 CleanStringLength(answer
) = strlen(cs_answer
);
51 void cleanSetReadLineName(CleanString name
){
52 rl_readline_name
= cleanStringToCString(name
);
55 void cleanUsingHistory(){
59 void cleanGetState(int *offset
, int *num
, int *flags
){
60 *offset
= history_get_history_state()->offset
;
61 *num
= history_get_history_state()->length
;
62 *flags
= history_get_history_state()->flags
;
65 void cleanGetHistoryItem(int num
, CleanString
*line
, CleanString
*timestamp
){
67 char *cs_line
= history_get_history_state()->entries
[num
]->line
;
68 char *cs_stamp
= history_get_history_state()->entries
[num
]->timestamp
;
70 CleanStringVariable(cleanLine
, strlen(cs_line
));
71 *line
= (CleanString
) cleanLine
;
72 memcpy(CleanStringCharacters(cleanLine
), cs_line
, strlen(cs_line
));
73 CleanStringLength(cleanLine
) = strlen(cs_line
);
75 CleanStringVariable(cleanTimestamp
, strlen(cs_stamp
));
76 *timestamp
= (CleanString
) cleanTimestamp
;
77 memcpy(CleanStringCharacters(cleanTimestamp
), cs_stamp
, strlen(cs_stamp
));
78 CleanStringLength(cleanTimestamp
) = strlen(cs_stamp
);
81 void cleanAddHistory(CleanString entry
){
82 char *cs_entry
= cleanStringToCString(entry
);
83 add_history(cs_entry
);
87 void cleanClearHistory(){
91 int cleanHistorySearch(CleanString s
, int dir
){
92 char *cs_s
= cleanStringToCString(s
);
93 int ret
= history_search(cs_s
, dir
);
98 int cleanHistorySearchPrefix(CleanString s
, int dir
){
99 char *cs_s
= cleanStringToCString(s
);
100 int ret
= history_search_prefix(cs_s
, dir
);
105 int cleanHistorySearchPos(CleanString s
, int dir
, int pos
){
106 char *cs_s
= cleanStringToCString(s
);
107 int ret
= history_search_pos(cs_s
, dir
, pos
);
112 int cleanReadHistory(CleanString path
)
114 char *cs_path
= cleanStringToCString(path
);
115 int errno
= read_history(cs_path
);
120 int cleanReadHistoryRange(CleanString path
, int from
, int to
)
122 char *cs_path
= cleanStringToCString(path
);
123 int errno
= read_history_range(cs_path
, from
, to
);
128 int cleanWriteHistory(CleanString path
)
130 char *cs_path
= cleanStringToCString(path
);
131 int errno
= write_history(cs_path
);
136 int cleanAppendHistory(int n
, CleanString path
)
138 char *cs_path
= cleanStringToCString(path
);
139 int errno
= append_history(n
, cs_path
);
144 int cleanHistoryTruncateFile(CleanString path
, int nlines
)
146 char *cs_path
= cleanStringToCString(path
);
147 int errno
= history_truncate_file(cs_path
, nlines
);