full history API implemented
[CleanReadLine.git] / Clean System Files / readLine.c
index c73bc06..814541c 100644 (file)
@@ -29,7 +29,8 @@ void cleanSetReadLineName(CleanString name)
 }
 
 //Readline functions
-void cleanReadLine(CleanString prompt, int history, CleanString *result, int *eof)
+void cleanReadLine(
+               CleanString prompt, int history, CleanString *result, int *eof)
 {
        char *cs_prompt = cleanStringToCString(prompt);
 
@@ -215,6 +216,61 @@ int cleanHistoryTotalBytes()
 }
 
 //Moving Around the History List
+int cleanHistorySetPos(int pos)
+{
+       return history_set_pos(pos);
+}
+
+void cleanPreviousHistory(
+               CleanString *line, CleanString *timestamp, int *null)
+{
+       *null = 0;
+       HIST_ENTRY *entry = previous_history();
+       char *cs_line = "";
+       char *cs_stamp = "";
+       if(entry == NULL){
+               *null = 1;
+       } else {
+               *null = 0;
+               cs_line = entry->line;
+               cs_stamp = entry->timestamp;
+       }
+
+       CleanStringVariable(cleanLine, strlen(cs_line));
+       *line = (CleanString) cleanLine;
+       memcpy(CleanStringCharacters(cleanLine), cs_line, strlen(cs_line));
+       CleanStringLength(cleanLine) = strlen(cs_line);
+
+       CleanStringVariable(cleanTimestamp, strlen(cs_stamp));
+       *timestamp = (CleanString) cleanTimestamp;
+       memcpy(CleanStringCharacters(cleanTimestamp), cs_stamp, strlen(cs_stamp));
+       CleanStringLength(cleanTimestamp) = strlen(cs_stamp);
+}
+
+void cleanNextHistory(CleanString *line, CleanString *timestamp, int *null)
+{
+       *null = 0;
+       HIST_ENTRY *entry = next_history();
+       char *cs_line = "";
+       char *cs_stamp = "";
+       if(entry == NULL){
+               *null = 1;
+       } else {
+               *null = 0;
+               cs_line = entry->line;
+               cs_stamp = entry->timestamp;
+       }
+
+       CleanStringVariable(cleanLine, strlen(cs_line));
+       *line = (CleanString) cleanLine;
+       memcpy(CleanStringCharacters(cleanLine), cs_line, strlen(cs_line));
+       CleanStringLength(cleanLine) = strlen(cs_line);
+
+       CleanStringVariable(cleanTimestamp, strlen(cs_stamp));
+       *timestamp = (CleanString) cleanTimestamp;
+       memcpy(CleanStringCharacters(cleanTimestamp), cs_stamp, strlen(cs_stamp));
+       CleanStringLength(cleanTimestamp) = strlen(cs_stamp);
+}
 
 //Searching the History List
 int cleanHistorySearch(CleanString s, int dir)
@@ -247,7 +303,7 @@ int cleanReadHistory(CleanString path)
        char *cs_path = cleanStringToCString(path);
        int errno = read_history(cs_path);
        free(cs_path);
-       return errno;
+       return errno == 0;
 }
 
 int cleanReadHistoryRange(CleanString path, int from, int to)
@@ -255,7 +311,7 @@ int cleanReadHistoryRange(CleanString path, int from, int to)
        char *cs_path = cleanStringToCString(path);
        int errno = read_history_range(cs_path, from, to);
        free(cs_path);
-       return errno;
+       return errno == 0;
 }
 
 int cleanWriteHistory(CleanString path)
@@ -263,7 +319,7 @@ int cleanWriteHistory(CleanString path)
        char *cs_path = cleanStringToCString(path);
        int errno = write_history(cs_path);
        free(cs_path);
-       return errno;
+       return errno == 0;
 }
 
 int cleanAppendHistory(int n, CleanString path)
@@ -271,7 +327,7 @@ int cleanAppendHistory(int n, CleanString path)
        char *cs_path = cleanStringToCString(path);
        int errno = append_history(n, cs_path);
        free(cs_path);
-       return errno;
+       return errno == 0;
 }
 
 int cleanHistoryTruncateFile(CleanString path, int nlines)
@@ -279,5 +335,5 @@ int cleanHistoryTruncateFile(CleanString path, int nlines)
        char *cs_path = cleanStringToCString(path);
        int errno = history_truncate_file(cs_path, nlines);
        free(cs_path);
-       return errno;
+       return errno == 0;
 }