home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / MODEMS / MODEM / NODE104.LBR / NODE104.MZC / NODE2.MAC
Text File  |  2000-06-30  |  27KB  |  928 lines

  1.  
  2.  
  3.     title    'NODE104 - TELENET node repeat dialer'
  4.  
  5. ;=============================================================================
  6. ;
  7. ;
  8. ; This program will repeat-dial remote Telenet nodes until a connection is
  9. ; made using various CP/M+ function calls. It looks for the Telenet command 
  10. ; prompt ("@") to determine that a non-connection condition has been deter-
  11. ; mined, and, upon detecting the remote node connection, calls the remote
  12. ; modem, and sets it to the more informative Racal-Vadic mode.
  13. ;
  14. ; At this point, the user's communication program is called, with provision 
  15. ; for including the name of the remote node on the command line, i.e.,
  16. ; "MEX ORPOR <cr>". 
  17. ;
  18. ; User also has the options of returning to his/her communication program,
  19. ; to the operating system or disconnection during the dialing cycle.
  20. ;
  21. ; You will need to select what assembler you are using (see "assembler
  22. ; selection;") and your operating system configuration.
  23. ;
  24. ; You will also need to insert the baudrate you wish to connect to at SPEED:,
  25. ; your Telenet identification string at label TNETID:, and your password at
  26. ; TNETPW.  Place the name of the program you wish to chain to at PRGRM:.
  27. ; Each definable section is enclosed in ''++++++++'' boundaries.
  28. ;
  29. ; Use your favorite editor in non-document mode, and use the assembler you
  30. ; have selected below to assemble and link.
  31. ;
  32. ; My special thanks to Ben Grey for the extensive rewrite.
  33.  
  34. ; Written  April 28, 1988            Mike Heffernan
  35. ; Modified April 29, 1988            Ben Grey        
  36. ; Extensively modified May 27, 1988        Mike Heffernan
  37.  
  38. ; Corrected bug which prevented initial answer detect at any baud rate
  39. ; other than 1200; added "ASK" routine for use in conjunction with
  40. ; PCPCHAIN utility (included in new library)-May 30, 1988.     --M.H.
  41. ;
  42. ;     --V1.4:Added lookup table and related routine to allow
  43. ; NODE104 to access any Telenet remote node; eliminated ASK routine, added
  44. ; SELECT menu.  Additional thanks to Ben Grey for extensive guidance with
  45. ; lookup table operation--June 13, 1988                --M.H.
  46. ;=============================================================================
  47.  
  48. ; Should work on any CPM+ system which uses all the following calls.
  49. ; Assumes duplex and baudrate previously set.
  50.  
  51. no    equ    0
  52. yes    equ    not no
  53.  
  54. ; Version and Revision
  55.  
  56. ver    equ    01        ; Version
  57. rev    equ    04        ; Revision
  58.  
  59. ; Version Date
  60.  
  61. vmth    equ    05        ; Month
  62. vday    equ    30        ; Day
  63. vyrs    equ    88        ; Year
  64. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  65. ; Assembler Definition
  66.  
  67. M80    equ    yes        ; Microsoft M80
  68. SLR    equ    NO        ; SLR Systems
  69. ZAS    equ    NO        ; Echelon
  70. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  71. ; System Configuration
  72.  
  73. V1050    equ    no        ; Visual 1050
  74.                 ; If YOU have a Visual 1050
  75.                 ;  contact me (see READ.ME)!    
  76. CPM22    equ    NO        ; Standard CP/M
  77.                 ; Uses function calls NOT
  78.                 ;  available in versions 2.2 or less
  79. CPM30    equ    yes        ; Standard CP/M+ (3.0)
  80. ZCPR3    equ    NO        ; ZCPR3 is CCP
  81. ZRDOS    equ    NO        ; ZRDOS is OS
  82. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  83. base    equ    0
  84. bdosev    equ    base+0005h    ; BDOS Entry Vector
  85. dmabuf    equ    base+0080h    ; Default DMA Buffer
  86. tpa    equ    base+0100h    ; Transient Program Area
  87.  
  88. ; CPM Function Call Equates
  89.  
  90. CONINP    equ    01H        ; Console Input
  91. CONOUT    equ    02H        ; Console Output
  92. AUXINP    equ    03H        ; aux port input--modem port
  93. AUXOUT    equ    04H        ; aux port output--modem port
  94. AUXIST    equ    07H        ; aux input status
  95. AUXOST    equ    08H        ; aux output status
  96. PRTSTR    equ    09H        ; print string
  97. CONST    equ    0BH        ; Console Status
  98.  
  99. CHAIN    equ    47        ; Chain-to-program CPM function
  100. CHNFLG    equ    00H        ; Default drive/user will be set
  101.  
  102. ; Miscellaneous Equates
  103.  
  104.      if    v1050        ; Visual 1050
  105. f1key    equ    0d4h        ; Function Key 1
  106. f2key    equ    0d8h        ; Function Key 2
  107. f3key    equ    0dch        ; Function Key 3 
  108. f4key    equ    0e0h        ; Function Key 4
  109. f5key    equ    0e4h        ; Function Key 5
  110. helpkey    equ    0c0h        ; Help key on Visual
  111. cls    equ    0ch        ; Clear Screen
  112. esc    equ    1bh        ; Escape
  113.      else
  114. f1key    equ    'R'-'@'        ; Control-R
  115. f2key    equ    'W'-'@'        ; Control-W
  116. f3key    equ    'X'-'@'        ; Control-X
  117. f4key    equ    'D'-'@'        ; Control-D
  118. f5key    equ    'A'-'@'        ; Control-A
  119. helpkey    equ    'H'-'@'        ; Control-H
  120. cls    equ    0ch        ; Some use this to clear screen
  121. esc    equ    0        ; Not used
  122. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  123. ; If your screen does NOT clear immediately upon calling NODE104,
  124. ; comment out the previous line and uncomment the following line.
  125. ; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  126.  
  127. ;cls    equ    'Z'-'@'        ; Many use ^Z to clear screen
  128.      endif            ; V1050
  129.  
  130. nl    equ    00h
  131. count    equ    06h        ;length of each table entry
  132. bell    equ    07h
  133. tab    equ    09h    
  134. lf    equ    0ah        ; Line Feed
  135. cr    equ    0dh        ; Carriage Return
  136.     page
  137.  
  138.      if    m80        ; If using M80
  139.     .z80            ; Use Z80 Opcodes
  140.     aseg            ; Absolute Segment
  141.     org    tpa        ; Origin of Segment
  142.      endif            ; M80
  143.  
  144. ;======================================================================
  145. ; Start of Program
  146. ;======================================================================
  147.  
  148.     jp    start        ; jump around headers
  149.  
  150. ; program name
  151.  
  152. msg:    db    cr,lf,tab,tab,tab,'      -={NODE104}=-            '
  153.     db    tab,tab,tab
  154.     db    cr,lf,tab,tab,'    Telenet auto-dialer for CP/M+ systems         '
  155.     db    tab,tab
  156.     db    '$'
  157.  
  158. ; dialing strings
  159.  
  160. kick:    db    cr        ; Occasionally, PcP needs a nudge
  161. open:    db    'ATZ'        ; Otherwise, just ATZ does it
  162.     db    cr
  163.     db    0
  164. fdial:    db    'ATDT'
  165. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  166.     db    '######'    ; Local Telenet indial phone number
  167.                 ; (the number you call to reach Telenet)
  168. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  169.     db    cr
  170.     db    0
  171. bighang:db    cr        ; Routine to return to local modem 
  172.     db    '@'        ; and disconnect
  173.     db    cr
  174.     db    0
  175.  
  176. hang:    db    'HANGUP'
  177.     db    cr
  178.     db    0
  179.  
  180. ; Telenet indial initialization
  181.  
  182. initl:    db    cr        ; Telenet initialization
  183.     db    'D'        ; For 1200 baud 
  184.     db    cr        ; Operation
  185.     db    'D1'        
  186.     db    cr
  187.     db    0        ; Null terminated
  188.  
  189. racal:    db    'E'-'@'        ; send control-E
  190.     db    cr
  191. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  192. ; Name of Program to Chain
  193.  
  194. prgrm:    db    'MEX  '        ; Program command line 
  195.     db    0        ; Null terminated
  196. node:    db    'xxxxxx'    ; Do NOT change this line.
  197.                 ; MEX will read script files
  198.                 ; into its buffer if the name
  199.                 ; of the file is included on
  200.                 ; this command line. My scripts
  201.                 ; contain numbers of systems in
  202.                 ; each node, i.e. "ORPOR.MEX". 
  203.     db    0
  204.  
  205. prgmnd    equ    $
  206.  
  207. ; Dialing Strings
  208. dial:    db    'C D/'        ; Telenet Dial
  209.     db    0        ; Null terminated
  210.  
  211. speed:    db    '/12,'        ; Telenet Speed
  212. ;...or "'/3,'" for 300 baud...
  213.  
  214. ; ==>> Insert your Identification and Password here <<==
  215.  
  216. tnetid:    db    'XXXX####,'    ; Telenet Identification
  217. tnetpw:    db    '####XXXX'    ; Telenet Password
  218.     db    cr        ; 
  219.     db    0        ; Null terminated
  220. ;===========================================================================
  221. ; End of user definable section.
  222. ; Program starts here
  223. ;===========================================================================
  224.  
  225. ; Save system stack, set up local stack
  226.  
  227. start:    ld    (stack),sp    ;Save system stack    
  228.     ld    sp,stack    ;Load local stack
  229.  
  230. ; program signon
  231.     ld    a,cls        ;Clear screen
  232.     call    bdos3
  233.  
  234.     if    v1050
  235.     call    revon
  236.     ld    de,msg        ;Load opening message
  237.     ld    c,prtstr    ;Print it
  238.     call    bdosev        ;System call
  239.     call    revoff
  240.     else
  241.     ld    de,msg        ;Load opening message
  242.     ld    c,prtstr    ;Print it
  243.     call    bdosev        ;System call
  244.     endif
  245.  
  246. signon:    ld    de,msg1        ;Load help message
  247.     ld    c,prtstr    ;Print it
  248.     call    bdosev        ;System call
  249.  
  250. askcon:    ld    de,menu        ;Load SELECT menu
  251.     ld    c,prtstr    ;Print it
  252.     call    bdosev        ;System call
  253.  
  254. wait:    call    bdos11        ;Check console for input
  255.     jr    z,wait        ;If no input, check again
  256.     call    bdos2        ;Read console character
  257.  
  258. ; Character was at Console
  259.  
  260.     cp    f1key        ; Was it function one?
  261.     call    z,navail    ; Yep, Redial
  262.     cp    f2key        ; Was it function two?
  263.     jp    z,mex        ; 1Yep, go to comm program
  264.     cp    f3key        ; Was it function three?
  265.     jp    z,exit        ; Yep, go to CP/M
  266.     cp    f4key        ; Was it function four?
  267.     jp    z,hangup    ; Yep, hangup
  268.     cp    helpkey        ; Was it the Help key?
  269.     call    z,help        ; Yep, print help message
  270.  
  271. ;Character received, move to next line
  272.     push    af        ;save input character
  273.     ld    e,lf        ;line feed
  274.     ld    c,conout    ;console output
  275.     call    bdosev        ;system call
  276.     ld    e,cr        ;carriage return
  277.     ld    c,conout    ;console output
  278.     call    bdosev        ;system call
  279.     pop    af        ;restore character
  280.  
  281. ;Check range of zvalues received from console
  282.     cp    'A'        ;Compare to u/c A
  283.     jr    c,wait        ;less than u/c A, so ignore
  284.     cp    'Z'+1        ;Compare to u/c Z plus one
  285.     jr    c,rzero        ;less than u/c Z, make relative zero
  286.                 ;by checking carry bit
  287.  
  288. ;Range might be lower case (a-w)
  289.     cp    'a'
  290.     jr    c,wait        ;less than l/c A, ignore entry
  291.     cp    'z'+1        
  292.     jr    nc,wait        ;greater than l/c Z, ignore entry
  293.  
  294. ;Lower case value is within range, put in upper case if not
  295.     and    5fh
  296.  
  297. ;Make entered value relative zero
  298. rzero:    sub    41h
  299.  
  300. ;Initialize for multiply
  301.     ld    hl,0        ;clear product area
  302.     ld    e,a        ;move input relative 0 character into E
  303.     ld    d,0        ;clear D of DE register
  304.     ld    b,count        ;table entry size
  305.  
  306. repeat:    add    hl,de
  307.     djnz    repeat
  308.  
  309.     ld    de,tbladr    ;table base address (where it starts!)
  310.      add    hl,de        ;calculate the table entry address
  311.  
  312. ;move selected entry to NODE
  313.     ld    de,node        ;destination
  314.     ld    bc,count    ;table entry length
  315.     ldir            ;move entry-equate to NODE 
  316.                 
  317. ; output dialing string
  318.  
  319. open1:    ld    hl,open        ; send ATZ
  320.     call    bdos8    
  321.     ld    hl,string    
  322.     ld    (bufptr),hl    ; save buffer pointer
  323.  
  324.  
  325. ; read modem response
  326.  
  327. read:    call    bdos7        ;system call
  328.     jr    z,chkcon1    ;if nothing there, check console     
  329.     ld    hl,(bufptr)    ;load buffer pointer
  330.     call    bdos4        ;read aux character with echo
  331.     ld    (hl),a        ;store it
  332.     inc    hl        ;next buffer address
  333.     ld    (hl),0        ;null terminate
  334.     ld    (bufptr),hl    ;so we mark the spot
  335.     cp    'O'        ;if O look for K
  336.     jr    z,read1        ;here
  337.     cp    '?'        ;whoops, we are already connected 
  338.     jp    z,loop        ;so go to node dialing routine
  339.     jp    read        ;otherwise, look again
  340.  
  341. read1:    call    bdos7        ;system call
  342.     jr    z,read1        ;if nothing there, look again
  343.     ld    hl,(bufptr)    ;pop hl
  344.     call    bdos4        ;read aux character with echo
  345.     ld    (hl),a        ;push hl
  346.     cp    'K'        ;modem ready?
  347.     jr    z,dial1        ;yes, dial the phone
  348.     jr    nz,read        ; Nothing for us, so begin again
  349.  
  350. chkcon1:call    bdos11        ;Check console for input
  351.     jr    z,open1        ;If no input, check again
  352.     call    bdos2        ;Read console character
  353.  
  354. ; Character was at Console
  355.  
  356.     cp    f1key        ; Was it function one?
  357.     jp    z,open1        ; Yep, Redial
  358.     cp    f2key        ; Was it function two?
  359.     jp    z,mex        ; 1Yep, go to comm program
  360.     cp    f3key        ; Was it function three?
  361.     jp    z,exit        ; Yep, go to CP/M
  362.     cp    f4key        ; Was it function four?
  363.     jp    z,hangup    ; Yep, hangup
  364.     cp    f5key        ; Recall request?
  365.     jp    z,recall    ; Return to signon
  366.     cp    helpkey        ; Was it the Help key?
  367.     call    z,help        ; Yep, print help message
  368.     jr    open1        ; Nothing for us, so resend string
  369.  
  370. dial1:    ld    hl,fdial    ;indial number
  371.     call    bdos8
  372.     ld    hl,string    ;our buffer
  373.     ld    (bufptr),hl    ;save it
  374.  
  375.  
  376. ; read modem response
  377.  
  378. nread:    call    bdos7        ;system call 
  379.     jr    z,chkcon2    ;if nothing there check console
  380.     ld    hl,(bufptr)    ;load buffer pointer
  381.     call    bdos4        ;read aux character with echo
  382.     ld    (hl),a        ;store it
  383.     inc    hl        ;next buffer address
  384.     ld    (hl),0        ;null terminate
  385.     ld    (bufptr),hl    ;so we mark the spot
  386.     cp    '0'        ;if 0 look for another 0
  387.     jr    z,nread1    ;here
  388.     jr    nz,nread    ;otherwise, look again
  389.  
  390. nread1:    call    bdos7        ;system call
  391.     ld    hl,(bufptr)    ;load buffer pointer
  392.     call    bdos4        ;read aux character with echo
  393.     ld    (hl),a        ;store it
  394.     inc    hl        ;next buffer address
  395.     ld    (hl),0        ;null terminate
  396.     ld    (bufptr),hl    ;so we mark the spot
  397.     cp    '0'        ;if 0 look for next 0
  398.     jr    z,nread2    ;here
  399.     jr    nz,nread    ;otherwise, look again
  400.  
  401. nread2:    call    bdos7        ;system call
  402.     ld    hl,(bufptr)    ;pop hl
  403.     call    bdos4        ;show it
  404.     ld    (hl),a        ;push hl
  405.     inc    hl
  406.     ld    (hl),0        ;null terminate
  407.     ld    (bufptr),hl    ;save the pointer
  408.     cp    cr        ;CONNECT ?
  409.     jr    z,init        ;yes, send network logon
  410.     jp    nread        ;Anything else, retry call
  411.  
  412.  
  413. chkcon2:call    bdos11        ;Check console for input
  414.     jr    z,nread        ;If no input, check again
  415.     call    bdos2        ;Read console character
  416.  
  417. ; Character was at Console
  418.  
  419.     cp    f1key        ; Was it function one?
  420.     jp    z,dial1        ; Yep, Redial
  421.     cp    f2key        ; Was it function two?
  422.     jp    z,mex        ; 1Yep, go to comm program
  423.     cp    f3key        ; Was it function three?
  424.     jp    z,exit        ; Yep, go to CP/M
  425.     cp    f4key        ; Was it function four?
  426.     jp    z,hangup    ; Yep, hangup
  427.     cp    f5key        ; Recall request?
  428.     jp    z,recall    ; Return to signon
  429.     cp    helpkey        ; Was it the Help key?
  430.     call    z,help        ; Yep, print help message
  431.     jr    nread        ;nothing for us, so resend string
  432.  
  433. init:    ld    hl,initl    ; Network logon 
  434.     call    bdos8        ; Send it
  435.     ld    hl,string    ; Buffer Address
  436.     ld    (bufptr),hl    ; Save Buffer Pointer
  437.  
  438. init1:    call    bdos7        ; system call
  439.     jr    z,chkcon3    ; nothing there so check console
  440.     ld    hl,(bufptr)    ; Load Buffer Pointer
  441.     call    bdos4        ; Read Auxiliary Character with Echo
  442.     ld    (hl),a        ; Store Character
  443.     inc    hl        ; Next Buffer Address
  444.     ld    (hl),0        ; Null Terminate
  445.     ld    (bufptr),hl    ; Save Buffer Pointer
  446.     cp    '@'        ; Telenet ready?
  447.     jp    z,loop        ; Yes, go to node dialer routine
  448.     jr    init1        ; If Z, Nuthin here
  449.  
  450. chkcon3:call    bdos11        ;Check console for input
  451.     jr    z,init1        ;If no input, check again
  452.     call    bdos2        ;Read console character
  453.  
  454. ; Character was at Console
  455.  
  456.     cp    f1key        ; Was it function one?
  457.     jp    z,init        ; Yep, Redial
  458.     cp    f2key        ; Was it function two?
  459.     jp    z,mex        ; 1Yep, go to comm program
  460.     cp    f3key        ; Was it function three?
  461.     jp    z,exit        ; Yep, go to CP/M
  462.     cp    f4key        ; Was it function four?
  463.     jp    z,hangup    ; Yep, hangup
  464.     cp    f5key        ; Recall request?
  465.     jp    z,recall    ; Return to signon
  466.     cp    helpkey        ; Was it the Help key?
  467.     call    z,help        ; Yep, print help message
  468.     jr    init        ; Nothing for us, so resend string
  469.  
  470. ; Dial remote node
  471.  
  472. loop:    ld    hl,dial        ; Load Dialing prefix
  473.     call    bdos8        ; Output Dialing Prefix
  474.     ld    hl,node        ; Load NODE into HL    
  475.     call    bdos8        ; Output Dialing String
  476.     ld    hl,speed    ; Load Dialing suffix
  477.     call    bdos8        ; Output it 
  478.     ld    hl,string    ; Buffer Address
  479.     ld    (bufptr),hl    ; Save Buffer Pointer
  480.  
  481. ; Read Telenet Response
  482.  
  483. loop1:    call    bdos7        ;system call
  484.     jr    z,chkcon4    ; If Z, Nuthin waitin, so check console
  485.     ld    hl,(bufptr)    ; Load Buffer Pointer
  486.     call    bdos4        ; Read Auxiliary Character with Echo
  487.     ld    (hl),a        ; Store Character
  488.     inc    hl        ; Next Buffer Address
  489.     ld    (hl),0        ; Null Terminate
  490.     ld    (bufptr),hl    ; Save Buffer Pointer
  491.     cp    '@'        ; Telenet Prompt?
  492.     jr    z,loop        ; yes, resend the string
  493.     cp    4eh        ; is it an N?
  494.     jr    z,test        ; yes, look at next character
  495.     jr    nz,loop1    ; no, continue receiving Telenet    
  496.  
  497. test:    call    bdos7        ; System call
  498.     jr    z,test        ; Nothing there yet, look again
  499.     ld    hl,(bufptr)    ; Load Buffer Pointer
  500.     call    bdos4        ; Read Auxiliary Character with Echo
  501.     ld    (hl),a        ; Store Character
  502.     inc    hl        ; Next Buffer Address
  503.     ld    (hl),0        ; Null Terminate
  504.     ld    (bufptr),hl    ; Save Buffer Pointer
  505.     cp    4eh        ; Is it the second N of CONNECT?
  506.     jr    z,atz        ; yes, two Ns means connected 
  507.     jr    nz,loop1    ; If Z, Nuthin here
  508.  
  509. chkcon4:call    bdos11        ;Check console for input
  510.     jr    z,loop1        ;If no input, check again
  511.     call    bdos2        ;Read console character
  512.  
  513. ; Character was at Console
  514.  
  515.     cp    f1key        ; Was it function one?
  516.     jp    z,loop        ; Yep, Redial
  517.     cp    f2key        ; Was it function two?
  518.     jp    z,mex        ; 1Yep, go to comm program
  519.     cp    f3key        ; Was it function three?
  520.     jp    z,exit        ; Yep, go to CP/M
  521.     cp    f4key        ; Was it function four?
  522.     jp    z,hangup    ; Yep, hangup
  523.     cp    f5key        ; Recall request?
  524.     jp    z,recall    ; Return to signon
  525.     cp    helpkey        ; Was it the Help key?
  526.     call    z,help        ; Yep, print help message
  527.     jr    loop1        ; Nothing for us, so resend string
  528.  
  529. ;===========================================================================
  530. ;Request Hayes mode from remote node
  531. ;===========================================================================
  532.  
  533. atz:    ld    hl,cr        ; send carraige return
  534.     call    bdos8        ; system call
  535.     ld    hl,string    ; load pointer
  536.     ld    (bufptr),hl    ; save it
  537.  
  538.     call    bdos7        ;system call
  539.     jp    nz,racalv    ;if something there, go to RACAL request
  540.     ld    hl,kick        ; ATZ again...
  541.     call    bdos8        ; system call
  542.     ld    hl,string    ; load ATZ pointer into HL
  543.     ld    (bufptr),hl    ; save buffer pointer
  544.  
  545. ; read modem response
  546.  
  547. hread:    call    bdos7        ;system call
  548.     jr    z,chkcon6    ;if nothing there, resend
  549.     ld    hl,(bufptr)    ;load buffer pointer
  550.     call    bdos4        ;read aux character with echo
  551.     ld    (hl),a        ;store it
  552.     inc    hl        ;next buffer address
  553.     ld    (hl),0        ;null terminate
  554.     ld    (bufptr),hl    ;so we mark the spot
  555.     cp    '*'        ;in case it is already in R-V 
  556.     jp    z,mex        ;5Yep, go to comm program
  557.     cp    'M'        ;Manual answer?
  558.     jp    z,mex        ;6Yep, go to comm program 
  559.     cp    'K'        ;if K then OK from remote
  560.     jp    z,racalv    ;so request R-V mode
  561.     jr    hread        ;Not any of these so send ATZ again  
  562.  
  563. chkcon6:call    bdos11        ; Check Console Status
  564.     jr    z,hread        ; If Z, nothing here
  565.     call    bdos2        ; Read Console Character
  566.  
  567. ; Character was at Console
  568.  
  569.     cp    f1key        ; Was it function one?
  570.     jp    z,atz        ; Yep, Redial
  571.     cp    f2key        ; Was it function two?
  572.     jp    z,mex        ; 1Yep, go to comm program
  573.     cp    f3key        ; Was it function three?
  574.     jp    z,exit        ; Yep, go to CP/M
  575.     cp    f4key        ; Was it function four?
  576.     jp    z,hangup    ; Yep, hangup
  577.     cp    f5key        ; Recall request?
  578.     jp    z,recall    ; Return to signon
  579.     cp    helpkey        ; Was it the Help key?
  580.     call    z,help        ; Yep, print help message
  581.     jr    hread        ; Nothing for us, so begin again
  582.  
  583. ;==========================================================================
  584. recall:    ld    a,cls
  585.     call    bdos3
  586.     ld    de,menu
  587.     ld    c,prtstr
  588.     call    bdosev
  589.     jp    wait
  590.  
  591. ;===========================================================================
  592. ;Help menu
  593. ;===========================================================================
  594. help:    ld    a,cls
  595.     call    bdos3
  596.     ld    de,msg2        ; Print help
  597.     ld    c,prtstr
  598.     call    bdosev
  599.     ret
  600.  
  601. ;============================================================================
  602. ;Help not available message
  603. ;============================================================================
  604. navail:    call    revon
  605.     ld    de,msg3        ; Print not available message
  606.     ld    c,prtstr
  607.     call    bdosev
  608.     call    revoff 
  609.     ld    de,menu2
  610.     ld    c,prtstr
  611.     call    bdosev
  612.     ret
  613. ;============================================================================
  614. ;Request Racal-Vadic mode
  615. ;============================================================================
  616.  
  617. racalv:    ld    hl,racal    ; send Racal request
  618.     call    bdos8    
  619.     ld    hl,string    
  620.     ld    (bufptr),hl    ; save buffer pointer
  621.  
  622. ; read modem response
  623.  
  624. racalv1:call    bdos7
  625.     jr    z,chkcon7    ;if nothing there, look again
  626.     ld    hl,(bufptr)    ;load buffer pointer
  627.     call    bdos4        ;read aux character with echo
  628.     ld    (hl),a        ;store it
  629.     inc    hl        ;next buffer address
  630.     ld    (hl),0        ;null terminate
  631.     ld    (bufptr),hl    ;so we mark the spot
  632.     cp    0        ;remote node asleep?
  633.     jr    z,racalv    ;yep, resend the string    
  634.     cp    '*'        ;if * go to comm program
  635.     jr    z,ring        ;here
  636.     jp    racalv1        ;otherwise, look again
  637.  
  638. chkcon7:call    bdos11        ; Check Console Status
  639.     jr    z,racalv1    ; If Z, Nuthin here
  640.     call    bdos2        ; Read Console Character
  641.  
  642. ; Character was at Console
  643.  
  644.     cp    f1key        ; Was it function one?
  645.     jr    z,racalv    ; Yep, Redial
  646.     cp    f2key        ; Was it function two?
  647.     jp    z,mex        ; 5Yep, go to comm program
  648.     cp    f3key        ; Was it function three?
  649.     jp    z,exit        ; Yep, exit to system
  650.     cp    f4key        ; Was it function four?
  651.     jp    z,hangup    ; Yep, drop Telenet
  652.     cp    f5key        ; Recall request?
  653.     jp    z,recall    ; Return to signon
  654.     cp    helpkey        ; Was it the Help key?
  655.     call    z,help        ; Yep, print help message
  656.     jp    racalv
  657.  
  658. ;Sound bell
  659. ring:    ld    a,bell        ; set up the bell
  660.     call    bdos3        ; ring it
  661.  
  662. ;Function key 2
  663. ;mex:    ld    hl,dmabuf    ; Command Tail Address = DMA Buffer
  664. ;    ld    a,(hl)        ; Command Tail Length
  665. ;    or    a        ; Set Status
  666. ;    jp    nz,mex1        ; If NZ, Command Tail Entered
  667.  
  668. ; No command tail entered, so use our own
  669.  
  670. mex:    ld    hl,prgrm    ; Move program command line
  671.     ld    de,dmabuf    ; Default DMA Buffer
  672.     ld    bc,04h        ; Length to move
  673.     ldir            ; Move it
  674.     ld    hl,node
  675.     ld    de,dmabuf+04h
  676.     ld    bc,count
  677.     ldir
  678.  
  679. mex1:    ld    e,chnflg    ; Define default drive/user
  680.     ld    c,chain        ; Chain to it
  681.     call    bdosev        ; System call
  682.     ret            ; We're done with our part
  683.  
  684. ; Function Key 3
  685.  
  686. exit:    ld    a,cls        ; Clear Screen
  687.     call    bdos3        ; Output to Console
  688.     ld    sp,(stack)    ; Users Stack
  689.     ret            ; Return to System
  690.  
  691.     page
  692.  
  693.  
  694. ;======================================================================
  695. ; Read Console Character 
  696. ;======================================================================
  697.  
  698. bdos2:    ld    c,coninp    ; Read Console Byte
  699.     call    bdosev        ; System call
  700.     ret
  701.  
  702. ;======================================================================
  703. ; Send Console Character
  704. ;======================================================================
  705.  
  706. bdos3:    ld    e,a        ; Character to E
  707.     ld    c,conout    ; Console Output Function
  708.     call    bdosev        ; System call
  709.     ret
  710.  
  711. ;======================================================================
  712. ; Read Auxiliary Character (Echo to Console)
  713. ;======================================================================
  714.  
  715. bdos4:    push    hl        ; Save Pointer
  716.     ld    c,auxinp    ; Auxiliary Input
  717.         call    bdosev        ; System Call
  718.         ld    e,a        ; .. and put into E
  719.     push    af        ; Save Character
  720.         ld    c,conout    ; Console Output
  721.         call    bdosev        ; System call
  722.     pop    af        ; Load Character
  723.     pop    hl        ; Load Pointer
  724.     ret
  725.  
  726. ;======================================================================
  727. ; Check Auxiliary Input Status
  728. ;======================================================================
  729.  
  730. bdos7:  ld    c,auxist    ; Auxiliary Input Status
  731.         call    bdosev        ; System call
  732.         or    a        ; any data?
  733.     ret
  734.  
  735. ;======================================================================
  736. ; Output Dialing String
  737. ;======================================================================
  738.  
  739. bdos8:    push    hl        ; Save Pointer
  740.  
  741. bdos8a:    ld    c,auxost    ; Auxiliary Output Status
  742.     call    bdosev        ; System call
  743.     or    a        ; Set Status
  744.     jr    z,bdos8a    ; If Z, Not ready
  745.  
  746.     pop    hl        ; Load Pointer
  747.     ld    a,(hl)        ; Check for terminator
  748.     or    a        ; Set Status
  749.     ret    z        ; If Z, exit
  750.     ld    e,a        ; Character to output
  751.     ld    c,auxout    ; Auxiliary Output
  752.     push    hl        ; Save Pointer
  753.     call    bdosev        ; System call
  754.     pop    hl        ; Load Pointer
  755.     inc    hl        ; Next Character
  756.     jr    bdos8        ; Continue
  757.  
  758. ;======================================================================
  759. ; Check Console Status
  760. ;======================================================================
  761.  
  762. bdos11:    ld    c,const        ; Direct Console I/O
  763.     call    bdosev        ; System call
  764.     or    a        ; If Z, then nothing is there
  765.     ret
  766.     page
  767.  
  768.  
  769.  
  770. ;======================================================================
  771. ;Hangup routine
  772. ;======================================================================
  773.  
  774. hangup:    call    bdos7
  775.     jr    z,chkcon8    ;nothing there, so check console
  776.     ld    hl,(bufptr)    ;push buffer pointer
  777.     call    bdos4        ;read aux character with echo
  778.     ld    (hl),a        ;store it
  779.     inc    hl        ;next buffer address
  780.     ld    (hl),0        ;null terminate
  781.     ld    (bufptr),hl    ;pop pointer
  782.     cp    '@'        ;Local node response?
  783.     jr    z,ok        ;Yes, send HANGUP to Telenet
  784.     jp    hangup        ;Nothing we want, so look again 
  785.  
  786. ok:    ld    hl,hang        ; send hangup string
  787.     call    bdos8    
  788.     ld    hl,string    ; load hl with contents of string
  789.     ld    (bufptr),hl    ; save buffer pointer
  790.  
  791. ok1:    call    bdos7
  792.     ld    hl,(bufptr)    ;push buffer pointer
  793.     call    bdos4        ;read aux character with echo
  794.     ld    (hl),a        ;store it
  795.     inc    hl        ;next buffer address
  796.     ld    (hl),0        ;null terminate
  797.     ld    (bufptr),hl    ;pop pointer
  798.     cp    '?'        ;Local node confused?
  799.     jr    z,hangup    ;Yes, send HANGUP again
  800.     jp    exit        ;Nope, exit to OS
  801.  
  802.  
  803. chkcon8:call    bdos11        ; Check Console Status
  804.     jr    z,hangup    ; If Z, Nuthin here
  805.     call    bdos2        ; Read Console Character
  806.  
  807. ; Character was at Console
  808.  
  809.     cp    f1key        ; Was it function one?
  810.     jp    z,hangup    ; Yep, Redial
  811.     cp    f2key        ; Was it function two?
  812.     jp    z,mex        ; 4Yep, go to comm program
  813.     cp    f3key        ; Was it function three?
  814.     jp    z,exit        ; Yep, go to CP/M
  815.     jp    hangup        ; Nuthin we want, so try again
  816.  
  817. ;===========================================================================
  818. ;Video reverse routine
  819. ;===========================================================================
  820. revon:    ld    e,esc        ;Signify escape sequence
  821.     ld    c,conout    ;Console out
  822.     call    bdosev        ;system call
  823.     ld    e,5bh
  824.     ld    c,conout
  825.     call    bdosev
  826.     ld    e,037h        ;reverse video
  827.     ld    c,conout
  828.     call    bdosev        ;system call    
  829.     ld    e,6dh
  830.     ld    c,conout
  831.     call    bdosev
  832.     ret
  833.  
  834. revoff:    ld    e,esc        ;Signify escape sequence
  835.     ld    c,conout    ;Console out
  836.     call    bdosev        ;system call
  837.     ld    e,5bh
  838.     ld    c,conout
  839.     call    bdosev
  840.     ld    e,30h        ;end reverse video
  841.     ld    c,conout
  842.     call    bdosev        ;system call    
  843.     ld    e,6dh
  844.     ld    c,conout
  845.     call    bdosev
  846.     ret
  847.  
  848. ;======================================================================
  849. ; Data Area
  850. ;======================================================================
  851.  
  852. bufptr:    dw    string        ; Buffer Pointer
  853.  
  854. string:    ds    128        ; Telenet Response Code
  855.     db    0        ; Null Terminator
  856.  
  857.  
  858. msg1:    db    cr,lf,tab,tab,'This program will dial Telenet, initialize it'
  859.     db    cr,lf,tab,tab,'for 1200 baud operation, and continuously attempt'
  860.     db    cr,lf,tab,tab,'to connect with the selected node. MEX will be'
  861.     db    cr,lf,tab,tab,'called when the remote node responds.'
  862.     db    cr,lf 
  863.  
  864.     if    v1050
  865. msg2:    db    cr,lf,tab,tab,tab,'F1 = Resend current string'
  866.     db    cr,lf,tab,tab,tab,'F2 = Cancel, return to MEX'
  867.     db    cr,lf,tab,tab,tab,'F3 = Cancel, return to CPM'
  868.     db    cr,lf,tab,tab,tab,'F4 = Disconnect from Telenet'
  869.     db    cr,lf,tab,tab,tab,'F5 = Try another remote node'
  870.     db    cr,lf,tab,tab,tab,'    HELP= This menu'
  871.     db    cr,lf,'$'    
  872.     else
  873. msg2:    db    cr,lf,tab,tab,tab,'^R = Resend current string'
  874.     db    cr,lf,tab,tab,tab,'^W = Cancel, return to MEX'
  875.     db    cr,lf,tab,tab,tab,'^X = Cancel, return to CPM'
  876.     db    cr,lf,tab,tab,tab,'^D = Disconnect from Telenet'
  877.     db    cr,lf,tab,tab,tab,'^A = Try another remote node'
  878.     db    cr,lf,tab,tab,tab,'      ^H= This menu'
  879.     db    cr,lf,'$'    
  880.     endif
  881.  
  882. menu:    db    cr,lf,tab,tab,'(A)AZPHO',tab,'(B)CAGLE',tab,'(C)CALAN'
  883.     db    cr,lf,tab,tab,'(D)CASAD',tab,'(E)CASAN',tab,'(F)CASFA'
  884.     db    cr,lf,tab,tab,'(G)CASJO',tab,'(H)CODEN',tab,'(I)DCWAS'
  885.     db    cr,lf,tab,tab,'(J)FLMIA',tab,'(K)FLTAM',tab,'(L)GAATL'
  886.     db    cr,lf,tab,tab,'(M)ILCHI',tab,'(N)MABOS',tab,'(O)MIDET'
  887.     db    cr,lf,tab,tab,'(P)MNMIN',tab,'(Q)MOKAN',tab,'(R)NCRTP'
  888.     db    cr,lf,tab,tab,'(S)NJNEW',tab,'(T)NYNYO',tab,'(U)ORPOR'
  889.     db    cr,lf,tab,tab,'(V)PAPHI',tab,'(W)TXHOU',tab,'(X)UTSLC'
  890.     db    cr,lf,tab,tab,tab,'(Y)WASEA',tab,'(Z)WIMIL'
  891. menu2:    db    cr,lf,'==Select?>','$'    ;terminator
  892.  
  893. msg3:    db    cr,lf,'  =>Function not available!<=  ',cr,lf,lf,'$'
  894.  
  895. tbladr:    
  896.     db    'AZPHO',0    ; A = 0
  897.     db    'CAGLE',0    ; B = 1
  898.     db    'CALAN',0    ; C = 2
  899.     db    'CASAD',0    ; D = 3
  900.     db    'CASAN',0    ; E = 4
  901.     db    'CASFA',0    ; F = 5
  902.     db    'CASJO',0    ; G = 6
  903.     db    'CODEN',0    ; H = 7
  904.     db    'DCWAS',0    ; I = 8
  905.     db    'FLMIA',0    ; J = 9
  906.     db    'FLTAM',0    ; K = 10
  907.     db    'GAATL',0    ; L = 11
  908.     db    'ILCHI',0    ; M = 12
  909.     db    'MABOS',0    ; N = 13
  910.     db    'MIDET',0    ; O = 14
  911.     db    'MNMIN',0    ; P = 15
  912.     db    'MOKAN',0    ; Q = 16
  913.     db    'NCRTP',0    ; R = 17
  914.     db    'NJNEW',0    ; S = 18
  915.     db    'NYNYO',0    ; T = 19
  916.     db    'ORPOR',0    ; U = 20
  917.     db    'PAPHI',0    ; V = 21
  918.     db    'TXHOU',0    ; W = 22
  919.     db    'UTSLC',0    ; X = 23
  920.     db    'WASEA',0    ; Y = 24
  921.     db    'WIMIL',0    ; Z = 25 
  922.  
  923.     
  924.     ds    64        ; Stack Area    (32 levels)
  925. stack:    dw    0        ; Stack Pointer
  926.  
  927.     end
  928.