summaryrefslogtreecommitdiff
path: root/ocaml-binary-annot/win32caml/history.c
diff options
context:
space:
mode:
Diffstat (limited to 'ocaml-binary-annot/win32caml/history.c')
-rw-r--r--ocaml-binary-annot/win32caml/history.c98
1 files changed, 98 insertions, 0 deletions
diff --git a/ocaml-binary-annot/win32caml/history.c b/ocaml-binary-annot/win32caml/history.c
new file mode 100644
index 0000000000..11397ac66a
--- /dev/null
+++ b/ocaml-binary-annot/win32caml/history.c
@@ -0,0 +1,98 @@
+/***********************************************************************/
+/* */
+/* Objective Caml */
+/* */
+/* Jacob Navia, after Xavier Leroy */
+/* */
+/* Copyright 2001 Institut National de Recherche en Informatique et */
+/* en Automatique. All rights reserved. This file is distributed */
+/* under the terms of the GNU Library General Public License, with */
+/* the special exception on linking described in file ../LICENSE. */
+/* */
+/***********************************************************************/
+
+/***********************************************************************/
+/* Changes made by Chris Watford to enhance the source editor */
+/* Began 14 Sept 2003 - watford@uiuc.edu */
+/***********************************************************************/
+
+#include "inria.h"
+#include "history.h"
+
+/*------------------------------------------------------------------------
+Procedure: AddToHistory ID:2
+Author: Chris Watford watford@uiuc.edu
+Purpose: Adds an edit buffer to the history control
+Input: Pointer to the edit buffer to add
+Output:
+Errors:
+--------------------------------------------------------------------------
+Edit History:
+ 15 Sept 2003 - Chris Watford watford@uiuc.edu
+ - Complete rewrite
+ - Got it to add the edit buffer to the history
+ 17 Sept 2003 - Chris Watford watford@uiuc.edu
+ - Added doubly link list support
+------------------------------------------------------------------------*/
+void AddToHistory(EditBuffer *edBuf)
+{
+ StatementHistory *newLine;
+
+ // sanity checks
+ if(edBuf == NULL)
+ {
+ return;
+ } else if (edBuf->LineCount == 0 || edBuf->Lines == NULL) {
+ // fix any possible errors that may come from this
+ edBuf->LineCount = 0;
+ edBuf->Lines = NULL;
+ return;
+ }
+
+ // setup newline and add as the front of the linked list
+ newLine = SafeMalloc(sizeof(StatementHistory));
+ newLine->Next = History;
+ newLine->Prev = NULL;
+ newLine->Statement = edBuf;
+
+ // setup back linking
+ if(History != NULL)
+ History->Prev = newLine;
+
+ // set the history up
+ History = newLine;
+
+ // search for the new history tail
+ for(HistoryTail = (HistoryTail != NULL ? HistoryTail : History); HistoryTail->Next != NULL; HistoryTail = HistoryTail->Next);
+}
+
+/*------------------------------------------------------------------------
+Procedure: GetHistoryLine ID:2
+Author: Chris Watford watford@uiuc.edu
+Purpose: Returns an entry from the history table
+Input: Index of the history entry to return
+Output: The history entry as a single line
+Errors:
+--------------------------------------------------------------------------
+Edit History:
+ 15 Sept 2003 - Chris Watford watford@uiuc.edu
+ - Complete rewrite
+ 17 Sept 2003 - Chris Watford watford@uiuc.edu
+ - Added doubly link list support
+------------------------------------------------------------------------*/
+char *GetHistoryLine(int n)
+{
+ StatementHistory *histentry = History;
+ int i;
+
+ // traverse linked list looking for member n
+ for (i = 0; ((i < n) && (histentry != NULL)); i++, histentry = histentry->Next);
+
+ // figure out what to return
+ if (histentry != NULL)
+ {
+ return editbuffer_getasline(histentry->Statement);
+ } else {
+ return "";
+ }
+}