/usr/share/gap/lib/options.gi is in gap-libs 4r6p5-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 124 125 126 127 128 129 130 131 132 133 134 | #############################################################################
##
#W options.gi GAP library Steve Linton
##
##
#Y Copyright (C) 1997, Lehrstuhl D für Mathematik, RWTH Aachen, Germany
#Y (C) 1998 School Math and Comp. Sci., University of St Andrews, Scotland
#Y Copyright (C) 2002 The GAP Group
##
##
## Initially the stack is empty -- we mutate the object bound to it, but
## don't replace it, so we can make it Read Only
##
OptionsStack := [];
MakeReadOnlyGlobal("OptionsStack");
#############################################################################
##
#F PushOptions( <options record> ) set new options
##
## This is a function, not an operation, so we need to check our arguments
##
InstallGlobalFunction( PushOptions,
function(opts)
local merged, field, len;
if not IsRecord(opts) then
Error("Usage: PushOptions( <opts> )");
fi;
len := Length(OptionsStack);
if len > 0 then
merged := ShallowCopy(OptionsStack[len]);
for field in RecNames(opts) do
merged.(field) := opts.(field);
od;
else
merged := ShallowCopy(opts);
fi;
Add(OptionsStack,merged);
Info(InfoOptions,1, "Pushing ",opts);
end);
#############################################################################
##
#F PopOptions( ) remove options
##
InstallGlobalFunction( PopOptions,
function()
if Length(OptionsStack)=0 then
Info(InfoWarning,1,"Options stack is already empty");
else
Unbind(OptionsStack[Length(OptionsStack)]);
Info(InfoOptions, 1, "Popping");
fi;
end);
#############################################################################
##
#F ResetOptionsStack( ) remove all options
##
InstallGlobalFunction( ResetOptionsStack,
function()
if Length(OptionsStack)=0 then
Info(InfoWarning,1,"Options stack is already empty");
else
repeat
PopOptions();
until IsEmpty(OptionsStack);
fi;
end);
#############################################################################
##
#F OnQuit( ) currently removes all options
##
Unbind(OnQuit); # OnQuit is called from the kernel so we take great
BIND_GLOBAL( "OnQuit", # care to ensure it always has a definition. - GG
function()
if not IsEmpty(OptionsStack) then
repeat
PopOptions();
until IsEmpty(OptionsStack);
Info(InfoWarning,1,"Options stack has been reset");
fi;
end);
#############################################################################
##
#F ValueOption( <opt> ) access options
##
## Basic access function. This could get very slow if the stack gets deep
## Returns fail if option has never been bound
##
InstallGlobalFunction( ValueOption,
function(tag)
local top,len;
len := Length(OptionsStack);
if len = 0 then
Info(InfoOptions,1,
"Seeking option ",tag," found nothing");
return fail;
else
top := OptionsStack[len];
if IsBound(top.(tag)) then
Info(InfoOptions,2,
"Seeking option ",tag," found ",top.(tag));
return top.(tag);
else
Info(InfoOptions,1,
"Seeking option ",tag," found nothing");
return fail;
fi;
fi;
end);
#############################################################################
##
#F DisplayOptionsStack( ) display the options stack
##
## This function prints a human-readable display of all currently set
## options
##
InstallGlobalFunction( DisplayOptionsStack, function()
Print(OptionsStack,"\n"); end);
|