ACC SHELL

Path : /proc/self/root/usr/share/slsh/rline/
File Upload :
Current File : //proc/self/root/usr/share/slsh/rline/history.sl

% Public functions:
%   
%   rline_load_history (file);
%   rline_save_history (file);
%

variable RLine_Hist_Max_Lines = 50;

variable RLine_History_File = NULL;

define rline_load_history ()
{
   variable file = RLine_History_File;
   if (_NARGS == 1)
     file = ();
   if (file == NULL)
     return;

   variable fp = fopen (file, "r");
   if (fp == NULL)
     return;
   
   variable lines = fgetslines (fp);
   () = fclose (fp);
   lines = array_map (String_Type, &strtrim_end, lines, "\n");
   rline_set_history (lines);
}

define rline_save_history ()
{
   variable file = RLine_History_File;
   if (_NARGS == 1)
     file = ();
   if (file == NULL)
     return;

   variable max_lines = qualifier ("max", RLine_Hist_Max_Lines);
   variable h = rline_get_history ();
   variable n = length (h);
   if (n > max_lines)
     h = h[[n-max_lines:]];
   
   variable fd = open (file, O_WRONLY|O_CREAT|O_TRUNC|O_TEXT, S_IRUSR|S_IWUSR);
   if (fd == NULL)
     return;

   variable fp = fdopen (fd, "w");
   if (fp == NULL)
     return;

   foreach (h)
     {
	variable line = ();
	() = fputs (line, fp);
	() = fputs ("\n", fp);
     }
   () = fflush (fp);
   () = close (fd);
}

ACC SHELL 2018