DataMuseum.dk

Presents historical artifacts from the history of:

MIKADOS

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

See our Wiki for more about MIKADOS

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦c433e0772⟧ TextFile

    Length: 7488 (0x1d40)
    Types: TextFile
    Notes: Mikados_K
    Names: »SORTKUND.K«

Derivation

└─⟦eb89399bc⟧ Bits:30008990 SOM ISFORIG, MEN KUN K-FILER
    └─⟦this⟧ »SORTKUND.K« 

Mikados K File

PROGRAM SORTKUND;
CONST NR=100;
TYPE
POST=RECORD
       NR1,NR2:INTEGER;
       FNAVN:PACKED ARRAY (1..4) OF CHAR;
       KEY:PACKED ARRAY (1..26) OF CHAR;
       UNAVN:PACKED ARRAY (1..30) OF CHAR;
       ADR:PACKED ARRAY (1..30) OF CHAR;
       LANDSBY:PACKED ARRAY (1..20) OF CHAR;
       POSTNR:PACKED ARRAY (1..25) OF CHAR;
       TLF:PACKED ARRAY (1..10) OF CHAR
END;
PROCSTAT=RECORD
       NP,NROSTART:INTEGER
END;
NPFILE=FILE OF PROCSTAT;
VAR    FIL:STRING(20);
       NRPF,CF:NPFILE;
       NRR:INTEGER;
       T:FILE OF POST;
       OKEY:PACKED ARRAY (1..26) OF CHAR;
       QUQ:^INTEGER;
       POSTER:ARRAY (1..NR) OF POST;
 
PROCEDURE SORT(VAR NROWF:INTEGER);
VAR O,I,J,AIP,AUP,REST,CAP,ACTIVE
       :INTEGER;
       ST:FILE OF POST;
       IND:ARRAY (1..NR) OF INTEGER;
BEGIN
  IND(1):=1;
  IND(NR):=NR;
  CAP:=NR-1;
  NROWF:=0;
  REST:=0;
  AUP:=0;
  POSTER(1).KEY:=T^.KEY;
  POSTER(NR).KEY:=OKEY;
  FOR I:=2 TO CAP DO
  BEGIN
    GET(T);
    IF EOF(T) THEN
    BEGIN
      REST:=I-1;
      CAP:=I-1;
      CLOSE(T)
    END
    ELSE
    WITH POSTER(I) DO
    BEGIN
      NR1:=T^.NR1;
      NR2:=T^.NR2;
      FNAVN:=T^.FNAVN;
      KEY:=T^.KEY;
      UNAVN:=T^.UNAVN;
      ADR:=T^.ADR;
      LANDSBY:=T^.LANDSBY;
      POSTNR:=T^.POSTNR;
      TLF:=T^.TLF;
      IND(I):=I
    END
  END;
  AIP:=CAP-1;
  FOR I:=2 TO CAP DO
  BEGIN
    ACTIVE:=I;
    FOR J:=I+1 TO CAP DO
      IF POSTER(IND(ACTIVE)).KEY>POSTER(IND(J)).KEY THEN ACTIVE:=J;
    IF ACTIVE>I THEN
    BEGIN
      AUP:=IND(ACTIVE);
      IND(ACTIVE):=IND(I);
      IND(I):=AUP
    END
  END;
  (*NU ER POSTERNE SORTERET*)
  AUP:=0;
  REPEAT
    IF REST>0 THEN CAP:=REST;
    NROWF:=NROWF+1;
    FIL(5):=CHR(NROWF DIV 100 +48);
    FIL(6):=CHR(NROWF MOD 100 DIV 10 +48);
    FIL(7):=CHR(NROWF MOD 10 +48);
    REWRITE(ST,FIL);
    ACTIVE:=2;
    REPEAT
      O:=IND(ACTIVE);
      ST^:=POSTER(O);
      PUT(ST);
      AUP:=AUP+1;
      OKEY:=POSTER(O).KEY;
      GET(T);
      IF (REST<>0) OR (T^.KEY=POSTER(NR).KEY) THEN
      BEGIN
        IF REST=0 THEN BEGIN REST:=ACTIVE-1 END;
        ACTIVE:=ACTIVE+1
      END
      ELSE
      BEGIN
        POSTER(O):=T^;
        AIP:=AIP+1;
        IF POSTER(O).KEY>=OKEY THEN
        BEGIN
          I:=ACTIVE;
          WHILE (I<CAP) AND (POSTER(IND(I+1)).KEY<POSTER(O).KEY) DO
          BEGIN
            IND(I):=IND(I+1);
            I:=I+1
          END;
          IND(I):=O
        END
        ELSE
        BEGIN
          I:=ACTIVE;
          WHILE (I>1) AND (POSTER(IND(I-1)).KEY>POSTER(O).KEY) DO
          BEGIN
            IND(I):=IND(I-1);
            I:=I-1
          END;
          IND(I):=O;
          ACTIVE:=ACTIVE+1
        END
      END
    UNTIL ACTIVE>CAP;
    FILLCHAR(ST^.KEY(1),26,CHR(126));
    ST^.NR1:=0;
    ST^.NR2:=0;
    FILLCHAR(ST^.FNAVN(1),4,CHR(32));
FILLCHAR(ST^.UNAVN(1),30,CHR(32));
FILLCHAR(ST^.ADR(1),30,CHR(32));
FILLCHAR(ST^.LANDSBY(1),20,CHR(32));
FILLCHAR(ST^.POSTNR(1),25,CHR(32));
FILLCHAR(ST^.TLF(1),10,CHR(32));
    PUT(ST);
    CLOSE(ST);
  UNTIL (REST=CAP) OR (REST=1);
  OKEY:=POSTER(NR).KEY;
  WRITELN('ANTAL INDLÆSTE, ANTAL UDSKREVNE ',AIP:6,AUP:6)
