GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
#############################################################################
####
##
#W streams.gi ACE Package Greg Gamble
##
## This file installs non-user functions used in interactions with streams.
##
#Y Copyright (C) 2000 Centre for Discrete Mathematics and Computing
#Y Department of Information Technology & Electrical Eng.
#Y University of Queensland, Australia.
##
#############################################################################
####
##
#F ACE_PRINT_AND_EVAL( <varname>, <expr> ) . . . print and evaluate a string
##
## emulates a user typing at the `gap> ' prompt: `<varname> := <expr>;' and
## prints and returns the evaluation of <expr>; <varname> and <expr> should
## be strings.
##
InstallGlobalFunction(ACE_PRINT_AND_EVAL, function(varname, expr)
Print("gap> ", varname, " := ", ReplacedString(expr, "\n ", "\n>"), ";\n");
expr := EvalString(expr);
Print(expr, "\n");
return expr;
end);
#############################################################################
####
##
#F ACE_READ_NEXT_LINE(<iostream>) . read complete line but never return fail
##
## We know there is a complete line to be got; so we wait for it, before
## returning.
##
InstallGlobalFunction(ACE_READ_NEXT_LINE, function(iostream)
return ReadAllLine(iostream, true);
end);
#############################################################################
####
##
#F FLUSH_ACE_STREAM_UNTIL(<iostream>, <infoLevelFlushed>, <infoLevelMyLine>,
## <readline>, <IsMyLine>) . . . . . . flush a stream until a desired line
##
## reads lines in iostream <iostream> via function <readline> and `Info's
## those lines at `InfoACELevel' <infoLevelFlushed> until a line <line> for
## which `<IsMyLine>(<line>) is `true'. The line <line> is then `Info'-ed at
## `InfoACELevel' <infoLevelMyLine> and returned.
##
InstallGlobalFunction(FLUSH_ACE_STREAM_UNTIL,
function(iostream, infoLevelFlushed, infoLevelMyLine, readline, IsMyLine)
local line;
line := readline(iostream);
while not IsMyLine(line) do
Info(InfoACE, infoLevelFlushed, Chomp(line));
line := readline(iostream);
od;
if line <> fail and infoLevelMyLine < 10 then
Info(InfoACE, infoLevelMyLine, Chomp(line));
fi;
return line;
end);
#############################################################################
####
##
#F WRITE_LIST_TO_ACE_STREAM( <stream>, <list> ) . . . write to an ACE stream
##
## writes the list <list> to the iostream <stream>, `Info's <list> following
## a `ToACE> ' ``prompt'' at `InfoACE' level 4, returns `true' if successful
## or `fail' otherwise.
##
InstallGlobalFunction(WRITE_LIST_TO_ACE_STREAM, function(stream, list)
local string;
if not IsOutputTextStream(stream) and IsEndOfStream(stream) then
Info(InfoACE + InfoWarning, 1, "Sorry. Process stream has died!");
Info(InfoACE + InfoWarning, 1,
"You might like to try using 'ACEResurrectProcess(<i>);'");
return fail;
fi;
string := Concatenation( List(list, String) );
Info(InfoACE, 4, "ToACE> ", string);
return WriteLine(stream, string);
end);
#E streams.gi . . . . . . . . . . . . . . . . . . . . . . . . . . ends here