Annotation of coherent/f/usr/lib/bpage.cmd, revision 1.1.1.1

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 &not &equ $lwidth 0
                    586: 
                    587:                ;pad the destination if it is needed
                    588:                select-buffer %rcbuf
                    589:                beginning-of-line
                    590:                !if &not &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: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.