|
|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 2688 (0xa80)
Types: TextFile
Names: »ADDKEY.PAS«
└─⟦42acf21c3⟧ Bits:30005716 PolyPascal-80 v. 3.10 (RC703)
└─⟦this⟧ »ADDKEY.PAS«
└─⟦6367c43c0⟧ Bits:30004325 PolyPascal vers. 3.10 for Butler
└─⟦this⟧ »ADDKEY.PAS«
└─⟦692ac107c⟧ Bits:30005923 PolyPascal-80 V3.10 arbejdsdiskette 1
└─⟦this⟧ »ADDKEY.PAS«
└─⟦725a95225⟧ Bits:30003287 PolyPascal v. 3.10 med eksempler for RC700
└─⟦this⟧ »ADDKEY.PAS«
└─⟦f03928158⟧ Bits:30005922 PolyPascal 3.10 (RC700)
└─⟦this⟧ »ADDKEY.PAS«
└─⟦fff6648c2⟧ Bits:30004194/disk3.imd Data i Folkeskolen (Comet)
└─⟦this⟧ »ADDKEY.PAS«
æ*******************************************************å
æ å
æ PolyFile Version 1.10 å
æ å
æ ADDKEY module å
æ å
æ Copyright (C) 1985 å
æ PolyData MicroCenter A/S å
æ å
æ*******************************************************å
æ$A+,I-,R-å
PROCEDURE addkey(VAR idxf: indexfile; VAR pdr: integer; VAR pk);
VAR
pkey: p_keystr AT pk;
npr,mpr,c,i,k,l: integer;
passup: boolean;
n,m: p_nodrcp;
pe,te: p_idxrec;
æ$A-å
PROCEDURE search(npr: integer);
VAR
r: integer;
æ$A+å
PROCEDURE insert;
BEGIN
p_getn(idxf,npr,n);
WITH n^ DO
BEGIN
IF ne<nodesize THEN
BEGIN
ne:=ne+1; FOR i:=ne DOWNTO r+2 DO eÆiÅ:=eÆi-1Å;
eÆr+1Å:=pe; passup:=false;
END ELSE
BEGIN
p_newn(idxf,mpr,m);
IF r<=nodehalf THEN
BEGIN
IF r=nodehalf THEN te:=pe ELSE
BEGIN
te:=eÆnodehalfÅ;
FOR i:=nodehalf DOWNTO r+2 DO eÆiÅ:=eÆi-1Å;
eÆr+1Å:=pe;
END;
FOR i:=1 TO nodehalf DO m^.eÆiÅ:=eÆi+nodehalfÅ;
END ELSE
BEGIN
r:=r-nodehalf; te:=eÆnodehalf+1Å;
FOR i:=1 TO r-1 DO m^.eÆiÅ:=eÆi+nodehalf+1Å;
m^.eÆrÅ:=pe;
FOR i:=r+1 TO nodehalf DO m^.eÆiÅ:=eÆi+nodehalfÅ;
END;
ne:=nodehalf;
m^.ne:=nodehalf; m^.nr0:=te.nr; te.nr:=mpr;
pe:=te; p_updn(m);
END;
END;
p_updn(n);
END;
BEGIN
IF npr=0 THEN
BEGIN
passup:=true;
WITH pe DO
BEGIN
key:=pkey; dr:=pdr; nr:=0;
END;
END ELSE
BEGIN
p_getn(idxf,npr,n);
WITH n^ DO
BEGIN
l:=1; r:=ne;
REPEAT
k:=(l+r) DIV 2;
c:=p_ckey(pkey,eÆkÅ.key,pdr,eÆkÅ.dr,idxf.dupkey);
IF c<=0 THEN r:=k-1; IF c>=0 THEN l:=k+1;
UNTIL r<l;
IF l-r>1 THEN
BEGIN
ok:=false; passup:=false;
END ELSE
BEGIN
IF r=0 THEN search(nr0) ELSE search(eÆrÅ.nr);
IF passup THEN insert;
END;
END;
END;
END;
BEGIN
WITH idxf DO
BEGIN
p_xkey(pkey,klen); ok:=true; search(rr);
IF passup THEN
BEGIN
npr:=rr; p_newn(idxf,rr,n);
WITH n^ DO
BEGIN
ne:=1; nr0:=npr; eÆ1Å:=pe;
END;
p_updn(n);
END;
pp:=0;
END;
END;
«eof»