|
|
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«
└─⟦08ea08c61⟧ Bits:30003924 PolyPascal programmer
└─⟦this⟧ »ADDKEY.PAS«
└─⟦bffadc512⟧ Bits:30003938 SW1502 PolyPascal 3.10 (dk) til RC Partner
└─⟦bffadc512⟧ Bits:30004539 SW1402 PolyPascal v3.10 (dk) til Piccoline
└─⟦this⟧ »ADDKEY.PAS«
æ*******************************************************å
æ å
æ PolyFile Version 1.10 å
æ å
æ ADDKEY module å
æ å
æ Copyright (C) 1985 å
æ PolyData MicroCenter A/S å
æ å
æ*******************************************************å
æ$I-,K-,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;
PROCEDURE search(npr: integer);
VAR
r: integer;
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»