home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Professional
/
OS2PRO194.ISO
/
os2
/
prgramer
/
pli
/
sort
< prev
next >
Wrap
Text File
|
1987-09-30
|
2KB
|
80 lines
CLRSCR;
PRINT(SYSPRINT,REPEAT(' ',36),'Sort');
PUTCRLF;
PUTCRLF;
PUTCRLF;
PRINT(SYSPRINT,'Input file descriptor? ');
input_file_descriptor=GETSTRING;
infile=OPEN(input_file_descriptor,'r');
infile_eof=FALSE;
num_lines=0;
DO WHILE(! infile_eof);
tem_string=GETSTRING(infile);
IF ENDFILE(infile) THEN
infile_eof=TRUE;
ELSE
DO;
num_lines=num_lines+1;
line(num_lines)=tem_string;
END;
END;
PRINT(SYSPRINT,'Output file descriptor? ');
output_file_descriptor=GETSTRING;
outfile=OPEN(output_file_descriptor,'w');
IF num_lines > 0 THEN
DO;
left=num_lines/2;
left=left+1;
right=num_lines;
tem_string=line(1);
finished=FALSE;
DO WHILE(right > 1);
IF left > 1 THEN
DO;
left=left-1;
tem_string=line(left);
END;
ELSE
DO;
tem_string=line(right);
line(right)=line(1);
right=right-1;
END;
IF right > 1 THEN
DO;
key_index_2=left;
finished=FALSE;
DO WHILE(! finished);
key_index_1=key_index_2;
key_index_2=2*key_index_2;
IF key_index_2 > right THEN
finished=TRUE;
ELSE
DO;
IF key_index_2 != right THEN
DO;
IF UPPER(line(key_index_2))
< UPPER(line(key_index_2+1)) THEN
key_index_2=key_index_2+1;
END;
IF UPPER(tem_string) >= UPPER(line(key_index_2)) THEN
finished=TRUE;
ELSE
DO;
line(key_index_1)=line(key_index_2);
END;
END;
END;
line(key_index_1)=tem_string;
END;
END;
line(1)=tem_string;
line_num=1;
DO WHILE(line_num <= num_lines);
PRINT(outfile,line(line_num));
PUTCRLF(outfile);
line_num=line_num+1;
END;
END;
CLOSE(outfile);