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

⟦69a53b437⟧ TextFile

    Length: 3712 (0xe80)
    Types: TextFile
    Names: »NPFKEY.PAS«

Derivation

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

TextFile


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