// UI for deleting systems
ssDeleteSys()
begin
local cmd:="input({";
local systitles;
local j,p,p0,p1,k;
local selected:={};
local lib:={};
local pages:=0;
if ssLibSize then
// 'selected' is a list of which systems have been selected for deletion
selected:=makelist(0,j,1,ssLibSize);
// dynamically create the entries using the title of each system of equations
systitles:=makelist(ssCurLib(j,1),j,1,ssLibSize);
// max of 10 pages, with 7 entries per page so break into groups of 70
pages:=ip((ssLibSize-1)/70);
// now work on each block of 70
for p from 0 to pages do
p0:=p*70+1; p1:=min(p0+69,ssLibSize);
k:=0;
// here we modify 'cmd' to create a complete INPUT command sequence
// first create a list of variables, which for us is a list of entries
// each entry needs to be of the form { var_name, type, { location_list } }
// in our case, var_name is actually 'selected(#)' where # is dynamically
// generated by the index j; and k is the row number
for j from p0 to p1 do
k:=k+1;
cmd:=cmd + "{selected(" + string(j,1,0) + "),0,{94,5," + string(k-1,1,0) + "}}";
if (j<p1) then cmd:=cmd + ",\n"; end; // this line return is for debugging purposes
end;
// now add the title (and the page number if we have more than 70 systems)
cmd:=cmd + "},\n" + string(ssTDeleteSys +
"[" + string(p0,1,0) + "-" + string(p1,1,0) + "]" ) + ",\n{";
// now for the list of the labels of each entry (titles of each system of equations)
for j from p0 to p1 do
cmd:=cmd + string(systitles(j));
if (j<p1) then cmd:=cmd + ",\n"; end;
end;
cmd:=cmd + "},\n{";
// add list of help text, which is the same for all entries
for j from p0 to p1 do
cmd:=cmd + string(ssHMarkDel);
if (j<p1) then cmd:=cmd + ",\n"; end;
end;
cmd:=cmd + "})";
// leave a copy of the actual cmd string for debugging purposes
Notes(ssLogFile):=cmd;
// j can be used to detect if user canceled the UI
// the actual results are stored in 'selected'
j:=expr(cmd);
cmd:="input({"; // reset for next loop
end; // for p
// current system deleted? if so set index to 0
if ssCurSysIndex then
if selected(ssCurSysIndex) then
ssCurSysIndex:=0;
end;
end;
// rebuild library and adjust index
for j from 1 to ssLibSize do
if selected(j) then
if j < ssCurSysIndex then
ssCurSysIndex:=ssCurSysIndex - 1;
end;
else
lib(0):=ssCurLib(j);
end;
end;
ssCurLib:=lib;
AFiles(ssLibFN):=lib;
else
ssWarn(ssNoSystems);
end;
end;