|
DataMuseum.dkPresents historical artifacts from the history of: Jet Computer Jet80 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Jet Computer Jet80 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 2688 (0xa80) Types: TextFile Names: »ADDKEY.PAS«
└─⟦692ac107c⟧ Bits:30005923 PolyPascal-80 V3.10 arbejdsdiskette 1 └─ ⟦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»