|
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 - 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»