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

  1.     .title    KRTCMD.MIN  Kermit-11 main loop, commands calling O:1
  2.     .macro    krt.id    RLS=V03    ,VER=62    ,PAT=5    ,LASTED=<31-May-93>
  3.     .ident    "'RLS'.'VER'"
  4.  
  5.     .ASECT
  6. .=110
  7.     .rad50    "'RLS'"
  8.     .word    'VER'.
  9.     .iif ne    'PAT'.    .word    'PAT'.
  10.     .word    -1
  11.     .psect    $pdata
  12. sho.ve::.ascii    "'RLS'.'VER'"
  13.     .iif ne    'PAT'.    .ascii    "-'PAT'"
  14.     .asciz    "_min  Last edit: 'LASTED'"
  15.     .even
  16.     .endm    krt.id
  17.  
  18.     krt.id
  19.  
  20.  
  21. ;    Change Software, Toledo, Ohio
  22. ;    University of Toledo, Toledo, Ohio
  23. ;
  24. ;    Copyright 1983 Change Software, Inc.
  25.  
  26. ; /62/    V03.62-5_min  31-May-1993  by Billy Youdelman
  27. ;
  28. ; *** SPECIAL RT-11 V4 FLOPPY BASED MINIMUM SYSTEM VERSION ***
  29.  
  30.     .include "IN:KRTMAC.MIN"
  31.     .iif ndf  KRTINC  .error    <; .include for IN:KRTMAC.MIN failed>
  32.     .include "IN:KRTDEF.MIN"
  33.     .iif ndf  MSG$DA  .error    <; .include for IN:KRTDEF.MIN failed>
  34.  
  35.     .mcall    .PURGE    ,.RCTRLO
  36.  
  37.  
  38.     .psect    $code
  39.     .sbttl    Init the program
  40.  
  41. kermit::mov    #stack    ,sp
  42.     call    sho$version
  43.     call    kerini
  44.     tst    sy.ini
  45.     bne    1$
  46.     call    sho$line
  47. 1$:    call    binini
  48.  
  49.  
  50.     .sbttl    Kermit main_program_loop
  51.  
  52. NEW10$:    mov    argbuf    ,argpnt
  53.     call    fixchk
  54.     textsrc
  55.     clr    status
  56.     clr    summary
  57.     clr    at$len
  58.     clr    pf2$ok
  59.     call    getcmd
  60.     mov    sp    ,pf2$ok
  61.     tst    r0
  62.     blt    70$
  63.     jsr    pc    ,@cmdadr
  64. 12$:    tst    status
  65.     beq    NEW10$
  66.     br    700$
  67.  
  68.  
  69.     .sbttl    Parse errors or EOF come here
  70.  
  71. 70$:    save    <r0>
  72.     cmp    r0    ,#cmd$bad
  73.     bhi    700$
  74.     mov    cmdbuf    ,r4
  75.     cmpb    #'@    ,(r4)+
  76.     bne    700$
  77.     tst    (sp)+
  78.     mov    argbuf    ,r0
  79. 17$:    movb    (r4)+    ,(r0)+
  80.     bne    17$
  81.     call    c$take
  82.     br    12$
  83.  
  84. 700$:    unsave    <r0>
  85.     cmp    r0    ,#cmd$ex
  86.     bne    80$
  87.     jmp    c$exit
  88.  
  89. 80$:    cmp    r0    ,#cmd$bad
  90.     bne    85$
  91.     direrr    #er$unr
  92.     br    NEW10$
  93.  
  94. 85$:    cmp    r0    ,#cmd$un
  95.     bne    NEW10$
  96.     direrr    #er$amb
  97.     br    NEW10$
  98.  
  99.  
  100.     .sbttl    Open and close the link device
  101.  
  102. opentt::clr    r0
  103.     bne    100$
  104.     calls    ttyini    ,<#0>
  105.     tst    r0
  106.     bne    100$
  107. 100$:    return
  108.  
  109. clostt::save    <r0>
  110.     calls    ttyrst
  111.     unsave    <r0>
  112.     return
  113.  
  114.  
  115.     .sbttl    Send file(s)
  116.     .enabl    lsb
  117.  
  118. c$send::clr    wasmore
  119.     tst    inopn
  120.     beq    5$
  121.     calls    close    ,<#lun.in>
  122. 5$:    mov    argbuf    ,r1
  123.     tstb    @r1
  124.     beq    9$
  125.     call    isitas
  126.     tst    r0
  127.     beq    10$
  128. 9$:    mov    #er$snd    ,r0
  129.     br    11$
  130.  
  131. 10$:    upcase    #srcnam
  132.     clr    index
  133.     calls    lookup    ,<#srcnam,#spare1>
  134.     tst    r0
  135.     beq    13$
  136.     cmp    r0    ,#er$nmf
  137.     bne    11$
  138.     mov    #er$fnf    ,r0
  139. 11$:    direrr    r0
  140.     .purge    #lun.sr
  141.     br    90$
  142.  
  143. 13$:    calls    suspend    ,<sendly>
  144.     call    opentt
  145.     tst    r0
  146.     bne    90$
  147.     upcase    #asname
  148.     clr    index
  149.     call    getnxt
  150.     tst    r0
  151.     bne    90$
  152.     calls    sendsw    ,<#'S&137>
  153.     tst    r0
  154.     bne    90$
  155.     mov    nextone    ,r0
  156.     beq    100$
  157. 173$:    cmpb    (r0)    ,#space
  158.     bne    177$
  159.     inc    r0
  160.     br    173$
  161. 177$:    copyz    r0 ,argbuf ,#ln$max
  162.     br    5$
  163.  
  164. 90$:    inc    status
  165. 100$:    clrb    asname
  166.     call    clostt
  167.     jmp    clrcns
  168.  
  169.     .dsabl    lsb
  170.  
  171.  
  172.     .sbttl    Shared parse routine
  173.  
  174. isitas::mov    csi.fake,nextone
  175.     beq    17$
  176.     scan    #comma    ,r1
  177.     mov    r0    ,nextone
  178.     beq    17$
  179.     add    r1    ,nextone
  180.     mov    nextone    ,r0
  181.     clrb    -(r0)
  182.     tstb    (r1)
  183.     bne    7$
  184.     mov    #er$fnm    ,r0
  185.     br    33$
  186. 7$:    mov    sp    ,wasmore
  187. 17$:    calls    fixwild    ,<r1>
  188.     mov    #srcnam    ,r2
  189.     clrb    asname
  190. 20$:    tstb    @r1
  191.     beq    40$
  192.     cmpb    @r1    ,#space
  193.     beq    30$
  194.     movb    (r1)+    ,(r2)+
  195.     br    20$
  196. 30$:    clrb    @r2
  197.     inc    r1
  198.     tstb    @r1
  199.     beq    40$
  200.     calls    iswild    ,<#srcnam>
  201.     tst    r0
  202.     beq    37$
  203. 33$:    direrr    r0
  204.     return
  205.  
  206. 37$:    strcpy    #asname    ,r1
  207.     calls    namcvt    ,<r1,#spare1>
  208.     tstb    spare1
  209.     bne    39$
  210.     calls    namcvt    ,<#srcnam,#spare1>
  211.     calls    fixfil    ,<#spare1,#errtxt>
  212.     strcat    #asname    ,#errtxt
  213.  
  214. 39$:    calls    iswild    ,<#asname>
  215.     tst    r0
  216.     bne    33$
  217. 40$:    clrb    @r2
  218.     clr    r0
  219.     return
  220.  
  221.  
  222.     .sbttl    Get command from the attached terminal
  223.     .enabl    lsb
  224.  
  225.     CVTARG    = C.CRLF ! C.LSPA ! C.SSPA ! C.TSPA
  226.  
  227.     .NAME    =    0
  228.     .MINLE    =    2
  229.     .CMDAD    =    4
  230.     .CMDAR    =    6
  231.  
  232. getcmd::clrb    @argbuf
  233. 10$:    clr    cmdnum
  234.     .rctrlo
  235.     mov    cmdbuf    ,r4
  236.     calls    readcmd    ,<r4,#prompt>
  237.     tst    r0
  238.     bne    110$
  239.     calls    cvt$$    ,<r4,r1,#cvtarg>
  240.     tst    r0
  241.     beq    10$
  242.     add    cmdbuf    ,r0
  243.     clrb    @r0
  244.     mov    sp    ,pf2$ok
  245.     call    loacmd
  246.     calls    getcm0    ,<r4,r0>
  247.     mov    r1    ,cmdadr
  248.     mov    r0    ,cmdnum
  249.     mov    r0    ,r3
  250.     bmi    110$
  251.     tst    wasnul
  252.     bne    110$
  253.     call    loacmd
  254.     calls    getcm1    ,<r4,r0,r3>
  255.     tst    r0
  256.     bmi    110$
  257. 100$:    mov    cmdnum    ,r0
  258. 110$:    return
  259.  
  260.  
  261.     .sbttl    Get the next command
  262.     .enabl    lsb
  263.  
  264. readcmd::mov    r2    ,-(sp)
  265. 10$:    tst    cmdlun
  266.     bne    101$
  267.     jmp    50$
  268. 101$:    tst    tk.err
  269.     bne    11$
  270.     tst    status
  271.     beq    13$
  272. 11$:    tst    infomsg
  273.     bne    111$
  274.     br    15$
  275.  
  276. 13$:    clr    r2
  277.     inc    exstal
  278.     calls    getrec    ,<@r5,#lun.ta,#ln$max>
  279.     tst    r0
  280.     bne    30$
  281.     mov    r1    ,r0
  282.     add    @r5    ,r0
  283.     clrb    @r0
  284.     tst    infomsg
  285.     beq    21$
  286.     wrtall    2(r5)
  287.     wrtall    @r5
  288.     .newline
  289.  
  290. 21$:    tst    r1
  291.     beq    10$
  292.     mov    @r5    ,r2
  293. 22$:    scan    (r2)+    ,#comment
  294.     tst    r0
  295.     bne    23$
  296.     tstb    @r2
  297.     bne    22$
  298.     br    27$
  299.  
  300. 23$:    clrb    -(r2)
  301.     strlen    @r5
  302.     mov    r0    ,r1
  303.     beq    10$
  304. 27$:    clr    r0
  305.     br    100$
  306.  
  307. 30$:    cmp    r0    ,#er$eof
  308.     beq    40$
  309.     direrr    r0
  310. 15$:    wrtall    #indnam
  311.     message    < failed at line #>
  312.     mov    exstal    ,r0
  313.     call    L10266
  314.     mov    #':    ,r0
  315.     call    writ1ch
  316.     .newline
  317.     message    <  ">
  318.     wrtall    @r5
  319.     message    <">,cr
  320.     mov    #space    ,r0
  321.     call    writ1ch
  322.     call    writ1ch
  323. 111$:    wrtall    #errtxt
  324.     call    incsts
  325.     .newline
  326.  
  327. 40$:    mov    sy.ini    ,r2
  328.     beq    43$
  329.     call    defterm
  330.     br    45$
  331. 43$:    tst    infomsg
  332.     beq    45$
  333.     wrtall    #indnam
  334.     message    < closed>,cr
  335. 45$:    calls    close    ,<#lun.ta>
  336.     clr    tk.err
  337.     clr    cmdlun
  338.  
  339. 50$:    tst    mcrcmd
  340.     bne    70$
  341.     calls    getmcr    ,<@r5>
  342.     mov    r0    ,r1
  343.     beq    70$
  344.     wrtall    2(r5)
  345.     wrtall    @r5
  346.     .newline
  347. 80$:    clr    r0
  348.     br    100$
  349.  
  350. 70$:    calls    kbredi    ,<2(r5),@r5>
  351. 100$:    mov    (sp)+    ,r2
  352.     return
  353.  
  354.     .save
  355.     .psect    $pdata
  356. comment:.byte    73 ,'! ,0
  357.     .even
  358.     .restore
  359.  
  360.     .dsabl    lsb
  361.  
  362.  
  363.     .sbttl    Find the command in the table
  364.     .enabl    lsb
  365.  
  366. getcm0::save    <r2,r3,r4>
  367.     clr    wasnul
  368.     mov    #4    ,-(sp)
  369.     mov    @r5    ,r1
  370.     strlen    r1
  371.     mov    r0    ,r3
  372.     beq    110$
  373.     cmpb    @r1    ,#'?
  374.     bne    9$
  375.     mov    2(r5)    ,r4
  376.  
  377. 5$:    mov    .name(r4),r1
  378.     beq    305$
  379.  
  380. 301$:    strlen    r1
  381.     mov    r0    ,r3
  382. 302$:    sub    #18.    ,r3
  383.     neg    r3
  384.     bgt    303$
  385.     inc    r3
  386.     neg    r3
  387.     dec    (sp)
  388.     bne    302$
  389.     .newline
  390.     mov    #4    ,(sp)
  391.     br    301$
  392. 303$:    mov    #space    ,r0
  393.     call    writ1ch
  394.     wrtall    r1
  395. 304$:    add    #$listl*2,r4
  396.     dec    (sp)
  397.     beq    505$
  398.     mov    #space    ,r0
  399. 503$:    call    writ1ch
  400.     sob    r3    ,503$
  401.     br    5$
  402. 505$:    .newline
  403.     mov    #4    ,(sp)
  404.     br    5$
  405. 305$:    cmp    #4    ,(sp)
  406.     beq    8$
  407.     .newline
  408.  
  409. 8$:    mov    #nulcmd    ,r1
  410.     mov    sp    ,wasnul
  411.     clr    r0
  412.     br    120$
  413.  
  414. 9$:    clr    r2
  415.     upone    r1
  416. 10$:    scan    (r1)+    ,#cmdch
  417.     tst    r0
  418.     beq    20$
  419.     inc    r2
  420.     sob    r3    ,10$
  421.  
  422. 20$:    tst    r2
  423.     ble    110$
  424.     mov    2(r5)    ,r4
  425.     clr    r3
  426.  
  427. 30$:    tst    .name(r4)
  428.     beq    110$
  429.     strlen    .name(r4)
  430.     calls    instr, <.name(r4),r0,@r5,r2>
  431.     cmp    r0    ,#1
  432.     bne    35$
  433.     mov    r0    ,@sp
  434. 35$:    cmpb    r2    ,.minle(r4)
  435.     blo    40$
  436.      dec    r0
  437.      beq    100$
  438. 40$:    inc    r3
  439.     add    #$listl*2,r4
  440.     br    30$
  441.  
  442. 100$:    mov    r3    ,r0
  443.     mov    .cmdad(r4),r1
  444.     br    120$
  445.  
  446. 110$:    mov    #cmd$ba    ,r0
  447.     dec    @sp
  448.     bne    120$
  449.     mov    #cmd$un    ,r0
  450. 120$:    tst    (sp)+
  451.     unsave    <r4,r3,r2>
  452.     return
  453.  
  454.     .save
  455.     .psect    $pdata
  456. cmdch:    .asciz    "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_-@."
  457.     .even
  458.     .restore
  459.  
  460.     .dsabl    lsb
  461.  
  462.  
  463.     .sbttl    Check for additional input needed
  464.     .enabl    lsb
  465.  
  466. getcm1::save    <r1,r2,r3>
  467.     sub    #ln$max+2,sp
  468.     mov    sp    ,r2
  469.     tst    wasnul
  470.     beq    10$
  471.     clr    wasnul
  472.     clr    r0
  473.     br    110$
  474. 10$:    mov    @r5    ,r1
  475.     scan    #space    ,r1
  476.     tst    r0
  477.     beq    30$
  478.     add    r1    ,r0
  479.     copyz    r0,argbuf,#ln$max
  480.     br    100$
  481.  
  482. 30$:    clrb    @argbuf
  483.     mov    4(r5)    ,r3
  484.     mul    #$listl*2,r3
  485.     add    2(r5)    ,r3
  486.     mov    .cmdar(r3),r3
  487.     tstb    @r3
  488.     beq    100$
  489.     strcpy    r2    ,r3
  490. 40$:    calls    kbredi    ,<r2,argbuf>
  491.     tst    r0
  492.     bne    90$
  493.     calls    cvt$$,<argbuf,r1,#cvtarg>
  494.     tst    r0
  495.     beq    40$
  496.     mov    r0    ,r1
  497.     add    argbuf    ,r1
  498.     clrb    @r1
  499. 100$:    mov    4(r5)    ,r0
  500.     br    110$
  501.  
  502. 90$:    cmp    r0    ,#cmd$ex
  503.     bne    110$
  504.     mov    #cmd$nx    ,r0
  505. 110$:    add    #ln$max+2,sp
  506.     unsave    <r3,r2,r1>
  507.     return
  508.  
  509.     .dsabl    lsb
  510.  
  511.  
  512. nulcmd:    clr    r0
  513.     return
  514.  
  515.     .end    kermit
  516.