home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / vscommand.tcl < prev    next >
Text File  |  1997-10-14  |  3KB  |  133 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)vscommand.tcl    /main/titanic/4
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)vscommand.tcl    /main/titanic/4   14 Oct 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.     method addTempFile
  22.     method removeTempFiles
  23.  
  24.     # A description of the command.
  25.     #
  26.     attribute description
  27.  
  28.     # The command string.
  29.     #
  30.     attribute command
  31.  
  32.     # Errors resulting from command execution.
  33.     #
  34.     attribute errors
  35.  
  36.     # Warnings resulting from command execution.
  37.     #
  38.     attribute warnings
  39.  
  40.     # All command output.
  41.     #
  42.     attribute output
  43.  
  44.     # Input that must be echoed to the command during execution.
  45.     #
  46.     attribute input
  47.  
  48.     # Temporary files used by this command.
  49.     #
  50.     attribute tempFiles
  51. }
  52.  
  53. method VSCommand::destructor {this} {
  54.     # Start destructor user section
  55.     # End destructor user section
  56. }
  57.  
  58. constructor VSCommand {class this command description} {
  59.     set this [GCObject::constructor $class $this]
  60.     $this description $description
  61.     $this command $command
  62.     $this errors ""
  63.     $this output ""
  64.     $this warnings ""
  65.     $this tempFiles ""
  66.     $this input ""
  67.     return $this
  68. }
  69.  
  70.  
  71. # Add tempFile to tempFiles.
  72. #
  73. method VSCommand::addTempFile {this tempFile} {
  74.     set tempFiles [$this tempFiles]
  75.     append tempFiles " [list $tempFile]"
  76.     $this tempFiles $tempFiles
  77. }
  78.  
  79.  
  80. # Remove the temporary files listed in
  81. # the tempFiles instance variable.
  82. #
  83. method VSCommand::removeTempFiles {this} {
  84.     foreach tempFile [$this tempFiles] {
  85.     catch { BasicFS::removeFile $tempFile }
  86.     }
  87. }
  88.  
  89.  
  90. # Searches the PATH envionment variable for a path
  91. # with 'key' as component. Returns this path if 'program'
  92. # is in the directory it specifies.
  93. # Returns the empty string in all other cases.
  94. #
  95. proc VSCommand::findPath {key program} {
  96.     if [catch { set envPath $env(PATH) }] {
  97.         wmtkerror "environment variable PATH not found"
  98.         return
  99.     }
  100.  
  101.     # platform specifics
  102.     if $win95 {
  103.         set pathSep "\\"
  104.         set envPathSep ";"
  105.     set program "$program.exe"
  106.     } else {
  107.         set pathSep "/"
  108.         set envPathSep ":"
  109.     }
  110.  
  111.     foreach pathSpec [split $envPath $envPathSep] {
  112.         set dirList [split $pathSpec $pathSep]
  113.         set index [lsearch -exact $dirList $key]
  114.         if { $index == -1 } {
  115.             set index [lsearch -exact $dirList [string toupper $key]]
  116.         }
  117.         if { $index != -1 } {
  118.         # found it.
  119.         # if the program is actually there return the path
  120.         # make sure path name has forward slashes only.
  121.         lappend dirList $program
  122.         set fullName [join $dirList "/"]
  123.         if [file exists $fullName] {
  124.         return $fullName
  125.         }
  126.         }
  127.     }
  128.     
  129. }
  130.  
  131. # Do not delete this line -- regeneration end marker
  132.  
  133.