home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / b / krtedi.min < prev    next >
Text File  |  2020-01-01  |  11KB  |  805 lines

  1.     .title    KRTEDI.MIN  SL editor
  2.     .ident    "V03.62"
  3.  
  4. ; /62/    31-May-93  Billy Youdelman
  5.  
  6.     .include "IN:KRTMAC.MIN"
  7.     .iif ndf  KRTINC  .error    <; .include for IN:KRTMAC.MIN failed>
  8.  
  9.     IN$MODE    =    1
  10.     UP$MODE    =    2
  11.     DN$MODE    =    4
  12.     UP$END    =    10
  13.     FW$MODE    =    20
  14.  
  15.     .sbttl    Local data
  16.  
  17.     .psect    $pdata
  18. $ceol:    .asciz    <esc>"[K"
  19. $cz:    .asciz    "^Z"<cr><lf>
  20. $left:    .asciz    <esc>"[D"
  21. $resto:    .asciz    <esc>"8"
  22. $right:    .asciz    <esc>"[C"
  23. $rubout:.byte    bs ,space ,bs ,0
  24. $save:    .asciz    <esc>"7"
  25. $setvt:    .byte    esc ,'= ,0
  26. delimit:.byte    40 ,54 ,56 ,57 ,72 ,75 ,133 ,0
  27.     .even
  28.  
  29.  
  30.     .psect    $code
  31.     .sbttl    SL editor main loop
  32.  
  33. kbredi::save    <r2,r3,r4>
  34.     tst    sl.on
  35.     bne    10$
  36.  
  37.     wrtall    @r5
  38.     calls    kbread    ,<2(r5)>
  39.     br    100$
  40.  
  41. 10$:    call    l$nolf
  42.     wrtall    @r5
  43.     tst    sl.ked
  44.     beq    15$
  45.     wrtall    #$setvt
  46. 15$:    clr    edipos
  47.     clr    edilen
  48.     mov    2(r5)    ,r4
  49.     clrb    @r4
  50. 20$:    call    read1ch
  51.     mov    r0    ,r3
  52.     beq    90$
  53.  
  54.     tst    sl.ked
  55.     bne    50$
  56.     scan    r3    ,#scanlst
  57.     asl    r0
  58.     jsr    pc    ,@scandsp(r0)
  59.     br    70$
  60. 50$:    scan    r3    ,#kedlst
  61.     asl    r0
  62.     jsr    pc    ,@keddsp(r0)
  63. 70$:    bcs    20$
  64.     br    100$
  65.  
  66. 90$:    mov    #er$eof    ,r0
  67.     clr    r1
  68. 100$:    unsave    <r4,r3,r2>
  69.     return
  70.  
  71.     .save
  72.     .psect    $pdata
  73. scanlst:.byte    'A&37    ,'B&37    ,'C&37    ,'D&37    ,'E&37    ,'F&37    ,lf
  74.     .byte    cr    ,'R&37    ,'U&37    ,'V&37    ,'W&37    ,'Z&37    ,33
  75.     .byte    177    ,217    ,233
  76.     .byte    0
  77.     .even
  78. scandsp:.word    insch
  79.     .word    toggle    ,prev    ,ctrlc    ,left    ,prev    ,right    ,lfproc
  80.     .word    done    ,retype    ,ctrlu    ,next    ,retype    ,eof    ,doesc
  81.     .word    dorub    ,do220    ,do220
  82.  
  83. kedlst:    .byte    'C&37    ,'H&37    ,'I&37    ,lf    ,cr    ,'R&37
  84.     .byte    'U&37    ,'Z&37    ,33    ,177    ,217    ,233
  85.     .byte    0
  86.     .even
  87. keddsp:    .word    insch
  88.     .word    ctrlc    ,dorub    ,toggle    ,lfproc    ,done    ,retype
  89.     .word    ctrlu    ,eof    ,doesc    ,dorub    ,do220    ,do220
  90.     .restore
  91.  
  92.  
  93.     .sbttl    Process escape sequence
  94.  
  95. doesc:    call    read1ch
  96.     cmpb    r0    ,#'[
  97.     beq    do220
  98.     cmpb    r0    ,#'O&137
  99.     bne    beep
  100.  
  101. do220:    call    read1ch
  102.     tst    sl.ked
  103.     bne    10$
  104.     scan    r0    ,#esclst
  105.     asl    r0
  106.     jmp    @escdsp(r0)
  107. 10$:    scan    r0    ,#k.lst
  108.     asl    r0
  109.     jmp    @k.dsp(r0)
  110.  
  111.     .save
  112.     .psect    $pdata
  113. esclst:    .byte    'A&137    ,'B&137    ,'C&137    ,'D&137    ,'S&137    ,'P&137    ,'Q&137
  114.     .byte    0
  115.     .even
  116. escdsp:    .word    beep
  117.     .word    prev    ,next    ,right    ,left    ,pf$4    ,pf$1    ,pf$2
  118.  
  119. k.lst:    .byte    'A&137    ,'B&137    ,'C&137    ,'D&137    ,'p!40    ,'r!40    ,'M&137
  120.     .byte    'q!40    ,'s!40    ,'t!40    ,'u!40    ,'S&137    ,'m!40    ,'l!40
  121.     .byte    'P&137    ,'Q&137
  122.     .byte    0
  123.     .even
  124. k.dsp:    .word    beep
  125.     .word    prev    ,next    ,right    ,left    ,sol    ,eol    ,done
  126.     .word    kp$1    ,kp$3    ,kp$4    ,kp$5    ,pf$4    ,kp$min    ,kp$com
  127.     .word    pf$1    ,pf$2
  128.     .restore
  129.  
  130.  
  131.     .sbttl    Ring the bell
  132.  
  133. beep:    mov    #bell    ,r0
  134.     call    writ1char
  135.     sec
  136.     return
  137.  
  138.  
  139.     .sbttl    PF2, Help
  140.     .enabl    lsb
  141.  
  142. pf$2:    tst    pf2$ok
  143.     beq    5$
  144.     call    l$nolf
  145.     wrtall    #$ceol
  146.     message    <?KRTEDI-F-Can't overlay HELP from here>,cr
  147.     br    90$
  148.  
  149. 5$:    mov    #10$    ,r0
  150.     tst    sl.ked
  151.     beq    30$
  152.     mov    #20$    ,r0
  153. 30$:    strcpy    argbuf    ,r0
  154.     .newline
  155.     save    <r5,r4>
  156.     call    c$help
  157.     unsave    <r4,r5>
  158. 90$:    call    retype
  159.     sec
  160.     return
  161.  
  162.     .save
  163.     .psect    $pdata
  164. 10$:    .asciz    "SL F"
  165. 20$:    .asciz    "SL K"
  166.     .even
  167.     .restore
  168.  
  169.     .dsabl    lsb
  170.  
  171.  
  172.     .sbttl    Post-PF1 processor
  173.  
  174. pf$1:    call    read1ch
  175.     tst    sl.ked
  176.     bne    10$
  177.     scan    r0    ,#pf1lst
  178.     asl    r0
  179.     jmp    @pf1dsp(r0)
  180. 10$:    scan    r0    ,#k1.lst
  181.     asl    r0
  182.     jmp    @k1.dsp(r0)
  183.  
  184.     .save
  185.     .psect    $pdata
  186. pf1lst:    .byte    'C&37    ,lf    ,'U&37    ,'Z&37
  187.     .byte    33    ,177    ,217    ,233
  188.     .byte    0
  189.     .even
  190. pf1dsp:    .word    beep
  191.     .word    ctrlc    ,.lfproc,.ctrlu    ,eof
  192.     .word    .doesc    ,.dorub    ,.do220    ,.do220
  193.  
  194. k1.lst:    .byte    'C&37    ,'H&37    ,lf    ,'U&37    ,'Z&37
  195.     .byte    33    ,177    ,217    ,233
  196.     .byte    0
  197.     .even
  198. k1.dsp:    .word    beep
  199.     .word    ctrlc    ,.dorub    ,.lfproc,.ctrlu    ,eof
  200.     .word    .doesc    ,.dorub    ,.do220    ,.do220
  201.     .restore
  202.  
  203. .doesc:    call    read1ch
  204.     cmpb    r0    ,#'[
  205.     beq    .do220
  206.     cmpb    r0    ,#'O&137
  207.     beq    .do220
  208.     jmp    beep
  209.  
  210. .do220:    call    read1ch
  211.     tst    sl.ked
  212.     bne    10$
  213.     scan    r0    ,#pfxlst
  214.     asl    r0
  215.     jmp    @pfxdsp(r0)
  216. 10$:    scan    r0    ,#kx.lst
  217.     asl    r0
  218.     jmp    @kx.dsp(r0)
  219.  
  220.     .save
  221.     .psect    $pdata
  222. pfxlst:    .byte    'S&137    ,'P&137
  223.     .byte    0
  224.     .even
  225. pfxdsp:    .word    beep
  226.     .word    .pf$4    ,pf$1
  227.  
  228. kx.lst:    .byte    'S&137    ,'m!40    ,'l!40    ,'P&137
  229.     .byte    0
  230.     .even
  231. kx.dsp:    .word    beep
  232.     .word    .pf$4    ,.kp$min,.kp$com,pf$1
  233.     .restore
  234.  
  235.  
  236.     .sbttl    Two ways to undel a char
  237.  
  238. .kp$com:call    .dorub
  239.     tst    r0
  240.     bne    10$
  241.     call    left
  242. 10$:    sec
  243.     return
  244.  
  245. .dorub:    movb    undchr    ,r3
  246.     bne    10$
  247.     jmp    beep
  248. 10$:    jmp    insch
  249.  
  250.  
  251.     .sbttl    Insert a char
  252.  
  253. insch:    cmpb    r3    ,#space
  254.     blt    1$
  255.     cmp    edilen    ,#ln$max
  256.     blo    10$
  257. 1$:    jmp    beep
  258.  
  259. 10$:    mov    edipos    ,r1
  260.     add    r4    ,r1
  261.     tstb    (r1)
  262.     bne    13$
  263.     movb    r3    ,(r1)+
  264.     clrb    (r1)
  265.     dec    r1
  266.     wrtall    r1
  267.     inc    edilen
  268.     inc    edipos
  269.     br    90$
  270.  
  271. 13$:    bit    #in$mode,edists
  272.     bne    15$
  273.     movb    r3    ,(r1)+
  274.     br    30$
  275.  
  276. 15$:    sub    #ln$max+2,sp
  277.     mov    sp    ,r2
  278.     strcpy    r2    ,r1
  279.     movb    r3    ,(r1)+
  280.     strcpy    r1    ,r2
  281.     add    #ln$max+2,sp
  282.     inc    edilen
  283.  
  284. 30$:    wrtall    #$save
  285.     dec    r1
  286.     wrtall    r1
  287.     wrtall    #$restore
  288.     call    right
  289.  
  290. 90$:    clr    r0
  291.     sec
  292.     return
  293.  
  294.  
  295.     .sbttl    Move to start of line (Keypad 0)
  296.  
  297. sol:    tst    edipos
  298.     ble    100$
  299.     call    left
  300.     br    sol
  301. 100$:    sec
  302.     return
  303.  
  304.  
  305.     .sbttl    Move to end of line (Keypad 2)
  306.  
  307. eol:    cmp    edipos    ,edilen
  308.     bhis    100$
  309.     call    right
  310.     br    eol
  311. 100$:    sec
  312.     return
  313.  
  314.  
  315.     .sbttl    Move cursor one word
  316.  
  317. kp$1:    mov    edists    ,r2
  318. loop:    mov    edipos    ,r1
  319.     bit    #fw$mode,r2
  320.     bne    10$
  321.     tst    r1
  322.     ble    100$
  323.     br    20$
  324. 10$:    cmp    r1    ,edilen
  325.     bhis    100$
  326. 20$:    call    kp$3
  327.     mov    edipos    ,r1
  328.     add    r4    ,r1
  329.     scan    (r1)    ,#delimit
  330.     tst    r0
  331.     bne    loop
  332.     scan    -1(r1)    ,#delimit
  333.     tst    r0
  334.     beq    loop
  335. 100$:    sec
  336.     return
  337.  
  338.  
  339.     .sbttl    Move cursor one char
  340.  
  341. kp$3:    bit    #fw$mode,edists
  342.     beq    left
  343.  
  344.  
  345.     .sbttl    Move right one char
  346.  
  347. right:    cmp    edipos    ,edilen
  348.     bge    100$
  349.     wrtall    #$right
  350.     inc    edipos
  351.     cmp    edipos    ,edilen
  352.     blt    100$
  353.     bic    #fw$mode,edists
  354. 100$:    sec
  355.     return
  356.  
  357.  
  358.     .sbttl    Move left one char
  359.  
  360. left:    tst    edipos
  361.     ble    100$
  362.     wrtall    #$left
  363.     dec    edipos
  364.     bne    100$
  365.     bis    #fw$mode,edists
  366. 100$:    sec
  367.     return
  368.  
  369.  
  370.     .sbttl    Set advance mode
  371.  
  372. kp$4:    bis    #fw$mode,edists
  373.     sec
  374.     return
  375.  
  376.  
  377.     .sbttl    Set backup mode
  378.  
  379. kp$5:    bic    #fw$mode,edists
  380.     sec
  381.     return
  382.  
  383.  
  384.     .sbttl    Process ^C, ^Z
  385.     .enabl    lsb
  386.  
  387. ctrlc:    call    sol
  388.     wrtall    #$ceol
  389.     clr    edilen
  390.     clrb    @r4
  391.     tst    edicmd
  392.     blt    10$
  393.     mov    #ln$cnt    ,edicmd
  394.     dec    edicmd
  395. 10$:    mov    #cmd$ab    ,r0
  396.     br    110$
  397.  
  398. eof:    call    eol
  399.     wrtall    #$cz
  400.     mov    #cmd$ex    ,r0
  401. 110$:    bic    #<up$mode!dn$mode!up$end!fw$mode>,edists
  402.     clr    r1
  403.     return
  404.  
  405.     .dsabl    lsb
  406.  
  407.  
  408.     .sbttl    Process CR, store command line
  409.  
  410. done:    emt    340
  411.     .newline
  412.     tst    edilen
  413.     beq    100$
  414.  
  415.     clr    r2
  416.     mov    #ln$cnt    ,r3
  417. 10$:    mov    lastli(r2),r0
  418.     tstb    @r0
  419.     bne    11$
  420.     tst    r2
  421.     beq    60$
  422.     mov    r2    ,r3
  423.     asr    r3
  424.     br    13$
  425. 11$:    add    #2    ,r2
  426.     sob    r3    ,10$
  427.     clr    r2
  428.     mov    #ln$cnt    ,r3
  429.  
  430. 13$:    mov    r4    ,-(sp)
  431.     dec    r3
  432.     asl    r3
  433.     mov    lastli(r3),r1
  434.     mov    edilen    ,r0
  435.     cmpb    (r1)+    ,r0
  436.     bne    20$
  437. 15$:    cmpb    (r4)+    ,(r1)+
  438.     bne    20$
  439.     sob    r0    ,15$
  440. 20$:    mov    (sp)+    ,r4
  441.     asr    r3
  442.     tst    r0
  443.     bne    30$
  444.     mov    r3    ,edicmd
  445.     br    100$
  446.  
  447. 30$:    tst    r2
  448.     bne    60$
  449.  
  450. 40$:    mov    lastli(r2),r0
  451.     mov    lastli+2(r2),r1
  452. 50$:    movb    (r1)+    ,(r0)+
  453.     bne    50$
  454. 55$:    add    #2    ,r2
  455.     sob    r3    ,40$
  456.  
  457. 60$:    mov    lastli(r2),r1
  458.     movb    edilen    ,(r1)+
  459. 70$:    movb    (r4)+    ,(r1)+
  460.     bne    70$
  461. 80$:    asr    r2
  462.     mov    r2    ,edicmd
  463.  
  464. 100$:    mov    edilen    ,r1
  465.     bic    #<up$mode!dn$mode!up$end!fw$mode>,edists
  466.     clr    r0
  467.     return
  468.  
  469.  
  470.     .sbttl    Recall a command
  471.  
  472. next:    mov    #edicmd    ,r2
  473.     tst    @r2
  474.     bge    5$
  475.     call    beep
  476.     br    100$
  477.  
  478. 5$:    cmp    @r2    ,#ln$cnt-1
  479.     blt    7$
  480. 6$:    call    beep
  481.     br    90$
  482.  
  483. 7$:    inc    @r2
  484.  
  485.     bit    #dn$mode,edists
  486.     beq    10$
  487.     bic    #dn$mode,edists
  488.     br    5$
  489.  
  490. 10$:    mov    @r2    ,r2
  491.     asl    r2
  492.     mov    lastli(r2),r2
  493.     tstb    @r2
  494.     beq    6$
  495.  
  496. 30$:    call    recover
  497.  
  498.     bis    #up$mode,edists
  499.     cmp    edicmd    ,#ln$cnt
  500.     blt    100$
  501.     dec    edicmd
  502.     bic    #up$mode,edists
  503.     br    100$
  504.  
  505. 90$:    bic    #up$mode,edists
  506.     call    l$nolf
  507.     wrtall    #$ceol
  508.     wrtall    @r5
  509.     clrb    @r4
  510.     clr    edilen
  511.     clr    edipos
  512.  
  513. 100$:    bic    #up$end,edists
  514.     sec
  515.     return
  516.  
  517.  
  518.     .sbttl    Up-arrow key
  519.  
  520. prev:    bit    #up$end,edists
  521.     beq    10$
  522.     call    beep
  523.  
  524. 10$:    mov    edicmd    ,r2
  525.     bge    13$
  526.     call    beep
  527.     br    100$
  528.  
  529. 13$:    bit    #up$mode,edists
  530.     bne    15$
  531.  
  532.     asl    r2
  533.     mov    lastli(r2),r2
  534.     tstb    @r2
  535.     bne    20$
  536.  
  537. 15$:    bic    #up$mode,edists
  538.     dec    edicmd
  539.     br    10$
  540.  
  541. 20$:    call    recover
  542.  
  543.     tst    edicmd
  544.     bgt    70$
  545.     clr    edicmd
  546.     bic    #dn$mode,edists
  547.     bis    #up$end,edists
  548.     br    100$
  549.  
  550. 70$:    dec    edicmd
  551.     bis    #dn$mode,edists
  552.  
  553. 100$:    sec
  554.     return
  555.  
  556.  
  557.     .sbttl    Recover a command line
  558.  
  559. recover:call    l$nolf
  560.     wrtall    #$ceol
  561.     wrtall    @r5
  562.     clrb    (r4)
  563.     movb    (r2)+    ,r3
  564.     beq    50$
  565.     mov    r4    ,r1
  566. 30$:    movb    (r2)+    ,(r1)+
  567.     bne    30$
  568.     wrtall    r4
  569. 50$:    mov    r3    ,edilen
  570.     mov    r3    ,edipos
  571.     bic    #fw$mode,edists
  572.     return
  573.  
  574.  
  575.     .sbttl    Process ^U
  576.  
  577. ctrlu:    mov    edipos    ,r1
  578.     ble    100$
  579.     call    SOL
  580.     wrtall    #$ceol
  581.     clr    edilen
  582.     clr    r0
  583.     call    undwrt
  584.     mov    r4    ,r2
  585. 20$:    movb    (r0)+    ,(r2)+
  586.     beq    30$
  587.     inc    edilen
  588.     inc    edipos
  589.     br    20$
  590. 30$:    wrtall    r4
  591.     call    sol
  592. 100$:    sec
  593.     return
  594.  
  595.  
  596.     .sbttl    Keypad minus
  597.  
  598. kp$min:    cmp    edipos    ,edilen
  599.     bge    100$
  600.     mov    edipos    ,r3
  601.     call    savclr
  602.     mov    edists    ,-(sp)
  603.     bis    #fw$mode,edists
  604.     call    kp$1
  605.     mov    (sp)+    ,edists
  606.     mov    edipos    ,r1
  607.     sub    r3    ,r1
  608.     sub    r1    ,edilen
  609.     mov    r3    ,r0
  610.     call    undwrt
  611.     wrtall    #$restore
  612.     mov    r3    ,edipos
  613.     call    outwrt
  614. 100$:    sec
  615.     return
  616.  
  617.  
  618.     .sbttl    Line feed
  619.  
  620. lfproc:    tst    edipos
  621.     ble    100$
  622.     mov    edipos    ,r3
  623.     mov    edists    ,-(sp)
  624.     bic    #fw$mode,edists
  625.     call    kp$1
  626.     mov    (sp)+    ,edists
  627.     mov    r3    ,r1
  628.     sub    edipos    ,r1
  629.     sub    r1    ,edilen
  630.     mov    edipos    ,r0
  631.     call    undwrt
  632.     call    savclr
  633.     call    outwrt
  634. 100$:    sec
  635.     return
  636.  
  637.  
  638.     .sbttl    Write buffers
  639.  
  640. undwrt:    mov    #undlin    ,r2
  641.     movb    r1    ,(r2)+
  642.     add    r4    ,r0
  643. 10$:    movb    (r0)+    ,(r2)+
  644.     sob    r1    ,10$
  645.     clrb    (r2)
  646.     return
  647.  
  648. outwrt:    wrtall    r0
  649.     wrtall    #$restore
  650.     mov    r4    ,r2
  651.     add    edipos    ,r2
  652. 20$:    movb    (r0)+    ,(r2)+
  653.     bne    20$
  654.     return
  655.  
  656.  
  657.     .sbttl    Un-do PF4, keypad comma
  658.  
  659. .kp$min:
  660. .pf$4:    call    .ctrlu
  661.     tst    r0
  662.     bne    100$
  663.     movb    undlin    ,r0
  664. 10$:    call    left
  665.     sob    r0    ,10$
  666. 100$:    sec
  667.     return
  668.  
  669.  
  670.     .sbttl    Un-do ^U, line feed
  671.  
  672. .lfproc:
  673. .ctrlu:    tstb    undlin
  674.     beq    3$
  675.     mov    #ln$max    ,r0
  676.     sub    edilen    ,r0
  677.     ble    3$
  678.     cmpb    undlin    ,r0
  679.     ble    10$
  680. 3$:    jmp    beep
  681.  
  682. 10$:    sub    #ln$max+2,sp
  683.     mov    sp    ,r2
  684.  
  685.     mov    edipos    ,r1
  686.     add    r4    ,r1
  687.  
  688.     mov    #undlin    ,r3
  689.     movb    (r3)+    ,r0
  690.     add    r0    ,edilen
  691.     add    r0    ,edipos
  692.  
  693.     strcpy    r2    ,r1
  694. 15$:    movb    (r3)+    ,(r1)+
  695.     bne    15$
  696.     dec    r1
  697.     strcpy    r1    ,r2
  698.  
  699. 30$:    wrtall    #undlin+1
  700.     wrtall    #$save
  701.     wrtall    r2
  702.     wrtall    #$restore
  703.     add    #ln$max+2,sp
  704. 100$:    clr    r0
  705.     sec
  706.     return
  707.  
  708.  
  709.     .sbttl    Process PF4
  710.  
  711. pf$4:    mov    edilen    ,r1
  712.     sub    edipos    ,r1
  713.     ble    100$
  714.     mov    #undlin    ,r2
  715.     movb    r1    ,(r2)+
  716.     mov    r4    ,r0
  717.     add    edipos    ,r0
  718.     mov    r0    ,r1
  719. 10$:    movb    (r0)+    ,(r2)+
  720.     bne    10$
  721.     clrb    (r1)
  722.     wrtall    #$ceol
  723.     mov    edipos    ,edilen
  724. 100$:    sec
  725.     return
  726.  
  727.  
  728.     .sbttl    Erase char under cursor
  729.     .enabl    lsb
  730.  
  731. kp$com:    cmp    edipos    ,edilen
  732.     bge    100$
  733.     mov    r4    ,r2
  734.     add    edipos    ,r2
  735.     tstb    (r2)
  736.     beq    100$
  737.     br    20$
  738.  
  739.  
  740.     .sbttl    Erase char to left of cursor
  741.  
  742. dorub:    tst    edipos
  743.     ble    100$
  744.     mov    r4    ,r2
  745.     add    edipos    ,r2
  746.     tstb    (r2)
  747.     bne    10$
  748.     movb    -(r2)    ,undchr
  749.     clrb    (r2)
  750.     dec    edilen
  751.     wrtall    #$rubout
  752.     dec    edipos
  753.     br    100$
  754.  
  755. 10$:    call    left
  756.     dec    r2
  757. 20$:    movb    (r2)    ,undchr
  758.     mov    r2    ,r1
  759.     mov    r2    ,r3
  760.     inc    r1
  761. 23$:    movb    (r1)+    ,(r3)+
  762.     bne    23$
  763.     dec    edilen
  764.     call    savclr
  765.     wrtall    r2
  766.     wrtall    #$restore
  767. 100$:    sec
  768.     return
  769.  
  770.     .dsabl    lsb
  771.  
  772.  
  773.     .sbttl    Process ^R
  774.  
  775. retype:    call    l$nolf
  776.     wrtall    #$ceol
  777.     wrtall    @r5
  778.     tst    sl.ked
  779.     beq    5$
  780.     wrtall    #$setvt
  781. 5$:    wrtall    r4
  782.     call    l$nolf
  783.     strlen    @r5
  784.     add    edipos    ,r0
  785. 10$:    wrtall    #$right
  786.     sob    r0    ,10$
  787.     sec
  788.     return
  789.  
  790.  
  791.     .sbttl    Toggle insert/overstrike mode
  792.  
  793. toggle:    mov    #in$mode,r0
  794.     xor    r0    ,edists
  795.     sec
  796.     return
  797.  
  798.     .sbttl    Save cursor then clear to EOL
  799.  
  800. savclr:    wrtall    #$save
  801.     wrtall    #$ceol
  802.     return
  803.  
  804.     .end
  805.