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

  1. ; GATE.MAC - 1/17/87 - GateWay code.
  2.  
  3.     .z80
  4.     .xlist
  5.     maclib    TNC.LIB
  6.     tncdefs
  7.     timdef
  8.     asciictl
  9.     .list
  10.  
  11.     entry    gcon1,gcon2,gcon4,gunp,gmon
  12.     entry    gaton,gatoff,gate,gbye,gater
  13.     entry    gm1,gm2,gm3,gm4,gm5,gm6,gm7,gm9,gm10,gm11,gm12
  14.     entry    gm13,gm14
  15.     entry    gmenus,gmenul,gateok,moncnt,montim,monok
  16.  
  17.     external    cmd,cmdlen,cmdtyp,getdat,getwt,const
  18.     external    conmod,gotcon,gotlnk,ertime,ercant,erwhat
  19.     external    mode,logout,event,log,logtxt,llogtxt,dis
  20.     external    prtcmd,@prtx,@fill,@wait,@mcmd,movcal
  21.     external    twotnc,cmdtnc,@docmd,wtcmd,itime,ynbq
  22.     external    fcb2,f2st,f2l,scon,mtnc,stnc,mcall,scall
  23.     external    @srcl,@srcn,@srcw,@srcc,@srct,@src
  24.     external    prtcon,rdusr,uslst,uscnt,usport,uspath
  25.  
  26.     dseg
  27.  
  28. ; Addresses of the GateWay messages.
  29.  
  30. gateok:    ds    1
  31. gmenus:    ds    2    ; short menu text
  32. gmenul:    ds    2    ; long menu text
  33. gm1:    ds    2    ; "not available" message
  34. gm2:    ds    2
  35. gm3:    ds    2
  36. gm4:    ds    2
  37. gm5:    ds    2
  38. gm6:    ds    2
  39. gm7:    ds    2
  40. gm8:    ds    2
  41. gm9:    ds    2
  42. gm10:    ds    2
  43. gm11:    ds    2
  44. gm12:    ds    2
  45. gm13:    ds    2
  46. gm14:    ds    2
  47.  
  48. monok:    ds    1
  49. moncnt:    ds    2
  50. montim:    ds    2
  51. mtyp:    ds    1
  52. count:    ds    2
  53. tcall:    ds    6
  54. linkit:    ds    1
  55.  
  56. con:    dw    $+2
  57.     db    'CONOK ON',cr,0
  58. coff:    dw    $+2
  59.     db    'CONOK OFF',cr,0
  60. monon:    dw    $+2
  61.     db    'mon on',cr,0
  62. monoff:    dw    $+2
  63.     db    'mon off',cr,0
  64.  
  65. clink:    db    'G',cr,'C '
  66. ccall:    ds    6
  67.     db    cr,0
  68.  
  69. ; Linking code.
  70.  
  71.     cseg
  72. link:    movw    timer,itime    ; Start timeout timer
  73.     mvim    count,10    ; Count lines transfered
  74. linka:    master
  75.     call    const
  76.     call    nz,linkm    ; Deal with line from master
  77.     slave
  78.     call    const
  79.     call    nz,links    ; Deal with line from slave
  80.     dtz    timer        ; Timed out yet?
  81.     jr    nz,linka    ; No
  82.     call    ertime        ; Yes, tell slave user
  83.     master
  84.     call    ertime        ; and master user
  85.     jp    linknd        ; Drop the link
  86.  
  87. ; Deal with data from master
  88.  
  89. linkm:    mvim    getwt,false    ; Dont wait after con req
  90.     call    getdat        ; Get line of data from master
  91.     movb    mtyp,cmdtyp    ; Save command status
  92.     ld    a,(cmdtyp)
  93.     ckcmd    linkma,linknd,linknd
  94.     cmpm    cmd,linkcmd    ; Wants to drop the link?
  95.     jp    z,linknd    ; Yes, do it
  96.     slave
  97.     call    prtcmd        ; Send the line to the slave
  98.     movw    timer,itime    ; Restart timeout timer
  99.     ld    hl,count    ; Count lines
  100.     dec    (hl)
  101.     ret    nz        ; Not enough yet
  102.     ld    (hl),10        ; Restart count
  103.     console
  104.     prtx    gm11        ; Tell system owner who using gateway
  105. linkma:    ret
  106.  
  107. ; Deal with data from slave
  108.  
  109. links:    mvim    getwt,false    ; Dont wait after con req
  110.     call    getdat        ; Get line of data from slave
  111.     ckcmd    linkse,linksa,linksb
  112.     call    gotcon        ; Did someone connect?
  113.     jr    nz,linksc    ; No
  114.     mvim    scon,true    ; Change status to connected
  115.     ld    de,scall
  116.     ld    hl,cmd
  117.     ld    a,(cmdlen)
  118.     call    movcal        ; Save call of station that connected
  119.     prtx    gm9        ; Tell them who they talking to
  120.     master
  121.     prtx    gm10        ; Tell user on master who connected
  122.     ret
  123.  
  124. linksc:    master
  125.     call    prtcmd        ; Send the line of data to master
  126.     call    gotlnk        ; Slave linked us somewhere?
  127.     jr    nz,linksd    ; No
  128.     ld    de,scall
  129.     ld    hl,cmd
  130.     ld    a,(cmdlen)
  131.     call    movcal        ; Save call of station we linked to
  132. linksd:    movw    timer,itime    ; Restart timeout timer
  133.     ld    hl,count    ; Point to line count
  134.     dec    (hl)        ; Time to tell owner?
  135.     ret    nz        ; No
  136.     ld    (hl),10        ; Restart the count
  137.     console
  138.     prtx    gm11        ; Tell owner who using his system
  139. linkse:    ret
  140.  
  141. ; Slave disconnected
  142.  
  143. linksa:    mvim    scon,false
  144.     jr    linknd
  145.  
  146. ; Slave timed out
  147.  
  148. linksb:    master
  149.     call    ertime
  150.  
  151. ; Exit from linked state
  152.  
  153. linknd:    slave
  154.     call    cmdtnc        ; Get TNC into command mode
  155.     docmd    coff        ; CONOK OFF
  156.     cmpm    scon,true    ; Slave is connected?
  157.     call    z,dis        ; Then disconnect...
  158.     master
  159.     movb    cmdtyp,mtyp    ; Restore command status
  160.     pop    hl        ; Return to link caller, not link
  161.     ret
  162.  
  163. ; Log end of event.
  164.  
  165. logend:    ld    hl,logtxt
  166.     ld    (hl),'E'
  167.     inc    hl
  168.     ld    (hl),cr
  169.     call    log
  170.     ret
  171.  
  172. ; Enable / disable GateWay.
  173.  
  174. gaton:    mvim    gateok,true
  175.     ret
  176. gatoff:    mvim    gateok,false
  177.     ret
  178.  
  179. ; Entry to GateWay from MailBox
  180.  
  181. gate:    ld a,    (gateok)    ; See if gw is on now
  182.     call    ynbq        ; ..
  183.     ld    hl,(gm1)    ; Err msg if GW not avail
  184.     jp    z,@prtx        ; No
  185.     cmpm    twotnc,false    ; We have two tnc's?
  186.     jp    z,@prtx        ; No
  187.     mvim    event,'G'
  188.     ld    hl,logtxt
  189.     ld    (hl),'S'
  190.     inc    hl
  191.     ld    (hl),cr
  192.     call    log        ; Log GateWay start
  193.     mvim    mode,gmode    ; Set GateWay mode
  194.     ret
  195.  
  196. ; Exit from GateWay - disconnect.
  197.  
  198. gbye:    call    logend
  199.     jp    logout
  200.  
  201. ; Exit from GateWay back to MailBox
  202.  
  203. gater:    call    logend        ; Log end of gate
  204.     mvim    mode,umode    ; Set user mode
  205.     ret
  206.  
  207. ; Let the sucker monitor.
  208.  
  209. gmon:    ld a,    (monok)        ; Monitor allowed now?
  210.     call    ynbq        ; ..
  211.     ld    hl,(gm14)    ; Msg if not
  212.     jp    z,@prtx        ; Sorry Charlie
  213.     ld    hl,logtxt    ; Set up text for log file
  214.     ld    (hl),'M'
  215.     inc    hl
  216.     ld    (hl),cr
  217.     call    log        ; Log the event
  218.     prtx    gm13        ; Tell user he listening to other TNC
  219.     slave
  220.     docmd    monon        ; Turn on monitor
  221.     movw    count,moncnt    ; Init count of lines monitored
  222.     movw    timer,montim    ; Init # seconds to monitor
  223. gmonb:    slave
  224.     call    const        ; Anything from slave?
  225.     jr    z,gmonc        ; No
  226.     dcxm    count        ; Count this line
  227.     mvim    getwt,false    ; No wait if con req
  228.     call    getdat        ; Get line from slave
  229.     ckcmd    gmonc,gmonc,gmonc
  230.     master
  231.     call    prtcmd        ; Send line to master
  232. gmonc:    master
  233.     dtz    count        ; Monitored max lines allowed?
  234.     jr    z,gmond        ; Yes
  235.     dtz    timer        ; Monitored long enough?
  236.     jr    z,gmond        ; Yes
  237.     call    const        ; Line from master?
  238.     jr    z,gmonb        ; No
  239.     mvim    getwt,false    ; No wait if con req
  240.     call    getdat        ; Get line from master
  241.     ckcmd    gmonb,gmone,gmone
  242.     jr    gmone        ; Quit monitoring
  243.  
  244. gmond:    call    ertime        ; Tell user he timed out
  245. gmone:    slave
  246.     docmd    monoff        ; Turn off monitor
  247.     master
  248.     jp    logend        ; Log end of event and return
  249.  
  250. ; Link the TNC's in unprotocol mode
  251.  
  252. gunp:    ld    hl,logtxt    ; Set up text for log file
  253.     ld    (hl),'U'
  254.     inc    hl
  255.     ld    (hl),cr
  256.     call    log        ; Log the event
  257.     prtx    gm2        ; Tell user he talking to other TNC
  258.     slave
  259.     docmd    con        ; Turn CONOK on
  260.     call    conmod        ; Go to unproto mode
  261.     mvim    scon,false    ; Slave is not connected
  262.     fill    scall,6,' '    ; Nobody connected on slave
  263.     call    link        ; Go play gateway
  264.     jp    logend        ; Log end of event and return
  265.  
  266. ; Attempt a connected link
  267.  
  268. ckp:    cmpm    usport,'A'    ; User on COMM TNC?
  269.     ld    a,(iobyte)
  270.     jr    z,ckpa        ; Yes
  271.     cp    rbiob        ; Path for same port?
  272.     ret
  273. ckpa:    cp    raiob        ; Path for same port?
  274.     ret
  275.  
  276. gcon1:    ld    hl,(gm3)
  277.     jp    @prtx        ; No call given
  278.  
  279. gcon2:    mvim    linkit,false
  280.     ld    a,(f2l)        ; Length of call
  281.     cp    7        ; More than six chars?
  282.     jr    nc,gcon4    ; Yes, use what we got
  283.     srclst    fcb2+1,uslst,uscnt,6,6
  284.     jr    z,gconc        ; We know this user
  285. gcon4:    mvim    linkit,false
  286.     call    prtcmd        ; Show what we do
  287.     slave
  288.     call    prtcmd        ; Send the connect as we got it
  289.     call    wtcmd        ; Wait for tnc response
  290.     push    af
  291.     mvim    linkit,false
  292.     jp    gconf
  293.  
  294. ; Connect to user.
  295.  
  296. gconc:    zmov    tcall,mcall,6    ; Save users call
  297.     ld    de,mcall
  298.     ld    hl,(f2st)
  299.     ld    a,(f2l)
  300.     call    movcal        ; Get call of station to link to
  301.     zmov    ccall,mcall,6    ; and save that too
  302.     call    rdusr        ; Read user record of station to link to
  303.     cmpm    usport,'L'    ; That staion linked here?
  304.     jr    nz,x1        ; No
  305.     cmpm    uspath,cr    ; Have call of GateWay?
  306.     jr    z,x1        ; No
  307.     mvim    linkit,true    ; We going to link thru another GateWay
  308.     fill    mcall,6,' '
  309.     ld    hl,uspath
  310.     ld    de,mcall
  311.     ld    b,6
  312. x2:    ld    a,(hl)
  313.     inc    hl
  314.     cp    cr
  315.     jr    z,x3
  316.     ld    (de),a
  317.     inc    de
  318.     dec    b
  319.     jr    nz,x2
  320. x3:    call    rdusr        ; Get user record of GateWay
  321. x1:    call    ckp        ; User last seen on same port?
  322.     jr    nz,gcond    ; No
  323.     call    prtcmd        ; Show what we do
  324.     slave
  325.     call    prtcmd        ; Send the connect as we got it
  326.     jr    gcone
  327. ; Ok, we really DO know how to get to this one!
  328. gcond:    call    prtcon        ; Show what we do
  329.     slave
  330.     call    prtcon        ; Send connect to slave tnc
  331. gcone:    call    wtcmd        ; Wait for tnc response
  332.     push    af        ; Save status from command
  333.     zmov    mcall,tcall,6    ; Restore loged in user call
  334.     call    rdusr        ; Get logged user record back
  335. gconf:    master
  336.     pop    af        ; Get status back
  337.     jr    z,gcong        ; TNC liked the command
  338.     dec    a
  339.     jp    z,ercant    ; TNC not respond
  340.     jp    erwhat        ; TNC did an EH?
  341.  
  342. ; Wait for response from slave
  343.  
  344. gcong:    prtx    gm4        ; Tell user we try the connect
  345.     movcmd    logtxt,0,llogtxt-2
  346.     ld    (hl),cr
  347.     movb    mtyp,cmdtyp
  348. gconh:    mvim    getwt,false    ; Not to wait after con req
  349.     slave
  350.     call    const
  351.     jr    nz,gcons    ; Input from slave
  352.     master
  353.     call    const
  354.     jr    nz,gconm    ; Input from master
  355.     jr    gconh
  356.  
  357. ; Input from master
  358.  
  359. gconm:    call    getdat        ; Get the line from master
  360.     movb    mtyp,cmdtyp    ; Save type of input
  361.     ld    a,(cmdtyp)
  362.     ckcmd    gconh,gconma,gconma
  363.     cmpm    cmd,linkcmd    ; User wants to give up?
  364.     jr    nz,gconh    ; Nope
  365.  
  366. ; Abort the connect attempt.
  367.  
  368.     prtx    gm7        ; Tell user we giving up
  369. gconma:    slave
  370.     call    dis        ; Disconnect on slave
  371.     master
  372.     jp    gconng        ; and quit
  373.  
  374. ; Input from slave
  375.  
  376. gcons:    call    getdat        ; Get line from slave
  377.     ckcmd    gconh,gconsb,gconsc
  378.     call    gotcon        ; Is it a connect?
  379.     jr    z,gconsa    ; Yes
  380.     master
  381.     call    prtcmd        ; Show user the busy
  382.     jr    gconh        ; Keep trying
  383.  
  384. ; Connect worked
  385.  
  386. gconsa:    mvim    scon,true    ; Mark slave as connected
  387.     ld    de,scall
  388.     ld    hl,cmd
  389.     ld    a,(cmdlen)
  390.     call    movcal        ; Save call of station connect to
  391.     wait    linktim        ; Wait a bit, remote bbs needs it
  392.     prtx    gm9        ; Tell slave user who they linked to
  393. ; If we connected to another GateWay, send it the
  394. ; commands to connect to the station we really want.
  395.     ld    hl,clink
  396.     cmpm    linkit,true
  397.     call    z,@prtx
  398.     master
  399.     prtx    gm6        ; Tell master user connect worked
  400.     prtx    gm10        ; and who they linked to
  401.     call    log        ; Log the connect
  402.     call    link        ; Go play gateway
  403.     call    logend        ; Log end of connect
  404.     movb    cmdtyp,mtyp    ; Restore command status
  405.     ret            ; Back to menu
  406.  
  407. ; Connect failed
  408.  
  409. gconsb:    call    wtcmd        ; Wait for TNC
  410.     master
  411.     prtx    gm5        ; Tell user no connect
  412.     jr    gconng        ; and exit
  413.  
  414. ; Timed out waiting for connect
  415.  
  416. gconsc:    call    dis        ; Disconnect slave TNC
  417.     master
  418.     call    ertime        ; Tell user he timed out
  419. gconng:    mvim    logtxt,'A'    ; Log as attempt, not connect
  420.     call    log        ; Log the connect attempt
  421.     movb    cmdtyp,mtyp    ; Restore command status
  422.     ret            ; Back to menu
  423.     end
  424. 
  425.