!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<l
      l = 0
       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