home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 May / W2KPRK.iso / ras.cab / tapedrive.vbs < prev    next >
Text File  |  1999-11-04  |  23KB  |  679 lines

  1. '********************************************************************
  2. '*
  3. '* File:           TapeDrive.vbs
  4. '* Created:        March 1999
  5. '* Version:        1.0
  6. '*
  7. '*  Main Function:  Outputs Information on Disk Drives.
  8. '*
  9. '*  TapeDrive.vbs      [/S <server>] [/U <username>] [/W <password>] 
  10. '*                     [/O <outputfile>]
  11. '*
  12. '* Copyright (C) 1999 Microsoft Corporation
  13. '*
  14. '********************************************************************
  15.  
  16. OPTION EXPLICIT
  17.  
  18.     'Define constants
  19.     CONST CONST_ERROR                   = 0
  20.     CONST CONST_WSCRIPT                 = 1
  21.     CONST CONST_CSCRIPT                 = 2
  22.     CONST CONST_SHOW_USAGE              = 3
  23.     CONST CONST_PROCEED                 = 4
  24.  
  25.     'Declare variables
  26.     Dim intOpMode, i
  27.     Dim strServer, strUserName, strPassword, strOutputFile
  28.  
  29.     'Make sure the host is csript, if not then abort
  30.     VerifyHostIsCscript()
  31.  
  32.     'Parse the command line
  33.     intOpMode = intParseCmdLine(strServer     ,  _
  34.                                 strUserName   ,  _
  35.                                 strPassword   ,  _
  36.                                 strOutputFile    )
  37.  
  38.  
  39.     Select Case intOpMode
  40.  
  41.         Case CONST_SHOW_USAGE
  42.             Call ShowUsage()
  43.  
  44.         Case CONST_PROCEED                 
  45.             Call GetTapeDrive(strServer     , _
  46.                               strOutputFile , _
  47.                               strUserName   , _
  48.                               strPassword     )
  49.  
  50.         Case CONST_ERROR
  51.             'Do Nothing
  52.  
  53.         Case Else                    'Default -- should never happen
  54.             Call Wscript.Echo("Error occurred in passing parameters.")
  55.  
  56.     End Select
  57.  
  58. '********************************************************************
  59. '* End of Script
  60. '********************************************************************
  61.  
  62. '********************************************************************
  63. '*
  64. '* Sub TapeDrive()
  65. '*
  66. '* Purpose: Outputs Information on Disk Drives.
  67. '*
  68. '* Input:   strServer           a machine name
  69. '*          strOutputFile       an output file name
  70. '*          strUserName         the current user's name
  71. '*          strPassword         the current user's password
  72. '*
  73. '* Output:  Results are either printed on screen or saved in strOutputFile.
  74. '*
  75. '********************************************************************
  76. Private Sub GetTapeDrive(strServer, strOutputFile, strUserName, strPassword)
  77.  
  78.     'ON ERROR RESUME NEXT
  79.  
  80.     Dim objFileSystem, objOutputFile, objService, objSet, obj
  81.     Dim strWBEMClass, n
  82.  
  83.     'Open a text file for output if the file is requested
  84.     If Not IsEmpty(strOutputFile) Then
  85.         If (NOT blnOpenFile(strOutputFile, objOutputFile)) Then
  86.             Call Wscript.Echo ("Could not open an output file.")
  87.             Exit Sub
  88.         End If
  89.     End If
  90.  
  91.     'Establish a connection with the server.
  92.     If blnConnect("root\cimv2" , _
  93.                    strUserName , _
  94.                    strPassword , _
  95.                    strServer   , _
  96.                    objService  ) Then
  97.         Call Wscript.Echo("")
  98.         Call Wscript.Echo("Please check the server name, " _
  99.                         & "credentials and WBEM Core.")
  100.         Exit Sub
  101.     End If
  102.  
  103.     strWBEMClass = "Win32_TapeDrive"
  104.       
  105.     'Get the first instance
  106.     Set objSet = objService.InstancesOf(strWBEMClass)
  107.     If blnErrorOccurred ("obtaining the "& strWBEMClass) Then Exit Sub
  108.  
  109.     n = objSet.Count
  110.     Call WriteLine("There are " & n & " tape drive(s) available.", _
  111.       objOutputFile)
  112.     Call WriteLine("", objOutputFile)
  113.     If n <> 0 then
  114.         For Each obj In objSet
  115.             Call WriteLine("Name                  : " & obj.Name, _
  116.               objOutputFile)
  117.             Call WriteLine("Availability          : " & obj.Availability, _
  118.               objOutputFile)
  119.             Call WriteLine("Status                : " & obj.Status, _
  120.               objOutputFile)
  121.             Call WriteLine("Features Low          : " & obj.FeaturesLow, _
  122.               objOutputFile)
  123.             Call WriteLine("Features High         : " & obj.FeaturesHigh, _
  124.               objOutputFile)
  125.             Call WriteLine("Min Block Size        : " & _
  126.               strInsertCommas(obj.MinBlockSize), objOutputFile)
  127.             Call WriteLine("Max Block Size        : " & _
  128.               strInsertCommas(obj.MaxBlockSize), objOutputFile)
  129.             Call WriteLine("Default Block Size    : " & _
  130.               strInsertCommas(obj.DefaultBlockSize), objOutputFile)
  131.             Call WriteLine("Max Partition Count   : " & _
  132.               obj.MaxPartitionCount, objOutputFile)
  133.             Call WriteLine("EOT Warning Zone Size : " & _
  134.               obj.EOTWarningZoneSize, objOutputFile)
  135.             Call WriteLine("Padding               : " & _
  136.               obj.Padding, objOutputFile)
  137.             Call WriteLine("Report Set Marks      : " & _
  138.               obj.ReportSetMarks, objOutputFile)
  139.             Call WriteLine("Compression           : " & _
  140.               obj.Compression, objOutputFile)
  141.             Call WriteLine("ECC                   : " & _
  142.               obj.ECC, objOutputFile)
  143.             Call WriteLine("", objOutputFile)
  144.         Next
  145.     End If
  146.  
  147.     If IsObject(objOutputFile) Then
  148.         objOutputFile.Close
  149.         Call Wscript.Echo ("Results are saved in file " & strOutputFile & ".")
  150.     End If
  151.  
  152. End Sub
  153.  
  154. '********************************************************************
  155. '*
  156. '* Function intParseCmdLine()
  157. '*
  158. '* Purpose: Parses the command line.
  159. '* Input:   
  160. '*
  161. '* Output:  strServer         a remote server ("" = local server")
  162. '*          strUserName       the current user's name
  163. '*          strPassword       the current user's password
  164. '*          strOutputFile     an output file name
  165. '*
  166. '********************************************************************
  167. Private Function intParseCmdLine( ByRef strServer,        _
  168.                                   ByRef strUserName,      _
  169.                                   ByRef strPassword,      _
  170.                                   ByRef strOutputFile     )
  171.  
  172.  
  173.     ON ERROR RESUME NEXT
  174.  
  175.     Dim strFlag
  176.     Dim intState, intArgIter
  177.     Dim objFileSystem
  178.  
  179.     If Wscript.Arguments.Count > 0 Then
  180.         strFlag = Wscript.arguments.Item(0)
  181.     End If
  182.  
  183.     If IsEmpty(strFlag) Then                'No arguments have been received
  184.         intParseCmdLine = CONST_PROCEED
  185.         Exit Function
  186.     End If
  187.  
  188.     'Check if the user is asking for help or is just confused
  189.     If (strFlag="help") OR (strFlag="/h") OR (strFlag="\h") OR (strFlag="-h") _
  190.         OR (strFlag = "\?") OR (strFlag = "/?") OR (strFlag = "?") _ 
  191.         OR (strFlag="h") Then
  192.         intParseCmdLine = CONST_SHOW_USAGE
  193.         Exit Function
  194.     End If
  195.  
  196.     'Retrieve the command line and set appropriate variables
  197.      intArgIter = 0
  198.     Do While intArgIter <= Wscript.arguments.Count - 1
  199.         Select Case Left(LCase(Wscript.arguments.Item(intArgIter)),2)
  200.   
  201.             Case "/s"
  202.                 If Not blnGetArg("Server", strServer, intArgIter) Then
  203.                     intParseCmdLine = CONST_ERROR
  204.                     Exit Function
  205.                 End If
  206.                 intArgIter = intArgIter + 1
  207.  
  208.             Case "/o"
  209.                 If Not blnGetArg("Output File", strOutputFile, intArgIter) Then
  210.                     intParseCmdLine = CONST_ERROR
  211.                     Exit Function
  212.                 End If
  213.                 intArgIter = intArgIter + 1
  214.  
  215.             Case "/u"
  216.                 If Not blnGetArg("User Name", strUserName, intArgIter) Then
  217.                     intParseCmdLine = CONST_ERROR
  218.                     Exit Function
  219.                 End If
  220.                 intArgIter = intArgIter + 1
  221.  
  222.             Case "/w"
  223.                 If Not blnGetArg("User Password", strPassword, intArgIter) Then
  224.                     intParseCmdLine = CONST_ERROR
  225.                     Exit Function
  226.                 End If
  227.                 intArgIter = intArgIter + 1
  228.  
  229.             Case Else 'We shouldn't get here
  230.                 Call Wscript.Echo("Invalid or misplaced parameter: " _
  231.                    & Wscript.arguments.Item(intArgIter) & vbCRLF _
  232.                    & "Please check the input and try again," & vbCRLF _
  233.                    & "or invoke with '/?' for help with the syntax.")
  234.                 Wscript.Quit
  235.  
  236.         End Select
  237.  
  238.     Loop '** intArgIter <= Wscript.arguments.Count - 1
  239.  
  240.     If IsEmpty(intParseCmdLine) Then _
  241.         intParseCmdLine = CONST_PROCEED
  242.  
  243. End Function
  244.  
  245. '********************************************************************
  246. '*
  247. '* Sub ShowUsage()
  248. '*
  249. '* Purpose: Shows the correct usage to the user.
  250. '*
  251. '* Input:   None
  252. '*
  253. '* Output:  Help messages are displayed on screen.
  254. '*
  255. '********************************************************************
  256. Private Sub ShowUsage()
  257.  
  258.     Wscript.Echo ""
  259.     Wscript.Echo "Outputs Information on Disk Drives."
  260.     Wscript.Echo ""
  261.     Wscript.Echo "SYNTAX:"
  262.     Wscript.Echo "  TapeDrive.vbs [/S <server>] [/U <username>]" _
  263.                 &" [/W <password>]"
  264.     Wscript.Echo "  [/O <outputfile>]"
  265.     Wscript.Echo ""
  266.     Wscript.Echo "PARAMETER SPECIFIERS:"
  267.     Wscript.Echo "   server        A machine name."
  268.     Wscript.Echo "   username      The current user's name."
  269.     Wscript.Echo "   password      Password of the current user."
  270.     Wscript.Echo "   outputfile    The output file name."
  271.     Wscript.Echo ""
  272.     Wscript.Echo "EXAMPLE:"
  273.     Wscript.Echo "1. cscript TapeDrive.vbs"
  274.     Wscript.Echo "   Gets tape drive information for the current machine."
  275.     Wscript.Echo "2. cscript TapeDrive.vbs /S MyMachine2"
  276.     Wscript.Echo "   Gets tape drive information for the machine MyMachine2."
  277.  
  278. End Sub
  279.  
  280. '********************************************************************
  281. '* General Routines
  282. '********************************************************************
  283.  
  284. '********************************************************************
  285. '*
  286. '* Function strInsertCommas()
  287. '*
  288. '* Purpose: Puts commas into an interger to make it more readable.
  289. '*
  290. '* Input:   intValue    an integer
  291. '*
  292. '* Output:  strInsertCommas  A String
  293. '*
  294. '********************************************************************
  295. Function strInsertCommas(intValue)
  296.  
  297.     Dim IntPlace
  298.  
  299.     strInsertCommas = ""
  300.     intPlace = 0 
  301.     For I = len(intValue) to 1 Step - 1
  302.         strInsertCommas = Mid(intValue,I,1) & strInsertCommas
  303.         intPlace = intPlace + 1
  304.         If intPlace = 3 then
  305.             strInsertCommas = "," & strInsertCommas
  306.             intPlace = 0
  307.         End If
  308.     Next
  309.     If Left(strInsertCommas,1) = "," then
  310.         strInsertCommas = Right(strInsertCommas, len(strInsertCommas) -1)
  311.     End If
  312.  
  313. End Function
  314.  
  315. '********************************************************************
  316. '*
  317. '* Function strPackString()
  318. '*
  319. '* Purpose: Attaches spaces to a string to increase the length to intWidth.
  320. '*
  321. '* Input:   strString   a string
  322. '*          intWidth    the intended length of the string
  323. '*          blnAfter    Should spaces be added after the string?
  324. '*          blnTruncate specifies whether to truncate the string or not if
  325. '*                      the string length is longer than intWidth
  326. '*
  327. '* Output:  strPackString is returned as the packed string.
  328. '*
  329. '********************************************************************
  330. Private Function strPackString( ByVal strString, _
  331.                                 ByVal intWidth,  _
  332.                                 ByVal blnAfter,  _
  333.                                 ByVal blnTruncate)
  334.  
  335.     ON ERROR RESUME NEXT
  336.  
  337.     intWidth      = CInt(intWidth)
  338.     blnAfter      = CBool(blnAfter)
  339.     blnTruncate   = CBool(blnTruncate)
  340.  
  341.     If Err.Number Then
  342.         Call Wscript.Echo ("Argument type is incorrect!")
  343.         Err.Clear
  344.         Wscript.Quit
  345.     End If
  346.  
  347.     If IsNull(strString) Then
  348.         strPackString = "null" & Space(intWidth-4)
  349.         Exit Function
  350.     End If
  351.  
  352.     strString = CStr(strString)
  353.     If Err.Number Then
  354.         Call Wscript.Echo ("Argument type is incorrect!")
  355.         Err.Clear
  356.         Wscript.Quit
  357.     End If
  358.  
  359.     If intWidth > Len(strString) Then
  360.         If blnAfter Then
  361.             strPackString = strString & Space(intWidth-Len(strString))
  362.         Else
  363.             strPackString = Space(intWidth-Len(strString)) & strString & " "
  364.         End If
  365.     Else
  366.         If blnTruncate Then
  367.             strPackString = Left(strString, intWidth-1) & " "
  368.         Else
  369.             strPackString = strString & " "
  370.         End If
  371.     End If
  372.  
  373. End Function
  374.  
  375. '********************************************************************
  376. '* 
  377. '*  Function blnGetArg()
  378. '*
  379. '*  Purpose: Helper to intParseCmdLine()
  380. '* 
  381. '*  Usage:
  382. '*
  383. '*     Case "/s" 
  384. '*       blnGetArg ("server name", strServer, intArgIter)
  385. '*
  386. '********************************************************************
  387. Private Function blnGetArg ( ByVal StrVarName,   _
  388.                              ByRef strVar,       _
  389.                              ByRef intArgIter) 
  390.  
  391.     blnGetArg = False 'failure, changed to True upon successful completion
  392.  
  393.     If Len(Wscript.Arguments(intArgIter)) > 2 then
  394.         If Mid(Wscript.Arguments(intArgIter),3,1) = ":" then
  395.             If Len(Wscript.Arguments(intArgIter)) > 3 then
  396.                 strVar = Right(Wscript.Arguments(intArgIter), _
  397.                          Len(Wscript.Arguments(intArgIter)) - 3)
  398.                 blnGetArg = True
  399.                 Exit Function
  400.             Else
  401.                 intArgIter = intArgIter + 1
  402.                 If intArgIter > (Wscript.Arguments.Count - 1) Then
  403.                     Call Wscript.Echo( "Invalid " & StrVarName & ".")
  404.                     Call Wscript.Echo( "Please check the input and try again.")
  405.                     Exit Function
  406.                 End If
  407.  
  408.                 strVar = Wscript.Arguments.Item(intArgIter)
  409.                 If Err.Number Then
  410.                     Call Wscript.Echo( "Invalid " & StrVarName & ".")
  411.                     Call Wscript.Echo( "Please check the input and try again.")
  412.                     Exit Function
  413.                 End If
  414.  
  415.                 If InStr(strVar, "/") Then
  416.                     Call Wscript.Echo( "Invalid " & StrVarName)
  417.                     Call Wscript.Echo( "Please check the input and try again.")
  418.                     Exit Function
  419.                 End If
  420.  
  421.                 blnGetArg = True 'success
  422.             End If
  423.         Else
  424.             strVar = Right(Wscript.Arguments(intArgIter), _
  425.                      Len(Wscript.Arguments(intArgIter)) - 2)
  426.             blnGetArg = True 'success
  427.             Exit Function
  428.         End If
  429.     Else
  430.         intArgIter = intArgIter + 1
  431.         If intArgIter > (Wscript.Arguments.Count - 1) Then
  432.             Call Wscript.Echo( "Invalid " & StrVarName & ".")
  433.             Call Wscript.Echo( "Please check the input and try again.")
  434.             Exit Function
  435.         End If
  436.  
  437.         strVar = Wscript.Arguments.Item(intArgIter)
  438.         If Err.Number Then
  439.             Call Wscript.Echo( "Invalid " & StrVarName & ".")
  440.             Call Wscript.Echo( "Please check the input and try again.")
  441.             Exit Function
  442.         End If
  443.  
  444.         If InStr(strVar, "/") Then
  445.             Call Wscript.Echo( "Invalid " & StrVarName)
  446.             Call Wscript.Echo( "Please check the input and try again.")
  447.             Exit Function
  448.         End If
  449.         blnGetArg = True 'success
  450.     End If
  451. End Function
  452.  
  453. '********************************************************************
  454. '*
  455. '* Function blnConnect()
  456. '*
  457. '* Purpose: Connects to machine strServer.
  458. '*
  459. '* Input:   strServer       a machine name
  460. '*          strNameSpace    a namespace
  461. '*          strUserName     name of the current user
  462. '*          strPassword     password of the current user
  463. '*
  464. '* Output:  objService is returned  as a service object.
  465. '*          strServer is set to local host if left unspecified
  466. '*
  467. '********************************************************************
  468. Private Function blnConnect(ByVal strNameSpace, _
  469.                             ByVal strUserName,  _
  470.                             ByVal strPassword,  _
  471.                             ByRef strServer,    _
  472.                             ByRef objService)
  473.  
  474.     ON ERROR RESUME NEXT
  475.  
  476.     Dim objLocator, objWshNet
  477.  
  478.     blnConnect = False     'There is no error.
  479.  
  480.     'Create Locator object to connect to remote CIM object manager
  481.     Set objLocator = CreateObject("WbemScripting.SWbemLocator")
  482.     If Err.Number then
  483.         Call Wscript.Echo( "Error 0x" & CStr(Hex(Err.Number)) & _
  484.                            " occurred in creating a locator object." )
  485.         If Err.Description <> "" Then
  486.             Call Wscript.Echo( "Error description: " & Err.Description & "." )
  487.         End If
  488.         Err.Clear
  489.         blnConnect = True     'An error occurred
  490.         Exit Function
  491.     End If
  492.  
  493.     'Connect to the namespace which is either local or remote
  494.     Set objService = objLocator.ConnectServer (strServer, strNameSpace, _
  495.        strUserName, strPassword)
  496.     ObjService.Security_.impersonationlevel = 3
  497.     If Err.Number then
  498.         Call Wscript.Echo( "Error 0x" & CStr(Hex(Err.Number)) & _
  499.                            " occurred in connecting to server " _
  500.            & strServer & ".")
  501.         If Err.Description <> "" Then
  502.             Call Wscript.Echo( "Error description: " & Err.Description & "." )
  503.         End If
  504.         Err.Clear
  505.         blnConnect = True     'An error occurred
  506.     End If
  507.  
  508.     'Get the current server's name if left unspecified
  509.     If IsEmpty(strServer) Then
  510.         Set objWshNet = CreateObject("Wscript.Network")
  511.     strServer     = objWshNet.ComputerName
  512.     End If
  513.  
  514. End Function
  515.  
  516. '********************************************************************
  517. '*
  518. '* Sub      VerifyHostIsCscript()
  519. '*
  520. '* Purpose: Determines which program is used to run this script.
  521. '*
  522. '* Input:   None
  523. '*
  524. '* Output:  If host is not cscript, then an error message is printed 
  525. '*          and the script is aborted.
  526. '*
  527. '********************************************************************
  528. Sub VerifyHostIsCscript()
  529.  
  530.     ON ERROR RESUME NEXT
  531.  
  532.     Dim strFullName, strCommand, i, j, intStatus
  533.  
  534.     strFullName = WScript.FullName
  535.  
  536.     If Err.Number then
  537.         Call Wscript.Echo( "Error 0x" & CStr(Hex(Err.Number)) & " occurred." )
  538.         If Err.Description <> "" Then
  539.             Call Wscript.Echo( "Error description: " & Err.Description & "." )
  540.         End If
  541.         intStatus =  CONST_ERROR
  542.     End If
  543.  
  544.     i = InStr(1, strFullName, ".exe", 1)
  545.     If i = 0 Then
  546.         intStatus =  CONST_ERROR
  547.     Else
  548.         j = InStrRev(strFullName, "\", i, 1)
  549.         If j = 0 Then
  550.             intStatus =  CONST_ERROR
  551.         Else
  552.             strCommand = Mid(strFullName, j+1, i-j-1)
  553.             Select Case LCase(strCommand)
  554.                 Case "cscript"
  555.                     intStatus = CONST_CSCRIPT
  556.                 Case "wscript"
  557.                     intStatus = CONST_WSCRIPT
  558.                 Case Else       'should never happen
  559.                     Call Wscript.Echo( "An unexpected program was used to " _
  560.                                        & "run this script." )
  561.                     Call Wscript.Echo( "Only CScript.Exe or WScript.Exe can " _
  562.                                        & "be used to run this script." )
  563.                     intStatus = CONST_ERROR
  564.                 End Select
  565.         End If
  566.     End If
  567.  
  568.     If intStatus <> CONST_CSCRIPT Then
  569.         Call WScript.Echo( "Please run this script using CScript." & vbCRLF & _
  570.              "This can be achieved by" & vbCRLF & _
  571.              "1. Using ""CScript TapeDrive.vbs arguments"" for Windows 95/98 or" _
  572.              & vbCRLF & "2. Changing the default Windows Scripting Host " _
  573.              & "setting to CScript" & vbCRLF & "    using ""CScript " _
  574.              & "//H:CScript //S"" and running the script using" & vbCRLF & _
  575.              "    ""TapeDrive.vbs arguments"" for Windows NT/2000." )
  576.         WScript.Quit
  577.     End If
  578.  
  579. End Sub
  580.  
  581. '********************************************************************
  582. '*
  583. '* Sub WriteLine()
  584. '* Purpose: Writes a text line either to a file or on screen.
  585. '* Input:   strMessage  the string to print
  586. '*          objFile     an output file object
  587. '* Output:  strMessage is either displayed on screen or written to a file.
  588. '*
  589. '********************************************************************
  590. Sub WriteLine(ByVal strMessage, ByVal objFile)
  591.  
  592.     On Error Resume Next
  593.     If IsObject(objFile) then        'objFile should be a file object
  594.         objFile.WriteLine strMessage
  595.     Else
  596.         Call Wscript.Echo( strMessage )
  597.     End If
  598.  
  599. End Sub
  600.  
  601. '********************************************************************
  602. '* 
  603. '* Function blnErrorOccurred()
  604. '*
  605. '* Purpose: Reports error with a string saying what the error occurred in.
  606. '*
  607. '* Input:   strIn        string saying what the error occurred in.
  608. '*
  609. '* Output:  displayed on screen 
  610. '* 
  611. '********************************************************************
  612. Private Function blnErrorOccurred (ByVal strIn)
  613.  
  614.     If Err.Number Then
  615.         Call Wscript.Echo( "Error 0x" & CStr(Hex(Err.Number)) & ": " & strIn)
  616.         If Err.Description <> "" Then
  617.             Call Wscript.Echo( "Error description: " & Err.Description)
  618.         End If
  619.         Err.Clear
  620.         blnErrorOccurred = True
  621.     Else
  622.         blnErrorOccurred = False
  623.     End If
  624.  
  625. End Function
  626.  
  627. '********************************************************************
  628. '* 
  629. '* Function blnOpenFile
  630. '*
  631. '* Purpose: Opens a file.
  632. '*
  633. '* Input:   strFileName        A string with the name of the file.
  634. '*
  635. '* Output:  Sets objOpenFile to a FileSystemObject and setis it to 
  636. '*            Nothing upon Failure.
  637. '* 
  638. '********************************************************************
  639. Private Function blnOpenFile(ByVal strFileName, ByRef objOpenFile)
  640.  
  641.     ON ERROR RESUME NEXT
  642.  
  643.     Dim objFileSystem
  644.  
  645.     Set objFileSystem = Nothing
  646.  
  647.     If IsEmpty(strFileName) OR strFileName = "" Then
  648.         blnOpenFile = False
  649.         Set objOpenFile = Nothing
  650.         Exit Function
  651.     End If
  652.  
  653.     'Create a file object
  654.     Set objFileSystem = CreateObject("Scripting.FileSystemObject")
  655.     If blnErrorOccurred("Could not create filesystem object.") Then
  656.         blnOpenFile = False
  657.         Set objOpenFile = Nothing
  658.         Exit Function
  659.     End If
  660.  
  661.     'Open the file for output
  662.     Set objOpenFile = objFileSystem.OpenTextFile(strFileName, 8, True)
  663.     If blnErrorOccurred("Could not open") Then
  664.         blnOpenFile = False
  665.         Set objOpenFile = Nothing
  666.         Exit Function
  667.     End If
  668.     blnOpenFile = True
  669.  
  670. End Function
  671.  
  672. '********************************************************************
  673. '*                                                                  *
  674. '*                           End of File                            *
  675. '*                                                                  *
  676. '********************************************************************
  677.  
  678.  
  679.