END;
PROCEDURE FLET(NROWF:INTEGER);
VAR I,J,AIP,AUP,RF,SM
               :INTEGER;
       FIL1,FIL2,FIL3,FIL4,FIL5,FIL6,FIL7,FIL8,FIL9:FILE OF POST;
BEGIN
  AIP:=0;
  FOR   I:=1 TO NROWF DO
  BEGIN
    FIL(5):=CHR(I DIV 100 +48);
    FIL(6):=CHR(I MOD 100 DIV 10 +48);
    FIL(7):=CHR(I MOD 10 +48);
    CASE I OF
    1: BEGIN
         RESET(FIL1,FIL);
         GET(FIL1)
       END;
    2: BEGIN
         RESET(FIL2,FIL);
         GET(FIL2)
       END;
    3: BEGIN
         RESET(FIL3,FIL);
         GET(FIL3)
       END;
    4: BEGIN
         RESET(FIL4,FIL);
         GET(FIL4)
       END;
    5: BEGIN
         RESET(FIL5,FIL);
         GET(FIL5)
       END;
    6: BEGIN
         RESET(FIL6,FIL);
         GET(FIL6)
       END;
    7: BEGIN
         RESET(FIL7,FIL);
         GET(FIL7)
       END;
    8: BEGIN
         RESET(FIL8,FIL);
         GET(FIL8)
       END;
    9: BEGIN
         RESET(FIL9,FIL);
         GET(FIL9)
       END
    END;
    AIP:=AIP+1;
  END;
  AUP:=0;
  REPEAT
    SM:=1;
    T^:=FIL1^;
    FOR I:=2 TO NROWF DO
    CASE I OF
    2: IF FIL2^.KEY<T^.KEY THEN BEGIN SM:=I;T^:=FIL2^ END;
    3: IF FIL3^.KEY<T^.KEY THEN BEGIN SM:=I;T^:=FIL3^ END;
    4: IF FIL4^.KEY<T^.KEY THEN BEGIN SM:=I;T^:=FIL4^ END;
    5: IF FIL5^.KEY<T^.KEY THEN BEGIN SM:=I;T^:=FIL5^ END;
    6: IF FIL6^.KEY<T^.KEY THEN BEGIN SM:=I;T^:=FIL6^ END;
    7: IF FIL7^.KEY<T^.KEY THEN BEGIN SM:=I;T^:=FIL7^ END;
    8: IF FIL8^.KEY<T^.KEY THEN BEGIN SM:=I;T^:=FIL8^ END;
    9: IF FIL8^.KEY<T^.KEY THEN BEGIN SM:=I;T^:=FIL9^ END
    END;
    IF T^.KEY<OKEY THEN
    BEGIN
      PUT(T);AUP:=AUP+1;
    CASE SM OF
    1:GET(FIL1);
    2:GET(FIL2);
    3:GET(FIL3);
    4:GET(FIL4);
    5:GET(FIL5);
    6:GET(FIL6);
    7:GET(FIL7);
    8:GET(FIL8);
    9:GET(FIL9)
    END;
    END
  UNTIL T^.KEY=OKEY;
  CLOSE(T);
  WRITELN('ANTAL SORTEREDE ',AUP:5);
END;
PROCEDURE PRINT;
BEGIN
  GET(T);
  WHILE NOT EOF(T) DO
  BEGIN
 WRITELN(LIST,T^.KEY:26,' , ',T^.FNAVN:4,' ':30,T^.NR1*10000.0+T^.NR2:8:-2);
    WRITELN(LIST,' ':29,T^.UNAVN);
    WRITELN(LIST,' ':29,T^.ADR);
    WRITELN(LIST,' ':29,T^.LANDSBY);
    WRITELN(LIST,' ':29,T^.POSTNR,'TLF: ':8,T^.TLF);
    WRITELN(LIST,' ');
    WRITELN(LIST,' ');
    WRITELN(LIST,' ');
    GET(T)
  END
END;
BEGIN
  WRITELN('SORTKUNDE');
  FIL:='ALISTE:P1:30:K';
  RESET(T,FIL);
  FIL:='WORK000:P1:30:K';
  FILLCHAR(T^.KEY(1),26,CHR(32));
  FILLCHAR(OKEY(1),26,CHR(126));
NRR:=0;
  SORT(NRR);
  CLOSE(T);
  FIL:='A1LISTE:P1:30:K';
  REWRITE(T,FIL);
  FIL:='WORK000:P1:30:K';
  FILLCHAR(OKEY(1),26,CHR(126));
  FLET(NRR);
  FIL:='A1LISTE:P1:30:K';
  RESET(T,FIL);
  PRINT;
  FIL:='PROCSTAT:P2:0:I';
(*$C-*)
  REPEAT
    REWRITE(NRPF,FIL);
    SEEK(NRPF,1)
  UNTIL IORESULT=0;
(*$C+*)
  GET(NRPF);
  NRPF^.NP:=1;
  SEEK(NRPF,1);
  PUT(NRPF);
  REPEAT
    GOTOXY(1,20);
    WRITELN('Sæt plade 1 i drev 1 og tryk RETURN');
    READLN;
(*$C-*)
    REWRITE(CF,'C1:P1:0:J');
    SEEK(CF,1)
(*$C+*)
  UNTIL IORESULT=0;
  CLOSE(CF);
  CLOSE(NRPF);
  CHAIN('INTRE   *1','HOVSA:P1',QUQ)
END.

Full view