home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / apps / text_ed / emacs / bpage.cmd < prev    next >
OS/2 REXX Batch file  |  1989-06-07  |  11KB  |  559 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.     execute-macro-1
  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.         set %rcltype 1
  71.         set %rctmp "SINGLE"
  72.     !endif
  73.     set %cbuf $cbufname
  74.     set %cline $cwline
  75.     select-buffer "Function Keys"
  76.     beginning-of-file
  77.     1 goto-line
  78.     40 forward-character
  79.     6 delete-next-character
  80.     insert-string %rctmp
  81.     unmark-buffer
  82.     select-buffer %cbuf    
  83.     %cline redraw-display
  84.     !return
  85. !endm
  86.  
  87. ;    Draw a box
  88.  
  89. 12    store-macro
  90.     !if &equal %rcltype  1
  91.         set %c1 "Z"
  92.         set %c2 "D"
  93.         set %c3 "?"
  94.         set %c4 "@"
  95.         set %c5 "Y"
  96.         set %c6 "3"
  97.     !else
  98.         set %c1 "I"
  99.         set %c2 "M"
  100.         set %c3 ";"
  101.         set %c4 "H"
  102.         set %c5 "<"
  103.         set %c6 ":"
  104.     !endif
  105.     run drawbox    
  106. !endm
  107.  
  108. ;    insert a line in a box
  109.  
  110. 14    store-macro
  111.     run iline
  112. !endm
  113.  
  114. ;    insert a blank line in a box
  115.  
  116. 16    store-macro
  117.     set %rctmp %rcltype
  118.     set %rcltype 0
  119.     run iline
  120.     set %rcltype %rctmp
  121. !endm
  122.  
  123. store-procedure    iline
  124.     run setpoints
  125.     !if &equal %pcol %mcol
  126.         run vertical
  127.     !else
  128.         !if &equal %pline %mline
  129.             run horizontal
  130.         !else
  131.             write-message "Illegal point and mark for lines"
  132.         !endif
  133.     !endif
  134. !endm
  135.  
  136. store-procedure setpoints
  137. ; procedure will set pcol, pline, mcol and mline. currently at point
  138.     set %pcol $curcol
  139.     set %pline $curline
  140.     exchange-point-and-mark
  141.     set %mcol $curcol
  142.     set %mline $curline
  143.     exchange-point-and-mark
  144. !endm
  145.  
  146. store-procedure drawbox
  147.     run setpoints
  148.     set $curline %mline
  149.     set $curcol %mcol
  150. ;draw top horizontal line
  151.     insert-string %c1
  152. ;    set %width &sub &sub %pcol %mcol 1
  153.     set %width &sub %pcol %mcol
  154.     %width insert-string %c2
  155.      insert-string %c3
  156.     newline-and-indent
  157. ;draw bottom horizontal line
  158.     %pline goto-line
  159.     next-line
  160.     end-of-line
  161.     newline
  162.     set $curcol %mcol
  163.     insert-string %c4
  164.     %width insert-string %c2
  165.     insert-string %c5
  166. ; bump pline 
  167.     set %pline &add %pline 1
  168. ;draw verticals -- go to top and work our way down
  169.     %mline goto-line
  170.     !while &less $curline %pline
  171.         next-line
  172.         detab-line
  173.         previous-line
  174.         end-of-line
  175.         !if &less $curcol %pcol
  176.             &sub %pcol $curcol insert-string " "
  177.         !endif
  178.         set $curcol %pcol
  179.         insert-string %c6
  180.         set $curcol %mcol
  181.         insert-string %c6
  182.     !endwhile
  183. ;return to point
  184.     %pline goto-line
  185.     next-line
  186.     beginning-of-line
  187.     %width forward-character
  188.     2 forward-character
  189. !endm
  190.  
  191. ; user procedure to draw a horizontal from mark to point making spaces for
  192. ; the characters.
  193. store-procedure horizontal
  194.     set %s1 ":"
  195.     set %s2 "3"
  196.     !if &equal %rcltype  0
  197. ;    then insert blanks
  198.         set %c1 ":"
  199.         set %c2 "3"
  200.         set %c3 " "
  201.         set %c4 ":"
  202.         set %c5 "3"
  203.         set %c6 ":"
  204.         set %c7 "3"
  205.     !else
  206.         !if &equal %rcltype  1
  207. ;        then insert a single line
  208.             set %c1 "G"
  209.             set %c2 "C"
  210.             set %c3 "D"
  211.             set %c4 "W"
  212.             set %c5 "E"
  213.             set %c6 "6"
  214.             set %c7 "4"
  215.         !else
  216. ;        then insert a double line
  217.             set %c1 "L"
  218.             set %c2 "F"
  219.             set %c3 "M"
  220.             set %c4 "N"
  221.             set %c5 "X"
  222.             set %c6 "9"
  223.             set %c7 "5"
  224.         !endif
  225.     !endif
  226.     run horline
  227. !endm
  228.  
  229. store-procedure vertical
  230.     set %s1 "M"
  231.     set %s2 "D"
  232.     !if &equal %rcltype  0
  233.         set %c1 "M"
  234.         set %c2 "D"
  235.         set %c3 " "
  236.         set %c4 "M"
  237.         set %c5 "D"
  238.         set %c6 "M"
  239.         set %c7 "D"
  240.     !else
  241.         !if &equal %rcltype  1
  242.             set %c1  "Q"
  243.             set %c2 "B"
  244.             set %c3  "3"
  245.             set %c4 "X"
  246.             set %c5  "E"
  247.             set %c6 "O"
  248.             set %c7  "A"
  249.         !else
  250.             set %c1 "K"
  251.             set %c2  "R"
  252.             set %c3 ":"
  253.             set %c4  "N"
  254.             set %c5 "W"
  255.             set %c6  "J"
  256.             set %c7 "P"
  257.         !endif
  258.     !endif
  259.     run verline
  260. !endm
  261.  
  262. store-procedure horline
  263. ; procedure to draw a line from beginning of line to point
  264.     !if &equal %mcol %pcol
  265.         !return
  266.     !endif
  267.     !if &less %pcol %mcol
  268. ;    then point was to left of mark.  exchange and reset variables
  269.         exchange-point-and-mark
  270.         run setpoints
  271.     !endif
  272.     !if %rcinsert
  273.         set $curcol %mcol
  274.     !else
  275.         end-of-line
  276.         newline
  277.         ; move to under mark
  278.         %mcol insert-string " "
  279.     !endif
  280. ; see if first char is a vertical line
  281.     previous-line
  282.     set %char &chr $curchar
  283.     next-line
  284.     %rcinsert delete-next-character
  285.     !if &sequal %char %s1
  286.             insert-string %c1
  287.     !else
  288.         !if &sequal %char %s2
  289.             insert-string %c2
  290.         !else
  291.             insert-string %c3
  292.         !endif
  293.     !endif
  294. ; now for all chars but the last character i.e., char at point
  295.     !while &less $curcol %pcol
  296.         previous-line
  297.         set %char  &chr $curchar
  298.         next-line
  299.         %rcinsert delete-next-character
  300.         !if &sequal %char %s1
  301.             insert-string %c4
  302.             !else 
  303.             !if &sequal %char %s2
  304.                 insert-string %c5
  305.             !else
  306.                 insert-string %c3
  307.             !endif
  308.         !endif
  309.     !endwhile
  310. ; see if last char is a vertical line
  311.     previous-line
  312.     set %char  &chr $curchar
  313.     next-line
  314.     %rcinsert delete-next-character
  315.     !if &sequal %char %s1
  316.             insert-string %c6
  317.     !else
  318.         !if &sequal %char %s2
  319.             insert-string %c7
  320.         !else
  321.             insert-string %c3
  322.         !endif
  323.     !endif
  324. !endm
  325.  
  326. store-procedure verline
  327. ;  proc to draw vertical line from mark to point.  mark should be above point.
  328.     !if &equal %mline %pline
  329.         !return
  330.     !endif
  331. ;    if point was above mark exchange and reset variables
  332.     !if &less %pline %mline
  333.         exchange-point-and-mark
  334.         run setpoints
  335.     !endif
  336. ;top line
  337.     %mline goto-line
  338.     set $curcol %pcol
  339.     backward-character
  340.     set %char &chr $curchar
  341.     forward-character
  342.     %rcinsert delete-next-character
  343.     !if &sequal %char %s1
  344.         insert-string %c1
  345.     !else
  346.         !if &sequal %char %s2
  347.             insert-string %c2
  348.         !else
  349.             insert-string %c3
  350.         !endif
  351.     !endif
  352. ;all but pline
  353.     !while &less $curline &sub %pline 1
  354.         next-line
  355.         beginning-of-line
  356.         set $curcol %pcol
  357.         backward-character
  358.         set %char &chr $curchar
  359.         forward-character
  360.         %rcinsert delete-next-character
  361.         !if &sequal %char %s1
  362.             insert-string %c4
  363.         !else
  364.             !if &sequal %char %s2
  365.                 insert-string %c5
  366.             !else
  367.                 insert-string %c3
  368.             !endif
  369.         !endif
  370.     !endwhile
  371. ; bottom line
  372.     next-line
  373.     beginning-of-line
  374.     set $curcol %pcol
  375.     backward-character
  376.     set %char &chr $curchar
  377.     forward-character
  378.     %rcinsert delete-next-character
  379.     !if &sequal %char %s1
  380.         insert-string %c6
  381.     !else
  382.         !if &sequal %char %s2
  383.             insert-string %c7
  384.         !else
  385.             insert-string %c3
  386.         !endif
  387.     !endif
  388. !endm
  389.  
  390. store-procedure delcol 
  391. ; proc to delete column.  we will use the getblock procedure with the column of
  392. ; the point set to one beyond the column point
  393.     set-points
  394.     !if &equal %mcol %pcol
  395.         ; same columns
  396.         forward-character
  397.         run getblock
  398.         !return
  399.     !else
  400.         !if &equal %mline %pline
  401.         run getblock
  402.         !return
  403.     !endif
  404. !endm
  405.  
  406. ;    delete a rectangular block of text
  407.  
  408. 11    store-macro
  409.     set %bkcopy FALSE
  410.     run getblock
  411.     write-message "[Block deleted]"
  412. !endm
  413.  
  414. ;    copy a rectangular region
  415.  
  416. 13    store-macro
  417.     set %bkcopy TRUE
  418.     run getblock
  419.     write-message "[Block copied]"
  420. !endm
  421.  
  422. ;    yank a rectangular region
  423.  
  424. 15    store-macro
  425.     set %bkcopy TRUE
  426.     run putblock
  427. !endm
  428.  
  429. ;    insert a rectangular region
  430.  
  431. 17    store-macro
  432.     set %bkcopy FALSE
  433.     run putblock
  434. !endm
  435.  
  436. store-procedure getblock
  437.     ;set up needed variables
  438.     set $discmd FALSE
  439.     delete-buffer "[block]"
  440.     set %rcbuf $cbufname
  441.     set %cline $cwline
  442.  
  443.     ;save block boundries
  444.     set %endpos $curcol
  445.     set %endline $curline
  446.     exchange-point-and-mark
  447.     set %begpos $curcol
  448.     set %begline $curline
  449.     set %blwidth &sub %endpos %begpos
  450.  
  451.     ;detab the region
  452.     &add &sub %endline %begline 1 detab-line
  453.  
  454.     ;scan through the block
  455.     set $curline %begline
  456.     !while &less $curline &add %endline 1
  457.         ;grab the part of this line needed
  458.         !force set $curcol %begpos
  459.         set-mark
  460.         !force set $curcol %endpos
  461.         kill-region
  462.  
  463.         ;bring it back if this is just a copy
  464.         !if %bkcopy
  465.             yank
  466.         !endif
  467.  
  468.         ;put the line in the block buffer
  469.         select-buffer "[block]"
  470.         yank
  471.  
  472.         ;and pad it if needed
  473.         !if &less $curcol %blwidth
  474.             &sub %blwidth $curcol insert-space
  475.             end-of-line
  476.         !endif
  477.         forward-character
  478.  
  479.         ;onward...
  480.         select-buffer %rcbuf
  481.         next-line
  482.     !endwhile
  483.  
  484.         ;unmark the block
  485.         select-buffer "[block]"
  486.         unmark-buffer
  487.         select-buffer %rcbuf
  488.         previous-line
  489.         %cline redraw-display
  490.     set $discmd TRUE
  491. !endm
  492.  
  493. ;    insert/overlay a rectangular block of text
  494.  
  495. store-procedure putblock
  496.     ;set up needed variables
  497.     set $discmd FALSE
  498.     set %rcbuf $cbufname
  499.     set %cline $cwline
  500.  
  501.     ;save block boundries
  502.     set %begpos $curcol
  503.     set %begline $curline
  504.  
  505.     ;scan through the block
  506.     select-buffer "[block]"
  507.     beginning-of-file
  508.     set %endpos &add %begpos $lwidth
  509.     !while ¬ &equ $lwidth 0
  510.  
  511.         ;pad the destination if it is needed
  512.         select-buffer %rcbuf
  513.         beginning-of-line
  514.         !if ¬ &equ $lwidth 0
  515.             detab-line
  516.             previous-line
  517.         !endif
  518.         !force set $curcol %begpos
  519.         !if &less $curcol %begpos
  520.             &sub %begpos $curcol insert-space
  521.             end-of-line
  522.         !endif
  523.  
  524.         ;delete some stuff if this should overlay
  525.         !if %bkcopy
  526.             set-mark
  527.             !force set $curcol %endpos
  528.             kill-region
  529.         !endif
  530.  
  531.         ;grab the line from the block buffer
  532.         select-buffer "[block]"
  533.         beginning-of-line
  534.         set-mark
  535.         end-of-line
  536.         copy-region
  537.         forward-character
  538.  
  539.         ;put the line in the destination position
  540.         select-buffer %rcbuf
  541.         yank
  542.         next-line
  543.  
  544.         ;onward...
  545.         select-buffer "[block]"
  546.     !endwhile
  547.  
  548.     select-buffer %rcbuf
  549.     set $curline %begline
  550.     set $curcol %begpos
  551.     %cline redraw-display
  552.     set $discmd TRUE
  553. !endm
  554.  
  555.     ; and init some variables
  556.     set %rcltype 2
  557.     write-message "[Block mode loaded]"
  558.  
  559.