2 * HISTORY.C - command line history.
7 * 14/01/95 (Tim Norman)
10 * 08/08/95 (Matt Rains)
11 * i have cleaned up the source code. changes now bring this source
12 * into guidelines for recommended programming practice.
14 * 27-Jul-1998 (John P Price <linux-guru@gcfl.net>)
15 * added config.h include
17 * 25-Jan-1999 (Eric Kohl <ekohl@abo.rhein-zeitung.de>)
19 * Unicode and redirection safe!
24 #ifdef FEATURE_HISTORY
34 static INT history_size
= 2048; /* make this configurable later */
37 VOID
History (INT dir
, LPTSTR commandline
)
39 static LPTSTR history
= NULL
;
40 static LPTSTR lines
[MAXLINES
];
41 static INT curline
= 0;
42 static INT numlines
= 0;
43 static INT maxpos
= 0;
49 history
= malloc (history_size
* sizeof (TCHAR
));
57 if (curline
< numlines
)
62 if (curline
== numlines
)
68 _tcscpy (commandline
, lines
[curline
]);
79 _tcscpy (commandline
, lines
[curline
]);
84 /* remove oldest string until there's enough room for next one */
85 /* strlen (commandline) must be less than history_size! */
86 while ((maxpos
+ (INT
)_tcslen (commandline
) + 1 > history_size
) || (numlines
>= MAXLINES
))
88 length
= _tcslen (lines
[0]) + 1;
90 for (count
= 0; count
< maxpos
&& count
+ (lines
[1] - lines
[0]) < history_size
; count
++)
92 history
[count
] = history
[count
+ length
];
97 for (count
= 0; count
<= numlines
&& count
< MAXLINES
; count
++)
99 lines
[count
] = lines
[count
+ 1] - length
;
104 ConOutPrintf (_T("Reduced size: %ld lines\n"), numlines
);
106 for (count
= 0; count
< numlines
; count
++)
108 ConOutPrintf (_T("%d: %s\n"), count
, lines
[count
]);
113 _tcscpy (lines
[numlines
], commandline
);
115 lines
[numlines
] = lines
[numlines
- 1] + _tcslen (commandline
) + 1;
116 maxpos
+= _tcslen (commandline
) + 1;
117 /* last line, empty */