home *** CD-ROM | disk | FTP | other *** search
/ PC World 1997 November / PCWorld_1997-11_cd.bin / software / programy / komix / DATA.Z / exp2dir.tcl < prev    next >
Text File  |  1996-08-12  |  7KB  |  182 lines

  1. #              ~/icase/export_to_directory.tcl
  2. #
  3. # Created: 15 februari 1996
  4. # Updated: 15 april 1996
  5. # Version: 1.2
  6. # Purpose: To export a diagram to a directory (supplied via 'FileSelect')
  7. # Notes on V1.1: Made compatible with new 'et.tcl' (OMT V4.0/01)
  8. # Notes on V1.2: generalized the file selection procedure (platform independent)
  9. #
  10.  
  11. #puts "Using ~/icase/export_to_directory.tcl"
  12.  
  13.  
  14. # -----------------------------------------------------------
  15. # retrieve my own small library of commonly usable procedures
  16. # -----------------------------------------------------------
  17. set home [lindex [glob ~] 0]
  18. source "[path_name concat [path_name concat $home icase] small_library.tcl]"
  19.  
  20.  
  21. proc usage {} {
  22.     puts "Usage: otsh ~/icase/export_to_file.tcl -- [<diagram name> ...]"
  23.     exit 1
  24. }
  25.  
  26.  
  27. # --------------------------------------------------------------------
  28. # create unique names (suffix them with a sequence number if necessary
  29. # --------------------------------------------------------------------
  30. proc createUniqueName { directory_name diagram } {
  31.     # -------------------------------------------------------------------------
  32.     # State Transition Diagram names can be composed with slashes, replace them
  33.     # -------------------------------------------------------------------------
  34.     regsub -all "/" $diagram ":" diagram
  35.  
  36.     set number 0
  37.     set file_name "$directory_name/$diagram"
  38.  
  39.     while { [file exists $file_name] } {
  40.         set number [expr $number + 1]
  41.         set file_name "$directory_name/$diagram.$number"
  42.     }
  43.     if { $number } {
  44.         puts "file '$diagram' already exists, using name '$file_name'"
  45.     }
  46.  
  47.     return $file_name
  48. }
  49.  
  50.  
  51. # ------------------------------------
  52. # A procedure to process all arguments
  53. # ------------------------------------
  54.  
  55. proc exportDiagrams { diagrams level } {
  56.     set argv ""
  57.     set processed 1
  58.     set hasBeenSourced 0
  59.     set to_process [llength $diagrams]
  60.     set version "40[string range [versionInfo maintVersion] 0 1]"
  61.     set line "--------------------------------------"
  62.     set line "$line$line"
  63.  
  64.     # --------------------------------------------------
  65.     # Prompt the File selection dialog and handle errors
  66.     # --------------------------------------------------
  67.     puts "Select a directory to which the tcl diagram files must be written..."
  68.     set directory_name "[FileSelect]"
  69.     if { $directory_name == "" } {
  70.         puts "Directory name empty, can't comply"
  71.         exit 1
  72.     }
  73.     if { [file exists $directory_name] } {
  74.         if { ! [file isdirectory $directory_name] } {
  75.             set message "File $directory_name not a directory (is a"
  76.             set message "$message [file type $directory_name]), can't comply"
  77.             puts "$message"
  78.             exit 1
  79.         }
  80.         if { ! [file writable $directory_name] } {
  81.             set message Directory '$directory_name' not writable (for you),"
  82.             set message "$message can't comply"
  83.             puts "$message
  84.             exit 1
  85.         }
  86.     }
  87.  
  88.     foreach diagram $diagrams {
  89.         set path  $level/$diagram
  90.         set ok [[ClientContext::global] setLevelPath $path]
  91.  
  92.         # --------------
  93.         # Error handling
  94.         # --------------
  95.         if { $ok } {
  96.             puts " Can't determine client context: '$env(M4_levelpath)'"
  97.             puts " Program stops, whithout export generation. "
  98.             exit 1
  99.         }
  100.  
  101.         # ---------------------------------------------------
  102.         # create a unique file name according to diagram name
  103.         # ---------------------------------------------------
  104.         set file_name [createUniqueName $directory_name $diagram]
  105.  
  106.         # -----------------------------
  107.         # Feedback progress to the user
  108.         # -----------------------------
  109.         puts -nonewline "Diagram '$diagram' ($processed of $to_process) ... "
  110.         flush stdout
  111.         set processed [ expr $processed + 1 ]
  112.  
  113.         # -------------------------------------------------------------
  114.         # store some essential data in the file and append exported tcl
  115.         # -------------------------------------------------------------
  116.         set f [open $file_name w]
  117.         puts $f "# $line"
  118.         puts $f "# export by '[get_user_name]' on [date]."
  119.         puts $f "# diagram = '$level/$diagram'."
  120.         puts $f "# $line"
  121.         puts $f ""
  122.         flush $f
  123.         close $f
  124.  
  125.         set args "[list -a$file_name] -vi$version -vo$version -e -l"
  126.         eval exportTool { $args }
  127.  
  128.         # -----------------------------
  129.         # Feedback progress to the user
  130.         # -----------------------------
  131.         puts "exported."
  132.         flush stdout
  133.     }
  134. }
  135.  
  136.  
  137. # --------------------------------------------------------------
  138. # See if any boolean options were specified, set the appropriate
  139. # variables, and remove any options from argv.
  140. # --------------------------------------------------------------
  141.  
  142. proc exportMain {} {
  143.     global ucgargv
  144.     global et_dont_run
  145.  
  146.     # -------------------------------------------------------------------
  147.     # source the export source without executing the procedure exportTool
  148.     # -------------------------------------------------------------------
  149.     set src "[path_name concat [lindex [glob ~] 0] icase]"
  150.     set src "[path_name concat $src get_export_source.tcl]"
  151.     source "$src"
  152.  
  153.     # ----------------------- 
  154.     # setup the ClientContext
  155.     # -----------------------
  156.     set clientContext [ClientContext::global]
  157.     set corporate [[$clientContext currentCorporate] name]
  158.     set project [[$clientContext currentProject] name]
  159.     set configuration [[[$clientContext currentConfig] config] name]
  160.     set version [[$clientContext currentConfig] versionNumber]
  161.     set phase [[[$clientContext currentPhase] phase] name]
  162.     set system [[[$clientContext currentSystem] system] name]
  163.  
  164.     #puts "corporate = $corporate"
  165.     #puts "project = $project"
  166.     #puts "configuration = $configuration"
  167.     #puts "version = $version"
  168.     #puts "phase = $phase"
  169.     #puts "system = $system"
  170.  
  171.     set level "/$corporate/$project/$configuration:$version/$phase.$phase/$system.system"
  172.     exportDiagrams "$ucgargv" "$level"
  173. }
  174.  
  175. # ------------------------------------------
  176. # ugly source, should get rid of this call!!
  177. # ------------------------------------------
  178. global export_dont_run
  179. if [catch {set export_dont_run}] {
  180.     exportMain 
  181. }
  182.