DEFINITION MODULE DATA;
FROM SYSTEM IMPORT ADDRESS,WORD;
PROCEDURE SWAPBYTE(VAR A,B:WORD);
PROCEDURE CLEAR(V:ARRAY OF WORD);
PROCEDURE FILL(V:ARRAY OF WORD;X:WORD);
PROCEDURE FILL2(V:ARRAY OF WORD;N:CARDINAL);
PROCEDURE MOVE(SRC,DST:ADDRESS;NUM:CARDINAL);
PROCEDURE SEARCHA(VAR A:ADDRESS;VAR n:CARDINAL;l:CARDINAL;
                  B:ADDRESS;Bsiz:CARDINAL):BOOLEAN;
PROCEDURE MATCH(A,B:ADDRESS;Bsiz:CARDINAL):BOOLEAN;
PROCEDURE SEARCH1(VAR A:ADDRESS;VAR n:CARDINAL;
                  B:ADDRESS;Bsiz:CARDINAL):BOOLEAN;
PROCEDURE MEMPAGE(N:SHORTCARD);
TYPE SPROC=PROCEDURE(CARDINAL,CARDINAL);
     GPROC=PROCEDURE(CARDINAL,CARDINAL):BOOLEAN;
PROCEDURE QSORT(FIRST,LAST:CARDINAL;GRT:GPROC;SWAP:SPROC);
END DATA.
IMPLEMENTATION MODULE DATA;
PROCEDURE SWAPBYTE(VAR A,B:WORD);HEX
C1 D1 E1 E5 D5 C5 46 1A 77 78 12 C9 END SWAPBYTE;

PROCEDURE CLEAR(V:ARRAY OF WORD);HEX
59 50 01 00 00 18 15 END CLEAR;
PROCEDURE FILL(V:ARRAY OF WORD;X:WORD);HEX
DD E1 3B F1 E1 D1 3B 47 4F 18 06 END FILL;
PROCEDURE FILL2(V:ARRAY OF WORD;N:CARDINAL);HEX
DD E1 C1 E1 D1 C5 C5 C5 DD E5 13 19 CB 3A CB 1B
30 02 2B 71 7B D6 12 5F 30 05 14 15 28 25 15 EB
CD (@4BH) EB 08 D9 21 00 00 39 D9 F9 18 09 C5 C5
C5 C5 C5 C5 C5 C5 1B 7A B3 20 F3 21 00 00 39 D9
F9 D9 08 C6 12 2B 70 2B 71 3D 20 F9 C9 END FILL2;
 
PROCEDURE MOVE(SRC,DST:ADDRESS;NUM:CARDINAL);HEX
DD E1 C1 D1 E3 D5 C5 DD E5 78 B1 C8 ED 52 19 38
03 ED B0 C9 09 2B EB 09 2B EB ED B8 C9 END MOVE;
 
PROCEDURE SEARCHA(VAR A:ADDRESS;VAR n:CARDINAL;l:CARDINAL;
                  B:ADDRESS;Bsiz:CARDINAL):BOOLEAN;HEX
DD E1 C1 78 B1 C6 FF D1 1A 08 13 0B D9 D1 E1 4E
23 46 E3 7E 23 E5 66 6F 1B 18 01 19 78 B1 37 28
19 08 30 16 CD (@MATCH+1BH) 37 20 10 08 E5 D9 E1 D5 C5
CD (@MATCH+10H) C1 D1 D9 20 E3 2B 03 D1 EB 72 2B 73 E1
E5 70 2B 71 E5 E5 E5 E5 3F DD E9 END SEARCHA;
PROCEDURE SEARCH1(VAR A:ADDRESS;VAR n:CARDINAL;
                  B:ADDRESS;Bsiz:CARDINAL):BOOLEAN;HEX
DD E1 C1 78 B1 C6 FF D1 1A 08 13 0B D9 E1 4E 23
46 E3 7E 23 E5 66 6F 78 B1 37 28 18 08 30 15 ED
B1 37 20 10 08 E5 D9 E1 D5 C5 CD (@MATCH+10H) C1 D1 D9
20 E5 2B 03 D1 EB 72 2B 73 E1 18 BA END SEARCH1;
PROCEDURE MATCH(A,B:ADDRESS;Bsiz:CARDINAL):BOOLEAN;HEX
DD E1 C1 D1 E3 D5 C5 DD E5 CD (@MATCH+10H) 37 C8 3F C9
78 B1 C8 1A ED A1 E0 13 28 F6 C9 ED A1 C8 19 EA
(@MATCH+1BH) C9 END MATCH;

PROCEDURE MEMPAGE(N:SHORTCARD);HEX
F6 10 01 FD 7F ED 79 C9 END MEMPAGE;
 
PROCEDURE QSORT(FIRST,LAST:CARDINAL;GRT:GPROC;SWAP:SPROC);
VAR I,J,R:CARDINAL;
BEGIN
I:=FIRST;J:=LAST+1;
LOOP
 REPEAT DEC(J);IF I=J THEN EXIT END UNTIL NOT GRT(J,I);
 SWAP(I,J);
 REPEAT INC(I);IF I=J THEN EXIT END UNTIL NOT GRT(J,I);
 SWAP(I,J) END;
J:=I-FIRST;R:=LAST-I;
IF J>2 THEN IF J<R THEN QSORT(FIRST,I-1,GRT,SWAP);J:=0 END END;
IF (R>2) THEN QSORT(I+1,LAST,GRT,SWAP)
ELSIF (R=2) THEN IF GRT(LAST-1,LAST) THEN SWAP(LAST-1,LAST) END END;
IF J>2 THEN QSORT(FIRST,I-1,GRT,SWAP)
ELSIF J=2 THEN IF GRT(FIRST,FIRST+1) THEN SWAP(FIRST,FIRST+1) END END
END QSORT;
END DATA.
