|
|
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: 3712 (0xe80)
Types: TextFile
Names: »NPFKEY.PAS«
└─⟦08ea08c61⟧ Bits:30003924 PolyPascal programmer
└─⟦this⟧ »NPFKEY.PAS«
└─⟦bffadc512⟧ Bits:30003938 SW1502 PolyPascal 3.10 (dk) til RC Partner
└─⟦bffadc512⟧ Bits:30004539 SW1402 PolyPascal v3.10 (dk) til Piccoline
└─⟦this⟧ »NPFKEY.PAS«
æ*******************************************************å
æ å
æ PolyFile Version 1.10 å
æ å
æ NPFKEY module å
æ å
æ Copyright (C) 1985 å
æ PolyData MicroCenter A/S å
æ å
æ*******************************************************å
æ$I-,K-,R-å
PROCEDURE nextkey(VAR idxf: indexfile; VAR pdr: integer; VAR pk);
VAR
pkey: p_keystr AT pk;
r: integer;
n: p_nodrcp;
BEGIN
WITH idxf DO
BEGIN
IF pp=0 THEN r:=rr ELSE
WITH pathÆppÅ DO
BEGIN
p_getn(idxf,nr,n); r:=n^.eÆepÅ.nr;
END;
WHILE r<>0 DO
BEGIN
pp:=pp+1;
WITH pathÆppÅ DO
BEGIN
nr:=r; ep:=0;
END;
p_getn(idxf,r,n); r:=n^.nr0;
END;
IF pp<>0 THEN
BEGIN
WHILE (pp>1) AND (pathÆppÅ.ep=n^.ne) DO
BEGIN
pp:=pp-1; p_getn(idxf,pathÆppÅ.nr,n);
END;
IF pathÆppÅ.ep<n^.ne THEN WITH pathÆppÅ DO
BEGIN
ep:=ep+1;
WITH n^.eÆepÅ DO
BEGIN
pkey:=key; pdr:=dr;
END;
END ELSE pp:=0;
END;
ok:=pp<>0;
END;
END;
PROCEDURE prevkey(VAR idxf: indexfile; VAR pdr: integer; VAR pk);
VAR
pkey: p_keystr AT pk;
r: integer;
n: p_nodrcp;
BEGIN
WITH idxf DO
BEGIN
IF pp=0 THEN r:=rr ELSE
WITH pathÆppÅ DO
BEGIN
p_getn(idxf,nr,n); ep:=ep-1;
IF ep=0 THEN r:=n^.nr0 ELSE r:=n^.eÆepÅ.nr;
END;
WHILE r<>0 DO
BEGIN
p_getn(idxf,r,n); pp:=pp+1;
WITH pathÆppÅ DO
BEGIN
nr:=r; ep:=n^.ne;
END;
WITH n^ DO r:=eÆneÅ.nr;
END;
IF pp<>0 THEN
BEGIN
WHILE (pp>1) AND (pathÆppÅ.ep=0) DO
BEGIN
pp:=pp-1; p_getn(idxf,pathÆppÅ.nr,n);
END;
IF pathÆppÅ.ep>0 THEN WITH n^.eÆpathÆppÅ.epÅ DO
BEGIN
pkey:=key; pdr:=dr;
END ELSE pp:=0;
END;
ok:=pp<>0;
END;
END;
PROCEDURE p_finkey(VAR idxf: indexfile; VAR pdr: integer; VAR pk);
VAR
pkey: p_keystr AT pk;
npr,c,k,l,r: integer;
rkey: p_keystr;
n: p_nodrcp;
BEGIN
WITH idxf DO
BEGIN
p_xkey(pkey,klen); ok:=false; pp:=0; npr:=rr;
WHILE (npr<>0) AND NOT ok DO
BEGIN
pp:=pp+1; pathÆppÅ.nr:=npr; 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,0,eÆkÅ.dr,dupkey);
IF c<=0 THEN r:=k-1; IF c>=0 THEN l:=k+1;
UNTIL r<l;
IF l-r>1 THEN
BEGIN
pdr:=eÆkÅ.dr; r:=k; ok:=true;
END;
IF r=0 THEN npr:=nr0 ELSE npr:=eÆrÅ.nr;
END;
pathÆppÅ.ep:=r;
END;
IF NOT ok AND (pp>0) THEN
BEGIN
WHILE (pp>1) AND (pathÆppÅ.ep=0) DO pp:=pp-1;
IF pathÆppÅ.ep=0 THEN pp:=0;
END;
END;
END;
PROCEDURE findkey(VAR idxf: indexfile; VAR pdr: integer; VAR pk);
VAR
pkey: p_keystr AT pk;
tkey: p_keystr;
BEGIN
p_finkey(idxf,pdr,pkey);
IF NOT ok AND idxf.dupkey THEN
BEGIN
tkey:=pkey; nextkey(idxf,pdr,pkey);
ok:=ok AND (pkey=tkey);
END;
END;
PROCEDURE searchkey(VAR idxf: indexfile; VAR pdr: integer; VAR pk);
VAR
pkey: p_keystr AT pk;
BEGIN
p_finkey(idxf,pdr,pkey);
IF NOT ok THEN nextkey(idxf,pdr,pkey);
END;
«eof»