Super nodes provide the equivalent of an array of keys.
SNODE_CREATOR(0;SB1,M,SB2==>c;SNODE) {"create snode"}. If SB1 is not an official prompt space bank, c will be 1. If four nodes and one page cannot be obtained from SB1, c will be 2. If some space created from SB1 is zapped [define!] before the SNODE_CREATOR call returns, it may return either 2 or kt+1 in c or it may not return at all (but the SNODE_CREATOR remains prompt). If such space is zapped later, calls to the snode may do likewise. Otherwise, c will be 0 and SNODE will be the only key to a new snode. Space bank SB2 will be used to obtain space needed by the snode after the time of its creation. SB2 need not be an official space bank, but if it does not behave as a space bank there are no promises as to what the snode will do. The snode will run under meter M. SNODE will have write rights. The initial state of the snode is as if a "clear" had just been done.
SNODE_CREATOR(kt;==>c;) returns X'020D' in c.
SNODE(41,((4,n));==>0;K) {"Fetch"}. Returns in K the contents of slot n of the snode.
SNODE(32;==>0;SNODE2) {"Restrict rights"}. Returns in SNODE2 a key to the same snode with no write rights.
SNODE(43;==>c;) {"Destroy"}. If SNODE does not have write rights c will be kt+2. Otherwise attempts to return all space used by the snode to the space bank that it came from, changes all keys to the snode to DK(0) and then returns with c=0. Any keys stored in the snode are lost.
SNODE(kt+4;==>c;) Same as SNODE(43;==>c;).
SNODE(kt;==>c;) returns X'030D' in c.
The scheme implements a virtual copy much like a supernode. The new part of the supernode would be built as a sparse supernode. Portions of the virtual copy like the original would be referred to by a distinguished key {such as a fetch key or a node key with a distinctive databyte}.
{arcane}The current plans for the "forked-time" facility {(formative,forkedtime)} for PL/I assumes copies of supernodes, preferably virtual.