home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / vacppgentor.tcl < prev    next >
Text File  |  1997-12-01  |  6KB  |  199 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. # Copyright (c) 1997 by Cayenne Software, Inc.
  4. #
  5. # This software is furnished under a license and may be used only in
  6. # accordance with the terms of such license and with the inclusion of
  7. # the above copyright notice. This software or any other copies thereof
  8. # may not be provided or otherwise made available to any other person.
  9. # No title to and ownership of the software is hereby transferred.
  10. #
  11. # The information in this software is subject to change without notice
  12. # and should not be construed as a commitment by Cayenne Software, Inc.
  13. #
  14. #---------------------------------------------------------------------------
  15. #
  16. #       File            : vacppgentor.tcl
  17. #       Author          : 
  18. #       Original date   : November 1997
  19. #       Description     : Classes for code generation
  20. #
  21. #---------------------------------------------------------------------------
  22.  
  23. #---------------------------------------------------------------------------
  24. #      File:           @(#)vacppgener.tcl    /main/titanic/2
  25. #---------------------------------------------------------------------------
  26.  
  27. # Start user added include file section
  28.  
  29. # End user added include file section
  30.  
  31. require "generator.tcl"
  32.  
  33. Class VACPPGenerator : {Generator} {
  34.     constructor
  35.     method destructor
  36.     method generate
  37.     method generateSpecialFiles
  38.     attribute ooplModel
  39.     attribute importer
  40.     attribute fileHandler
  41. }
  42.  
  43. constructor VACPPGenerator {class this} {
  44.     set this [Generator::constructor $class $this]
  45.     # Start constructor user section
  46.     # End constructor user section
  47.     return $this
  48. }
  49.  
  50. method VACPPGenerator::destructor {this} {
  51.     # Start destructor user section
  52.     # End destructor user section
  53.     $this Generator::destructor
  54. }
  55.  
  56. method VACPPGenerator::generate {this classList} {
  57.         set typeToClassDict [Dictionary new]
  58.  
  59.         set project [VAParts new]
  60.  
  61.         $classList foreach cl {
  62.               $cl vaGenerate $project
  63.               set tempDict [Dictionary new]
  64.               $typeToClassDict set $cl $tempDict
  65.         }
  66.  
  67.         $project generate $typeToClassDict
  68.         return $typeToClassDict
  69. }
  70.  
  71. method VACPPGenerator::generateSpecialFiles {this fileList} {
  72.         set fileName [[$this fileHandler] getProjectFileName]
  73.         set text [TextSection new]
  74.  
  75.            m4_message $M_GENSPEC $fileName
  76.  
  77.         foreach fileV [[[ClientContext::global] currentSystem] localFileVersions] {
  78.             set type [[$fileV file] type]
  79.             set name [[$fileV file] name]
  80.             if {$type == "vbe" && $name != [getCurrentSystemName]} {
  81.             if {[catch {set fd [fstorage::open "$name.$type" r]} reason]} {
  82.                     m4_error $E_NOTADDSPEC $name $fileName
  83.                         puts stderr $reason
  84.                 } else {
  85.                     m4_message $M_ADDSPEC $name $fileName
  86.                 while {![eof $fd]} {
  87.                             set line [gets $fd]
  88.                     if {[regexp {^//VBPartDataFile:} $line]} {
  89.                         $text append "//VBPartDataFile: [getCurrentSystemName].vbb\n"
  90.                     } else {
  91.                         $text append "$line\n"
  92.                     }
  93.                 }
  94.                 close $fd
  95.             }
  96.             }
  97.         }
  98.  
  99.         if {[M4CheckManager::getErrorCount] > 0} {
  100.                m4_message $M_NOSAVING $fileName
  101.         } else {
  102.                m4_message $M_CREATINGSPEC $fileName
  103.                [$this fileHandler] writeSectionToNamedFile $text $fileName
  104.         }
  105. }
  106.  
  107. # Do not delete this line -- regeneration end marker
  108.  
  109. #---------------------------------------------------------------------------
  110. #      File:           @(#)vacppfileh.tcl    /main/titanic/1
  111. #---------------------------------------------------------------------------
  112.  
  113. # Start user added include file section
  114. # End user added include file section
  115.  
  116. require "filehandle.tcl"
  117.  
  118. Class VACPPFileHandler : {FileHandler} {
  119.     constructor
  120.     method destructor
  121.     method getFileName
  122.     method getSpecialFiles
  123.     method getFileTypes
  124.     method getProjectFileName
  125.     attribute VBEType
  126. }
  127.  
  128. constructor VACPPFileHandler {class this} {
  129.     set this [FileHandler::constructor $class $this]
  130.     $this VBEType "vbe"
  131.     # Start constructor user section
  132.     # End constructor user section
  133.     return $this
  134. }
  135.  
  136. method VACPPFileHandler::destructor {this} {
  137.     # Start destructor user section
  138.     # End destructor user section
  139.     $this FileHandler::destructor
  140. }
  141.  
  142. method VACPPFileHandler::getFileName {this class fileType} {
  143.     return "[$class getName].$fileType"
  144. }
  145.  
  146. method VACPPFileHandler::getSpecialFiles {this} {
  147.         set list [List new]
  148.         $list append [$this getProjectFileName]
  149.         return $list
  150. }
  151.  
  152. method VACPPFileHandler::getFileTypes {this} {
  153.         set list [List new]
  154.         $list append [$this VBEType]
  155.         return $list
  156. }
  157.  
  158. method VACPPFileHandler::getProjectFileName {this} {
  159.     return "[getCurrentSystemName].[$this VBEType]"
  160. }
  161.  
  162. # Do not delete this line -- regeneration end marker
  163.  
  164. #---------------------------------------------------------------------------
  165. #      File:           @(#)dummygener.tcl    /main/titanic/1
  166. #---------------------------------------------------------------------------
  167.  
  168. # Start user added include file section
  169. # End user added include file section
  170.  
  171. Class DummyGenerator : {CppGenerator} {
  172.     constructor
  173.     method destructor
  174.     method generateSpecialFiles
  175. }
  176.  
  177. constructor DummyGenerator {class this} {
  178.     set this [CppGenerator::constructor $class $this]
  179.     # Start constructor user section
  180.     # End constructor user section
  181.     return $this
  182. }
  183.  
  184. method DummyGenerator::destructor {this} {
  185.     # Start destructor user section
  186.     # End destructor user section
  187.     $this CppGenerator::destructor
  188. }
  189.  
  190. method DummyGenerator::generateSpecialFiles {this fileList} {
  191. }
  192.  
  193. selfPromoter CppGenerator {this} {
  194.         DummyGenerator promote $this
  195. }
  196.  
  197. # Do not delete this line -- regeneration end marker
  198.  
  199.