home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 May / W2KPRK.iso / netmgmt.cab / forms.vbs < prev    next >
Text File  |  1999-11-04  |  15KB  |  670 lines

  1. '----------------------------------------------------------------------
  2. '
  3. ' Copyright (c) Microsoft Corporation 1998-1999
  4. ' All Rights Reserved
  5. '
  6. ' forms.vbs - form script for Windows 2000
  7. '
  8. ' Usage:
  9. ' forms [-vdla?] [-c server]
  10. '
  11. ' Examples:
  12. ' forms -a -n NewForm -u inches -h 8.5 -w 11 -t 0 -e 0 -b 7 -r 8
  13. ' forms -d -n NewForm
  14. ' forms -l -c \\server
  15. ' forms -l -v -c \\server
  16. '
  17. '----------------------------------------------------------------------
  18.  
  19. option explicit
  20.  
  21. '
  22. ' Debugging trace flags, to enable debug output trace message
  23. ' change gDebugFlag to true.
  24. '
  25. const kDebugTrace = 1
  26. const kDebugError = 2
  27. dim gDebugFlag
  28.  
  29. gDebugFlag = false
  30.  
  31. '
  32. ' Messages to be displayed if the scripting host is not cscript
  33. '                            
  34. const kMessage1 = "Please run this script using CScript."  
  35. const kMessage2 = "This can be achieved by"
  36. const kMessage3 = "1. Using ""CScript script.vbs arguments"" or" 
  37. const kMessage4 = "2. Changing the default Windows Scripting Host to CScript"
  38. const kMessage5 = "   using ""CScript //H:CScript //S"" and running the script "
  39. const kMessage6 = "   ""script.vbs arguments""."
  40.  
  41. '
  42. ' Operation action values.
  43. '
  44. const kActionUnknown    = 0
  45. const kActionAdd        = 1
  46. const kActionDelete     = 2
  47. const kActionList       = 3
  48.  
  49. '
  50. ' Constants for units
  51. '
  52. const kInches           = 0
  53. const kCentimeters      = 1
  54.  
  55. const kErrorSuccess     = 0
  56. const kErrorFailure     =1
  57.  
  58. main
  59.  
  60. '
  61. ' Main execution starts here
  62. '
  63. sub main
  64.  
  65.     dim iAction
  66.     dim iRetval
  67.     dim strServer
  68.     dim strForm
  69.     dim bVerbose
  70.     dim iUnits
  71.     dim iHeight
  72.     dim iWidth
  73.     dim iTop
  74.     dim iLeft
  75.     dim iBottom
  76.     dim iRight
  77.     
  78.     '
  79.     ' Abort if the host is not cscript
  80.     '
  81.     if not IsHostCscript() then
  82.    
  83.         call wscript.echo(kMessage1 & vbCRLF & kMessage2 & vbCRLF & _
  84.                           kMessage3 & vbCRLF & kMessage4 & vbCRLF & _
  85.                           kMessage5 & vbCRLF & kMessage6 & vbCRLF)
  86.         
  87.         wscript.quit
  88.    
  89.     end if
  90.  
  91.     '
  92.     ' Inches is the default for adding or listing forms
  93.     '
  94.     iUnits = kInches
  95.  
  96.     iRetval = ParseCommandLine(iAction, strServer, strForm, iUnits, iHeight, _
  97.                                iWidth,  iTop, iLeft, iBottom, iRight, bVerbose)
  98.  
  99.     if iRetval = kErrorSuccess then
  100.  
  101.         select case iAction
  102.  
  103.             case kActionAdd
  104.                 iRetval = AddForm(strServer, strForm, iUnits, iHeight, iWidth, _
  105.                                   iTop, iLeft, iBottom, iRight)
  106.  
  107.             case kActionDelete
  108.                 iRetval = DeleteForm(strServer, strForm)
  109.  
  110.             case kActionList
  111.                 iRetval = ListForms(strServer, iUnits, bVerbose)
  112.  
  113.             case else
  114.                 Usage(true)
  115.  
  116.         end select
  117.  
  118.     end if
  119.  
  120. end sub
  121.  
  122. '
  123. ' Add a Form
  124. '
  125. function AddForm(strServer, strForm, iUnits, iHeight, iWidth, iTop, iLeft, iBottom, iRight)
  126.  
  127.     on error resume next
  128.  
  129.     DebugPrint kDebugTrace, "In AddForm"
  130.     DebugPrint kDebugTrace, "Server Name " & strServer
  131.     DebugPrint kDebugTrace, "Form Name   " & strForm
  132.  
  133.     dim oMaster
  134.     dim oForm
  135.     dim iRetval
  136.  
  137.     set oMaster = CreateObject("PrintMaster.PrintMaster.1")
  138.  
  139.     set oForm = CreateForm(strForm, iUnits, iHeight, iWidth, iTop, iLeft, iBottom, iRight)
  140.  
  141.     oForm.ServerName = strServer
  142.  
  143.     oMaster.FormAdd oForm
  144.  
  145.     if Err.Number = kErrorSuccess then
  146.  
  147.         wscript.echo "Form " & strForm & " was added successfully."
  148.  
  149.         iRetval = kErrorSuccess
  150.  
  151.     else
  152.  
  153.         wscript.echo "Unable to add form " & strForm & ", error code: 0x" & _
  154.                       Hex(Err.Number) & ". " & Err.Description
  155.  
  156.         iRetval = kErrorFailure
  157.  
  158.     end if
  159.  
  160.     AddForm = iRetval
  161.  
  162. end function
  163.  
  164. '
  165. ' Delete a Form
  166. '
  167. function DeleteForm(strServer, strForm)
  168.  
  169.     on error resume next
  170.  
  171.     DebugPrint kDebugTrace, "In DeleteForm"
  172.     DebugPrint kDebugTrace, "Server Name " & strServer
  173.     DebugPrint kDebugTrace, "Form Name   " & strForm
  174.  
  175.     dim oMaster
  176.     dim oForm
  177.     dim iRetval
  178.  
  179.     set oMaster = CreateObject("PrintMaster.PrintMaster.1")
  180.  
  181.     set oForm = CreateObject("Form.Form.1")
  182.  
  183.     oForm.Name = strForm
  184.  
  185.     oForm.ServerName = strServer
  186.  
  187.     oMaster.FormDel oForm
  188.  
  189.     if Err.Number = kErrorSuccess then
  190.  
  191.         wscript.echo "Form " & strForm & " deleted successfully."
  192.  
  193.         iRetval = kErrorSuccess
  194.  
  195.     else
  196.  
  197.         wscript.echo "Unable to delete form " & strForm & ", error code: 0x" _
  198.                      & Hex(Err.Number) & ". " & Err.Description
  199.  
  200.         iRetval = kErrorFailure
  201.  
  202.     end if
  203.  
  204.     DeleteForm = iRetval
  205.  
  206. end function
  207.  
  208. '
  209. ' List all Forms
  210. '
  211. function ListForms(strServer, iUnits, bVerbose)
  212.  
  213.     on error resume next
  214.  
  215.     DebugPrint kDebugTrace, "In ListForms"
  216.     DebugPrint kDebugTrace, "Server Name " & strServer
  217.  
  218.     dim iResult
  219.     dim oMaster
  220.     dim oForm
  221.     dim iRetval
  222.  
  223.     set oMaster = CreateObject("PrintMaster.PrintMaster.1")
  224.  
  225.     for each oForm in oMaster.Forms(strServer)
  226.  
  227.         iRetval = DisplayFormInformation(oForm, iUnits, bVerbose)
  228.  
  229.     next
  230.  
  231.     iResult = kErrorSuccess
  232.  
  233.     ListForms = iResult
  234.  
  235. end function
  236.  
  237. '
  238. ' Disply a form's information.
  239. '
  240. function DisplayFormInformation(oForm, iUnits, bVerbose)
  241.  
  242.     on error resume next
  243.  
  244.     dim iHeight
  245.     dim iWidth
  246.     dim iTop
  247.     dim iLeft
  248.     dim iBottom
  249.     dim iRight
  250.     dim strName
  251.     dim strFlags
  252.     dim strPad
  253.     dim iRetval
  254.  
  255.     '
  256.     ' Get the form name
  257.     '
  258.     strName = oForm.Name
  259.  
  260.     '
  261.     ' Convert the form flags to human readable
  262.     '
  263.     strFlags = ConvertFormFlagsToString(oForm.Flags)
  264.  
  265.     '
  266.     ' Get the form's height and width
  267.     '
  268.     oForm.GetSize iHeight, iWidth
  269.  
  270.     '
  271.     ' Get the form's imageable area expressed as coordinate pairs
  272.     '
  273.     oForm.GetImageableArea iLeft, iTop, iRight, iBottom
  274.  
  275.     '
  276.     ' Convert the form size to the specified units.
  277.     '
  278.     iHeight = Convert(iUnits, false, iHeight)
  279.     iWidth  = Convert(iUnits, false, iWidth)
  280.     iTop    = Convert(iUnits, false, iTop)
  281.     iLeft   = Convert(iUnits, false, iLeft)
  282.     iBottom = Convert(iUnits, false, iBottom)
  283.     iRight  = Convert(iUnits, false, iRight)
  284.  
  285.     strPad = String(31 - Len(strName), " ")
  286.  
  287.     if bVerbose = true then
  288.  
  289.         wscript.echo "Name: " & strName & strPad & "Type: " & strFlags & " Size: " & iWidth _
  290.                      & " x " & iHeight & " Imageable area: (" & iTop & "," & iLeft & ")(" & _
  291.                      iBottom & "," & iRight & ")"
  292.  
  293.     else
  294.  
  295.         wscript.echo "Name: " & strName & strPad & "Size: " & iWidth & " x " & iHeight
  296.  
  297.     end if
  298.  
  299.     '
  300.     ' Always return success.
  301.     '
  302.     DisplayFormInformation = kErrorSuccess
  303.  
  304. end function
  305.  
  306. '
  307. ' Create a form object that can be used to call FormAdd
  308. '
  309. function CreateForm(strForm, iUnits, iHeight, iWidth, iTop, iLeft, iBottom, iRight)
  310.  
  311.     on error resume next
  312.  
  313.     DebugPrint kDebugTrace, "In CreateForm"
  314.     DebugPrint kDebugTrace, "iUnits      " & iUnits
  315.     DebugPrint kDebugTrace, "iHeight     " & iHeight
  316.     DebugPrint kDebugTrace, "iWidth      " & iWidth
  317.     DebugPrint kDebugTrace, "iTop        " & iTop
  318.     DebugPrint kDebugTrace, "iLeft       " & iLeft
  319.     DebugPrint kDebugTrace, "iBottom     " & iBottom
  320.     DebugPrint kDebugTrace, "iRight      " & iRight
  321.  
  322.     dim oForm
  323.     dim temp1
  324.     dim temp2
  325.  
  326.     '
  327.     ' Validate the coordinates
  328.     '
  329.     if iLeft > iWidth or iRight > iWidth or iLeft > iRight or _
  330.        iTop > iHeight or iBottom > iHeight or iTop > iBottom then
  331.  
  332.         wscript.echo "Error: Incorrect coordinates. Cannot create form"
  333.  
  334.         wscript.quit
  335.  
  336.     else
  337.  
  338.     set oForm = CreateObject("Form.Form.1")
  339.  
  340.     oForm.Name = strForm
  341.  
  342.     oForm.SetSize Convert(iUnits, true, iHeight), Convert(iUnits, true, iWidth)
  343.  
  344.     oForm.SetImageableArea Convert(iUnits, true, iTop),    Convert(iUnits, true, iLeft), _
  345.                            Convert(iUnits, true, iBottom), Convert(iUnits, true, iRight)
  346.  
  347.     set CreateForm = oForm
  348.  
  349.     end if
  350.  
  351. end function
  352.  
  353. '
  354. ' Convert the form flag to a human readable string.
  355. '
  356. function ConvertFormFlagsToString(Flags)
  357.  
  358.     on error resume next
  359.  
  360.     select case Flags
  361.  
  362.     case 0
  363.         ConvertFormFlagsToString = "User"
  364.  
  365.     case 1
  366.         ConvertFormFlagsToString = "Built-in"
  367.  
  368.     case 2
  369.         ConvertFormFlagsToString = "Printer"
  370.  
  371.     case else
  372.         ConvertFormFlagsToString = "Unknown"
  373.  
  374.     end select
  375.  
  376. end function
  377.  
  378. '
  379. ' Convert the value to the specified units.
  380. '
  381. function Convert(iUnits, bSource, dValue)
  382.  
  383.     on error resume next
  384.  
  385.     '
  386.     ' If bSource is true the value is from the command
  387.     ' line and expressed either in inches or centimeters.
  388.     '
  389.     if bSource = true then
  390.  
  391.         select case iUnits
  392.  
  393.         case kInches
  394.             '
  395.             ' Convert from inches to thousands of millimeters
  396.             '
  397.             Convert = CLng(dValue * 100 * 254)
  398.  
  399.         case kCentimeters
  400.             '
  401.             ' Convert from centimeters to thousands of millimeters
  402.             '
  403.             Convert = CLng(dValue * 100 * 100)
  404.  
  405.         end select
  406.  
  407.     '
  408.     ' If bSource is false the value is from the spooler and it
  409.     ' is expressed in thousandths of millimeters.
  410.     '
  411.     else
  412.  
  413.         select case iUnits
  414.  
  415.         case kInches
  416.             '
  417.             ' Convert from thousands of millimeters to inches
  418.             '
  419.             Convert = Round(CDbl(dValue / 25400), 2)
  420.  
  421.         case kCentimeters
  422.             '
  423.             ' Convert from thousands of millimeters to centimeters
  424.             '
  425.             Convert = Round(CDbl(dValue / 10000), 2)
  426.  
  427.         end select
  428.  
  429.     end if
  430.  
  431. end function
  432.  
  433. '
  434. ' Validate the unit string command argument
  435. '
  436. function ValidateUnits(strUnits, iUnits)
  437.  
  438.     on error resume next
  439.  
  440.     DebugPrint kDebugTrace, "In ValidateUnits"
  441.  
  442.     ValidateUnits = true
  443.  
  444.     if strUnits <> "" then
  445.  
  446.         if lcase(strUnits) = "inches" then
  447.  
  448.             iUnits = kInches
  449.  
  450.         elseif lcase(strUnits) = "centimeters" then
  451.  
  452.             iUnits = kCentimeters
  453.  
  454.         else
  455.  
  456.             ValidateUnits = false
  457.  
  458.         end if
  459.  
  460.     end if
  461.  
  462. end function
  463.  
  464. '
  465. ' Debug display helper function
  466. '
  467. sub DebugPrint(uFlags, strString)
  468.  
  469.     if gDebugFlag = true then
  470.  
  471.         if uFlags = kDebugTrace then
  472.  
  473.             wscript.echo "Debug: " & strString
  474.  
  475.         end if
  476.  
  477.         if uFlags = kDebugError then
  478.  
  479.             if Err <> 0 then
  480.  
  481.                 wscript.echo "Debug: " & strString & " Failed with " & Hex(Err)
  482.  
  483.             end if
  484.  
  485.         end if
  486.  
  487.     end if
  488.  
  489. end sub
  490.  
  491. '
  492. ' Parse the command line into it's components
  493. '
  494. function ParseCommandLine(iAction, strServer, strForm, iUnits, iHeight, _
  495.                           iWidth, iTop, iLeft, iBottom, iRight, bVerbose)
  496.  
  497.     DebugPrint kDebugTrace, "In the ParseCommandLine"
  498.  
  499.     dim oArgs
  500.     dim strUnits
  501.     dim i
  502.  
  503.     iAction = kActionUnknown
  504.  
  505.     set oArgs = wscript.Arguments
  506.  
  507.     while i < oArgs.Count
  508.  
  509.         select case oArgs(i)
  510.  
  511.             case "-a"
  512.                 iAction = kActionAdd
  513.  
  514.             case "-d"
  515.                 iAction = kActionDelete
  516.  
  517.             case "-l"
  518.                 iAction = kActionList
  519.  
  520.             case "-c"
  521.                 i = i + 1
  522.                 strServer = oArgs(i)
  523.  
  524.             case "-v"
  525.                 bVerbose = true
  526.  
  527.             case "-n"
  528.                 i = i + 1
  529.                 strForm = oArgs(i)
  530.  
  531.             case "-h"
  532.                 i = i + 1
  533.                 iHeight = CDbl(oArgs(i))
  534.  
  535.             case "-w"
  536.                 i = i + 1
  537.                 iWidth = CDbl(oArgs(i))
  538.  
  539.             case "-t"
  540.                 i = i + 1
  541.                 iTop = CDbl(oArgs(i))
  542.  
  543.             case "-e"
  544.                 i = i + 1
  545.                 iLeft = CDbl(oArgs(i))
  546.  
  547.             case "-b"
  548.                 i = i + 1
  549.                 iBottom = CDbl(oArgs(i))
  550.  
  551.             case "-r"
  552.                 i = i + 1
  553.                 iRight = CDbl(oArgs(i))
  554.  
  555.             case "-u"
  556.                 i = i + 1
  557.                 strUnits = oArgs(i)
  558.  
  559.             case "-?"
  560.                 Usage(true)
  561.  
  562.             case else
  563.                 Usage(true)
  564.  
  565.         end select
  566.  
  567.         i = i + 1
  568.  
  569.     wend
  570.  
  571.     '
  572.     ' Check if the units specified are valid.
  573.     '
  574.     if ValidateUnits(strUnits, iUnits) = false then
  575.  
  576.         wscript.echo "Unsupported units"
  577.  
  578.         ParseCommandLine = kErrorFailure
  579.  
  580.     else
  581.  
  582.         ParseCommandLine = kErrorSuccess
  583.  
  584.     end if
  585.  
  586. end  function
  587.  
  588. '
  589. ' Display command usage.
  590. '
  591. sub Usage(bExit)
  592.  
  593.     wscript.echo "Usage: forms [-vadl?] [-c server] [-n form-name] [-u inches|centimeters]"
  594.     wscript.echo "             [-h height] [-w width] [-t top] [-e left] [-b bottom] [-r right]"
  595.     wscript.echo "Arguments:"
  596.     wscript.echo "-a     - add a form"
  597.     wscript.echo "-d     - delete a form"
  598.     wscript.echo "-l     - list all forms"
  599.     wscript.echo "-v     - used with list to display entire form details"
  600.     wscript.echo "-h     - specifies the height of the form"
  601.     wscript.echo "-w     - specifies the width of the form"
  602.     wscript.echo "-t     - specifies top coordinate of the imageable area"
  603.     wscript.echo "-e     - specifies left coordinate of the imageable area"
  604.     wscript.echo "-b     - specifies bottom coordinate of the imageable area"
  605.     wscript.echo "-r     - specifies right coordinate of the imageable area"
  606.     wscript.echo "-u     - specifies the units of the size arguments"
  607.     wscript.echo "-v     - verbose list forms full information"
  608.     wscript.echo ""
  609.     wscript.echo "Examples:"
  610.     wscript.echo "forms -l"
  611.     wscript.echo "forms -l -c \\server -u inches"
  612.     wscript.echo "forms -a -c \\server -n ""Large Paper"""
  613.     wscript.echo "forms -d -c \\server -n ""Tabloid"""
  614.     wscript.echo "forms -a -n NewForm -u inches -h 11 -w 8.5 -t 0 -e 0 -b 7 -r 8"
  615.  
  616.     if bExit then
  617.         wscript.quit(1)
  618.     end if
  619.  
  620. end sub
  621.  
  622. '
  623. ' Determines which program is used to run this script. 
  624. ' Returns true if the script host is cscript.exe
  625. '
  626. function IsHostCscript()
  627.  
  628.     on error resume next
  629.     
  630.     dim strFullName 
  631.     dim strCommand 
  632.     dim i, j 
  633.     dim bReturn
  634.     
  635.     bReturn = false
  636.     
  637.     strFullName = WScript.FullName
  638.     
  639.     i = InStr(1, strFullName, ".exe", 1)
  640.     
  641.     if i <> 0 then
  642.         
  643.         j = InStrRev(strFullName, "\", i, 1)
  644.         
  645.         if j <> 0 then
  646.             
  647.             strCommand = Mid(strFullName, j+1, i-j-1)
  648.             
  649.             if LCase(strCommand) = "cscript" then
  650.             
  651.                 bReturn = true  
  652.             
  653.             end if    
  654.                 
  655.         end if
  656.         
  657.     end if
  658.     
  659.     if Err <> 0 then
  660.     
  661.         call wscript.echo("Error 0x" & hex(Err.Number) & " occurred. " & Err.Description _
  662.                           & ". " & vbCRLF & "The scripting host could not be determined.")       
  663.         
  664.     end if
  665.     
  666.     IsHostCscript = bReturn
  667.  
  668. end function
  669.  
  670.