home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / memacs32.zip / bpage.cmd next >
OS/2 REXX Batch file  |  1993-08-07  |  12KB  |  635 lines

  1. ;    BPAGE.CMD:    Box Macro and rectangualr region page
  2. ;            for MicroEMACS 3.9d and above
  3. ;            (C)opyright 1987 by Suresh Konda and Daniel M Lawrence
  4. ;            Last Update: 11/02/87
  5.  
  6. ; make sure the function key window is up
  7.     set %rcfkeys FALSE
  8.     toggle-fkeys
  9.     write-message "Loading..."
  10.  
  11. ; set the clean procedure up
  12. store-procedure clean
  13.     delete-buffer "[Macro 10]"
  14.     delete-buffer "[Macro 11]"
  15.     delete-buffer "[Macro 12]"
  16.     delete-buffer "[getblock]"
  17.     delete-buffer "[putblock]"
  18.     delete-buffer "[Macro 13]"
  19.     delete-buffer "[Macro 14]"
  20.     delete-buffer "[Macro 15]"
  21.     delete-buffer "[Macro 16]"
  22.     delete-buffer "[Macro 17]"
  23.     delete-buffer "[Macro 18]"
  24.     delete-buffer "[Macro 19]"
  25.     delete-buffer "[drawbox]"
  26.     delete-buffer "[setpoints]"
  27.     delete-buffer "[horizontal]"
  28.     delete-buffer "[vertical]"
  29.     delete-buffer "[horline]"
  30.     delete-buffer "[vertline]"
  31.     delete-buffer "[delcol]"
  32.     delete-buffer "[iline]"
  33. !endm
  34.  
  35. ; Write out the page instructions
  36.     save-window
  37.     1 next-window
  38.     beginning-of-file
  39.     set $curcol 25
  40.     overwrite-string " F1 Line type [DOUBLE]    F2 kill block   "
  41.     next-line
  42.     set $curcol 25
  43.     overwrite-string " F3 draw box              F4 copy block   "
  44.     next-line
  45.     set $curcol 25
  46.     overwrite-string " F5 insert line           F6 yank block   "
  47.     next-line
  48.     set $curcol 18
  49.     overwrite-string "BOX "
  50.     set $curcol 25
  51.     overwrite-string " F7 insert space          F8 insert block "
  52.     next-line
  53.     set $curcol 25
  54.     overwrite-string "                                          "
  55.     unmark-buffer
  56.     beginning-of-file
  57.     !force restore-window
  58.     update-screen
  59.  
  60. ; this sets overwrite mode to off.  to change it, set rcinsert to 1
  61. set %rcinsert 0
  62.  
  63. ;    change line type
  64.  
  65. 10    store-macro
  66.     !if &equ %rcltype 1
  67.         set %rcltype 2
  68.         set %rctmp "DOUBLE"
  69.     !else
  70.         !if &equ %rcltype 2
  71.             set %rcltype 3
  72.             set %rctmp "C-CMNT"
  73.         !else
  74.             set %rcltype 1
  75.             set %rctmp "SINGLE"
  76.         !endif
  77.     !endif
  78.     set %cbuf $cbufname
  79.     set %cline $cwline
  80.     select-buffer "Function Keys"
  81.     beginning-of-file
  82.     1 goto-line
  83.     40 forward-character
  84.     6 delete-next-character
  85.     insert-string %rctmp
  86.     unmark-buffer
  87.     select-buffer %cbuf    
  88.     %cline redraw-display
  89.     !return
  90. !endm
  91.  
  92. ;    Draw a box
  93.  
  94. 12    store-macro
  95.     !if &equal %rcltype  1
  96.         set %c1 "┌"
  97.         set %c2 "─"
  98.         set %c3 "┐"
  99.         set %c4 "└"
  100.         set %c5 "┘"
  101.         set %c6 "│"
  102.     !else
  103.         !if &equal %rcltype 2
  104.             set %c1 "╔"
  105.             set %c2 "═"
  106.             set %c3 "╗"
  107.             set %c4 "╚"
  108.             set %c5 "╝"
  109.             set %c6 "║"
  110.         !else
  111.             set %c1 "/"
  112.             set %c2 "*"
  113.             set %c3 "\"
  114.             set %c4 "\"
  115.             set %c5 "/"
  116.             set %c6 "*"
  117.         !endif
  118.     !endif
  119.     run drawbox    
  120. !endm
  121.  
  122. ;    insert a line in a box
  123.  
  124. 14    store-macro
  125.     run iline
  126. !endm
  127.  
  128. ;    insert a blank line in a box
  129.  
  130. 16    store-macro
  131.     set %rctmp %rcltype
  132.     set %rcltype 0
  133.     run iline
  134.     set %rcltype %rctmp
  135. !endm
  136.  
  137. store-procedure    iline
  138.     run setpoints
  139.     !if &equal %pcol %mcol
  140.         run vertical
  141.     !else
  142.         !if &equal %pline %mline
  143.             run horizontal
  144.         !else
  145.             write-message "Illegal point and mark for lines"
  146.         !endif
  147.     !endif
  148. !endm
  149.  
  150. store-procedure setpoints
  151. ; procedure will set pcol, pline, mcol and mline. currently at point
  152. ; it will also detab the region
  153.     set %pcol $curcol
  154.     set %pline $curline
  155.     exchange-point-and-mark
  156.     set %mcol $curcol
  157.     set %mline $curline
  158.     exchange-point-and-mark
  159.     detab-region
  160.     set $curline %pline
  161.     set $curcol %pcol
  162. !endm
  163.  
  164. store-procedure drawbox
  165.     run setpoints
  166.     set $curline %mline
  167.     set $curcol %mcol
  168. ;draw top horizontal line
  169.     insert-string %c1
  170. ;    set %width &sub &sub %pcol %mcol 1
  171.     set %width &add 2 &sub %pcol %mcol
  172.     %width insert-string %c2
  173.      insert-string %c3
  174.     newline-and-indent
  175. ;draw bottom horizontal line
  176.     %pline goto-line
  177.     next-line
  178.     end-of-line
  179.     newline
  180.     %mcol insert-string " "
  181. ;    set $curcol %mcol
  182.     insert-string %c4
  183.     %width insert-string %c2
  184.     insert-string %c5
  185. ; bump pline 
  186.     set %pline &add %pline 1
  187. ;draw verticals -- go to top and work our way down
  188.     %mline goto-line
  189.     !while &less $curline %pline
  190.         next-line
  191.         end-of-line
  192.         !if &less $curcol %pcol
  193.             &sub %pcol $curcol insert-string " "
  194.         !endif
  195.         set $curcol %pcol
  196.         insert-string " "
  197.         insert-string %c6
  198.         set $curcol %mcol
  199.         insert-string %c6
  200.         insert-string " "
  201.     !endwhile
  202. ;return to point
  203.     %pline goto-line
  204.     next-line
  205.     beginning-of-line
  206.     %width forward-character
  207.     6 forward-character
  208. !endm
  209.  
  210. ; user procedure to draw a horizontal from mark to point making spaces for
  211. ; the characters.
  212. store-procedure horizontal
  213.     set %s1 "║"
  214.     set %s2 "│"
  215.     set %s3 "*"
  216.     !if &equal %rcltype  0
  217. ;    then insert blanks
  218.         set %c1 "║"
  219.         set %c2 "│"
  220.         set %c3 " "
  221.         set %c4 "║"
  222.         set %c5 "│"
  223.         set %c6 "║"
  224.         set %c7 "│"
  225.         set %c8 "*"
  226.     !else
  227.         !if &equal %rcltype  1
  228. ;        then insert a single line
  229.             set %c1 "╟"
  230.             set %c2 "├"
  231.             set %c3 "─"
  232.             set %c4 "╫"
  233.             set %c5 "┼"
  234.             set %c6 "╢"
  235.             set %c7 "┤"
  236.             set %c8 "*"
  237.         !else
  238.             !if &equal %rcltype 2
  239. ;        then insert a double line
  240.                 set %c1 "╠"
  241.                 set %c2 "╞"
  242.                 set %c3 "═"
  243.                 set %c4 "╬"
  244.                 set %c5 "╪"
  245.                 set %c6 "╣"
  246.                 set %c7 "╡"
  247.                 set %c8 "*"
  248.             !else
  249.                 set %c1 "*"
  250.                 set %c2 "*"
  251.                 set %c3 "*"
  252.                 set %c4 "*"
  253.                 set %c5 "*"
  254.                 set %c6 "*"
  255.                 set %c7 "*"
  256.                 set %c8 "*"
  257.             !endif
  258.         !endif
  259.     !endif
  260.     run horline
  261. !endm
  262.  
  263. store-procedure vertical
  264.     set %s1 "═"
  265.     set %s2 "─"
  266.     set %s3 "*"
  267.     !if &equal %rcltype  0
  268.         set %c1 "═"
  269.         set %c2 "─"
  270.         set %c3 " "
  271.         set %c4 "═"
  272.         set %c5 "─"
  273.         set %c6 "═"
  274.         set %c7 "─"
  275.         set %c8 "*"
  276.     !else
  277.         !if &equal %rcltype  1
  278.             set %c1 "╤"
  279.             set %c2 "┬"
  280.             set %c3 "│"
  281.             set %c4 "╪"
  282.             set %c5 "┼"
  283.             set %c6 "╧"
  284.             set %c7 "┴"
  285.             set %c8 "*"
  286.         !else
  287.             !if &equal %rcltype 2
  288.                 set %c1 "╦"
  289.                 set %c2 "╥"
  290.                 set %c3 "║"
  291.                 set %c4 "╬"
  292.                 set %c5 "╫"
  293.                 set %c6 "╩"
  294.                 set %c7 "╨"
  295.                 set %c8 "*"
  296.             !else
  297.                 set %c1 "*"
  298.                 set %c2 "*"
  299.                 set %c3 "*"
  300.                 set %c4 "*"
  301.                 set %c5 "*"
  302.                 set %c6 "*"
  303.                 set %c7 "*"
  304.                 set %c8 "*"
  305.             !endif
  306.         !endif
  307.     !endif
  308.     run verline
  309. !endm
  310.  
  311. store-procedure horline
  312. ; procedure to draw a line from beginning of line to point
  313.     !if &equal %mcol %pcol
  314.         !return
  315.     !endif
  316.     set $curline %pline
  317.     set $curcol %pcol
  318.     !if &less %pcol %mcol
  319. ;    then point was to left of mark.  exchange and reset variables
  320.         exchange-point-and-mark
  321.         run setpoints
  322.     !endif
  323.     !if %rcinsert
  324.         set $curcol %mcol
  325.     !else
  326.         beginning-of-line
  327.         newline
  328.         previous-line
  329. ;        end-of-line
  330. ;        newline
  331.         ; move to under mark
  332.         %mcol insert-string " "
  333.     !endif
  334. ; see if first char is a vertical line
  335.     previous-line
  336.     set %char &chr $curchar
  337.     next-line
  338.     %rcinsert delete-next-character
  339.     !if &sequal %char %s1
  340.             insert-string %c1
  341.     !else
  342.         !if &sequal %char %s2
  343.             insert-string %c2
  344.         !else
  345.             !if &sequal %char %s3
  346.                 insert-string %c8
  347.             !else
  348.                 insert-string %c3
  349.             !endif
  350.         !endif
  351.     !endif
  352. ; now for all chars but the last character i.e., char at point
  353.     !while &less $curcol %pcol
  354.         previous-line
  355.         set %char  &chr $curchar
  356.         next-line
  357.         %rcinsert delete-next-character
  358.         !if &sequal %char %s1
  359.             insert-string %c4
  360.         !else 
  361.             !if &sequal %char %s2
  362.                 insert-string %c5
  363.             !else
  364.                 !if &sequal %char %s3
  365.                     insert-string %c8
  366.                 !else
  367.                     insert-string %c3
  368.                 !endif
  369.             !endif
  370.         !endif
  371.     !endwhile
  372. ; see if last char is a vertical line
  373.     previous-line
  374.     set %char  &chr $curchar
  375.     next-line
  376.     %rcinsert delete-next-character
  377.     !if &sequal %char %s1
  378.             insert-string %c6
  379.     !else
  380.         !if &sequal %char %s2
  381.             insert-string %c7
  382.         !else
  383.             !if &sequal %char %s3
  384.                 insert-string %c8
  385.             !else
  386.                 insert-string %c3
  387.             !endif
  388.         !endif
  389.     !endif
  390. !endm
  391.  
  392. store-procedure verline
  393. ;  proc to draw vertical line from mark to point.  mark should be above point.
  394.     !if &equal %mline %pline
  395.         !return
  396.     !endif
  397. ;    if point was above mark exchange and reset variables
  398.     !if &less %pline %mline
  399.         exchange-point-and-mark
  400.         run setpoints
  401.     !endif
  402. ;top line
  403.     %mline goto-line
  404.     set $curcol %pcol
  405.     backward-character
  406.     set %char &chr $curchar
  407.     forward-character
  408.     %rcinsert delete-next-character
  409.     !if &sequal %char %s1
  410.         insert-string %c1
  411.     !else
  412.         !if &sequal %char %s2
  413.             insert-string %c2
  414.         !else
  415.             !if &sequal %char %s3
  416.                 insert-string %c8
  417.             !else
  418.                 insert-string %c3
  419.             !endif
  420.         !endif
  421.     !endif
  422. ;all but pline
  423.     !while &less $curline &sub %pline 1
  424.         next-line
  425.         beginning-of-line
  426.         set $curcol %pcol
  427.         backward-character
  428.         set %char &chr $curchar
  429.         forward-character
  430.         %rcinsert delete-next-character
  431.         !if &sequal %char %s1
  432.             insert-string %c4
  433.         !else
  434.             !if &sequal %char %s2
  435.                 insert-string %c5
  436.             !else
  437.                 !if &sequal %char %s3
  438.                     insert-string %c8
  439.                 !else
  440.                     insert-string %c3
  441.                 !endif
  442.             !endif
  443.         !endif
  444.     !endwhile
  445. ; bottom line
  446.     next-line
  447.     beginning-of-line
  448.     set $curcol %pcol
  449.     backward-character
  450.     set %char &chr $curchar
  451.     forward-character
  452.     %rcinsert delete-next-character
  453.     !if &sequal %char %s1
  454.         insert-string %c6
  455.     !else
  456.         !if &sequal %char %s2
  457.             insert-string %c7
  458.         !else
  459.             !if &sequal %char %s3
  460.                 insert-string %c8
  461.             !else
  462.                 insert-string %c3
  463.             !endif
  464.         !endif
  465.     !endif
  466. !endm
  467.  
  468. store-procedure delcol 
  469. ; proc to delete column.  we will use the getblock procedure with the column of
  470. ; the point set to one beyond the column point
  471.     set-points
  472.     !if &equal %mcol %pcol
  473.         ; same columns
  474.         forward-character
  475.         run getblock
  476.         !return
  477.     !else
  478.         !if &equal %mline %pline
  479.         run getblock
  480.         !return
  481.     !endif
  482. !endm
  483.  
  484. ;    delete a rectangular block of text
  485.  
  486. 11    store-macro
  487.     set %bkcopy FALSE
  488.     run getblock
  489.     write-message "[Block deleted]"
  490. !endm
  491.  
  492. ;    copy a rectangular region
  493.  
  494. 13    store-macro
  495.     set %bkcopy TRUE
  496.     run getblock
  497.     write-message "[Block copied]"
  498. !endm
  499.  
  500. ;    yank a rectangular region
  501.  
  502. 15    store-macro
  503.     set %bkcopy TRUE
  504.     run putblock
  505. !endm
  506.  
  507. ;    insert a rectangular region
  508.  
  509. 17    store-macro
  510.     set %bkcopy FALSE
  511.     run putblock
  512. !endm
  513.  
  514. store-procedure getblock
  515.     ;set up needed variables
  516.     set $discmd FALSE
  517.     delete-buffer "[block]"
  518.     set %rcbuf $cbufname
  519.     set %cline $cwline
  520.  
  521.     ;save block boundries
  522.     set %endpos $curcol
  523.     set %endline $curline
  524.     detab-region
  525.     exchange-point-and-mark
  526.     set %begpos $curcol
  527.     set %begline $curline
  528.     set %blwidth &sub %endpos %begpos
  529.  
  530.     ;scan through the block
  531.     set $curline %begline
  532.     !while &less $curline &add %endline 1
  533.         ;grab the part of this line needed
  534.         !force set $curcol %begpos
  535.         set-mark
  536.         !force set $curcol %endpos
  537.         kill-region
  538.  
  539.         ;bring it back if this is just a copy
  540.         !if %bkcopy
  541.             yank
  542.         !endif
  543.  
  544.         ;put the line in the block buffer
  545.         select-buffer "[block]"
  546.         yank
  547.  
  548.         ;and pad it if needed
  549.         !if &less $curcol %blwidth
  550.             &sub %blwidth $curcol insert-space
  551.             end-of-line
  552.         !endif
  553.         forward-character
  554.  
  555.         ;onward...
  556.         select-buffer %rcbuf
  557.         next-line
  558.     !endwhile
  559.  
  560.         ;unmark the block
  561.         select-buffer "[block]"
  562.         unmark-buffer
  563.         select-buffer %rcbuf
  564.         previous-line
  565.         %cline redraw-display
  566.     set $discmd TRUE
  567. !endm
  568.  
  569. ;    insert/overlay a rectangular block of text
  570.  
  571. store-procedure putblock
  572.     ;set up needed variables
  573.     set $discmd FALSE
  574.     set %rcbuf $cbufname
  575.     set %cline $cwline
  576.  
  577.     ;save block boundries
  578.     set %begpos $curcol
  579.     set %begline $curline
  580.  
  581.     ;scan through the block
  582.     select-buffer "[block]"
  583.     beginning-of-file
  584.     set %endpos &add %begpos $lwidth
  585.     !while ¬ &equ $lwidth 0
  586.  
  587.         ;pad the destination if it is needed
  588.         select-buffer %rcbuf
  589.         beginning-of-line
  590.         !if ¬ &equ $lwidth 0
  591.             1 detab-line
  592.             previous-line
  593.         !endif
  594.         !force set $curcol %begpos
  595.         !if &less $curcol %begpos
  596.             &sub %begpos $curcol insert-space
  597.             end-of-line
  598.         !endif
  599.  
  600.         ;delete some stuff if this should overlay
  601.         !if %bkcopy
  602.             set-mark
  603.             !force set $curcol %endpos
  604.             kill-region
  605.         !endif
  606.  
  607.         ;grab the line from the block buffer
  608.         select-buffer "[block]"
  609.         beginning-of-line
  610.         set-mark
  611.         end-of-line
  612.         copy-region
  613.         forward-character
  614.  
  615.         ;put the line in the destination position
  616.         select-buffer %rcbuf
  617.         yank
  618.         next-line
  619.  
  620.         ;onward...
  621.         select-buffer "[block]"
  622.     !endwhile
  623.  
  624.     select-buffer %rcbuf
  625.     set $curline %begline
  626.     set $curcol %begpos
  627.     %cline redraw-display
  628.     set $discmd TRUE
  629. !endm
  630.  
  631.     ; and init some variables
  632.     set %rcltype 2
  633.     write-message "[Block mode loaded]"
  634.  
  635.