|
|
1.1 root 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: !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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.