home *** CD-ROM | disk | FTP | other *** search
-
- PROGRAM SORTTEST;
-
-
- CONST HIGHLITE = TRUE;
- CR = TRUE;
- NO_HIGHLITE = FALSE;
- NO_CR = FALSE;
- GET_INTEGER = FALSE;
- NUMERIC = TRUE;
- CAPSLOCK = TRUE;
- SHELL = TRUE;
- QUICK = FALSE;
-
-
- TYPE STRING255 = STRING[255];
- STRING80 = STRING[80];
- STRING30 = STRING[30];
-
- KEYREC = RECORD
- REF : INTEGER;
- KEY : STRING30
- END;
-
- KEYARRAY = ARRAY[0..500] OF KEYREC;
-
- KEYFILE = FILE OF KEYREC;
-
-
- VAR I,J,ERROR : INTEGER;
- IVAL : INTEGER;
- R : REAL;
- CH : CHAR;
- RESPONSE : STRING80;
- ESCAPE : BOOLEAN;
- WORKARRAY : KEYARRAY;
- RANDOMS : KEYFILE;
-
-
- {$I BEEP.SRC} { "Deedle-deedle" beeper procedure }
- {$I MONOTEST.SRC} { Test for presence of monochrome display }
- {$I CURSON.SRC} { Turns IBM PC text cursor back on again }
- {$I CURSOFF.SRC} { Turns off IBM PC text cursor }
- {$I KEYSTAT.PC} { KEYSTAT non-echo keyboard input function }
- {$I YES.SRC } { YES function }
- {$I WRITEAT.SRC} { WRITE_AT function for X/Y string display }
- {$I BOXSTUFF.SRC} { MAKE_BOX procedure and associated definitions }
- {$I DISKFREE.SRC} { FREE_BYTES function }
- {$I GETSTRIN.SRC} { GET_STRING formatted string input procedure }
- {$I SHELSORT.SRC} { Shell sort routine }
- {$I QUIKSORT.SRC} { Quicksort routine }
- {$I PULL.SRC } { PULL random number within a given range function }
-
-
- PROCEDURE CLEAR_REGION(X1,Y1,X2,Y2 : INTEGER);
-
- BEGIN
- WINDOW(X1,Y1,X2,Y2);
- CLRSCR;
- WINDOW(1,1,80,25)
- END;
-
-
- PROCEDURE GENERATE_RANDOM_KEYFILE(KEY_QUANTITY : INTEGER);
-
- VAR WORKKEY : KEYREC;
- SPACE : REAL;
- I,J : INTEGER;
-
- BEGIN
- ASSIGN(RANDOMS,'RANDOMS.KEY');
- REWRITE(RANDOMS);
- FOR I := 1 TO KEY_QUANTITY DO
- BEGIN
- FILLCHAR(WORKKEY,SIZEOF(WORKKEY),0);
- FOR J := 1 TO SIZEOF(WORKKEY.KEY)-1 DO
- WORKKEY.KEY[J] := CHR(PULL(65,91));
- WORKKEY.KEY[0] := CHR(30);
- WRITE(RANDOMS,WORKKEY);
- END;
- CLOSE(RANDOMS)
- END;
-
-
- PROCEDURE DISPLAY_KEYS;
-
- VAR WORKKEY : KEYREC;
-
- BEGIN
- ASSIGN(RANDOMS,'RANDOMS.KEY');
- RESET(RANDOMS);
- WINDOW(25,13,70,22);
- GOTOXY(1,1);
- WHILE NOT EOF(RANDOMS) DO
- BEGIN
- READ(RANDOMS,WORKKEY);
- WRITELN(WORKKEY.KEY)
- END;
- CLOSE(RANDOMS);
- WRITELN;
- WRITELN(' >>Press (CR)<<');
- READLN;
- CLRSCR;
- WINDOW(1,1,80,25)
- END;
-
-
-
- PROCEDURE DO_SORT(SHELL : BOOLEAN);
-
- VAR COUNTER : INTEGER;
-
- BEGIN
- ASSIGN(RANDOMS,'RANDOMS.KEY');
- RESET(RANDOMS);
- COUNTER := 1;
- WRITE_AT(20,15,NO_HIGHLITE,NO_CR,'Loading...');
- WHILE NOT EOF(RANDOMS) DO
- BEGIN
- READ(RANDOMS,WORKARRAY[COUNTER]);
- COUNTER := SUCC(COUNTER)
- END;
- CLOSE(RANDOMS);
- WRITE('...sorting...');
- IF SHELL THEN SHELLSORT(WORKARRAY,COUNTER)
- ELSE QUIKSORT(WORKARRAY,COUNTER);
- WRITE('...writing...');
- REWRITE(RANDOMS);
- FOR I := 1 TO COUNTER DO WRITE(RANDOMS,WORKARRAY[I]);
- CLOSE(RANDOMS);
- WRITELN('...done!');
- WRITE_AT(-1,21,NO_HIGHLITE,NO_CR,'>>Press (CR)<<');
- READLN;
- CLEAR_REGION(2,15,77,22)
- END;
-
-
-
- BEGIN
- CLRSCR;
- CURSOR_OFF;
- DEFINE_CHARS(GRAFCHARS);
- MAKE_BOX(1,1,80,24,GRAFCHARS);
- WRITE_AT(24,3,HIGHLITE,NO_CR,'THE COMPLETE TURBO PASCAL SORT DEMO');
- REPEAT
- WRITE_AT(25,5,NO_HIGHLITE,NO_CR,'[1] Generate file of random keys');
- WRITE_AT(25,6,NO_HIGHLITE,NO_CR,'[2] Display file of random keys');
- WRITE_AT(25,7,NO_HIGHLITE,NO_CR,'[3] Sort file via Shell sort');
- WRITE_AT(25,8,NO_HIGHLITE,NO_CR,'[4] Sort file via Quicksort');
- WRITE_AT(30,10,NO_HIGHLITE,NO_CR,'Enter 1-4: ');
- RESPONSE := ''; IVAL := 0;
- GETSTRING(46,10,RESPONSE,2,CAPSLOCK,NUMERIC,GET_INTEGER,
- R,IVAL,ERROR,ESCAPE);
- CASE IVAL OF
- 0 :;
- 1 : GENERATE_RANDOM_KEYFILE(250);
- 2 : DISPLAY_KEYS;
- 3 : DO_SORT(SHELL);
- 4 : DO_SORT(QUICK);
- ELSE
- END; {CASE}
- UNTIL (IVAL = 0) OR ESCAPE;
- CURSOR_ON
- END.