home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1998 April A / Pcwk4a98.iso / Wtestowe / OnNet16 / TNTCH16.XXX < prev    next >
Text File  |  1996-12-15  |  36KB  |  1,174 lines

  1.  
  2. Const APPNAME = "TNVTPlus Script Wizard:"
  3. Const RECORDNAME = "TNVTPlus Script Utility:"
  4. Const WAITFORINPUT = "Waiting for input..."
  5.  
  6. Const GL_CANCEL = 0
  7. Const GL_DATA = 1
  8. Const GL_TIMOUT = 2
  9. Const QUOTE = 34
  10.  
  11. ' these constants must be the same in tnteach.tos
  12. Const GR_CANCEL = 0
  13. Const GR_NORMAL = 1
  14. Const GR_IGNORE = 2
  15. Const GR_DONE = 4
  16. Const GR_PASSWORD = 5
  17. Const GR_LOGIN = 6
  18. Const GR_ENTER = 7
  19. Const GR_DONE_TELNET = 8
  20.  
  21. Const CCR = 13
  22. Const CLF = 10
  23. Const CSP = 32
  24.  
  25. ' Windows API calls for Help
  26.  
  27. Declare Function WinHelp Lib "user.dll" Alias "WinHelp" _
  28.    (ByVal hWnd&, ByVal helpfn$, ByVal hflags%, ByVal hkey&) As Integer
  29. Declare Function GetActiveWindow Lib "user.dll" () As Long
  30.  
  31. Declare Function Welcome%(id$, act%, spv&) 
  32. Declare Function SetTimer%(id$, act%, spv&) 
  33. Declare Function SetLogin%(id$, act%, spv&) 
  34. Declare Function WaitData%(id$, act%, spv&)
  35. Declare Function GetOptions%(id$, act%, spv&)
  36. Declare Function SetSaveas%(id$, act%, spv&) 
  37.  
  38. Option Compare Binary   'TODO check this out!!!
  39.  
  40. Dim WelcomeRc as String
  41. Dim HostReturn as String
  42. Dim TimerReturn as String
  43. Dim LoginRc as String
  44. Dim SaveAsRc as String
  45.  
  46. Dim cchoices as String
  47. Dim ComboBox1 as String
  48. Dim myarray$(5)
  49. Dim DefaultSecs
  50. Dim waittime as String
  51. Dim hostpromptchar as String
  52. Dim Username as String, Password as String
  53. Dim PasswordPrompt As String, LoginPrompt As String, PasswordPromt2 As String
  54. Dim SavePassword As Integer
  55. Dim ReadCount as Integer, custominit as Integer
  56. Dim hostname as string
  57. Dim port as string
  58. Dim wVisible as Integer
  59. Dim closeTelnet As Integer
  60. Dim wCreateSte as Integer
  61. Dim wPlaybackVis as Integer
  62. Dim OutFilename as String
  63. Dim SteFilename as String
  64.  
  65. Dim Telnet as object
  66. Dim Session as object
  67.  
  68. ' Prompt and Response builtins
  69.  
  70. Dim tn_prompt(20) As String
  71. Dim tn_numprompts As Integer
  72.  
  73. Dim tn_suggest(20) As Integer
  74.  
  75. Dim tn_target() As String
  76. Dim tn_numtargets As Integer
  77. Dim tn_responsetype() As Integer
  78. Dim tn_response() As String
  79.  
  80. ' GetLine dialog box definitions and global vars
  81.  
  82. Const MAXBUFLEN = 4000
  83. Const MAXLEN = MAXBUFLEN*2 + 1
  84. Dim gl_bfr As String       ' Global input buffer
  85. Dim gl_linbuf As String    ' Line buffer - parsed from input stream
  86. Dim gl_lastline As String  ' Last line of text from host
  87. Dim gl_lastatom As String  ' Last line of text from host
  88. Dim gl_timeout As Integer  ' Dialog timeout value
  89. Dim response As String
  90. Dim glres As Integer, grres As Integer
  91.  
  92.  
  93.  
  94. Function Welcome%(id$, act%, spv&)  
  95.  
  96.  
  97.      Select Case act
  98.       Case 2
  99.          If DlgControlID(id) = DlgControlID("cancel1") Then
  100.              WelcomeRc = "cancel"
  101.          End If        
  102.  
  103.          If DlgControlID(id) = DlgControlID("cancel1") Then
  104.              WelcomeRc = "cancel"
  105.          End If
  106.                   
  107.          If DlgControlID(id) = DlgControlID("next1") Then
  108.              WelcomeRc = "next"
  109.          End If
  110.      End Select
  111.      
  112. End Function        
  113.  
  114. Function SetTimer%(id$, act%, spv&) 
  115.  
  116.      Select Case act
  117.       Case 1
  118.           DlgText 5, waittime
  119.           DlgFocus 5 
  120.           DlgValue 7, wVisible 
  121.                  
  122.       Case 2
  123.          If DlgControlID(id) = DlgControlID("back2") Then
  124.              TimerReturn = "back"
  125.          End If
  126.          
  127.          If DlgControlID(id) = DlgControlID("cancel2") Then
  128.              TimerReturn = "cancel"
  129.          End If 
  130.  
  131.          If DlgControlID(id) = DlgControlID("next2") Then
  132.             waittime = DlgText(5)
  133.             If VAL(waittime) < 1 Or VAL(waittime) > 300 Then
  134.                  waittime = "30"
  135.             End If
  136.             TimerReturn = "next"
  137.             
  138.             If DlgValue(7) = 1 Then
  139.                 wVisible = 1
  140.             Else
  141.                 wVisible = 0
  142.             End If
  143.             
  144.   
  145.          End If
  146.      End Select
  147.      
  148. End Function 
  149.  
  150. Function SetPrompt%(id$, act%, spv&) 
  151.  
  152.      Select Case act
  153.       Case 1
  154.           DlgText 7, port
  155.           DlgText 9, hostpromptchar
  156.           DlgText 5, hostname
  157.           DlgFocus 5 
  158.          
  159.       Case 2
  160.          If DlgControlID(id) = DlgControlID("back4") Then
  161.              HostReturn = "back"
  162.          End If
  163.          
  164.          If DlgControlID(id) = DlgControlID("cancel4") Then
  165.              HostReturn = "cancel"
  166.          End If
  167.                  
  168.          If DlgControlID(id) = DlgControlID("next4") Then
  169.              hostpromptchar = DlgText(9)
  170.              port = DlgText(7)
  171.              hostname = DlgText(5)
  172.          
  173.             If hostname = "" Then
  174.                 i = MsgBox("You must specify a hostname to continue! ",0,"Create Wizard Script: specify hostname")
  175.                 DlgFocus 5
  176.                 SetPrompt = 1
  177.             Else
  178.                 HostReturn = "next"
  179.             End If
  180.          End If
  181.      End Select
  182.      
  183. End Function 
  184.  
  185.  
  186. Function SetLogin%(id$, act%, spv&)
  187. Dim i as Integer 
  188.  
  189.      Select Case act
  190.       Case 1
  191.          DlgText 8, LoginPrompt                    ' set up LoginPrompt text in edit box
  192.          DlgText 9, PasswordPrompt                 ' set up PasswordPrompt text in edit box
  193.          DlgValue 10, SavePassword                 ' Checkbox SavePassword on or off
  194.          DlgValue 11, wCreateSte                   ' Checkbox to create a .ste file on or off
  195.          DlgEnable 9, wCreateSte AND SavePassword  ' Grey out PasswordPrompt edit box if can't create Password or .ste file
  196.          DlgEnable 10, wCreateSte                  ' Grey out save password checkbox if can't create .ste file
  197.          DlgFocus DlgControlID("TextBox1")         ' Focus on Username edit box
  198.          DlgText 7, Username
  199.  
  200.              
  201.       Case 2
  202.          If DlgControlID(id) = DlgControlID("back3") Then
  203.              LoginRc = "back"
  204.          End If
  205.          
  206.          If DlgControlID(id) = DlgControlID("CheckBox1") Then
  207.              DlgFocus DlgControlID("TextBox1")
  208.          End If                  
  209.          
  210.          ' If Save Password unchecked, then grey out PasswordPrompt edit box. 
  211.          If DlgControlID(id) = DlgControlID("CheckBox1") Then 
  212.              SavePassword = DlgValue(10)          
  213.              DlgEnable 9, SavePassword
  214.          End If
  215.          
  216.          ' If Save .ste file is unchecked, then grey out PasswordPrompt edit box and Save Password check box.
  217.          If DlgControlID(id) = DlgControlID("CheckBox2") Then
  218.              i = DlgValue(11)
  219.              If i = 0 Then
  220.                  wCreateSte = 0
  221.                  DlgEnable 9, 0
  222.                  DlgEnable 10, 0
  223.              Else
  224.                  wCreateSte = 1
  225.                  DlgEnable 9, SavePassword
  226.                  DlgEnable 10, 1
  227.              End If
  228.          DlgFocus DlgControlID("TextBox1")    
  229.          End If
  230.          
  231.          If DlgControlID(id) = DlgControlID("cancel3") Then
  232.              LoginRc = "cancel"
  233.          End If
  234.          
  235.          If DlgControlID(id) = DlgControlID("next3") Then
  236.             Username = DlgText(7)
  237.             LoginPrompt = DlgText(8)
  238.             PasswordPrompt = DlgText(9)
  239.  
  240.             If Username = "" Then
  241.                 i = MsgBox("You must specify a Username to continue! ", 0, "Create Wizard Script: specify username")
  242.                 DlgFocus DlgControlID("TextBox1")
  243.                 SetLogin = 1
  244.             Else
  245.                 LoginRc = "next"
  246.             End If    
  247.          End If
  248.      End Select
  249.      
  250. End Function 
  251.  
  252. Function GetOptions%(id$, act%, spv&) 
  253. static tmptime As String, tmpchar As String
  254.  
  255.  
  256.      Select Case act
  257.       Case 1
  258.           DlgText 4, waittime
  259.           DlgText 1, hostpromptchar
  260.           DlgValue 0, wVisible
  261.           
  262.       Case 2
  263.          If DlgControlID(id) = DlgControlID("cancel") Then
  264.              Exit Function
  265.          End If
  266.          
  267.          If DlgControlID(id) = DlgControlID("ok") Then
  268.              If DlgValue(0) = 1 Then
  269.                  wVisible = 1
  270.                  Telnet.Visible = TRUE
  271.              Else
  272.                  wVisible = 0
  273.                  Telnet.Visible = FALSE
  274.              End If
  275.   
  276.              waittime = DlgText(4)
  277.              If VAL(waittime) < 1 Or VAL(waittime) > 300 Then
  278.                  waittime = "30"
  279.              End If
  280.                
  281.              hostpromptchar = DlgText(1)
  282.              Exit Function
  283.          End If
  284.           
  285.       
  286.      End Select
  287.      
  288. End Function 
  289.  
  290. Function SetSaveas%(id$, act%, spv&) 
  291.  
  292.      Select Case act
  293.       Case 1
  294.          DlgValue 6, wPlaybackVis
  295.          DlgFocus 3
  296.          OutFilename = ""
  297.          SaveAsRc = ""
  298.              
  299.       Case 2
  300.          If DlgControlID(id) = DlgControlID("ok1") Then
  301.              OutFilename = DlgText(3)
  302.          End If
  303.          
  304.          If DlgControlID(id) = DlgControlID("cancel1") Then
  305.              SaveAsRc = "cancel1"
  306.          End If
  307.              
  308.          If DlgValue(6)  Then
  309.              wPlaybackVis = 1
  310.          Else 
  311.              wPlaybackVis = 0
  312.          End If 
  313.  
  314.       End Select
  315.      
  316. End Function 
  317.  
  318. Sub InitVars()
  319.  
  320.   ' Setup built-in prompts and suggested responses
  321.  
  322.    tn_prompt(1) = "ogin:"
  323.    tn_prompt(2) = "username:"
  324.    tn_prompt(3) = "userid:"
  325.    tn_prompt(4) = "id:"
  326.    tn_prompt(5) = "password:"
  327.    tn_prompt(6) = "who:"
  328.    tn_prompt(7) = "id:"
  329.    tn_prompt(8) = "user:"
  330.    tn_prompt(9) = "login:"
  331.    tn_prompt(10) = "name:"
  332.    tn_prompt(11) = "secret"
  333.    tn_prompt(12) = "security"
  334.    tn_prompt(13) = "key"
  335.    tn_prompt(14) = "Login:"
  336.    tn_prompt(15) = "Password:"
  337.     
  338.    tn_numprompts = 16
  339.    
  340.    For k = 0 To 15
  341.       tn_suggest(k) = 0
  342.    Next k
  343.  
  344.    tn_suggest(5) = 1
  345.    tn_suggest(11) = 1
  346.    tn_suggest(12) = 1
  347.    tn_suggest(13) = 1
  348.    tn_suggest(15) = 1
  349.  
  350.    If hostpromptchar <> "" Then
  351.        tn_prompt(0) = hostpromptchar
  352.        tn_suggest(0) = 3      ' custom text if prompt not found!
  353.    Else
  354.        tn_prompt(0) = "login:"
  355.    End If
  356.  
  357. End Sub
  358.  
  359. Sub SetOptions()
  360.  
  361. ctext1$ = ">"+CHR$(9)+"$"+chr$(9)+"#"+chr$(9)+"yourtext>"
  362. ctext2$ = "30"+chr$(9)+"60"+chr$(9)+"90"+chr$(9)+"120"
  363.  
  364. Begin Dialog optionsdlg 281, 159, "TNVTPlus Script Utility:  Change Options", .GetOptions
  365.    CheckBox  10, 66, 117, 11, "&Display TNVTPlus window", .CheckBox1
  366.    DropComboBox  131, 10, 107, 70, ctext1, .DropComboBox1
  367.    Text  9, 12, 117, 10, "Additional host prompt strings:", .Text1
  368.    Text  9, 39, 117, 11, "Change host timeout:"
  369.    DropComboBox  131, 34, 107, 70, ctext2, .DropComboBox2
  370.    OkButton  137, 92, 50, 14, .ok
  371.    CancelButton  189, 92, 50, 14, .cancel
  372. End Dialog
  373.   
  374.    Dim optdlg as optionsdlg
  375.  
  376.    res = Dialog(optdlg)
  377.  
  378. End Sub
  379.  
  380.  
  381. ' Add target and response to playback tables
  382.  
  383. Sub AddResponse(target As String, resp As String, rtype As Integer)
  384.    ReDim Preserve tn_target(tn_numtargets)
  385.    ReDim Preserve tn_response(tn_numtargets)
  386.    ReDim Preserve tn_responsetype(tn_numtargets)
  387.    
  388.    tn_target(tn_numtargets) = target
  389.    tn_response(tn_numtargets) = resp
  390.    tn_responsetype(tn_numtargets) = rtype
  391.    
  392.    tn_numtargets = tn_numtargets + 1
  393. End Sub
  394.  
  395. ' Output script opens a NewSession File
  396. Sub WriteNewSession( fnum as Integer )
  397.  
  398.       Print #fnum, Tab(4) "set Session = Telnet.NewSessionFile"
  399.       ResStr = "Session.Hostname =" & """" & hostname & """"
  400.       Print #fnum, Tab(4) ResStr       
  401.  
  402.       ResStr = "Session.Port =" & """" & port & """"
  403.       Print #fnum, Tab(4) ResStr   
  404.           
  405.       ResStr = "Session.Username =" & """" & Username & """"
  406.       Print #fnum, Tab(4) ResStr 
  407.       
  408.       Print #fnum, Tab(4) "Session.Connect"
  409. End Sub 
  410.  
  411. ' Output script opens a saved .ste File and connects
  412. Sub WriteOpenSession( fnum as Integer )
  413.  
  414.      Session.Username = Username
  415.      If SavePassword = 1 Then
  416.          Session.Password = Password
  417.          Session.PasswordPrompt = PasswordPrompt
  418.          Session.SavePassword = SavePassword
  419.      End If
  420.      
  421.      Session.UsernamePrompt = LoginPrompt
  422.      
  423.      Telnet.SaveSessionFileAs(SteFilename)
  424.      Print #fnum, Tab(4) "set Session = Telnet.OpenSessionFile(" & """" & SteFilename & """" & ")"
  425.  
  426. End Sub 
  427.  
  428. Function askcancel As Integer
  429. Dim answer as Integer
  430.      
  431.      answer = MsgBox("Are you sure you want to cancel and end the script without saving?",4,"Create Wizard Script: Cancel")
  432.      askcancel = answer
  433.      
  434. End Function
  435.  
  436. Function LookupStringTable(tbl() As String, tmax As Integer, bfr As String) As Integer
  437.    
  438.    Dim k As Integer
  439.    
  440.    For k = 0 To tmax - 1
  441.       If InStr(bfr, tbl(k)) > 0 Then
  442.          LookupStringTable = k
  443.          Exit Function
  444.       End If
  445.    Next k
  446.    LookupStringTable = -1
  447. End Function
  448.       
  449. Sub WriteScript( fnum as Integer )
  450.     Dim ResStr as String, indx as Integer
  451.     Dim InitVars As String
  452.     Dim j as Integer
  453.  
  454.     ' write out the targets and responses that the user chose
  455.     ResStr = "tn_numtargets =" & tn_numtargets
  456.     For indx = 0 to tn_numtargets-1
  457.        ResStr = "AddResponse " & """" & tn_target(indx) & """" & "," & """" & tn_response(indx) & """" & "," & tn_responsetype(indx) 
  458.        Print #fnum, Tab(4) ResStr       
  459.     Next indx
  460.     
  461.        Print #fnum,           ' Add a blank line
  462.  
  463.     '  Set up the telnet object and session; then connect
  464.  
  465.        Print #fnum, Tab(4) "set Telnet = CreateObject(""FTPSTNVTPlus.Application"")"      
  466.  
  467.        
  468.        If wCreateSte = 0 Then
  469.           WriteNewSession( fnum )
  470.        Else
  471.           WriteOpenSession( fnum )
  472.        End If
  473.  
  474.        ResStr = "Telnet.Visible = " & wPlaybackVis
  475.        Print #fnum, Tab(4) ResStr
  476.  
  477.        ResStr = "wCreateSte = " & wCreateSte
  478.        Print #fnum, Tab(4) ResStr 
  479.         
  480.        ResStr = "waittime = " & """" & waittime & """"
  481.        Print #fnum, Tab(4) ResStr
  482.               
  483.        Print #fnum, Tab(4) "If (tn_numtargets <> 0) Then res = ProcessTargets()" 
  484.        
  485.        If closeTelnet <> 0 Then
  486.            Print #fnum, Tab(4) "If NOT Telnet Is Nothing Then Telnet.VISIBLE = FALSE"
  487.        End If
  488.                    
  489.        Print #fnum, "End Sub"
  490.  
  491. End Sub
  492.  
  493. ' All done recording, now do something about it
  494.  
  495. Function WrapItUp As Integer
  496.  
  497. Begin Dialog saveasdlg 281, 159, "TNVTPlus Script Utility:  Save As", .Setsaveas
  498.    PushButton  152, 101, 40, 14, "OK", .ok1
  499.    CancelButton  193, 101, 40, 14, .cancel1
  500.    Text  1, 53, 73, 12, "Save File As :"
  501.    TextBox  53, 51, 175, 17, .TextBox1
  502.    GroupBox  1, 7, 229, 31, "Tip:"
  503.    Text  11, 20, 204, 12, "Use extension .ote in order to automatically run this script."
  504.    CheckBox  1, 79, 9, 12, "CheckBox", .CheckBox2
  505.    Text  17, 82, 199, 15, "Disply TNVTPlus window when script runs"
  506. End Dialog
  507.  
  508.     Dim res as Integer, attrib as Integer
  509.     Dim savedlg as saveasdlg
  510.     Dim fout as Integer
  511.     Dim defaultDir as String,msgtext as String 
  512.     Dim position as Integer
  513.     Dim pattern as String
  514.     pattern = "/*?<>|"
  515.  
  516. saveas: 
  517.     res = Dialog(savedlg)
  518.  
  519.     
  520.     ' cancel was chosen - ask user if sure
  521.     if SaveAsRc = "cancel1" OR OutFilename = "" Then
  522.         if (askcancel = 6) Then
  523.             WrapItUp = -1
  524.             Exit Function
  525.         Else
  526.             GoTo saveas
  527.         End If
  528.     End If
  529.     
  530.     lPattern = Len(pattern)   
  531.     For i = 1 TO lPattern
  532.         position = InStr(OutFilename , Mid(pattern,i,1))  
  533.         If ( position <> 0 ) Then 
  534.             GoTo saveas
  535.         End If        
  536.     Next i
  537.   
  538.     ' add .ste extension to create the STE filename
  539.     OutFilename = Trim$(OutFilename)
  540.     SteFilename = OutFilename 
  541.     
  542.     ' If ".ote" extension not found, add .ste, else replace .ote with .ste extension
  543.     position=InStr(SteFilename,".ote")
  544.     If position = 0 Then
  545.         SteFilename = SteFilename & ".ste"
  546.     Else
  547.         SteFilename = Left$(SteFilename,position-1) & ".ste"
  548.     End If
  549.  
  550.     ' If ".ote" not found, add it to the end of the filename
  551.     position=InStr(OutFilename,".ote")
  552.     If position = 0 Then
  553.         OutFilename = OutFilename & ".ote"
  554.     End If
  555.     
  556.     ' If a filename is not fully qualified, then save it in the default sessions directory
  557.     If InStr(OutFilename,"\") = 0 AND InStr(OutFilename,":") = 0 AND InStr(OutFilename,CHR$(QUOTE)) = 0 Then
  558.        defaultDir = Telnet.DefaultDirectory
  559.        OutFilename = Telnet.DefaultDirectory & "\" & OutFilename
  560.        SteFilename = Telnet.DefaultDirectory & "\" & SteFilename
  561.     End If   
  562.  
  563.    ' test if file already exists!
  564.    fout=FreeFile
  565.    
  566.    res = 0 
  567.    On Error Resume Next
  568.    Err = 0      
  569.    attrib = GetAttr(OutFilename)
  570.       
  571.    ' check if file already exists
  572.  
  573.    If Err = 53 Then GoTo erroff        
  574.    If  Err <> 0 Then 
  575.        msgtext="File I/O error: Error number " & Err & " occurred at line: " & Erl 
  576.        i = MsgBox (msgtext, 0, "Create Wizard Script: File I/O error")
  577.        GoTo saveas
  578.  
  579.    Else
  580.    'check if file is write only 
  581.        if attrib <> 0 AND attrib <> 32 Then
  582.            msgtext = " File i/o error: write permission denied - " & attrib
  583.            i = MsgBox(msgtext ,0, "Create Wizard Script: File error")
  584.            GoTo saveas
  585.        Else
  586.            ' if the file already exists - ask the user to overwrite it.
  587.            msgtext = OutFilename & " already exists. Overwrite it anyway?"
  588.            res = MsgBox (msgtext,4,"Create Wizard Script: File exists")
  589.            Close #fout
  590.            if res = 7 Then
  591.                GoTo saveas
  592.            End If
  593.        End If
  594.    End If  
  595.       
  596. erroff:
  597.    Close #fout
  598.  
  599.     ' copy the teach mode template to the output file
  600.     On Error Resume Next
  601.     Err = 0
  602.     FileCopy "tnteach.tos", OutFilename 
  603.     If Err <> 0 then
  604.        msgtext="File I/O error: Error number " & Err & " occurred at line: " & Erl 
  605.        i = MsgBox (msgtext, 0, "Create Wizard Script: File I/O error")
  606.        GoTo saveas
  607.     End If  
  608.          
  609.     fout=FreeFile
  610.  
  611.     Open OutFilename For Append as fout
  612.        if Err <> 0 Then
  613.         WrapItUp = -1
  614.         Exit Function
  615.     End If
  616.  
  617.     On Error GoTo 0
  618.  
  619.     WriteScript(fout)
  620.    
  621.     Close #fout
  622.     WrapItUp = fout
  623.     Exit Function
  624.  
  625. End Function
  626.  
  627.  
  628. ' Return last atom at the end of a data buffer
  629.  
  630. Function GetLastAtom(bfr As String, spos As Integer) As String
  631.    Dim ix As Integer, ll As Integer
  632.    
  633.    ' Scan left from spos for first space
  634.  
  635.    For ix = spos To 1 Step -1
  636.       if Mid$(bfr, ix, 1) = Chr$(CSP) Then Exit For
  637.    Next ix
  638.  
  639.    ' Return last (space delimited) atom at end-of-line
  640.  
  641.    GetLastAtom = Mid$(bfr, ix + 1, spos - ix)
  642. End Function
  643.  
  644. ' get last line of data for user prompt dialog box
  645. Sub GetLastLine(bfr As String, spos As Integer)
  646.    Dim ix As Integer, ll As Integer
  647.    Dim temp As String, x As String
  648.     
  649.    ' Scan left from spos for first space
  650.  
  651.    For ix = spos To 1 Step -1
  652.       x = Mid$(bfr, ix, 1)
  653.       if x = CHR$(10) OR x = CHR$(CCR) OR x = CHR$(CLF) OR x = CHR$(0) Then Exit For
  654.    Next ix
  655.  
  656.    ' Return last line of text (delimited by CR or LF)
  657.    temp$ = Mid$(bfr, ix + 1, spos - ix)
  658.    gl_lastline = temp
  659. End Sub
  660.  
  661. Sub ReplaceChar(bfr As String, char as String)
  662.    Dim ix As Integer
  663.    
  664.    ix = InStr(1, bfr, char)
  665.    Do While ix > 0
  666.       mid(bfr, ix, 1) = Chr$(CSP)
  667.       ix = InStr(ix + 1, bfr, char)
  668.    Loop
  669. End Sub
  670.  
  671.  
  672.  
  673. ' Dialog function
  674. ' Reads data until data is received or timeout (gl_timeout) occurs
  675.  
  676. Function WaitData%(id$, act%, spv&)
  677.    Static timeoutStart as Long
  678.    Static sectime as Long
  679.    Static cc as Integer
  680.    
  681.    Dim thisSecs as Long
  682.    Dim pos as Integer, sts As Integer
  683.  
  684.    Select Case act
  685.       Case 1                  ' Dialog init
  686.          'ReadCount = 0
  687.          cc = 0
  688.          timeoutStart = timer
  689.          sectime = timer
  690.          gl_bfr = ""
  691.          AppActivate RECORDNAME
  692.           
  693.       Case 2
  694.          If DlgControlID(id) = DlgControlID("cancel") Then
  695.             DlgEnd GL_CANCEL
  696.          End If
  697.                          
  698.       Case 5                  ' Dialog idle callback
  699.  
  700.          ' Check for more input data every 2 seconds
  701.          If timer > sectime + 2 Then
  702.              gl_bfr = Session.GetEmulatorData(MAXBUFLEN)  ' read emulator data from TNVTPlus.
  703.              cc = Session.LastReadCount                   ' how many bytes we just read.
  704.              sectime = timer
  705.              
  706.              If cc > 0 Then
  707.                  gl_linbuf = gl_linbuf + Left$(gl_bfr, cc) ' append data just read to gl_linbuf
  708.                  ReadCount = ReadCount + cc
  709.                  timeoutStart = timer                   ' reset the timeout timer every time we get more data
  710.                  If ReadCount > MAXLEN Then
  711.                      gl_linbuf = Left$(gl_bfr, MAXBUFLEN)
  712.                      ReadCount = MAXBUFLEN
  713.                  End If
  714.              End If
  715.          Else
  716.              ' Kept reading data until there was no more (cc=0).
  717.              If ReadCount > 0  AND cc = 0 Then
  718.                  DlgEnd GL_DATA
  719.              End If
  720.          End If  
  721.    
  722.          ' Check for timeout : gl_timeout is the maximum amt. of seconds to not see any data from TNVTPlus.
  723.          thisSecs = timer
  724.          If thisSecs < timeoutStart Then thisSecs = thisSecs + 24*3600
  725.          thisSecs = gl_timeout - (thisSecs - timeoutStart)
  726.          If thisSecs < 0 Then 
  727.              DlgEnd GL_TIMOUT   ' Timeout
  728.          End If
  729.  
  730.          WaitData = 1      ' Keep idle loop going going
  731.    End Select
  732. End Function
  733.  
  734. Function GetLine(timeout As Integer) As Integer
  735.    Begin Dialog waitdlg 129, 47, RECORDNAME, .WaitData
  736.       CancelButton  39, 28, 50, 14, .cancel
  737.       Text  7, 9, 115, 15, WAITFORINPUT, .waittext
  738.    End Dialog
  739.  
  740.    Dim getdatawdlg as waitdlg
  741.    Dim gl_text as String
  742.    Dim res As Integer
  743.  
  744.    gl_bfr = ""
  745.    ReadCount = 0
  746.    gl_timeout = timeout
  747.    res = Dialog(getdatawdlg)
  748.       
  749.    ' Keep receiving data until there is no more or until we've maxed out:
  750.    If res = GL_DATA Or res = GL_CANCEL Then
  751.        GetLastLine gl_linbuf, ReadCount
  752.        gl_lastline = Trim$(gl_lastline)
  753.        gl_lastatom = GetLastAtom(gl_lastline, Len(gl_lastline$))
  754.         
  755.    End If
  756.    
  757.  
  758.    GetLine = res
  759.  
  760. End Function
  761.  
  762. Function rspdlgfunc%(id$, act%, spv&)
  763.  
  764.    Select Case act
  765.       Case 1
  766.          DlgEnable DlgControlID("customtext"), custominit
  767.          If custominit = 1 Then
  768.              DlgFocus DlgControlID("customtext")
  769.          Else 
  770.              DlgFocus DlgControlID("ok")
  771.          End If
  772.          AppActivate RECORDNAME
  773.              
  774.  
  775.       Case 2
  776.       
  777.          ' Help was selected
  778.          If DlgControlID(id) = DlgControlID("help") Then
  779.              Call WinHelp(GetActiveWindow(), "tnteach.hlp", 1, 990)
  780.              rspdlgfunc = 1 
  781.          Else
  782.              ' Options was selected
  783.              If DlgControlID(id) = DlgControlID("options") Then
  784.                  SetOptions
  785.                  rspdlgfunc = 1    
  786.              Else 
  787.                  ' Enable custom text box if selected 
  788.                  If DlgControlID(id) = DlgControlID("selectcustom") Then
  789.                      DlgEnable DlgControlID("customtext"), 1
  790.                      DlgFocus DlgControlID("customtext")
  791.                  Else
  792.                      DlgEnable DlgControlID("customtext"), 0
  793.                  End If
  794.              End If
  795.          End If
  796.          
  797.          If DlgControlID(id) = DlgControlID("ok") Then Exit Function
  798.    End Select
  799. End Function
  800.  
  801. ' Converts character pairs ^<char> to special controls
  802.  
  803. Function CCString(inpstr As String) As String
  804.    CCString = inpstr
  805. End Function
  806.  
  807. Function GetResponse(inline As String, suggest As Integer, resp As String) As Integer
  808.  
  809.    Begin Dialog responsedlg 281, 159, RECORDNAME, .rspdlgfunc
  810.    OkButton  210, 68, 46, 15, .ok
  811.    CancelButton  210, 89, 46, 15
  812.    PushButton  210, 107, 46, 15, "&Help", .help
  813.    TextBox  54, 119, 102, 12, .customtext
  814.    Text  5, 12, 200, 10, "How do you respond to:"
  815.    TextBox  5, 26, 185, 12, .inline
  816.    GroupBox  5, 49, 167, 88, "Respond with "
  817.    OptionGroup .response
  818.       OptionButton  13, 65, 50, 10, "&Username", .selectusername
  819.       OptionButton  13, 83, 50, 10, "&Password", .selectpassword
  820.       OptionButton  13, 101, 50, 10, "<&Enter> key", .selectCR
  821.       OptionButton  13, 119, 40, 10, "&Custom:", .selectcustom
  822.       OptionButton  78, 65, 61, 10, "&Ignore", .selectignore
  823.       OptionButton  78, 83, 60, 10, "E&nd Script", .selectdone
  824.       OptionButton  78, 101, 88, 10, "En&d Script and Telnet", .OptionButton1
  825.    PushButton  210, 49, 46, 15, "&Options...", .options
  826. End Dialog
  827.  
  828.    Dim getuser As responsedlg
  829.    Dim res As Integer
  830.  
  831.    getuser.inline = inline             ' Seed dialog
  832.    getuser.response = suggest
  833.    
  834.    If suggest = 3 Then
  835.        custominit = 1
  836.    Else 
  837.        custominit = 0
  838.    End If
  839.    
  840.     
  841.    res = Dialog(getuser)
  842.    If res = 0 Then
  843.       GetResponse = GR_CANCEL         ' Cancel
  844.       Exit Function
  845.    End If
  846.    
  847.    GetResponse = GR_NORMAL            ' Assume normal return
  848.  
  849.    Select Case getuser.response
  850.       Case 0                  ' Username
  851.          resp = Username + "<Enter>"
  852.          GetResponse = GR_LOGIN
  853.       Case 1                  ' Password
  854.          If SavePassword = 0 OR Password = "" Then
  855.              Password=PasswordBox("Enter your login password","Create Startup Script Wizard: Password ")
  856.          End If
  857.          resp = Password + "<Enter>"
  858.          GetResponse = GR_PASSWORD
  859.       Case 2 
  860.          resp = "<Enter>"     ' CR
  861.          GetResponse = GR_ENTER
  862.       Case 3                  ' Custom entry 
  863.          resp = CCString(getuser.customtext) + "<Enter>"
  864.       Case 4                  ' Ignore input -- continue
  865.          GetResponse = GR_IGNORE
  866.       Case 5                  ' All done with input
  867.          GetResponse = GR_DONE
  868.       Case 6                  ' All done with input and close telnet session
  869.          GetResponse = GR_DONE_TELNET
  870.    End Select
  871.  
  872. End Function
  873.  
  874. Sub Main()
  875. Begin Dialog weldlg 281, 159, "TNVTPlus Script Wizard:  Welcome", .Welcome
  876.    PushButton  167, 129, 40, 14, "&Next >", .next1
  877.    CancelButton  214, 129, 40, 14, .cancel1
  878.    Text  7, 3, 256, 45, "This wizard helps you create a TNVTPlus script. For example, a script can connect to a network host automatically and do work on that host."
  879.    Text  7, 27, 256, 45, "The wizard prompts you for information about automatic login and the commands you want to execute on the network host."
  880.    Text  7, 51, 256, 45, "When you finish creating the TNVTPlus script, a file is created in your default sessions directory with an .ote extension. Double click on the .ote file to run it."
  881.    Text  7, 90, 180, 25, "Click Next to continue."
  882. End Dialog
  883.  
  884. cchoices = "30"+chr$(9)+"60"+chr$(9)+"90"+chr$(9)+"120"
  885. ccombo = ">"+CHR$(9)+"$"+chr$(9)+"#"+chr$(9)+"yourtext>"
  886.  
  887. Begin Dialog timerdlg 281, 159, "TNVTPlus Script Wizard:  Set the Time Between Prompts", .SetTimer
  888.    PushButton  167, 129, 40, 14, "&Next >", .next2
  889.    Text  10, 38, 226, 44, "Type the maximum amount of time in seconds you want the TNVTPlus script to wait for a response from the network host. TIP: The maximum timeout value is 300 seconds."
  890.    PushButton  125, 129, 40, 14, "< &Back", .back2
  891.    CancelButton  214, 129, 40, 14, .cancel2
  892.    Text  10, 10, 230, 25, "The TNVTPlus script sends messages to the network host and waits for a response.  The amount of time that the program waits is called a Timeout."
  893.    DropComboBox  83, 76, 44, 70, cchoices, .ComboBox1
  894.    Text  10, 76, 70, 11, "&Timeout (seconds):"
  895.    CheckBox  10, 111, 159, 8, "&Display TNVTPlus window", .CheckBox1
  896. End Dialog
  897.  
  898. Begin Dialog hostpromptdlg 281, 159, "TNVTPlus Script Wizard:  Set hostname and host prompt", .SetPrompt
  899.    PushButton  167, 129, 40, 14, "&Next >", .next4
  900.    PushButton  125, 129, 40, 14, "< &Back", .back4
  901.    CancelButton  214, 129, 40, 14, .cancel4
  902.    Text  5, 5, 269, 31, "Each network host has a name and an Internet Protocol (IP) address. The name is often called a host or hostname. The Host prompt chararacter(s)  helps the wizard identify when the network host is waiting for user input. "
  903.    Text  5, 49, 89, 8, "Hostname:"
  904.    TextBox  117, 49, 94, 13, .TextBox2
  905.    Text  5, 73, 83, 25, "Port name or number:"
  906.    TextBox  117, 72, 94, 14, .TextBox3
  907.    Text  5, 95, 90, 15, "&Host prompt character(s):"
  908.    DropComboBox  117, 95, 94, 70, ccombo, .DropComboBox1
  909. End Dialog
  910.  
  911. Begin Dialog logindlg 281, 159, "TNVTPlus Script Wizard:  Automatic login", .SetLogin
  912.    PushButton  167, 129, 40, 14, "&Next >", .next3
  913.    PushButton  125, 129, 40, 14, "< &Back", .back3
  914.    CancelButton  214, 129, 40, 14, .cancel3
  915.    GroupBox  6, 6, 250, 81, "Automatic login:"
  916.    Text  18, 23, 79, 14, "Username:"
  917.    Text  18, 42, 79, 13, "Username prompt:"
  918.    Text  18, 62, 79, 13, "Password prompt:"
  919.    TextBox  91, 23, 125, 14, .TextBox1
  920.    TextBox  91, 41, 125, 14, .TextBox2
  921.    TextBox  91, 61, 125, 14, .TextBox4
  922.    CheckBox  6, 114, 229, 14, "Save password in session file", .CheckBox1
  923.    CheckBox  6, 94, 229, 14, "Automatically create session file (.ste) with TNVTPlus script (.ote)", .CheckBox2
  924. End Dialog
  925.  
  926.  
  927.  
  928. Begin Dialog finishdlg 281, 159, "TNVTPlus Script Wizard:  Finish"
  929.    PushButton  167, 129, 40, 14, "&Finish >", .next3
  930.    PushButton  125, 129, 40, 14, "< &Back", .back3
  931.    CancelButton  214, 129, 40, 14, .cancel3
  932.    Text  7, 6, 247, 45, "The wizard has enough information to begin a TNVTPlus session. You will be prompted to respond to the program running on the network host."
  933.    Text  7, 26, 247, 45, "Your responses are recorded in the .ote file. You can run the .ote file later to repeat the same commands."
  934.    Text  7, 90, 180, 25, "Click Finish to begin the TNVTPlus session."
  935. End Dialog
  936.  
  937. Dim hidlg as weldlg
  938. Dim timedlg as timerdlg
  939. Dim hostdlg as hostpromptdlg
  940. Dim finaldlg as finishdlg
  941. Dim logdlg as logindlg
  942. Dim idx as Integer, createobj As Integer
  943. Dim RetStatus As Integer
  944. Dim cansave As Integer
  945.  
  946. Dim filenum As Integer
  947. Dim res as Integer
  948.  
  949. 'Initialize
  950.    createobj = FALSE
  951.    
  952. ' Set up hostname and port
  953.    port = "Telnet"
  954.  
  955. ' initialize variables   
  956.    waittime = "30"
  957.    hostpromptchar = ">"
  958.    hostname = ""
  959.    Username = ""
  960.    Password = ""
  961.    SavePassword = 1
  962.    LoginPrompt = "login:"
  963.    PasswordPrompt = "password:"
  964.    wVisible = 1
  965.    tn_numtargets = 0    
  966.    wCreateSte = 1
  967.    wPlaybackVis = 1 
  968.    
  969.    ' create the tnvt object so that the GetUserName function can be accessed during the wizard  
  970.    If createobj = FALSE Then
  971.        set Telnet = CreateObject("FTPSTNVTPlus.Application")
  972.        createobj = TRUE
  973.    End If   
  974.      
  975. ' invoke the startup screen
  976. Hello:
  977.    WelcomeRc = ""
  978.    res = Dialog(hidlg)
  979.   
  980.    Select Case WelcomeRc
  981.       Case "cancel"
  982.          GoTo CancelTeach
  983.    End Select
  984.  
  985.  ' Next> was chosen. Continue with the timer dialog. 
  986. Timeit:
  987.    TimerReturn = ""
  988.    res = Dialog(timedlg) 
  989.    Select Case TimerReturn
  990.       Case "cancel"
  991.           GoTo CancelTeach
  992.       Case "back"
  993.           GoTo Hello
  994.    End Select
  995.  
  996.    
  997.  ' Ask user for the typical host prompt to look for: '
  998. hostprompt:
  999.    HostReturn = ""
  1000.    res = Dialog(hostdlg)
  1001.    Select Case HostReturn
  1002.        Case "cancel"
  1003.           GoTo CancelTeach
  1004.         Case "back"
  1005.            GoTo Timeit
  1006.    End Select
  1007.  
  1008.    If Len(hostpromptchar) <> 0 Then
  1009.        tn_prompt(tn_numprompts) = hostpromptchar
  1010.        tn_suggest(tn_numprompts) = 3
  1011.        tn_numprompts = tn_numprompts + 1
  1012.    End If
  1013.    
  1014. Logit:
  1015.    LoginRc = "" 
  1016.    Password = "" 
  1017.    ' create a telnet object and obtain the username if possible
  1018.   
  1019.    Username = Telnet.GetUserName
  1020.    
  1021.    res = Dialog(logdlg)
  1022.    Select Case LoginRc
  1023.       Case "cancel"
  1024.          GoTo CancelTeach
  1025.       Case "back"
  1026.           GoTo hostprompt
  1027.    End Select
  1028.  
  1029.  
  1030.  
  1031.    ' if the user is not creating an .ste file OR not saving the password, then let the remote host request the password!   
  1032.    If SavePassword <> 0 AND wCreateSte <> 0 Then
  1033.        Password=PasswordBox("Enter your login password","TNVTPlus Script Wizard: Password ")
  1034.        If Password = "" Then
  1035.            GoTo Logit
  1036.        End If
  1037.        
  1038.    End If 
  1039.    
  1040.  
  1041. EndWizard:
  1042.    WRc = ""
  1043.    res = Dialog(finaldlg)
  1044.    Select Case res
  1045.       Case 0
  1046.          GoTo CancelTeach
  1047.       Case 2
  1048.           Goto Logit
  1049.    End Select
  1050.  
  1051.    ' create a session and login:
  1052.  
  1053.    set Session = Telnet.NewSessionFile
  1054.    Session.Hostname = hostname
  1055.    Session.Port = port
  1056.    Session.Username = Username
  1057.  
  1058.    Session.UsernamePrompt = LoginPrompt
  1059.    
  1060.    ' make sure the user is allowed to save the password in the session file
  1061.    Session.SavePassword = 1
  1062.    cansave = Session.SavePassword
  1063.  
  1064.    If cansave <> 0 Then
  1065.        Session.Password = Password
  1066.    End If
  1067.    
  1068.    if Password <> "" OR wCreateSte = 1 Then
  1069.        Session.PasswordPrompt = PasswordPrompt
  1070.    End If
  1071.    
  1072.   
  1073.    res = Session.Connect
  1074.    If res > 10000 Then
  1075.        res = MsgBox ("Telnet Connection failed. Would you like to try another host?", 4, "Create Wizard Script: cannot connect")
  1076.        if res = 6 Then
  1077.            GoTo hostprompt
  1078.        Else
  1079.            GoTo CancelTeach
  1080.        End If
  1081.    End If
  1082.    Telnet.Visible = wVisible
  1083.    InitVars
  1084.  
  1085.  
  1086. read_next: 
  1087.     gl_linbuf = "" 
  1088.     glres = GetLine(VAL(waittime))
  1089.     
  1090.     Select Case glres
  1091.        Case GL_CANCEL
  1092.          GoTo retry
  1093.      
  1094.        Case GL_TIMOUT
  1095.           res = MsgBox("Timeout and no data returned",5,"Create Wizard Script: Timeout")
  1096.           If res = 4 Then
  1097.               GoTo retry
  1098.           End If
  1099.           
  1100.          if (askcancel = 6) Then
  1101.              GoTo CancelTeach
  1102.          Else
  1103.  
  1104.              GoTo retry
  1105.          End If
  1106.  
  1107.     End Select
  1108.     
  1109.     idx = LookupStringTable(tn_prompt, tn_numprompts, gl_linbuf)
  1110.     if idx < 0 Then
  1111.         if glres = GL_TIMOUT Then
  1112.             grres = GetResponse(gl_lastline, 4, response)
  1113.             GoTo resp
  1114.         End If
  1115.     idx = 0
  1116.     End If
  1117.     
  1118. retry:     
  1119.     grres = GetResponse(gl_lastline, tn_suggest(idx), response)
  1120.         
  1121. ' First check for CANCEL
  1122. resp:   
  1123.    Select Case grres
  1124.       Case GR_NORMAL
  1125.          If gl_lastatom <> "" Then
  1126.              Session.SendKeys(response)
  1127.              AddResponse gl_lastatom, response, GR_NORMAL
  1128.          End If
  1129.       Case GR_PASSWORD
  1130.          Session.SendKeys(response)
  1131.          PasswordPrompt2 = gl_lastatom
  1132.          AddResponse gl_lastatom, "GR_PASSWORD", GR_PASSWORD
  1133.       Case GR_LOGIN
  1134.          Session.SendKeys(response)
  1135.          AddResponse gl_lastatom, response, GR_LOGIN
  1136.       Case GR_CANCEL
  1137.          if (askcancel = 6) Then
  1138.              GoTo CancelTeach
  1139.          End If
  1140.      Case GR_ENTER
  1141.           Session.SendKeys(response)
  1142.           AddResponse gl_lastatom, response, GR_ENTER
  1143.       Case GR_IGNORE
  1144.          GoTo read_next
  1145.       Case GR_DONE
  1146.          closeTelnet = FALSE
  1147.          RetStatus = WrapItUp()
  1148.          GoTo ExitTeach
  1149.       Case GR_DONE_TELNET
  1150.          If gl_lastatom <> "" Then
  1151.               response = ""
  1152.               AddResponse gl_lastatom, response, GR_NORMAL
  1153.          End If
  1154.          closeTelnet = TRUE
  1155.          RetStatus = WrapItUp()
  1156.          GoTo CancelTeach
  1157.    End Select
  1158.    
  1159.    GoTo read_next
  1160.  
  1161. ExitTeach:
  1162.     If wPlaybackVis = 1 Then
  1163.         Telnet.Visible = TRUE
  1164.     End If
  1165.     Exit Sub
  1166.     
  1167. CancelTeach:
  1168.     If createobj = TRUE Then
  1169.         Telnet.Quit
  1170.     End If
  1171.     Exit Sub       
  1172.  
  1173. End Sub
  1174.