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

  1.     .title    KRTSEN.MIN  Send file processing
  2.     .ident    "V03.62"
  3.  
  4. ; /62/    31-May-93  Billy Youdelman
  5.  
  6. ;    Copyright 1983,1984 Change Software, Inc.
  7. ;
  8. ;    This software is furnished under a license and may
  9. ;    be  used  and  copied  only in accordance with the
  10. ;    terms of such license and with  the  inclusion  of
  11. ;    the  above copyright notice.  This software or any
  12. ;    other copies thereof may not be provided or other-
  13. ;    wise made available to any other person.  No title
  14. ;    to and ownership of the software is hereby  trans-
  15. ;    ferred.
  16. ;
  17. ;    The information in this  software  is  subject  to
  18. ;    change  without notice and should not be construed
  19. ;    as a commitment by the author.
  20.  
  21.     .include "IN:KRTMAC.MIN"
  22.     .iif ndf  KRTINC  .error    <; .include for IN:KRTMAC.MIN failed>
  23.     .include "IN:KRTDEF.MIN"
  24.     .iif ndf  MSG$DA  .error    <; .include for IN:KRTDEF.MIN failed>
  25.  
  26.     .mcall    .PURGE
  27.  
  28.  
  29.     .sbttl    Local data
  30.  
  31.     .psect    $pdata
  32. SE22$:    .byte    eof$dis    ,0
  33. S2$:    .asciz    "SEN.SW"
  34.     .even
  35.  
  36.     .psect    recpkt    ,rw,d,lcl,rel,con
  37. recpkt:    .blkb    maxpak+2
  38.  
  39.  
  40.     .psect    $code
  41.     .sbttl    State controller for send file processing
  42.     .enabl    lsb
  43.  
  44. sen.sw::
  45. sendsw::movb    @r5    ,state
  46.     movb    #defchk    ,chktyp
  47.     mov    #1    ,chksiz
  48.     mov    $image    ,image
  49.     clr    paknum
  50.     clr    numtry
  51.     cmpb    conpar+p.chkt,#'1
  52.     bne    1$
  53.     cmpb    senpar+p.chkt,#'1
  54.     beq    5$
  55. 1$:    movb    #sta.sin,state
  56. 5$:    call    senhdr
  57.     clr    dpnumber
  58.     movb    sentim    ,senpar+p.time
  59.  
  60. 10$:    call    sendeb
  61.     scan    state    ,#200$
  62.     asl    r0
  63.     jsr    pc    ,@210$(r0)
  64.     movb    r1    ,state
  65.     bcc    10$
  66.  
  67. 100$:    movb    #defchk    ,chktyp
  68.     mov    #1    ,chksiz
  69.     save    <r0>
  70.     tst    inopn
  71.     beq    110$
  72.     calls    close    ,<#lun.in>
  73.     clr    inopn
  74. 110$:    .purge    #lun.sr
  75.     unsave    <r0>
  76.     return
  77.  
  78.     .save
  79.     .psect    $pdata
  80. 200$:    .byte    sta.abo    ,sta.brk,sta.com,sta.dat,sta.fil,sta.atr,sta.sin
  81.     .byte    sta.eof
  82.     .byte    0
  83.     .even
  84. 210$:    .word    send.$
  85.     .word    send$$    ,sbreak    ,send.c    ,sdata    ,sfile    ,sattr    ,sinit
  86.     .word    seof
  87.     .restore
  88.  
  89.     .dsabl    lsb
  90.  
  91.  
  92.     .sbttl    State routines for SENDSW
  93.     .enabl    lsb
  94.  
  95. send.$:    call    bad$pak
  96.     movb    state    ,r1
  97.     clc
  98.     return
  99.  
  100. send$$:    mov    sp    ,r0
  101.     movb    #sta.abo,r1
  102.     br    90$
  103.  
  104. send.c:    clr    r0
  105. 90$:    sec
  106.     return
  107.  
  108.     .dsabl    lsb
  109.  
  110.  
  111.     .sbttl    Received bad ACK/NAK and error handling
  112.     .enabl    lsb
  113.  
  114. sndx$$:    movb    state    ,r1
  115.     br    10$
  116. sndx.$:    cmp    numtry    ,maxtry
  117.     blo    bad$pak
  118. s$retry:
  119. sndx.e:
  120. s$sync:
  121. sabort:    movb    #sta.abo,r1
  122. 10$:    clr    datauk
  123.     return
  124.  
  125. bad$pak:mov    #1    ,datauk
  126.     br    20$
  127. bad$ack:mov    #-1    ,datauk
  128. 20$:    inc    numtry
  129.     return
  130.  
  131.     .dsabl    lsb
  132.  
  133.  
  134.     .sbttl    Send debugging and logging
  135.  
  136. sendeb:    bit    #log$pa    ,trace
  137.     beq    50$
  138.     save    <r1,r2>
  139.     sub    #100.    ,sp
  140.     mov    sp    ,r1
  141.     mov    #S2$    ,r2
  142.     call    paksta
  143.     sub    sp    ,r1
  144.     mov    sp    ,r2
  145.     calls    putrec    ,<r2,r1,#lun.lo>
  146.     tst    r0
  147.     beq    30$
  148.     call    logerr
  149. 30$:    add    #100.    ,sp
  150.     unsave    <r2,r1>
  151. 50$:    return
  152.  
  153.  
  154.     .sbttl    Send attribute data for the current file
  155.     .enabl    lsb
  156.  
  157. sattr:    clr    datauk
  158.     inc    numtry
  159.     cmp    numtry    ,maxtry
  160.     blos    10$
  161.     jmp    s$retry
  162.  
  163. 10$:    tst    doattr
  164.     beq    90$
  165.     calls    w$attr    ,<#lun.in,#packet>
  166.     tst    r0
  167.     bne    90$
  168.     tst    r1
  169.     beq    90$
  170.  
  171.     spack    #msg$atr,paknum,r1,#packet
  172. 20$:    rpack    r2 ,r3    ,#recpkt,#maxpak
  173.     scan    r1    ,#200$
  174.     asl    r0
  175.     jsr    pc    ,@210$(r0)
  176.     tst    datauk
  177.     bne    20$
  178.     br    99$
  179.  
  180. 90$:    calls    buffil    ,<#packet>
  181.     mov    r1    ,size
  182.     movb    #sta.dat,r1
  183. 99$:    clc
  184.     return
  185.  
  186.     .save
  187.     .psect    $pdata
  188. 200$:    .byte    msg$err    ,msg$nak,msg$ack,timout    ,badchk
  189.     .byte    0
  190.     .even
  191. 210$:    .word    sndx.$
  192.     .word    sndx.e    ,satr.n    ,satr.y    ,sndx$$    ,sndx.$
  193.     .restore
  194.  
  195.     .dsabl    lsb
  196.  
  197.  
  198.     .sbttl    Process response to SATTR
  199.     .enabl    lsb
  200.  
  201. satr$$:    jmp    sndx$$
  202.  
  203. satr.n:    cmp    r3    ,paknum
  204.     beq    satr$$
  205.     dec    r3
  206.     bge    1$
  207.     mov    #63.    ,r3
  208. 1$:    cmp    r3    ,paknum
  209.     beq    10$
  210.     br    2$
  211.  
  212. satr.y:    cmp    r3    ,paknum
  213.     beq    10$
  214. 2$:    cmp    numtry    ,maxtry
  215.     blos    3$
  216.     jmp    s$sync
  217.  
  218. 3$:    tst    datauk
  219.     blt    satr$$
  220.     jmp    bad$ack
  221.  
  222. 10$:    clr    datauk
  223.     clr    numtry
  224.     incm64    paknum
  225.     calls    buffil    ,<#packet>
  226.     mov    r1    ,size
  227.     movb    #sta.dat,r1
  228.     return
  229.  
  230.     .dsabl    lsb
  231.  
  232.  
  233.     .sbttl    Send a break packet
  234.     .enabl    lsb
  235.  
  236. sbreak:    clr    datauk
  237.     inc    numtry
  238.     cmp    numtry    ,maxtry
  239.     blos    10$
  240.     jmp    s$retry
  241.  
  242. 10$:    spack    #msg$bre,paknum,#0,#packet
  243. 20$:    rpack    r2 ,r3    ,#recpkt,#maxpak
  244.     scan    r1    ,#200$
  245.     asl    r0
  246.     jsr    pc    ,@210$(r0)
  247.     tst    datauk
  248.     bne    20$
  249.     return
  250.  
  251.     .save
  252.     .psect    $pdata
  253. 200$:    .byte    msg$err    ,msg$nak,msg$ack,timout    ,badchk
  254.     .byte    0
  255.     .even
  256. 210$:    .word    sndx.$
  257.     .word    sndx.e    ,sbrk.n    ,sbrk.y    ,sndx$$    ,sndx.$
  258.     .restore
  259.  
  260.     .dsabl    lsb
  261.  
  262.  
  263.     .sbttl    Process response to SBREAK
  264.     .enabl    lsb
  265.  
  266. sbrk$$:    jmp    sndx$$
  267.  
  268. sbrk.n:    cmp    r3    ,paknum
  269.     beq    sbrk$$
  270.     dec    r3
  271.     bge    1$
  272.     mov    #63.    ,r3
  273. 1$:    cmp    r3    ,paknum
  274.     beq    10$
  275.     br    2$
  276.  
  277. sbrk.y:    cmp    r3    ,paknum
  278.     beq    10$
  279. 2$:    cmp    numtry    ,maxtry
  280.     blos    3$
  281.     jmp    s$sync
  282.  
  283. 3$:    tst    datauk
  284.     blt    sbrk$$
  285.     jmp    bad$ack
  286.  
  287. 10$:    clr    datauk
  288.     clr    numtry
  289.     incm64    paknum
  290.     movb    #sta.com,r1
  291.     return
  292.  
  293.     .dsabl    lsb
  294.  
  295.  
  296.     .sbttl    Send file init
  297.     .enabl    lsb
  298.  
  299. sinit:    movb    #msg$snd,-(sp)
  300.     call    .sinit
  301.     return
  302.  
  303. .sinit::clr    datauk
  304.     inc    numtry
  305.     cmp    numtry    ,initry
  306.     blos    10$
  307.     call    s$retry
  308.     br    101$
  309.  
  310. 10$:    mov    chktyp    ,-(sp)
  311.     mov    chksiz    ,-(sp)
  312.     movb    #defchk    ,chktyp
  313.     mov    #1    ,chksiz
  314.     calls    spar    ,<#packet>
  315.     call    cantyp
  316.     movb    6(sp)    ,r5
  317.     spack    r5,paknum,sparsz,#packet
  318. 20$:    rpack    r2 ,r3    ,#recpkt,#maxpak
  319.     scan    r1    ,#200$
  320.     asl    r0
  321.     jsr    pc    ,@210$(r0)
  322.     tst    datauk
  323.     bne    20$
  324.  
  325. 100$:    mov    (sp)+    ,chksiz
  326.     mov    (sp)+    ,chktyp
  327. 101$:    mov    (sp)+    ,@sp
  328.     return
  329.  
  330.     .save
  331.     .psect    $pdata
  332. 200$:    .byte    msg$err    ,msg$nak,msg$ack,timout    ,badchk
  333.     .byte    0
  334.     .even
  335. 210$:    .word    sndx.$
  336.     .word    sini.e    ,sini.n    ,sini.y    ,sndx$$    ,sndx.$
  337.     .restore
  338.  
  339.     .dsabl    lsb
  340.  
  341.  
  342.     .sbttl    Process response to SINIT
  343.     .enabl    lsb
  344.  
  345. sini.$:    jmp    sndx.$
  346. sini$$:    jmp    sndx$$
  347.  
  348. sini.e:    cmpb    r5    ,#msg$ser
  349.     beq    33$
  350.     jmp    sabort
  351.  
  352. sini.n:    cmp    r3    ,paknum
  353.     bne    sini.$
  354.     cmpb    r5    ,#msg$ser
  355.     bne    101$
  356.     cmp    numtry    ,#2
  357.     bhis    33$
  358. 101$:    br    sini$$
  359.  
  360. sini.y:    cmp    r3    ,paknum
  361.     beq    10$
  362.     cmp    numtry    ,initry
  363.     blos    3$
  364.     jmp    s$sync
  365.  
  366. 3$:    tst    datauk
  367.     blt    sini$$
  368.     jmp    bad$ack
  369.  
  370. 10$:    calls    rpar    ,<#recpkt,r2>
  371. 33$:    clr    datauk
  372.     clr    numtry
  373.     incm64    paknum
  374.     movb    #sta.fil,r1
  375.     jmp    inirepeat
  376.  
  377.     .dsabl    lsb
  378.  
  379.  
  380.     .sbttl    Send a file
  381.     .enabl    lsb
  382.  
  383. sfile:    clr    datauk
  384.     inc    numtry
  385.     cmp    numtry    ,maxtry
  386.     blos    10$
  387.     jmp    s$retry
  388.  
  389. 10$:    movb    conpar+p.chkt,chktyp
  390.     movb    chktyp    ,chksiz
  391.     sub    #'0    ,chksiz
  392.     mov    $image    ,image
  393.     mov    #filnam    ,r3
  394.     clr    skipfl
  395.     call    clratr
  396.     call    inirepeat
  397.     sub    #100    ,sp
  398.     mov    sp    ,r4
  399.     tst    inopn
  400.     beq    20$
  401.     calls    close    ,<#lun.in>
  402.     clr    inopn
  403. 20$:    tstb    filnam
  404.     bne    21$
  405.     jmp    45$
  406. 21$:    tst    doauto
  407.     beq    25$
  408.     tst    image
  409.     bne    25$
  410.     calls    chkext    ,<#filnam>
  411.     tst    r0
  412.     ble    25$
  413.     mov    #binary    ,image
  414. 25$:    calls    open    ,<#filnam,#lun.in,image>
  415.     tst    r0
  416.     beq    30$
  417.     calls    syserr    ,<r0,#errtxt>
  418.     calls    error    ,<#3,#errtxt,#aspace,#filnam>
  419.     movb    #sta.abo,r1
  420.     br    100$
  421.  
  422. 30$:    mov    sp    ,inopn
  423.     tst    xmode
  424.     bne    45$
  425.     calls    namcvt    ,<#filnam,r4>
  426.     tstb    asname
  427.     beq    40$
  428.     mov    #asname    ,r4
  429.  
  430. 40$:    strlen    r4
  431.     spack    #msg$fil,paknum,r0,r4
  432.     clrb    asname
  433.     br    50$
  434.  
  435. 45$:    spack    #msg$tex,paknum
  436. 50$:    rpack    r2 ,r3    ,#recpkt,#maxpak
  437.     scan    r1    ,#200$
  438.     asl    r0
  439.     jsr    pc    ,@210$(r0)
  440.     tst    datauk
  441.     bne    50$
  442. 100$:    add    #100    ,sp
  443.     return
  444.  
  445.     .save
  446.     .psect    $pdata
  447. 200$:    .byte    msg$err    ,msg$nak,msg$ack,timout    ,badchk
  448.     .byte    0
  449.     .even
  450. 210$:    .word    sndx.$
  451.     .word    sndx.e    ,sfil.n    ,sfil.y    ,sndx$$    ,sndx.$
  452.     .restore
  453.  
  454.     .dsabl    lsb
  455.  
  456.  
  457.     .sbttl    Process response to SFILE
  458.     .enabl    lsb
  459.  
  460. sfil$$:    jmp    sndx$$
  461.  
  462. sfil.n:    cmp    r3    ,paknum
  463.     beq    sfil$$
  464.     dec    r3
  465.     bge    1$
  466.     mov    #63.    ,r3
  467. 1$:    cmp    r3    ,paknum
  468.     beq    10$
  469.     br    2$
  470.  
  471. sfil.y:    cmp    r3    ,paknum
  472.     beq    10$
  473. 2$:    cmp    numtry    ,maxtry
  474.     blos    3$
  475.     jmp    s$sync
  476.  
  477. 3$:    tst    datauk
  478.     blt    sfil$$
  479.     jmp    bad$ack
  480.  
  481. 10$:    clr    datauk
  482.     clr    numtry
  483.     incm64    paknum
  484.     movb    #sta.atr,r1
  485.     tst    xmode
  486.     beq    20$
  487.     calls    buffil    ,<#packet>
  488.     mov    r1    ,size
  489.     movb    #sta.dat,r1
  490. 20$:    return
  491.  
  492.     .dsabl    lsb
  493.  
  494.  
  495.     .sbttl    Send file data
  496.     .enabl    lsb
  497.  
  498. sdata:    clr    datauk
  499.     inc    numtry
  500.     cmp    numtry    ,maxtry
  501.     blos    10$
  502.     jmp    s$retry
  503.  
  504. 10$:    spack    #msg$dat,paknum,size,#packet
  505. 20$:    rpack    r2 ,r3    ,#recpkt,#maxpak
  506.     scan    r1    ,#200$
  507.     asl    r0
  508.     jsr    pc    ,@210$(r0)
  509.     tst    datauk
  510.     bne    20$
  511.     return
  512.  
  513.     .save
  514.     .psect    $pdata
  515. 200$:    .byte    msg$err    ,msg$nak,msg$ack,timout    ,badchk
  516.     .byte    0
  517.     .even
  518. 210$:    .word    sndx.$
  519.     .word    sndx.e    ,sdat.n    ,sdat.y    ,sdat$$    ,sndx.$
  520.     .restore
  521.  
  522.     .dsabl    lsb
  523.  
  524.  
  525.     .sbttl    Process response to SDATA
  526.  
  527. sdat$$:    tst    dpnumber
  528.     bne    100$
  529.     cmp    senlng    ,#maxpak
  530.     blos    100$
  531.     asr    senlng
  532. 100$:    jmp    sndx$$
  533.  
  534.  
  535.     .enabl    lsb
  536.  
  537. sdat.n:    cmp    r3    ,paknum
  538.     beq    sdat$$
  539.     dec    r3
  540.     bge    1$
  541.     mov    #63.    ,r3
  542. 1$:    cmp    r3    ,paknum
  543.     beq    10$
  544.     br    2$
  545.  
  546. sdat.y:    cmp    r3    ,paknum
  547.     beq    10$
  548. 2$:    cmp    numtry    ,maxtry
  549.     blos    3$
  550.     jmp    s$sync
  551.  
  552. 3$:    tst    datauk
  553.     blt    sdat$$
  554.     jmp    bad$ack
  555.  
  556. 10$:    clr    datauk
  557.     add    #1    ,dpnumber
  558.     bcc    15$
  559.     mov    #1    ,dpnumber
  560. 15$:    clr    numtry
  561.     incm64    paknum
  562.  
  563. 40$:    cmpb    recpkt    ,#abt$cur
  564.     beq    80$
  565. 41$:    cmpb    recpkt    ,#abt$all
  566.     bne    90$
  567.      mov    #-1    ,index
  568. 80$:     movb    #sta.eof,r1
  569.      return
  570.  
  571. 90$:    add    size    ,charout+2
  572.     adc    charout+0
  573.     calls    buffil    ,<#packet>
  574.     mov    r1    ,size
  575.     bne    100$
  576.      movb    #sta.eof,r1
  577.      return
  578. 100$:    movb    #sta.dat,r1
  579.     return
  580.  
  581.     .dsabl    lsb
  582.  
  583.  
  584.     .sbttl    Send end of file packet
  585.     .enabl    lsb
  586.  
  587. seof:    clr    datauk
  588.     inc    numtry
  589.     cmp    numtry    ,maxtry
  590.     blos    10$
  591.     jmp    s$retry
  592.  
  593. 10$:    tst    skipfl
  594.     beq    20$
  595.     spack    #msg$eof,paknum,#1,#SE22$
  596.     br    30$
  597. 20$:    spack    #msg$eof,paknum
  598. 30$:    rpack    r2 ,r3    ,#recpkt,#maxpak
  599.     scan    r1    ,#200$
  600.     asl    r0
  601.     jsr    pc    ,@210$(r0)
  602.     tst    datauk
  603.     bne    30$
  604.     clr    skipfl
  605.     return
  606.  
  607.     .save
  608.     .psect    $pdata
  609. 200$:    .byte    msg$err    ,msg$nak,msg$ack,timout    ,badchk
  610.     .byte    0
  611.     .even
  612. 210$:    .word    sndx.$
  613.     .word    sndx.e    ,seof.n    ,seof.y    ,sndx$$    ,sndx.$
  614.     .restore
  615.  
  616.     .dsabl    lsb
  617.  
  618.  
  619.     .sbttl    Process response to SEOF
  620.     .enabl    lsb
  621.  
  622. seof$$:    jmp    sndx$$
  623.  
  624. seof.n:    cmp    r3    ,paknum
  625.     beq    seof$$
  626.     dec    r3
  627.     bge    1$
  628.     mov    #63.    ,r3
  629. 1$:    cmp    r3    ,paknum
  630.     beq    10$
  631.     br    2$
  632.  
  633. seof.y:    cmp    r3    ,paknum
  634.     beq    10$
  635. 2$:    cmp    numtry    ,maxtry
  636.     blos    3$
  637.     jmp    s$sync
  638.  
  639. 3$:    tst    datauk
  640.     blt    seof$$
  641.     jmp    bad$ack
  642.  
  643. 10$:    clr    datauk
  644.     clr    numtry
  645.     incm64    paknum
  646.     calls    close    ,<#lun.in>
  647.     clr    inopn
  648.     cmp    index    ,#-1
  649.     beq    20$
  650.     clr    r0
  651.     tst    xmode
  652.     bne    20$
  653.     call    getnxt
  654.     tst    r0
  655.     bne    20$
  656.     movb    #sta.fil,r1
  657.     return
  658. 20$:    movb    #sta.brk,r1
  659.     return
  660.  
  661.     .dsabl    lsb
  662.  
  663.     .end
  664.