ocaml/win32caml/history.c

99 lines
3.7 KiB
C

/***********************************************************************/
/* */
/* OCaml */
/* */
/* 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 "";
}
}