home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / CMDS / memacs400_cmds.lzh / MEMACS400 / CMD / bpage.cmd next >
OS/2 REXX Batch file  |  1996-04-25  |  12KB  |  637 lines

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