home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / jed098-4.zip / JED / LIB / SORT.SL < prev    next >
Text File  |  1997-02-01  |  1KB  |  74 lines

  1. define sort_mycmp ()
  2. {
  3.    strcmp ((), ()) < 0;
  4. }
  5.   
  6. define sort_using_function (sort_fun)
  7. {
  8.    variable end_line, n, index, i, beg, begc, endc, keys;
  9.  
  10.    check_region(0);
  11.    endc = what_column();
  12.    end_line = what_line();
  13.    pop_mark_1 ();
  14.    beg = what_line();
  15.   
  16.    n = end_line - beg; ++n;           %/* number of lines */
  17.    begc = what_column();
  18.   
  19.    if (endc < begc)
  20.      {
  21.     endc; endc = begc; =begc;
  22.      }
  23.    
  24.    keys = create_array('s', n, 1);
  25.   
  26.   %
  27.   % extract keys and fill array
  28.   %
  29.  
  30.    goto_line(beg);
  31.    for (i = 0; i < n; ++i)
  32.      {
  33.     goto_column(begc);
  34.     push_mark_eol();
  35.     if (what_column() > endc) goto_column(endc);
  36.     keys[i] = bufsubstr();
  37.     go_down_1 ();
  38.      }
  39.    
  40.    index = array_sort(keys, sort_fun);
  41.  
  42.    %
  43.    %  arrange region
  44.    %
  45.    goto_line (end_line);
  46.    !if (down_1 ())
  47.      {
  48.     eol();
  49.     newline();
  50.      }
  51.    
  52.    push_spot();
  53.    for(i = 0; i < n; ++i)
  54.      {
  55.     goto_line(index[i] + beg); 
  56.     line_as_string ();            %  on stack-- also we are at eol now
  57.     pop_spot();
  58.     bol(); insert(()); newline();
  59.     push_spot();
  60.      }
  61.    pop_spot();
  62.    goto_line(beg);
  63.    bol(); push_mark();
  64.    goto_line(end_line + 1);
  65.    bol(); del_region();
  66. }
  67.  
  68. define sort ()
  69. {
  70.    sort_using_function ("sort_mycmp");
  71.    %flush("Done.");
  72. }
  73.  
  74.