/usr/share/gap/lib/options.gi is in gap-libs 4r7p9-1.
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 | #############################################################################
##
#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 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);
|