99 lines
3.7 KiB
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 "";
|
|
}
|
|
}
|