home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1998 April A / Pcwk4a98.iso / Wtestowe / OnNet16 / TNTEACH.TOS < prev    next >
Text File  |  1996-12-09  |  12KB  |  431 lines

  1. ' Template for the teach mode script. The teach mode output script
  2. ' is first initialized with this template. The other variables are
  3. ' appended to this file, along with the OLE automation commands.
  4.  
  5. Const APPNAME = "TNVTPlus Script"
  6. Const SCRIPTINPROGRESS = "Script in Progress. Please wait."
  7.  
  8. Const GL_FAIL = -1
  9. Const GL_SUCCESS = 1
  10. Const GL_TIMOUT = 2
  11. Const GL_IDLE = 3
  12.  
  13. Const GR_CANCEL = 0
  14. Const GR_NORMAL = 1
  15. Const GR_IGNORE = 2
  16. Const GR_DONE = 4
  17. Const GR_PASSWORD = 5
  18. Const GR_LOGIN = 6
  19.  
  20. Const bmaxlen = 1024
  21.  
  22. Dim waittime as String
  23. Dim endtime as Long
  24. Dim Username as String, Password as String
  25. Dim ReadCount as Integer
  26. Dim hostname as string
  27. Dim port as string
  28. Dim curindex as Integer
  29.  
  30. Dim Telnet as object
  31. Dim Session as object
  32.  
  33. Dim wCreateSte as Integer
  34. Dim wSavePassword as Integer
  35.  
  36. Dim tn_target() As String
  37. Dim tn_numtargets As Integer
  38. Dim tn_response() As String
  39. Dim tn_responsetype() As Integer
  40. Dim response As String
  41.  
  42. Const MAXBUFLEN = 4000
  43. Const MAXLEN = MAXBUFLEN*2 + 1
  44. Dim gl_bfr As String       ' Global input buffer
  45. Dim gl_linbuf As String    ' Line buffer - parsed from input stream
  46. Dim gl_lastline As String  ' Last line of text from host
  47. Dim gl_lastatom As String  ' Last line of text from host
  48. Dim custominit as Integer
  49.  
  50. ' Add target and response to playback tables
  51. Sub AddResponse(target As String, resp As String, rtype As Integer)
  52.    ReDim Preserve tn_target(tn_numtargets)
  53.    ReDim Preserve tn_response(tn_numtargets)
  54.    ReDim Preserve tn_responsetype(tn_numtargets)
  55.    
  56.    tn_target(tn_numtargets) = target
  57.    tn_response(tn_numtargets) = resp
  58.    tn_responsetype(tn_numtargets) = rtype
  59.    
  60.    tn_numtargets = tn_numtargets + 1
  61. End Sub
  62.  
  63. Sub SendPassword()
  64.     Dim psw As String
  65.  
  66.     psw = Session.Password
  67.     If psw = "" Then
  68.         psw=PasswordBox("Enter your login password","TNVTPlus Script: Password ")        
  69.     End If
  70.  
  71.     Session.SendKeys(psw + "<Enter>")
  72. End Sub
  73.  
  74.  
  75. Function GetOptions%(id$, act%, spv&) 
  76. static tmptime As String, tmpchar As String
  77.  
  78.  
  79.      Select Case act
  80.       Case 1
  81.           DlgText 4, waittime
  82.           DlgText 1, hostpromptchar
  83.           DlgValue 0, wVisible
  84.           
  85.       Case 2
  86.          If DlgControlID(id) = DlgControlID("cancel") Then
  87.              Exit Function
  88.          End If
  89.          
  90.          If DlgControlID(id) = DlgControlID("ok") Then
  91.              If DlgValue(0) = 1 Then
  92.                  wVisible = 1
  93.                  Telnet.Visible = TRUE
  94.              Else
  95.                  wVisible = 0
  96.                  Telnet.Visible = FALSE
  97.              End If
  98.   
  99.              waittime = DlgText(4)
  100.              If VAL(waittime) < 0 Or VAL(waittime) > 300 Then
  101.                  waittime = "30"
  102.              End If
  103.                  
  104.              hostpromptchar = DlgText(1)
  105.              Exit Function
  106.          End If
  107.           
  108.       
  109.      End Select
  110.      
  111. End Function 
  112. Sub SetOptions()
  113.  
  114. ctext1$ = ">"+CHR$(9)+"$"+chr$(9)+"#"+chr$(9)+"yourtext>"
  115. ctext2$ = "30"+chr$(9)+"60"+chr$(9)+"90"+chr$(9)+"120"
  116.  
  117. Begin Dialog optionsdlg 273, 116, "Create Startup Script Wizard:  Change Options", .GetOptions
  118.    CheckBox  10, 66, 117, 11, "Make TNVTPlus Window &Visible", .CheckBox1
  119.    DropComboBox  131, 10, 107, 70, ctext1, .DropComboBox1
  120.    Text  9, 12, 117, 10, "Additional Host Prompt Strings:", .Text1
  121.    Text  9, 39, 117, 11, "Change Host Timeout:"
  122.    DropComboBox  131, 34, 107, 70, ctext2, .DropComboBox2
  123.    OkButton  137, 92, 50, 14, .ok
  124.    CancelButton  189, 92, 50, 14, .cancel
  125. End Dialog
  126.  
  127.  
  128.    
  129.    Dim optdlg as optionsdlg
  130.  
  131.    res = Dialog(optdlg)
  132.  
  133. End Sub
  134.  
  135.  
  136. Function WaitForData(target As String, response as String, rtype as Integer) As Integer
  137.  
  138.     Dim position as Integer
  139.     Dim x as Long
  140.     Static cc as Integer
  141.  
  142.     gl_bfr = ""
  143.  
  144.     If timer < endtime  Then
  145.       ' Check for more input data
  146.       gl_bfr = Session.GetEmulatorData(MAXBUFLEN)
  147.       cc = Session.LastReadCount     ' Chars returned
  148.       x = timer
  149.       While timer < x+2
  150.       Wend
  151.       If cc > 0 Then
  152.           gl_linbuf = gl_linbuf + Left$(gl_bfr, cc) ' append data just read to gl_linbuf
  153.           ReadCount = ReadCount + cc
  154.           endtime = timer + VAL(waittime)                  ' reset the timeout timer every time we get more data
  155.           If ReadCount > MAXLEN Then
  156.               gl_linbuf = Left$(gl_bfr, MAXBUFLEN)
  157.               ReadCount = MAXBUFLEN
  158.           End If
  159.       End If
  160.       position=InStr(gl_linbuf, target)
  161.       If position <> 0 Then
  162.           if rtype = GR_PASSWORD Then
  163.                SendPassword
  164.           else
  165.                Session.SendKeys(response)
  166.           End If
  167.           WaitForData = GL_SUCCESS
  168.           Exit Function
  169.       End If
  170.       WaitForData = GL_IDLE
  171.       Exit Function
  172.  
  173.  End If
  174.  
  175.  WaitForData = -1   
  176.      
  177. End Function
  178.  
  179.  
  180. Function rspdlgfunc%(id$, act%, spv&)
  181.  
  182.  
  183.    Select Case act
  184.       Case 1
  185.          DlgEnable DlgControlID("customtext"), custominit
  186.          If custominit = 1 Then
  187.              DlgFocus DlgControlID("customtext")
  188.          Else 
  189.              DlgFocus DlgControlID("ok")
  190.          End If
  191.          AppActivate APPNAME
  192.              
  193.  
  194.       Case 2
  195.          If DlgControlID(id) = DlgControlID("options") Then
  196.             SetOptions
  197.             rspdlgfunc = 1    
  198.          Else 
  199.                
  200.             ' Enable custom text box if selected 
  201.             If DlgControlID(id) = DlgControlID("selectcustom") Then
  202.                DlgEnable DlgControlID("customtext"), 1
  203.                DlgFocus DlgControlID("customtext")
  204.             Else
  205.                DlgEnable DlgControlID("customtext"), 0
  206.             End If
  207.  
  208.          End If
  209.  
  210.          If DlgControlID(id) = DlgControlID("ok") Then Exit Function
  211.  
  212.      Case 4
  213.          ' Do not allow prompt control to gain focus
  214.          If DlgControlID(id) = DlgControlID("expect") Then DlgFocus spv
  215.  
  216.    End Select
  217. End Function
  218.  
  219. ' Converts character pairs ^<char> to special controls
  220.  
  221. Function CCString(inpstr As String) As String
  222.    CCString = inpstr
  223. End Function
  224.  
  225.  
  226. Function GetResponse(expect As String, suggest As Integer, newresp As String, oldresp As String, outresp as String) As Integer
  227.       
  228.   Begin Dialog responsedlg 1, 5, 230, 172, APPNAME, .rspdlgfunc
  229.    OkButton  173, 106, 46, 15, .ok
  230.    CancelButton  173, 127, 46, 15
  231.    OptionGroup .response
  232.       OptionButton  13, 87, 50, 10, "&Username", .selectusername
  233.       OptionButton  13, 106, 50, 10, "&Password", .selectpassword
  234.       OptionButton  13, 125, 39, 8, "&Ignore", .OptionButton1
  235.       OptionButton  13, 144, 40, 10, "&Custom:", .selectcustom
  236.       OptionButton  70, 87, 50, 10, "<&Enter> key", .selectCR
  237.       OptionButton  70, 107, 60, 10, "&Quit script", .selectdone
  238.    TextBox  56, 144, 91, 10, .customtext
  239.    Text  0, 0, 205, 16, "The script expected to receive:"
  240.    TextBox  6, 15, 182, 18, .expect
  241.    Text  2, 37, 200, 10, "Instead it received:"
  242.    TextBox  6, 53, 182, 18, .receive
  243.    GroupBox  5, 75, 155, 94, "Respond with"
  244.    PushButton  173, 82, 46, 15, "&Options...", .options
  245. End Dialog
  246.  
  247.  
  248.       
  249.    Dim getuser As responsedlg
  250.    Dim res As Integer
  251.     
  252.  
  253.    getuser.expect = expect              ' Seed dialog
  254.    getuser.receive = newresp
  255.    getuser.customtext = oldresp               
  256.    getuser.response = suggest
  257.    
  258.    If suggest = 3 Then
  259.        custominit = 1
  260.    Else 
  261.        custominit = 0
  262.    End If
  263.    
  264.     
  265.    res = Dialog(getuser)
  266.    If res = 0 Then
  267.       GetResponse = GR_CANCEL         ' Cancel
  268.       Exit Function
  269.    End If
  270.    
  271.    GetResponse = GR_NORMAL            ' Assume normal return
  272.  
  273.    Select Case getuser.response
  274.       Case 0                  ' Username
  275.          outresp = Session.Username + "<Enter>"
  276.          GetResponse = GR_LOGIN
  277.       Case 1                  ' Password
  278.          GetResponse = GR_PASSWORD
  279.       Case 2                  ' Ignore input -- continue
  280.          GetResponse = GR_IGNORE
  281.       Case 3                  ' Custom entry 
  282.          outresp = CCString(getuser.customtext) + "<Enter>"
  283.       Case 4 
  284.          outresp = "<Enter>"     ' CR
  285.          GetResponse = GR_ENTER
  286.       Case 5                  ' All done with input
  287.          GetResponse = GR_DONE
  288.    End Select
  289.  
  290. End Function
  291.  
  292. ' Return last atom at the end of a data buffer
  293.  
  294. Function GetLastAtom(bfr As String, spos As Integer) As String
  295.    Dim ix As Integer, ll As Integer
  296.    
  297.    ' Scan left from spos for first space
  298.  
  299.    For ix = spos To 1 Step -1
  300.       if Mid$(bfr, ix, 1) = Chr$(CSP) Then Exit For
  301.    Next ix
  302.  
  303.    ' Return last (space delimited) atom at end-of-line
  304.  
  305.    GetLastAtom = Mid$(bfr, ix + 1, spos - ix)
  306. End Function
  307.  
  308. ' get last line of data for user prompt dialog box
  309. Sub GetLastLine(bfr As String, spos As Integer)
  310.    Dim ix As Integer, ll As Integer
  311.    Dim temp As String, x As String
  312.     
  313.    ' Scan left from spos for first space
  314.  
  315.    For ix = spos To 1 Step -1
  316.       x = Mid$(bfr, ix, 1)
  317.       if x = CHR$(10) OR x = CHR$(CCR) OR x = CHR$(CLF) OR x = CHR$(0) Then Exit For
  318.    Next ix
  319.  
  320.    ' Return last line of text (delimited by CR or LF)
  321.    temp$ = Mid$(bfr, ix + 1, spos - ix)
  322.    gl_lastline = temp
  323. End Sub
  324.  
  325. Function ProcessData%(id$, act%, spv&)
  326. Static index as Integer
  327. Static res as Integer
  328.  
  329.     Select Case act
  330.     Case 1
  331.         index = curindex
  332.         endtime = timer + VAL(waittime)
  333.         gl_linbuf = ""
  334.         AppActivate APPNAME
  335.  
  336.     Case 2
  337.          If DlgControlID(id) = DlgControlID("cancel") Then
  338.             DlgEnd GL_CANCEL
  339.          End If 
  340.             
  341.     Case 5
  342.         res = WaitForData(tn_target(index), tn_response(index), tn_responsetype(index))
  343.  
  344.         If res = GL_IDLE Then
  345.             goto idleloop
  346.         End If
  347.  
  348.         AppActivate APPNAME
  349.         If res = -1 Then
  350.             curindex = index
  351.             DlgEnd GL_TIMOUT
  352.         End If
  353.  
  354.         ' we just sent a response, so increment the index and init gl_linbuf.
  355.         index = index + 1
  356.         gl_linbuf = ""
  357.     
  358.         If index = tn_numtargets Then
  359.             DlgEnd GL_SUCCESS                   ' we're done
  360.         End If
  361.     
  362.     End Select
  363.  
  364. idleloop:    
  365.     ProcessData = 1
  366.     
  367. End Function
  368.  
  369.  
  370. Function ProcessTargets As Integer
  371.     Dim res As Integer
  372.    
  373.     Begin Dialog processdlg 129, 47, APPNAME, .ProcessData
  374.        CancelButton  39, 28, 50, 14, .cancel
  375.        Text  7, 9, 115, 15, SCRIPTINPROGRESS, .waittext
  376.     End Dialog
  377.  
  378.     Dim processdatadlg as processdlg
  379.  
  380.     curindex = 0
  381. reprocess:
  382.     res = Dialog(processdatadlg)
  383.     ProcessTargets = res
  384.     Select Case res
  385.         Case GL_CANCEL
  386.             GoTo ExitTeach
  387.         Case GL_DONE
  388.             Exit Function
  389.         Case GL_SUCCESS
  390.             Exit Function
  391.         Case GL_TIMOUT
  392.             GetLastLine gl_linbuf, ReadCount
  393.             gl_lastline = Trim$(gl_lastline)
  394.             gl_lastatom = GetLastAtom(gl_lastline, Len(gl_lastline$))
  395.         
  396.             response = tn_response(curindex)
  397.             res = GetResponse(tn_target(curindex), 3, gl_lastline, tn_response(curindex), response)
  398.             Select Case res
  399.                 Case GR_NORMAL
  400.                     Session.SendKeys(response)
  401.                 Case GR_PASSWORD
  402.                     Session.SendKeys(response)
  403.                 Case GR_LOGIN
  404.                     Session.SendKeys(response)
  405.                 Case GR_CANCEL
  406.                      GoTo CancelTeach
  407.                 Case GR_ENTER
  408.                     Session.SendKeys(response)
  409.                 Case GR_IGNORE
  410.                     GoTo reprocess
  411.                 Case GR_DONE
  412.                     GoTo ExitTeach:
  413.             End Select
  414.             curindex = curindex + 1
  415.             if curindex < tn_numtargets Then
  416.                 goto reprocess      
  417.             End If
  418.     End Select
  419.     
  420. Exit Function
  421.  
  422. CancelTeach:
  423. ExitTeach:
  424.          Telnet.Quit
  425.          Set Telnet = Nothing
  426. End Function
  427.  
  428. Sub Main
  429.  
  430.    tn_numtargets = 0
  431.