home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / packet / rli120.ark / CHARIO.MAC < prev    next >
Text File  |  1987-01-17  |  13KB  |  732 lines

  1. ; CHARIO.MAC - 1/17/87 - Character I/O
  2.  
  3.     .z80
  4.     maclib    TNC.LIB
  5.  
  6.     entry    addcr0,mcmt,getdat,getwt,cmd,cmdlen,cmdtyp
  7.     entry    const,conin,conot
  8.     entry    blink,dtime,itime,@inch,@outch,@prtx
  9.     entry    conmod,dis,gotreq,gotcon,gotlnk,lnkst,discon,prtcmd
  10.     entry    erdone,mdone,erfind,mfind,erprot,mprot
  11.     entry    ercant,mcant,ername,mname,ertime,mtime
  12.     entry    erexst,mexst,erwhat,mwhat
  13.     entry    eofs,leofs,@outn,@outnb,pgst,pghd,pgck,pgdn
  14.     entry    lm3,waitc,pause,cmdtnc,@docmd,wtcmd,tnca,tncb
  15.  
  16.     external    short,mode,prtpar,btchm,uccnt,ucalls
  17.     external    mcall,scall,ocall,rcall,mtnc,stnc
  18.     external    mhnr,mhdate,mhtime,mhto,mhfrom,mhbbs
  19.     external    bindec,numb,@cmp,@cmpcmd,movcal,@cmp,@wait
  20.     external    date,time,mnr,mcnt,usname,usdate,ustime,usmnr
  21.     external    ncerrs
  22.  
  23.     asciictl
  24.     tncdefs
  25.     timdef
  26.  
  27. outn    macro    adr,ct
  28.     if    not nul adr
  29.     ld    hl,adr
  30.     endif
  31.     if    not nul ct
  32.     ld    b,ct
  33.     endif
  34.     call    @outn
  35.     endm
  36.  
  37. outnb    macro    adr,ct
  38.     if    not nul adr
  39.     ld    hl,adr
  40.     endif
  41.     if    not nul ct
  42.     ld    b,ct
  43.     endif
  44.     call    @outnb
  45.     endm
  46.  
  47. ; BIOS linker.
  48.  
  49.     cseg
  50. blink:    ld    hl,(1)
  51.     inc    hl
  52.     inc    hl
  53.     inc    hl
  54.     ld    de,const
  55.     ld    bc,9
  56.     ldir
  57.     ret
  58.  
  59. ; Copy of the BIOS console jumps.
  60.  
  61.     dseg
  62. const:    jp    $-$
  63. conin:    jp    $-$
  64. conot:    jp    $-$
  65.  
  66. ; Error/status messages.
  67.  
  68. mdone:    ds    2
  69. mfind:    ds    2
  70. mprot:    ds    2
  71. mcant:    ds    2
  72. mname:    ds    2
  73. mtime:    ds    2
  74. mexst:    ds    2
  75. mwhat:    ds    2
  76.  
  77.     cseg
  78. erdone:    prtx    mdone
  79.     jr    waitc
  80. erfind:    prtx    mfind
  81.     jr    waitc
  82. erprot:    prtx    mprot
  83.     jr    waitc
  84. ercant:    prtx    mcant
  85.     jr    waitce
  86. ername:    prtx    mname
  87.     jr    waitc
  88. ertime:    prtx    mtime
  89.     jr    waitc
  90. erexst:    prtx    mexst
  91.     jr    waitc
  92. erwhat:    prtx    mwhat
  93.     jr    waitce
  94.  
  95. addcr0:    ld    (hl),cr
  96.     inc    hl
  97.     ld    (hl),0
  98.     ret
  99.  
  100. ; Make TNC on PRINTER port master.
  101.  
  102. tnca:    ld    a,rbiob
  103.     ld    (stnc),a
  104.     ld    a,raiob
  105.     ld    (mtnc),a
  106.     ld    (iobyte),a
  107.     ret
  108.  
  109. ; Make TNC on PRINTER port master.
  110.  
  111. tncb:    ld    a,raiob
  112.     ld    (stnc),a
  113.     ld    a,rbiob
  114.     ld    (mtnc),a
  115.     ld    (iobyte),a
  116.     ret
  117.  
  118. ; If local user, do xon/xoff pause.
  119.  
  120. ; If local user and long menu, wait for keypress.
  121.  
  122.     dseg
  123. lm3:    ds    2
  124.  
  125.     cseg
  126. waitce:    ld hl,    ncerrs
  127.     inc    (hl)        ; Count command errors
  128. waitc:    cmpm    mode,lmode
  129.     ret    nz        ; Not local, no wait
  130.     cmpm    short,true
  131.     ret    z        ; Short local menu, no wait
  132.     prtx    lm3
  133.     jp    @inch
  134.  
  135. pause:    cmpm    iobyte,ciob
  136.     ret    nz
  137.     call    const
  138.     ret    z
  139.     call    @inch
  140.     ld    a,c
  141.     cp    dc3
  142.     ret    nz
  143.     call    @inch
  144.     ret
  145.  
  146. ; Screen paging routines.
  147.  
  148.     dseg
  149. lnmax:    ds    1
  150. lncnt:    ds    1
  151. pghdr:    ds    2
  152.     cseg
  153. pgst:    ld    (pghdr),hl    ; Save address of header
  154.     ld    a,l
  155.     or    h        ; Is a header?
  156.     ld    a,23        ; Page with no header
  157.     jr    z,pgsta        ; No
  158.     ld    a,22        ; One less line
  159. pgsta:    ld    (lnmax),a    ; Save max
  160.     ld    (lncnt),a    ; Init count
  161.     ret
  162.  
  163. pghd:    ld    hl,lncnt    ; Line we on
  164.     ld    a,(lnmax)    ; Lines on screen
  165.     cp    (hl)        ; At top?
  166.     ret    nz        ; No
  167.     dtz    pghdr        ; Is a header?
  168.     ret    z        ; No
  169.     jp    @prtx        ; Print header
  170.  
  171. pgck:    ld    hl,lncnt    ; Point to line count
  172.     dec    (hl)        ; Count line
  173.     ret    nz        ; More lines
  174.     ld    a,(lnmax)
  175.     ld    (hl),a        ; Reset counter
  176.     jr    pgpaus        ; Pause
  177.  
  178. pgdn:    ld    a,(lncnt)    ; Current line
  179.     ld    hl,lnmax    ; Lines on screen
  180.     cp    (hl)        ; We paused already?
  181.     ret    z        ; Yes
  182. pgpaus:    cmpm    iobyte,ciob    ; Local user?
  183.     ret    nz        ; No
  184.     prtx    lm3        ; Print "Any key to continue"
  185.     call    @inch        ; Wait for keypress
  186.     push    bc        ; Save response
  187.     ld    c,cr        ; Give a CR
  188.     call    @outch
  189.     pop    bc
  190.     retz            ; Zero set, got char
  191.  
  192. ; Print the command line.
  193.  
  194. prtcmd:    ld    a,(cmdlen)
  195.     or    a
  196.     jr    z,prcme
  197.     ld    b,a
  198.     ld    hl,cmd
  199. prcma:    ld    c,(hl)
  200.     call    @outch
  201.     inc    hl
  202.     dec    b
  203.     jr    nz,prcma
  204. prcme:    ld    c,cr
  205.     call    @outch
  206.     ret
  207.  
  208. ; Output (B) charcters at (HL).
  209.  
  210. @outn:    ld    c,(hl)
  211.     call    @outch
  212.     inc    hl
  213.     dec    b
  214.     jr    nz,@outn
  215.     ret
  216.  
  217. ; Output (B) characters at (HL), except blanks.
  218.  
  219. @outnb:    ld    a,(hl)
  220.     cp    ' '
  221.     jr    z,outnba
  222.     ld    c,a
  223.     call    @outch
  224. outnba:    inc    hl
  225.     dec    b
  226.     jr    nz,@outnb
  227.     ret
  228.  
  229. ; Do a command or string of commands at (HL).
  230.  
  231.     dseg
  232. docmdc:    ds    2
  233.     cseg
  234. @docmd:    ld    (docmdc),hl
  235.     xor    a        ; Get a zero
  236.     cp    (hl)        ; Zero in string?
  237.     ret    z        ; Yes, all done
  238.     ld    a,cr        ; Get a CR
  239. docmda:    cp    (hl)        ; One in string?
  240.     inc    hl        ; Point to next char
  241.     jr    nz,docmda    ; Not CR, keep looking
  242.     ld    c,(hl)        ; Save char after CR
  243.     ld    (hl),0        ; Put 0 after CR
  244.     push    hl        ; Save pointer into string
  245.     push    bc        ; Save char after CR
  246.     ld    hl,(docmdc)    ; Point to start of command
  247.     call    @prtx        ; Send it to tnc
  248.     call    wtcmd        ; Wait for cmd: from tnc
  249.     pop    bc        ; Get char after CR back
  250.     pop    hl        ; Get string pointer back
  251.     ld    (hl),c        ; Put char after CR back
  252.     jr    @docmd        ; Do next command
  253.  
  254. wccmd:    db    'cmd:'
  255.  
  256. ; Get TNC to command state.
  257.  
  258. cmdtnc:    ld    c,etx
  259.     call    @outch
  260.  
  261. ; Wait for TNC to respond to a command.
  262. ; Return in A: 0=ok, 1=timeout, 2=command no good.
  263.  
  264. wtcmd:    lxim    timer,3        ; 3 second wait.
  265.     ld    b,0        ; Assume good status
  266. wca:    ld    de,wccmd
  267. wcb:    dtz    timer
  268.     jr    z,wcd        ; TNC did not respond.
  269.     call    const
  270.     jr    z,wcb
  271.     call    @inch
  272.     ld    a,(de)
  273.     cp    c
  274.     jr    nz,wcc
  275. ; Looking for cmd:
  276.     cp    ':'
  277.     jr    z,wce
  278.     inc    de
  279.     jr    wcb
  280.  
  281. wcc:    ld    a,c
  282.     cp    '?'
  283.     jr    nz,wca
  284.     ld    b,2        ; Got EH?
  285.     jr    wca        ; Now look for "cmd:"
  286.  
  287. wcd:    ld    b,1        ; Timeout
  288. wce:    ld    a,b        ; Return status in A
  289.     or    a        ; Set flags
  290.     ret
  291.  
  292. ; Character input.
  293. ; Character from current console device returned in C.
  294. ; Echoed to local console if from a tnc.
  295.  
  296. @inch:    push    hl
  297.     call    conin
  298.     pop    hl
  299.     ld    c,a
  300.     ld    a,(iobyte)
  301.     cp    ciob        ; Console?
  302.     ret    z        ; Yes, no echo
  303.     jr    echo
  304.  
  305. ; Character output.
  306. ; Character in C output to current console device.
  307. ; Echoed to the local console if current device is a tnc.
  308. ; Assumes all registers preserved except PSW
  309.  
  310.     dseg
  311. ctnc:    ds    1
  312.     cseg
  313. @outch:    cmpm    iobyte,ciob
  314.     jr    z,@co
  315.     call    conot
  316. echo:    ld    a,c
  317.     cp    ff
  318.     ret    z        ; No clear screen from tnc
  319.     movb    ctnc,iobyte
  320.     mvim    iobyte,ciob
  321.     call    @co
  322.     movb    iobyte,ctnc
  323.     ret
  324.  
  325. ; Output (C) to local console.
  326.  
  327. @co:    ld    a,c
  328.     cp    lf
  329.     ret    z        ; Ignore LF, is added after CR.
  330.     call    conot
  331.     ld    a,c
  332.     cp    cr
  333.     ret    nz
  334.     ld    c,lf
  335.     call    conot
  336.     ld    c,cr
  337.     ret
  338.  
  339. ; Print a string. Expand "variable text" fields.
  340.  
  341.     dseg
  342. pxpt:    ds    2
  343. pxst:    ds    2
  344.     cseg
  345. pxtbl:    dw    pxa,pxb,pxc,pxd,pxe,pxf,pxg,pxh,pxi,pxj,pxk,pxl,pxm
  346.     dw    pxn,pxo,pxp,pxq,pxr,pxs,pxt,pxu,pxv,pxw,pxx,pxy,pxz
  347. @prtx:    ld    (pxst),hl
  348. prtxa:    ld    (pxpt),hl
  349.     ld    a,(hl)
  350.     or    a
  351.     ret    z        ; NUL ends string
  352.     cp    '$'        ; Is it a $ ?
  353.     jr    nz,pxok        ; No, print it
  354.     inc    hl        ; Yes, point to char after $
  355.     ld    a,(hl)        ; Get char after $
  356.     cp    'A'
  357.     jr    c,px1        ; Not within A-Z, print $ and char
  358.     cp    'Z'+1
  359.     jr    nc,px1        ; Not within A-Z, print $ and char
  360.     sub    'A'        ; To make index into table
  361.     ld    l,a
  362.     ld    h,0
  363.     add    hl,hl        ; Double it, table is word items
  364.     ld    de,pxtbl    ; Point to start of table
  365.     add    hl,de        ; Add twice index to get to item
  366.     ld    e,(hl)        ; Low byte of sub addr
  367.     inc    hl
  368.     ld    d,(hl)        ; Hi byte of sub addr
  369.     ex    de,hl
  370.     jp    (hl)        ; Go do it
  371.  
  372. px1:    ld    a,'$'        ; Print the $
  373. pxok:    ld    c,a
  374.     call    @outch
  375.     ld    hl,(pxpt)
  376.     inc    hl
  377.     jr    prtxa
  378. pxa:    outnb    mhbbs,6
  379.     jp    pxnxt
  380.  
  381. ; Insert bell
  382. pxb:    ld    c,bell
  383.     call    @outch
  384.     jp    pxnxt
  385.  
  386. pxc:    ld    hl,(mnr)
  387.     jp    pxnum
  388.  
  389. pxd:    outn    date,6
  390.     jp    pxnxt
  391.  
  392. ; Insert calls with unread mail
  393. pxe:    ld    hl,(pxpt)
  394.     ld    de,(pxst)
  395.     or    a        ; Clear carry
  396.     sbc    hl,de
  397.     ld    a,btchm
  398.     sub    l
  399.     ld    e,a        ; Max chars to print
  400.     ld    hl,uccnt
  401.     ld    d,(hl)
  402.     ld    hl,(ucalls)
  403. pxeg:    ld    a,(hl)
  404.     and    80h        ; Is call a bbs?
  405.     jr    nz,pxej        ; Yes, dont put in beacon
  406.     ld    b,6
  407.     push    hl
  408. pxeh:    ld    a,(hl)
  409.     cp    ' '
  410.     jr    z,pxei
  411.     ld    c,a
  412.     call    @outch
  413.     inc    hl
  414.     dec    e
  415.     dec    b
  416.     jr    nz,pxeh
  417. pxei:    pop    hl
  418.     dec    e
  419.     ld    a,e
  420.     sub    8
  421.     jp    c,pxnxt        ; No more room
  422.     ld    c,' '
  423.     call    @outch
  424. pxej:    push    de
  425.     ld    de,6
  426.     add    hl,de
  427.     pop    de
  428.     dec    d        ; Any more calls in list?
  429.     jr    nz,pxeg        ; Yes
  430.     jp    pxnxt
  431.  
  432. ; Insert form feed
  433. pxf:    ld    c,ff
  434.     call    @outch
  435.     jp    pxnxt
  436.  
  437. pxg:    outnb    mhto,6
  438.     jp    pxnxt
  439.  
  440. ; Pass (ignore) the cr
  441. pxh:    inxm    pxpt
  442.     jp    pxnxt
  443.  
  444. pxi:    outnb    usname,12
  445.     jp    pxnxt
  446.  
  447. pxj:    outn    mhdate,6
  448.     jp    pxnxt
  449.  
  450. pxk:    outn    mhtime,4
  451.     jr    pxnxt
  452.  
  453. pxl:    ld    hl,(mnr)
  454.     dec    hl
  455.     jr    pxnum
  456.  
  457. pxm:    ld    hl,(mhnr)
  458.     jr    pxnum
  459.  
  460. pxn:    ld    hl,(mcnt)
  461.     jr    pxnum
  462.  
  463. pxo:    outnb    ocall,6
  464.     jr    pxnxt
  465.  
  466. pxp:    outnb    mhfrom,6
  467.     jr    pxnxt
  468.  
  469. pxr:    outnb    rcall,6
  470.     jr    pxnxt
  471.  
  472. pxs:    outnb    scall,6
  473.     jr    pxnxt
  474.  
  475. pxt:    outn    time,4
  476.     jr    pxnxt
  477.  
  478. pxu:    outnb    mcall,6
  479.     jr    pxnxt
  480. ; Print changable param values.
  481. pxv:    call    prtpar
  482.     jr    pxnxt
  483. ; Insert syn
  484. pxw:    ld    c,syn
  485.     call    @outch
  486.     jr    pxnxt
  487.  
  488. pxx:    outn    usdate,6
  489.     jr    pxnxt
  490.  
  491. pxy:    outn    ustime,4
  492.     jr    pxnxt
  493.  
  494. pxz:    ld    hl,(usmnr)
  495.  
  496. ; Print the number in (HL)
  497. pxnum:    call    bindec
  498. ; Print the previously converted number.
  499. pxq:    outnb    numb,5
  500. ; Move on to the next character
  501. pxnxt:    ld    hl,(pxpt)
  502.     inc    hl
  503.     inc    hl
  504.     jp    prtxa
  505.  
  506. ; Get a line from the console.
  507.  
  508.     dseg
  509. dtime:    ds    2        ; Wait time for disconnect
  510. itime:    ds    2        ; Timeout waiting for CR
  511. otimer:    ds    2        ; Save / restore timer value
  512. gotreq:    ds    1        ; True if got connect request
  513. cmdlen:    ds    1        ; # chars in buffer
  514. cmd:    ds    cmdmax
  515. cmdtyp:    ds    1
  516.  
  517.     cseg
  518. eofs:    db    '*** EOF'
  519. leofs    equ    $-eofs
  520.  
  521. conv:    db    'CONV',cr,0
  522. cst:    db    'C',cr,0
  523. cd:    db    'D',cr,0
  524.  
  525. concmd:    db    '*** CONNECTED to '
  526. lconcmd    equ    $-concmd
  527.  
  528. discmd:    db    '*** DISCONNECTED'
  529. ldiscmd    equ    $-discmd
  530.  
  531. reqcmd:    db    '*** connect request:'
  532. lreqcmd    equ    $-reqcmd
  533.  
  534. lnkcmd:    db    '*** LINKED to '
  535. llnkcmd    equ    $-lnkcmd
  536.  
  537. stat:
  538. isdis:    db    'Link state is:'
  539. lstat    equ    $-stat
  540.     db    ' DISCONNECTED'
  541. lisdis    equ    $-isdis
  542.  
  543. discon:    cmpcmd    isdis,lisdis
  544.     ret
  545.  
  546. ; Get tnc to converse mode
  547.  
  548. conmod:    ld    hl,conv
  549.     call    @prtx
  550.     wait    convtim
  551.     ret
  552.  
  553. ; Find out the link state.
  554.  
  555. lnkst:    ld    hl,cst
  556.     call    @prtx        ; Send "C" to tnc
  557. lnksta:    mvim    getwt,false    ; Don't wait after con req
  558.     call    getdat
  559.     ckcmd    lnksta,lnkstc,lnkstb
  560.     cmpcmd    stat,lstat
  561.     jr    nz,lnksta
  562. lnkstb:    call    wtcmd        ; Eat the cmd: after the C
  563.     ret
  564. lnkstc:    call    wtcmd        ; Eat the cmd: after the discon
  565.     jr    lnksta
  566.  
  567. ; Return zero set if cmd contains a connect.
  568.  
  569. gotcon:    cmpcmd    concmd,lconcmd
  570.     ret    nz
  571.     ld    c,lconcmd
  572.     jr    mcmt
  573.  
  574. ; Return zero set if cmd contains a link.
  575.  
  576. gotlnk:    cmpcmd    lnkcmd,llnkcmd
  577.     ret    nz
  578.     ld    c,llnkcmd
  579.     jr    mcmt
  580.  
  581. ; Disconnect
  582.  
  583. dis:    call    cmdtnc        ; Make sure tnc in command mode
  584.     call    lnkst        ; Get link state
  585.     call    discon        ; We connected?
  586.     ret    z        ; No
  587. disa:    ld    hl,cd
  588.     call    @docmd        ; Do the disconnect
  589.     movw    timer,dtime    ; Start timer
  590. disb:    call    const        ; Char from TNC?
  591.     jr    nz,disc        ; Yes
  592.     dtz    timer        ; No, timed out?
  593.     jr    z,dis        ; Yes, disconnect RIGHT NOW
  594.     jr    disb        ; Wait some more
  595.  
  596. disc:    mvim    getwt,false    ; No wait if con req
  597.     call    getdat        ; Get line from TNC
  598.     ckcmd    disb,disd,disa
  599.     jr    disb        ; Not disconnected yet
  600.  
  601. disd:    call    wtcmd        ; Disconnected.
  602.     ret
  603.  
  604. ; Move command tail to front of cmd buffer.
  605. ; (C) = first char in tail.
  606.  
  607. mcmt:    ld    b,0
  608.     ld    hl,cmd
  609.     add    hl,bc
  610.     ld    a,(cmdlen)
  611.     sub    c
  612.     ld    (cmdlen),a
  613.     ret    z        ; No call...
  614.     ld    c,a
  615.     ld    de,cmd
  616.     ldir
  617.     xor    a
  618.     ret            ; With zero set
  619.  
  620.     dseg
  621. getwt:    ds    1
  622.     cseg
  623. getdat:    movw    otimer,timer    ; Save countdown timer
  624.     movw    timer,itime
  625.     mvim    cmdtyp,cdata
  626. gtdta:    xor    a
  627.     ld    (cmdlen),a
  628.     ld    b,cmdmax
  629.     ld    de,cmd
  630. gtdtb:    call    const
  631.     jr    nz,gtdtc
  632.     cmpm    iobyte,ciob
  633.     jr    z,gtdtc
  634.     dtz    timer
  635.     jr    nz,gtdtb
  636.     mvim    cmdtyp,ctimcmd
  637.     jp    gtdtz
  638.  
  639. gtdtc:    call    @inch
  640.     ld    a,c
  641.     cp    del
  642.     jr    z,gtdtbs        ; Treat DEL like BS
  643.     cp    ' '
  644.     jr    nc,gtdte    ; Not CTL char
  645.     cp    cr
  646.     jr    z,gtdtcr
  647.     cp    lf
  648.     jr    z,gtdtlf
  649.     cp    bs
  650.     jr    z,gtdtbs
  651.     cp    ff
  652.     jr    z,gtdte
  653.     cp    bell
  654.     jr    z,gtdte
  655.     cp    tab
  656.     jr    z,gtdte
  657.     cp    eof        ; ^Z
  658.     jr    z,gtdte
  659.     cp    linkcmd        ; ^W
  660.     jr    z,gtdte
  661.     jr    gtdtb        ; Ignore control char
  662.  
  663. ; Char is line feed.
  664.  
  665. gtdtlf:    ld    a,(cmdlen)
  666.     or    a
  667.     ld    a,c
  668.     jr    nz,gtdtb    ; LF in middle of line, ignore
  669.     jr    gtdty        ; Initial LF, treat as no data rcvd
  670.  
  671. ; Char is backspace.
  672.  
  673. gtdtbs:    ld    hl,cmdlen
  674.     ld    a,(hl)
  675.     or    a
  676.     jr    z,gtdtb        ; Don't backspace beyond start of line
  677.     dec    (hl)        ; One less char in buffer
  678.     inc    b        ; Room for one more char in buffer
  679.     dec    de        ; Move buffer pointer back
  680.     cmpm    iobyte,ciob    ; Local console typing?
  681.     jr    nz,gtdtb    ; No, get next char
  682.     call    @outch        ; Echo BS SP BS
  683.     ld    c,' '
  684.     call    @outch
  685.     ld    c,bs
  686.     call    @outch
  687.     jp    gtdtb
  688.  
  689. ; Char is ok, put in buffer
  690.  
  691. gtdte:    ld    (de),a        ; Stick char in buffer
  692.     inc    de        ; Point to next buffer location
  693.     ld    hl,cmdlen
  694.     inc    (hl)        ; Count the char
  695.     cmpm    iobyte,ciob    ; Local console typing?
  696.     call    z,@outch    ; Echo char to local console
  697.     dec    b        ; Count the room in buffer
  698.     jp    nz,gtdtb    ; Room for more char, get one
  699.     jr    xx        ; Ran out of buffer
  700.  
  701. ; Got CR, echo it if local console.
  702.  
  703. gtdtcr:    cmpm    iobyte,ciob
  704.     call    z,@outch
  705.  
  706. ; Is it *** DISCONNECTED?
  707.  
  708. xx:    cmpcmd    discmd,ldiscmd
  709.     jr    nz,gtdtg
  710.     mvim    cmdtyp,cdiscmd
  711.     jr    gtdtz
  712.  
  713. ; Is it *** connect request ?
  714.  
  715. gtdtg:    cmpcmd    reqcmd,lreqcmd
  716.     jr    nz,gtdtz
  717.     ld    de,rcall
  718.     ld    hl,cmd+lreqcmd
  719.     ld    a,(cmdlen)
  720.     sub    lreqcmd
  721.     call    movcal        ; Save call on con req
  722.     mvim    gotreq,true
  723.     cmpm    getwt,true
  724.     jp    z,gtdta
  725. gtdty:    mvim    cmdtyp,cnull
  726. gtdtz:    movw    timer,otimer    ; Restore timer count
  727.     mvim    getwt,true
  728.     ld    a,(cmdtyp)
  729.     ret
  730.     end
  731. 
  732.