home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2003 February / PCWFEB03.iso / software / dantzretrospect / English / Installer / Data.Cab / F3898_sampleretrospecteventhandler.frm (.txt) < prev    next >
Encoding:
Visual Basic Form  |  2002-06-28  |  20.5 KB  |  530 lines

  1. VERSION 5.00
  2. Begin VB.Form frmRetroEventHandler 
  3.    Caption         =   "Retrospect Event Handler"
  4.    ClientHeight    =   4185
  5.    ClientLeft      =   60
  6.    ClientTop       =   345
  7.    ClientWidth     =   4605
  8.    LinkTopic       =   "Form1"
  9.    ScaleHeight     =   4185
  10.    ScaleWidth      =   4605
  11.    StartUpPosition =   3  'Windows Default
  12.    Begin VB.CommandButton cmdContinue 
  13.       Caption         =   "Continue"
  14.       Default         =   -1  'True
  15.       Height          =   375
  16.       Left            =   1680
  17.       TabIndex        =   1
  18.       Top             =   3720
  19.       Width           =   1215
  20.    End
  21.    Begin VB.Label lblStatus 
  22.       Caption         =   "Sample Caption"
  23.       BeginProperty Font 
  24.          Name            =   "MS Sans Serif"
  25.          Size            =   9.75
  26.          Charset         =   0
  27.          Weight          =   400
  28.          Underline       =   0   'False
  29.          Italic          =   0   'False
  30.          Strikethrough   =   0   'False
  31.       EndProperty
  32.       Height          =   3495
  33.       Left            =   120
  34.       TabIndex        =   0
  35.       Top             =   120
  36.       Width           =   4335
  37.    End
  38. Attribute VB_Name = "frmRetroEventHandler"
  39. Attribute VB_GlobalNameSpace = False
  40. Attribute VB_Creatable = False
  41. Attribute VB_PredeclaredId = True
  42. Attribute VB_Exposed = False
  43. ' sampleRetroEventHandler.frm (frmRetroEventHandler)
  44. '     A simple sample event handler for Retrospect's triggered script mechanism.
  45. ' Copyright 2000 by Dantz Development Corporation
  46. Option Explicit
  47. Const msgDivider As String = ":" + vbCrLf + vbCrLf
  48. ' FormatError
  49. '     Return a string for the passed in error code and error string.
  50. ' This is a utility function for the scripts below.
  51. Function FormatError(errCode As Integer, errMsg As String) As String
  52.     FormatError = "error #" + FormatNumber(errCode, 0) + " (" + errMsg + ")"
  53. End Function
  54. ' FormatSeconds
  55. '     Return a string representing the passed in number of seconds.
  56. ' E.g. "2 days 1 minute", "2 hours"
  57. Function FormatSeconds(secondsStr)
  58.     Dim secStr
  59.     Dim seconds
  60.     seconds = 1 * secondsStr
  61.     secStr = ""
  62.     If (seconds >= 86400 * 2) Then
  63.         secStr = secStr & (seconds \ 86400) & " days "
  64.         seconds = seconds Mod 86400
  65.     ElseIf (seconds >= 86400) Then
  66.         secStr = secStr & "1 day "
  67.         seconds = seconds Mod 86400
  68.     End If
  69.     If (seconds >= 3600 * 2) Then
  70.         secStr = secStr & (seconds \ 3600) & " hours "
  71.         seconds = seconds Mod 3600
  72.     ElseIf (seconds >= 3600) Then
  73.         secStr = secStr & "1 hour "
  74.         seconds = seconds Mod 3600
  75.     End If
  76.     If (seconds >= 60 * 2) Then
  77.         secStr = secStr & (seconds \ 60) & " minutes "
  78.         seconds = seconds Mod 60
  79.     ElseIf (seconds >= 60) Then
  80.         secStr = secStr & "1 minute "
  81.         seconds = seconds Mod 60
  82.     End If
  83.     If (seconds >= 2) Then
  84.         secStr = secStr & seconds & " seconds "
  85.     ElseIf (seconds = 1) Then
  86.         secStr = secStr & "1 second "
  87.     End If
  88.     If (Len(secStr) > 2) Then
  89.         FormatSeconds = Left(secStr, Len(secStr) - 1)
  90.     Else
  91.         FormatSeconds = "0 seconds"
  92.     End If
  93. End Function
  94. ' ReturnResult
  95. '     If result is false, create a file to inform the caller we wish to abort.
  96. ' Quit when done.
  97. Sub ReturnResult(msg, interventionFile)
  98.     Dim fs, f
  99.     Set fs = CreateObject("Scripting.FileSystemObject")
  100.     Set f = fs.CreateTextFile(interventionFile)
  101.     f.Write msg
  102.     f.Close
  103.     End                                                     ' Quit
  104. End Sub
  105. ' StartApp
  106. '     Sent when Retrospect launches. wasAutoLaunched is true if Retrospect was
  107. ' launched automatically to run a scheduled script.
  108. Sub StartApp(startDate, wasAutoLaunched As Boolean, interventionFile)
  109.     Dim btnClicked As Integer
  110.     Dim msg
  111.     If (wasAutoLaunched) Then
  112.         msg = "StartApp" + msgDivider + _
  113.             "Retrospect is autolaunching on " + startDate + "." + _
  114.             vbCrLf + "Let Retrospect launch?"
  115.     Else
  116.         msg = "StartApp" + msgDivider + _
  117.             "Retrospect is launching on " + startDate + "." + _
  118.             vbCrLf + "Let Retrospect launch?"
  119.     End If
  120.     btnClicked = MsgBox(msg, vbOKCancel)
  121.     If (btnClicked <> 1) Then
  122.         ReturnResult "Retrospect launch stopped by external script.", interventionFile
  123.     End If
  124. End Sub
  125. ' EndApp
  126. '     Sent when Retrospect is quiting.
  127. Sub EndApp(endDate)
  128.     MsgBox "EndApp" + msgDivider + _
  129.         "Retrospect quit on " + endDate + "."
  130. End Sub
  131. ' StartBackupServer
  132. '     Sent when the BackupServer is started via either a script or manually.
  133. ' Return true to prevent backup server starting.
  134. Sub StartBackupServer(startDate, interventionFile)
  135.     Dim btnClicked As Integer
  136.     Dim msg
  137.     msg = "StartBackupServer" & msgDivider & _
  138.         "Retrospect Backup Server is starting on " & _
  139.         startDate & "." & vbCrLf & _
  140.         "Let Backup Server run?"
  141.         
  142.     btnClicked = MsgBox(msg, vbOKCancel)
  143.     If (btnClicked <> 1) Then
  144.          ReturnResult "Backup Server stopped by external script", interventionFile
  145.     End If
  146. End Sub
  147. ' StopBackupServer
  148. '     Sent when Backup Server stops.
  149. Sub StopBackupServer(endDate)
  150.     MsgBox "StopBackupServer" + msgDivider + _
  151.         "Retrospect Backup Server stopped on " + endDate + "."
  152. End Sub
  153. ' StartScript
  154. '     Sent when a script is run, either manually or as part of a scheduled
  155. ' execution. Return true to prevent script starting.
  156. Sub StartScript(ByVal scriptName As String, startDate, interventionFile)
  157.     Dim btnClicked As Integer
  158.     Dim msg
  159.     msg = "StartScript" & msgDivider & _
  160.         "Retrospect script '" & scriptName & "' is starting on " & _
  161.         startDate & "." & vbCrLf & _
  162.         "Let script run?"
  163.     btnClicked = MsgBox(msg, vbOKCancel)
  164.     If (btnClicked <> 1) Then
  165.         ReturnResult "Script stopped by external script.", interventionFile
  166.     End If
  167. End Sub
  168. ' EndScript
  169. '     Sent when a script finishes.
  170. ' numErrors is the total number of errors that occured. fatalErrCode is zero if
  171. ' the script was able to complete, otherwise it is a negative number for the
  172. ' error that caused the script to abort execution. errMsg is "successful" if
  173. ' there was no fatal error, otherwise it is the description of the error.
  174. Sub EndScript(ByVal scriptName As String, _
  175.     numErrors As Integer, _
  176.     fatalErrCode As Integer, _
  177.     ByVal errMsg As String)
  178.     Dim msg As String
  179.     msg = "EndScript" + msgDivider + "Retrospect script '" + scriptName + "'"
  180.                 
  181.     If (fatalErrCode <> 0) Then
  182.         msg = msg + " stopped by " + _
  183.             FormatError(fatalErrCode, errMsg) + "."
  184.     ElseIf (numErrors = 0) Then
  185.         msg = msg + " finished with no errors."
  186.     ElseIf (numErrors = 1) Then
  187.         msg = msg + " finished with one non-fatal error."
  188.     Else
  189.         msg = msg + " with " + FormatNumber(numErrors, 0) + " non-fatal errors."
  190.     End If
  191.     MsgBox msg
  192. End Sub
  193. ' StartSource
  194. '     Sent immediately before a script backs up a source volume.
  195. ' sourceName is the volume name that is being backed up, it will be prefaced
  196. ' with "My Computer\" if it is a local volume or the clientName otherwise.
  197. ' sourcePath is the file system path of the volume.
  198. Sub StartSource( _
  199.     ByVal scriptName As String, _
  200.     ByVal sourceName As String, _
  201.     ByVal sourcePath As String, _
  202.     ByVal clientName As String, _
  203.     interventionFile)
  204.     Dim myComputerName As String
  205.     Dim msg As String
  206.     Dim btnClicked As Integer
  207.     myComputerName = "My Computer"
  208.     msg = "StartSource" + msgDivider
  209.     If (Left(clientName, Len(myComputerName)) = myComputerName) Then
  210.         msg = msg + "Script '" + scriptName + "' will back up the local volume '" + _
  211.         sourceName + "' at " + sourcePath + "." + vbCrLf + "Do you want to continue?"
  212.     Else
  213.         msg = msg + "Script '" + scriptName + "' will back up the Client '" + clientName + "'s' volume, '" + sourceName + "' at " + _
  214.             sourcePath + "." + vbCrLf + "Let source start?"
  215.     End If
  216.     btnClicked = MsgBox(msg, vbOKCancel)
  217.     If (btnClicked <> 1) Then
  218.         ReturnResult "Source skipped by external script", interventionFile
  219.     End If
  220. End Sub
  221. ' EndSource
  222. '     Sent after a script has completed backing up a source. As above, sourceName
  223. ' is prefaced with either the client name or "My Computer\".
  224. Sub EndSource( _
  225.     ByVal scriptName As String, _
  226.     ByVal sourceName As String, _
  227.     ByVal sourcePath As String, _
  228.     ByVal clientName As String, _
  229.     KBBackedUp As Long, _
  230.     numFiles As Long, _
  231.     durationInSecs As Long, _
  232.     backupStartDate, _
  233.     backupStopDate, _
  234.     scriptStartDate, _
  235.     ByVal backupSet As String, _
  236.     ByVal backupAction As String, _
  237.     ByVal parentVolume As String, _
  238.     numErrors As Integer, _
  239.     fatalErrCode As Integer, _
  240.     ByVal errMsg As String)
  241.     Dim myComputerName As String
  242.     Dim msg As String
  243.     myComputerName = "My Computer"
  244.     msg = "EndSource" + msgDivider
  245.     ' Volume/Client
  246.     If (Left(clientName, Len(myComputerName)) = myComputerName) Then
  247.         msg = msg + "The local volume '" + sourceName + "' at " + sourcePath
  248.     Else
  249.         msg = msg + "Client '" + clientName + "'s' volume, '" + sourceName + _
  250.             "' at " + sourcePath
  251.     End If
  252.     ' Errors
  253.     If (fatalErrCode <> 0) Then
  254.         msg = msg + " stopped by " + FormatError(fatalErrCode, errMsg) + "."
  255.     ElseIf (numErrors = 0) Then
  256.         msg = msg + " completed successfully."
  257.     ElseIf (numErrors = 1) Then
  258.         msg = msg + " completed with one non-fatal error."
  259.     Else
  260.         msg = msg + " completed with " + FormatNumber(numErrors, 0) + " non-fatal errors."
  261.     End If
  262.     msg = msg + vbCrLf + "Script '" + scriptName + "' finished a " + backupAction + _
  263.         " backup to '" + backupSet + "'. " + FormatNumber(numFiles, 0) + _
  264.         " files (" + FormatNumber(KBBackedUp, 0) + "KB) were backed up in " + _
  265.         FormatSeconds(durationInSecs) + "." + vbCrLf
  266.     msg = msg + "The script started on " + scriptStartDate + _
  267.         " and the backup started on " + backupStartDate + _
  268.         " and finished on " + backupStopDate + "."
  269.     MsgBox msg
  270. End Sub
  271. ' MediaRequest
  272. '     Sent before Retrospect requests media needed for a backup.
  273. ' Return true to fail media request
  274. Sub MediaRequest(ByVal mediaLabel As String, _
  275.     ByVal mediaName As String, _
  276.     mediaIsKnown As Boolean, _
  277.     secondsWaited As Integer, _
  278.     interventionFile)
  279.     Dim msg As String
  280.     Dim btnClicked As Integer
  281.     msg = "MediaRequest" + msgDivider + _
  282.         "Retrospect is requesting media '" + mediaName + "' (" + mediaLabel + ")"
  283.     If (mediaIsKnown) Then
  284.         msg = msg + vbCrLf + "Retrospect has backed up to this media before."
  285.     Else
  286.         msg = msg + vbCrLf + "This is either a new or unknown media."
  287.     End If
  288.     msg = msg + vbCrLf + "Retrospect has waited " + FormatSeconds(secondsWaited * 60) + " so far." + _
  289.             vbCrLf + "Continue with media request?"
  290.     btnClicked = MsgBox(msg, vbOKCancel)
  291.     If (btnClicked <> 1) Then
  292.         ReturnResult "Media request stopped by external script", interventionFile
  293.     End If
  294. End Sub
  295. ' TimedOutMediaRequest
  296. '     Sent before Retrospect times out on waiting for a media request. Note that
  297. ' the "Media Request Timeout" option in the preferences must be turned on to
  298. ' receive this event.
  299. ' Return true to reset timeout request.
  300. Sub TimedOutMediaRequest(ByVal mediaLabel As String, _
  301.     ByVal mediaName As String, _
  302.     mediaIsKnown As Boolean, _
  303.     secondsWaited As Integer, _
  304.     interventionFile)
  305.     Dim msg As String
  306.     Dim btnClicked As Integer
  307.     msg = "TimedOutMediaRequest" + msgDivider + _
  308.         "Retrospect's media request for '" + mediaName + "' (" + mediaLabel + _
  309.         ") is about to time out after waiting " + FormatSeconds(secondsWaited * 60) + "." + _
  310.         vbCrLf + "Let Retrospect time out?"
  311.     btnClicked = MsgBox(msg, vbOKCancel)
  312.     If (btnClicked <> 1) Then
  313.         ReturnResult "TimeOutMediaRequest stopped by external script", interventionFile
  314.     End If
  315. End Sub
  316. ' ScriptCheckFailed
  317. '     Sent before Retrospect quits when the next script to execute will not be
  318. ' able to run. "Check validity of next script" must be checked in Retrospect's
  319. ' preferences (Notification:Alerts) to receive this event.
  320. Sub ScriptCheckFailed( _
  321.     ByVal scriptName As String, _
  322.     nextDate, _
  323.     reason, _
  324.     errCode As Integer, _
  325.     ByVal errMsg As String)
  326.     Dim msg
  327.     msg = "ScriptCheckFailed" + msgDivider + _
  328.         "The Retrospect script '" + scriptName + "' scheduled on " + nextDate + " will not execute" + _
  329.         " as scheduled due to " + _
  330.         FormatError(errCode, errMsg) + "." + vbCrLf + _
  331.         "Retrospect's dialog: " + reason
  332.         
  333.     MsgBox msg
  334. End Sub
  335. ' NextExec
  336. '     Sent before Retrospect quits when the next script to execute is able to
  337. ' run. "Check validity of next script" must be checked in Retrospect's
  338. ' preferences (Notification:Alerts) to receive this event.
  339. Sub NextExec(ByVal scriptName As String, nextDate)
  340.     Dim msg As String
  341.     msg = "NextExec" + msgDivider
  342.     msg = msg + "Script '" + scriptName + "' is scheduled to run on " + _
  343.         nextDate + "."
  344.     MsgBox msg
  345. End Sub
  346. ' StopSched
  347. '     Sent when an unattended script is scheduled to stop. Return true to keep
  348. ' script running.
  349. Sub StopSched(ByVal scriptName As String, schedStopDate, interventionFile)
  350.     Dim msg As String
  351.     Dim btnClicked As Integer
  352.     msg = "StopSched" + msgDivider
  353.     msg = msg + "Script '" + scriptName + "' is scheduled to stop on " + _
  354.         schedStopDate + "." + vbCrLf + "Let the script stop?"
  355.     btnClicked = MsgBox(msg, vbOKCancel)
  356.     If (btnClicked <> 1) Then
  357.         ReturnResult "Script was not stopped due to intervention by external script.", interventionFile
  358.     End If
  359. End Sub
  360. ' PasswordEntry
  361. '     Sent when a password is entered.
  362. Sub PasswordEntry( _
  363.     ByVal actionString As String, _
  364.     attempts As Integer, _
  365.     errCode As Integer, _
  366.     ByVal errMsg As String)
  367.     Dim msg As String
  368.     msg = "PasswordEntry" + msgDivider
  369.     If (errCode <> 0) Then
  370.         msg = msg + "Login failed after " + FormatNumber(attempts, 0) + _
  371.                 " attempts, " + FormatError(errCode, errMsg) + _
  372.                 vbCrLf + "Retrospect's dialog: " + actionString + ""
  373.     ElseIf (attempts = 1) Then
  374.         msg = msg + "Login successful." + vbCrLf + "Retrospect's dialog: " + _
  375.                 actionString + ""
  376.     Else
  377.         msg = "Login successful after " + FormatNumber(attempts, 0) + " attempts." + _
  378.                 vbCrLf + "Retrospect's dialog: " + actionString + ""
  379.     End If
  380.     MsgBox msg
  381. End Sub
  382. ' FatalBackupError
  383. '     Sent when a unrecoverable error is detected, such as a hardware
  384. ' failure.
  385. Function FatalBackupError( _
  386.     scriptName, _
  387.     reason, _
  388.     errCode As Integer, _
  389.     ByVal errMsg As String, _
  390.     errZone, _
  391.     interventionFile)
  392.     Dim msg As String
  393.     Dim btnClicked As Integer
  394.     msg = "Script '" + scriptName + "' failed in " + errZone + " " + _
  395.             FormatError(errCode, errMsg) + "." + vbCrLf + reason + "." + _
  396.             vbCrLf + "Retrospect's dialog: '" + reason + "'" + vbCrLf + _
  397.             "Do you want to display a modal dialog?"
  398.     btnClicked = MsgBox(msg, vbOKCancel)
  399.     If (btnClicked <> 1) Then
  400.         ReturnResult "External script prevented the display of a modal dialog.", interventionFile
  401.     End If
  402. End Function
  403. ' Form_Load
  404. '     A sample event handler.
  405. Private Sub Form_Load()
  406.     Dim cmdArgs
  407.     Dim eventMsg As String
  408.     Dim statusMsg As String
  409.     Dim argNo As Integer
  410.     Dim waitForUser As Boolean
  411.     lblStatus = "Started"
  412.     cmdArgs = getCmdArgs()
  413.     If (UBound(cmdArgs) < 1) Then
  414.         MsgBox "This is a sample Retrospect external script written in Visual Basic." & _
  415.         vbCrLf & _
  416.         vbCrLf & "To use this file on the backup server, move it to Retrospect's directory." & _
  417.         vbCrLf & "To use this file on a client machine, copy it to the directory containing" & _
  418.         vbCrLf & "the Retrospect client ('retroclient.exe')."
  419.         End
  420.     End If
  421.     ' get args for debugging
  422.     statusMsg = "Arguments:"
  423.     statusMsg = statusMsg + vbCrLf + Command() + vbCrLf
  424.     For argNo = LBound(cmdArgs) To UBound(cmdArgs)
  425.         statusMsg = statusMsg + vbCrLf + FormatNumber(argNo, 0) + ":" + cmdArgs(argNo)
  426.     Next argNo
  427.     lblStatus = statusMsg
  428.     'MsgBox statusMsg                                       ' Uncomment to debug arguments
  429.     ' Handle event
  430.     waitForUser = False
  431.     eventMsg = cmdArgs(0)
  432.     Select Case eventMsg
  433.         Case "StartApp"
  434.             StartApp cmdArgs(1), (cmdArgs(2) = "true"), cmdArgs(3)
  435.         Case "EndApp"
  436.             EndApp cmdArgs(1)
  437.         Case "StartBackupServer"
  438.             StartBackupServer cmdArgs(1), cmdArgs(2)
  439.         Case "StopBackupServer"
  440.             StopBackupServer cmdArgs(1)
  441.         Case "StartScript"
  442.             StartScript cmdArgs(1), cmdArgs(2), cmdArgs(3)
  443.         Case "EndScript"
  444.             EndScript cmdArgs(1), Val(cmdArgs(2)), Val(cmdArgs(3)), cmdArgs(4)
  445.         Case "StartSource"
  446.             StartSource cmdArgs(1), cmdArgs(2), cmdArgs(3), cmdArgs(4), cmdArgs(5)
  447.         Case "EndSource"
  448.             EndSource cmdArgs(1), cmdArgs(2), cmdArgs(3), (cmdArgs(4)), Val(cmdArgs(5)), Val(cmdArgs(6)), _
  449.                 Val(cmdArgs(7)), cmdArgs(8), cmdArgs(9), cmdArgs(10), _
  450.                 cmdArgs(11), cmdArgs(12), cmdArgs(13), Val(cmdArgs(14)), _
  451.                 Val(cmdArgs(15)), cmdArgs(16)
  452.         Case "MediaRequest"
  453.             MediaRequest cmdArgs(1), cmdArgs(2), cmdArgs(3) = "true", Val(cmdArgs(4)), cmdArgs(5)
  454.         Case "TimedOutMediaRequest"
  455.             TimedOutMediaRequest cmdArgs(1), cmdArgs(2), cmdArgs(3) = "true", Val(cmdArgs(4)), cmdArgs(5)
  456.         Case "ScriptCheckFailed"
  457.             ScriptCheckFailed cmdArgs(1), cmdArgs(2), cmdArgs(3), Val(cmdArgs(4)), cmdArgs(5)
  458.         Case "NextExec"
  459.             NextExec cmdArgs(1), cmdArgs(2)
  460.         Case "StopSched"
  461.             StopSched cmdArgs(1), cmdArgs(2), cmdArgs(3)
  462.         Case "PasswordEntry"
  463.             PasswordEntry cmdArgs(1), Val(cmdArgs(2)), Val(cmdArgs(3)), cmdArgs(4)
  464.         Case "FatalBackupError"
  465.             FatalBackupError cmdArgs(1), cmdArgs(2), Val(cmdArgs(3)), cmdArgs(4), cmdArgs(5), cmdArgs(6)
  466.         Case Else
  467.             MsgBox "Unknown command: " + eventMsg
  468.             waitForUser = True
  469.    End Select
  470.    If (waitForUser = False) Then End
  471. End Sub
  472. ' cmdContinue_Click
  473. '     Quit the application and return to Retrospect.
  474. ' Retrospect will continue to wait until the application closes.
  475. Private Sub cmdContinue_Click()
  476.     End
  477. End Sub
  478. ' getCmdArgs
  479. '     Return an array of strings, one for each command argument.
  480. ' This function can handle command line arguments delimited by either spaces or
  481. ' quotes. It cannot distinguish between embedded quotes (use single quotes (')).
  482. ' The quotes are removed before being added to the array.
  483. Function getCmdArgs() As Variant
  484.     Dim cmdArgs()
  485.     Dim cmdLine As String
  486.     Dim cmdLen As Integer
  487.     Dim numArgs As Integer
  488.     Dim delim As String
  489.     Dim c As Integer
  490.     Dim nextChar As String
  491.     Dim inArgs As Boolean
  492.     Dim anArg As String
  493.     cmdLine = Command()
  494.     cmdLen = Len(cmdLine)
  495.     If (cmdLen = 0) Then
  496.         getCmdArgs = Array()                                ' Empty array
  497.         Exit Function
  498.     End If
  499.     inArgs = False
  500.     delim = ""
  501.     For c = 1 To cmdLen
  502.         nextChar = Mid(cmdLine, c, 1)
  503.         
  504.         ' skip spaces, if we see a quote, start the arg on the next char
  505.         If (Not inArgs) Then
  506.             If (delim = "" And nextChar = """") Then
  507.                 delim = nextChar
  508.             ElseIf (delim = """" Or nextChar <> " ") Then
  509.                 If (delim = "") Then delim = " "
  510.                 inArgs = True
  511.                 anArg = ""
  512.             End If
  513.         End If
  514.         
  515.         If (inArgs) Then
  516.             If (nextChar = delim) Then
  517.                 ReDim Preserve cmdArgs(numArgs)
  518.                 cmdArgs(numArgs) = anArg
  519.                 numArgs = numArgs + 1
  520.                 anArg = ""
  521.                 delim = ""
  522.                 inArgs = False
  523.             Else
  524.                 anArg = anArg & nextChar
  525.             End If
  526.         End If
  527.     Next c
  528.     getCmdArgs = cmdArgs()
  529. End Function
  530.