home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / text / textra / scripts / slide.textra < prev    next >
Text File  |  1995-02-27  |  4KB  |  189 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. /* 00001 mdh 10-nov-92  Added ability to cancel script */
  23. /* 00002 mdh 20-nov-92  check version (cause of 'CheckCancel') */
  24.  
  25. OPTIONS results
  26.  
  27. rex = 0; result = "NOTSUPPORTED"    /*00002*/
  28. textraversion
  29. parse var result maj min rex
  30. if (result == "NOTSUPPORTED") | (rex < 3) then do
  31.     notify "Textra V1.13 or later required for this script."
  32.     exit
  33. end
  34.  
  35.  
  36. parse arg num   /* get the argument */
  37. if (num == "") then num = 1   /* set 1 as default */
  38.  
  39. moveleft = 0
  40. if (num < 0) then
  41.     do
  42.         moveleft = 1
  43.         num = abs(num)
  44.     end
  45.  
  46. get select position   /* get the select boundary, if any */
  47.  
  48. if (result == "NO SELECT") then   /* is nothing selected? */
  49.  
  50.     do
  51.         get cursor position   /* nothing selected, get cursor pos */
  52.         parse var result   cursx ' ' cursy
  53.         LinesSelected = 0   /* means 'just cursor' */
  54.     
  55.     end
  56.     
  57. else
  58.  
  59.     do
  60.         /* yes, there is a selection, get it's boundaries */
  61.         parse var result   startx ' ' starty ' ' endx ' ' endy
  62.         LinesSelected = (endy - starty)
  63.     
  64.         /* if only the 'eol' of the previous line is selected
  65.            (nothing on this line is actually included, i.e. x==0),
  66.            then don't include it.
  67.         */
  68.         if (endx > 0) then  LinesSelected = LinesSelected + 1
  69.     
  70.     end
  71.  
  72.  
  73. if (moveleft ~= 0) then
  74.     do
  75.         maxleft = GetMinLineLen()
  76.         num = min( num, maxleft )
  77.     end
  78.     
  79.  
  80. if (LinesSelected == 0) then
  81.  
  82.     do
  83.         gotoxy 0 cursy
  84.         call addblanks
  85.         if (moveleft == 0) then
  86.             gotoxy cursx+num cursy
  87.         else
  88.             do
  89.                 newx = max(cursx-num,0)
  90.                 gotoxy newx cursy
  91.             end
  92.     end
  93.  
  94. else
  95.  
  96.     do
  97.         currline = starty; numLeft = LinesSelected
  98.         do while (numLeft > 0)
  99.             CheckCancel; if (result == CANCEL) then exit   /*00001*/
  100.             do
  101.                 gotoxy 0 currline
  102.                 call addblanks
  103.                 currline = currline + 1
  104.                 numLeft = numLeft - 1
  105.             end
  106.         end
  107.         gotoxy 0 starty
  108.         selectto 0 starty+LinesSelected
  109.     end
  110.     
  111. exit
  112.  
  113.  
  114. addblanks:
  115.     if (moveleft == 0) then
  116.     
  117.         do
  118.             blstr = '" '
  119.             i = 1
  120.             do while (i < num)
  121.                 do
  122.                     blstr = blstr || ' '
  123.                     i = i + 1
  124.                 end
  125.             end
  126.             blstr = blstr || '"'
  127.  
  128.             /* insert spaces at beginning of line */
  129.             text blstr
  130.         end
  131.     else
  132.         /* delete characters from beginning of line */
  133.         if (num > 0) then
  134.             do
  135.                 get cursor position; parse var result addbx ' ' addby
  136.                 selectto addbx+num addby
  137.                 killselect
  138.             end
  139.  
  140. return
  141.  
  142.  
  143. GetMinLineLen:   /* return smallest line length in select range */
  144. /* or length of cursor line */
  145.     if (LinesSelected == 0) then
  146.         do
  147.             mynum = 1
  148.             theLine = cursy
  149.         end
  150.     else
  151.         do
  152.             mynum = LinesSelected
  153.             theLine = starty
  154.         end
  155.     minlen = 10000
  156.     do while (mynum > 0)
  157.         do
  158.             get line theLine
  159.             thislen = length( result )
  160.             if (thislen < minlen) then  minlen = thislen
  161.             mynum = mynum - 1
  162.             theLine = theLine + 1
  163.         end
  164.     end
  165.     if (minlen == 10000) then  minlen = 0
  166. return minlen
  167.  
  168.  
  169. Debug: procedure
  170.     parse arg theString
  171.     get select position   /* get the select boundary, if any */
  172.     if (result == "NO SELECT") then   /* is nothing selected? */
  173.         do
  174.             get cursor position   /* nothing selected, get cursor pos */
  175.             parse var result   cursxdbg ' ' cursydbg
  176.             WasSelected = 0   /* means 'just cursor' */
  177.         end
  178.     else
  179.         do
  180.             /* yes, there is a selection, get it's boundaries */
  181.             parse var result   cursxdbg ' ' cursydbg ' ' endxdbg ' ' endydbg
  182.             WasSelected = 1
  183.         end
  184.     lastline
  185.     text theString
  186.     gotoxy cursxdbg cursydbg
  187.     if (WasSelected == 1) then   selectto endxdbg endydbg
  188. return
  189.