home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 3 / CDASC03.ISO / sorties / 2078 / differ.kex < prev    next >
Encoding:
Text File  |  1993-04-01  |  2.1 KB  |  73 lines

  1. * compare current and given files or all windows, stay at difference
  2. * locate lines, or nonblank words if SCROLLLOCK
  3. * comparison starts after current line (and column for words)
  4. B = SCROLLLOCK(); F = FILEID.1(); W = LSCREEN.3()'.'LSCREEN.4();
  5. do C = 1
  6.     if B then do; 'set stream ON'; 'set wrap OFF'; end
  7.     if MULTWINDOW() then
  8.         do
  9.         A. = 'sos tabcmdf'; A.C; if W = LSCREEN.3()'.'LSCREEN.4() then leave;
  10.         end
  11.     else if ARG() then
  12.         do
  13.         N = WORD( ARG(1) , C );
  14.         if N = '' then do; A.0 = 'kedit' F '(nodefext'; A.0; leave; end
  15.         'kedit' N '(nodefext'; A.C = 'kedit' FILEID.1() '(nodefext';
  16.         end
  17.     else
  18.         do
  19.         A. = 'kedit'; A.C; if FILEID.1() = F then leave;
  20.         end
  21. end
  22. C = C-1; D = 0; E = 0; W = WIDTH.1()-14;
  23. do forever
  24.     G = 0;
  25.     if SELECT.1() > DISPLAY.1() & E > C then
  26.         do
  27.         L = SUBSTR( CURLINE.3() , ZONE.1() , ZONE.2()-ZONE.1()+1 );
  28.         do T = 1 to C
  29.             A.T; 'extract /DISPLAY'; 'set display' DISPLAY.1+1; 'up';
  30.             'nomsg tfind 'SUBSTR( L , 1 , MIN( ZONE.2()-ZONE.1()+1 , W ) )'';
  31.             if RC \= 0 then G = G+1; 'set display' DISPLAY.1 DISPLAY.2;
  32.         end
  33.         A.0; if G > 0 then leave;
  34.         end
  35.     else if E > 0 | D > 0 then
  36.         leave;
  37.     D = 0;
  38.     if B then
  39.         do forever
  40.         'clocate / /'; 'clocate ^/ /'; E = RC \= 0;
  41.         L = WORD( SUBSTR( CURLINE.3() , COLUMN.1() ) , 1 );
  42.         do T = 1 to C
  43.             A.T; 'clocate / /'; 'clocate ^/ /';
  44.             E = E + ( RC \= 0 | SELECT.1() > DISPLAY.1() );
  45.             if WORD( SUBSTR( CURLINE.3() , COLUMN.1() ) , 1 ) \== L then D = D+1;
  46.         end
  47.         A.0;
  48.         if E > 0 | D > 0 then
  49.             do
  50.             do T = 1 to C; A.T; 'cursor column'; end
  51.             A.0; 'cursor column'; leave;
  52.             end
  53.         end
  54.     else
  55.         do forever
  56.         'next'; L = CURLINE.3();
  57.         do T = 1 to C; A.T; 'next'; if CURLINE.3() \== L then D = D+1; end
  58.         A.0;
  59.         if FOCUSEOF() | SELECT.1() > DISPLAY.1() | D > 0 then
  60.             do
  61.             E = FOCUSEOF() | SELECT.1() > DISPLAY.1();
  62.             do T = 1 to C;
  63.                 A.T; E = E + ( FOCUSEOF() | SELECT.1() > DISPLAY.1() );
  64.             end
  65.             A.0; leave;
  66.             end
  67.         end
  68. end
  69. if G > 0 then 'msg DIFFER' G 'range separator(s) missing';
  70. else if E > D then 'msg DIFFER end of' E 'file(s)/ranges(s)';
  71. else if D > 0 then 'msg DIFFER' D 'difference(s)';
  72. 'sos beep';
  73.