home *** CD-ROM | disk | FTP | other *** search
/ PC World 1997 November / PCWorld_1997-11_cd.bin / software / programy / komix / DATA.Z / vscommand.tcl < prev    next >
Text File  |  1997-03-18  |  3KB  |  118 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)vscommand.tcl    /main/hindenburg/2
  6. #      Author:         <generated>
  7. #      Description:    VCM integration file
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)vscommand.tcl    /main/hindenburg/2   18 Mar 1997 Copyright 1997 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. # End user added include file section
  13.  
  14.  
  15. # This class knows how to deal with general VS commands.
  16. # It is an abstract base class for VS specific commands.
  17.  
  18. Class VSCommand : {GCObject} {
  19.     method destructor
  20.     constructor
  21.  
  22.     # A description of the command.
  23.     #
  24.     attribute description
  25.  
  26.     # The command string.
  27.     #
  28.     attribute command
  29.  
  30.     # Messages resulting from command execution.
  31.     #
  32.     attribute messages
  33.  
  34.     # Errors resulting from command execution.
  35.     #
  36.     attribute errors
  37.  
  38.     # Warnings resulting from command execution.
  39.     #
  40.     attribute warnings
  41.  
  42.     # A list of regexps. Strings matching one of these regexps will
  43.     # be filtered from the output.
  44.     #
  45.     attribute outputFilter
  46.  
  47.     # All command output.
  48.     #
  49.     attribute output
  50.  
  51.     # Input that must be echoed to the command during execution.
  52.     #
  53.     attribute input
  54. }
  55.  
  56. method VSCommand::destructor {this} {
  57.     # Start destructor user section
  58.     # End destructor user section
  59. }
  60.  
  61. constructor VSCommand {class this command description} {
  62.     set this [GCObject::constructor $class $this]
  63.     $this description $description
  64.     $this command $command
  65.     $this errors ""
  66.     $this output ""
  67.     $this warnings ""
  68.     $this outputFilter ""
  69.     $this messages ""
  70.     $this input ""
  71.     return $this
  72. }
  73.  
  74.  
  75. # Searches the PATH envionment variable for a path
  76. # with 'key' as component. Returns this path if 'program'
  77. # is in the directory it specifies.
  78. # Returns the empty string in all other cases.
  79. #
  80. proc VSCommand::findPath {key program} {
  81.     if [catch { set envPath $env(PATH) }] {
  82.         wmtkerror "environment variable PATH not found"
  83.         return
  84.     }
  85.  
  86.     # platform specifics
  87.     if $win95 {
  88.         set pathSep "\\"
  89.         set envPathSep ";"
  90.     set program "$program.exe"
  91.     } else {
  92.         set pathSep "/"
  93.         set envPathSep ":"
  94.     }
  95.  
  96.     foreach pathSpec [split $envPath $envPathSep] {
  97.         set dirList [split $pathSpec $pathSep]
  98.         set index [lsearch -exact $dirList $key]
  99.         if { $index == -1 } {
  100.             set index [lsearch -exact $dirList [string toupper $key]]
  101.         }
  102.         if { $index != -1 } {
  103.         # found it.
  104.         # if the program is actually there return the path
  105.         # make sure path name has forward slashes only.
  106.         lappend dirList $program
  107.         set fullName [join $dirList "/"]
  108.         if [file exists $fullName] {
  109.         return $fullName
  110.         }
  111.         }
  112.     }
  113.     
  114. }
  115.  
  116. # Do not delete this line -- regeneration end marker
  117.  
  118.