home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 626a.lha / Textra_v1.12 / Scripts / Slide.textra < prev    next >
Text File  |  1991-10-22  |  4KB  |  177 lines

  1.     /*******************************************************************
  2.      *   TEXTRA AREXX script -- Mike Haas, 1991, All Rights Reserved.  *
  3.      * Freely distributable ONLY as a component of the TEXTRA package. *
  4.      * This banner may not be removed or altered (improvements to the  *
  5.      *    actual program welcome).  Please document and send to me.    *
  6.      *        !!! PLACE THIS FILE IN YOUR REXX: DIRECTORY !!!          *
  7.      *******************************************************************/
  8.  
  9. /* Slide-Textra <num>
  10.  *
  11.  * this routine moves lines containing any portion of a selection
  12.  * (or the current cursor line) by <num> spaces.
  13.  *
  14.  * If <num> is positive, the move is to the right. Negative, left.
  15.  *
  16.  * If <num> is not provided, it's default value is 1.  A move to
  17.  * the left will terminate if a line either runs out of characters
  18.  * or some character other than BLANK enters the first column.
  19.  *
  20.  */
  21.  
  22. OPTIONS results
  23.  
  24.  
  25. parse arg num   /* get the argument */
  26. if (num == "") then num = 1   /* set 1 as default */
  27.  
  28. moveleft = 0
  29. if (num < 0) then
  30.     do
  31.         moveleft = 1
  32.         num = abs(num)
  33.     end
  34.  
  35. get select position   /* get the select boundary, if any */
  36.  
  37. if (result == "NO SELECT") then   /* is nothing selected? */
  38.  
  39.     do
  40.         get cursor position   /* nothing selected, get cursor pos */
  41.         parse var result   cursx ' ' cursy
  42.         LinesSelected = 0   /* means 'just cursor' */
  43.     
  44.     end
  45.     
  46. else
  47.  
  48.     do
  49.         /* yes, there is a selection, get it's boundaries */
  50.         parse var result   startx ' ' starty ' ' endx ' ' endy
  51.         LinesSelected = (endy - starty)
  52.     
  53.         /* if only the 'eol' of the previous line is selected
  54.            (nothing on this line is actually included, i.e. x==0),
  55.            then don't include it.
  56.         */
  57.         if (endx > 0) then  LinesSelected = LinesSelected + 1
  58.     
  59.     end
  60.  
  61.  
  62. if (moveleft ~= 0) then
  63.     do
  64.         maxleft = GetMinLineLen()
  65.         num = min( num, maxleft )
  66.     end
  67.     
  68.  
  69. if (LinesSelected == 0) then
  70.  
  71.     do
  72.         gotoxy 0 cursy
  73.         call addblanks
  74.         if (moveleft == 0) then
  75.             gotoxy cursx+num cursy
  76.         else
  77.             do
  78.                 newx = max(cursx-num,0)
  79.                 gotoxy newx cursy
  80.             end
  81.     end
  82.  
  83. else
  84.  
  85.     do
  86.         currline = starty; numLeft = LinesSelected
  87.         do while (numLeft > 0)
  88.             do
  89.                 gotoxy 0 currline
  90.                 call addblanks
  91.                 currline = currline + 1
  92.                 numLeft = numLeft - 1
  93.             end
  94.         end
  95.         gotoxy 0 starty
  96.         selectto 0 starty+LinesSelected
  97.     end
  98.     
  99. exit
  100.  
  101.  
  102. addblanks:
  103.     if (moveleft == 0) then
  104.     
  105.         do
  106.             blstr = '" '
  107.             i = 1
  108.             do while (i < num)
  109.                 do
  110.                     blstr = blstr || ' '
  111.                     i = i + 1
  112.                 end
  113.             end
  114.             blstr = blstr || '"'
  115.  
  116.             /* insert spaces at beginning of line */
  117.             text blstr
  118.         end
  119.     else
  120.         /* delete characters from beginning of line */
  121.         if (num > 0) then
  122.             do
  123.                 get cursor position; parse var result addbx ' ' addby
  124.                 selectto addbx+num addby
  125.                 cut
  126.             end
  127.  
  128. return
  129.  
  130.  
  131. GetMinLineLen:   /* return smallest line length in select range */
  132. /* or length of cursor line */
  133.     if (LinesSelected == 0) then
  134.         do
  135.             mynum = 1
  136.             theLine = cursy
  137.         end
  138.     else
  139.         do
  140.             mynum = LinesSelected
  141.             theLine = starty
  142.         end
  143.     minlen = 10000
  144.     do while (mynum > 0)
  145.         do
  146.             get line theLine
  147.             thislen = length( result )
  148.             if (thislen < minlen) then  minlen = thislen
  149.             mynum = mynum - 1
  150.             theLine = theLine + 1
  151.         end
  152.     end
  153.     if (minlen == 10000) then  minlen = 0
  154. return minlen
  155.  
  156.  
  157. Debug: procedure
  158.     parse arg theString
  159.     get select position   /* get the select boundary, if any */
  160.     if (result == "NO SELECT") then   /* is nothing selected? */
  161.         do
  162.             get cursor position   /* nothing selected, get cursor pos */
  163.             parse var result   cursxdbg ' ' cursydbg
  164.             WasSelected = 0   /* means 'just cursor' */
  165.         end
  166.     else
  167.         do
  168.             /* yes, there is a selection, get it's boundaries */
  169.             parse var result   cursxdbg ' ' cursydbg ' ' endxdbg ' ' endydbg
  170.             WasSelected = 1
  171.         end
  172.     lastline
  173.     text theString
  174.     gotoxy cursxdbg cursydbg
  175.     if (WasSelected == 1) then   selectto endxdbg endydbg
  176. return
  177.