!Simplest possible SORT program. Take a file and sort it line by line. !Parameters are infile/outfile. !Offers are invited for better routines which do the same thing... !Doesn't use the heap so currently limited to (arbitrarily) 1024 entries !J. Butler 10/85 %include "inc:util.imp" %begin %string (255) %array sa(0:1023) %integer entries,i %string (255) infile, outfile %routine stringsort(%string(255)%arrayname s) !Sort string array data throughout its length %integer i,j,k,l,n1 %string (255) temp n1 = 1 l = entries - 2 n1 = 2*n1 %while n1 1 %cycle n1 = n1 // 2 i = l %cycle i = i+1 j = i+n1 %exitif j > entries k = i %cycle %exitif s(j-1) > s(k-1) temp = s(j-1); s(j-1) = s(k-1); s(k-1) = temp j = k k = k - n1 %repeatuntil k < 1 %repeat %repeat %end ; ! of routine STRINGSORT %routine loadfile(%string (255) file, %string (255) %arrayname sa, %integername entries) %on 3,9 %start closeinput %return %finish entries=0 openinput(1, file); selectinput(1) %cycle readline(sa(entries)); entries=entries+1 %repeat %end outfile = ":t" %unless cliparam -> infile.("/").outfile infile = ":t" %if infile = "" loadfile(infile, sa, entries) %stop %if entries=0 stringsort(sa) openoutput(1, outfile); selectoutput(1) %for i=0,1,entries-1 %cycle printline(sa(i)) %repeat close output %endofprogram