DataMuseum.dk

Presents historical artifacts from the history of:

CP/M

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦caa2c93b7⟧ TextFile

    Length: 2688 (0xa80)
    Types: TextFile
    Names: »ADDKEY.PAS«

Derivation

└─⟦74e5ee6fb⟧ Bits:30002683 PolyPascal-86 v. 3.11 - Piccoline
└─⟦74e5ee6fb⟧ Bits:30003934 SW1402 PolyPascal v3.11 (dk) til Piccoline
    └─ ⟦this⟧ »ADDKEY.PAS« 

TextFile


æ*******************************************************å
æ                                                       å
æ                 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;
«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»«nul»