1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
#############################################################################
##
#W session.g GAP library Steve Linton
##
##
#Y Copyright (C) 2007 The GAP Group
##
## This file contains GAP functions which define the structure of a GAP session
## SESSION is called from init.g or from POST_RESTORE depending on whether
## this is a normal startup or startup from saved workspace
##
OnGAPPromptHook := fail; # set some values to suppress warning
SaveOnExitFile := fail;
InstallAtExit( function()
if not QUITTING and IsBound(SaveOnExitFile) and
IsString(SaveOnExitFile) then
SaveWorkspace(SaveOnExitFile);
fi;
end);
BIND_GLOBAL("PROGRAM_CLEAN_UP", function()
local f;
if IsBound( GAPInfo.AtExitFuncs ) and IsList( GAPInfo.AtExitFuncs ) then
for f in GAPInfo.AtExitFuncs do
if IsFunction(f) then
CALL_WITH_CATCH(f,[]); # really should be CALL_WITH_CATCH here
fi;
od;
fi;
end);
BIND_GLOBAL("SESSION",
function()
local prompt;
if GAPInfo.CommandLineOptions.q then
prompt := "";
else
prompt := "gap> ";
fi;
SHELL( GetBottomLVars(), # in global context
false, # no return
false, # no return obj
3, # set last, last2 and last3 each command
true, # set time after each command
prompt,
function()
if IsBound(OnGAPPromptHook) and IsFunction(OnGAPPromptHook) then
OnGAPPromptHook();
else
return;
fi;
end,
"*stdin*",
"*stdout*",
true);
BreakOnError := false;
end);
BindGlobal("POST_RESTORE", function()
local f;
for f in GAPInfo.PostRestoreFuncs do
if IsFunction(f) then
f();
fi;
od;
SESSION();
PROGRAM_CLEAN_UP();
end);
if IsHPCGAP then
BIND_GLOBAL("THREAD_SESSION",
function()
local f, prompt;
if GAPInfo.CommandLineOptions.q then
prompt := "";
else
prompt := "gap> ";
fi;
SHELL( GetBottomLVars(), # in global context
false, # no return
false, # no return obj
3, # set last, last2 and last3 each command
true, # set time after each command
prompt,
function()
if IsBound(OnGAPPromptHook) and IsFunction(OnGAPPromptHook) then
OnGAPPromptHook();
else
return;
fi;
end,
"*defin*",
"*defout*",
true);
BreakOnError := false;
end);
DEFAULT_INPUT_STREAM := function()
if CurrentThread() = 0 then
return "*stdin*";
else
return InputTextNone();
fi;
end;
DEFAULT_OUTPUT_STREAM := function()
return "*stdout*";
end;
fi;
|