gen-package
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:8k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. #!/usr/bin/perl
  2. # ====================================================================
  3. # The Vovida Software License, Version 1.0 
  4. # Copyright (c) 2000 Vovida Networks, Inc.  All rights reserved.
  5. # Redistribution and use in source and binary forms, with or without
  6. # modification, are permitted provided that the following conditions
  7. # are met:
  8. # 1. Redistributions of source code must retain the above copyright
  9. #    notice, this list of conditions and the following disclaimer.
  10. # 2. Redistributions in binary form must reproduce the above copyright
  11. #    notice, this list of conditions and the following disclaimer in
  12. #    the documentation and/or other materials provided with the
  13. #    distribution.
  14. # 3. The names "VOCAL", "Vovida Open Communication Application Library",
  15. #    and "Vovida Open Communication Application Library (VOCAL)" must
  16. #    not be used to endorse or promote products derived from this
  17. #    software without prior written permission. For written
  18. #    permission, please contact vocal@vovida.org.
  19. # 4. Products derived from this software may not be called "VOCAL", nor
  20. #    may "VOCAL" appear in their name, without prior written
  21. #    permission of Vovida Networks, Inc.
  22. # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
  23. # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  24. # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND
  25. # NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL VOVIDA
  26. # NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES
  27. # IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL,
  28. # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  29. # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  30. # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  31. # OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  32. # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
  33. # USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
  34. # DAMAGE.
  35. # ====================================================================
  36. # This software consists of voluntary contributions made by Vovida
  37. # Networks, Inc. and many individuals on behalf of Vovida Networks,
  38. # Inc.  For more information on Vovida Networks, Inc., please see
  39. # <http://www.vovida.org/>.
  40. #  $Id: gen-package,v 1.6 2000/08/12 01:25:09 bogawa Exp $
  41. do "config-build.pl";
  42. open(O1, ">$mgc_events");
  43. open(O2, ">$mg_events");
  44. open(O3, ">$type_file_name");
  45. open(IN, "package-info");
  46. print O1 "#include "$type_file_name"n";
  47. print O1 "#include "$generic_event_file"n";
  48. #print O1 "#include "$fake_class"n";
  49. print O1 "#include <string>n";
  50. print O1 "nn";
  51. print O2 "#include "$type_file_name"nnn";
  52. print O2 "#include "$generic_event_file"n";
  53. #print O2 "#include "$fake_class"n";
  54. print O2 "#include <string>n";
  55. print O2 "nn";
  56. while(<IN>) {
  57.     chomp;
  58.     # remove lines starting with "#"
  59.     s/^#.*$//;
  60.     if(/BeginPackages+(w+)/) {
  61. $package_name = $1;
  62. undef(@item_name);
  63. undef(@item_generator);
  64. undef(@argument_type);
  65. undef(@item_requestable);
  66. undef(@item_signal);
  67. $item_count = 0;
  68.     } elsif(/EndPackage/) {
  69. #output the package data
  70. &output_package();
  71. $package_name = "";
  72.     } elsif($package_name) {
  73. # parse the lines
  74. s/^s*//;
  75. s/s*$//;
  76. @a = split(/s+/);
  77. $item_name[$item_count] = $a[0];
  78. $item_generator[$item_count] = $a[1];
  79. $argument_type[$item_count] = $a[2];
  80. if($a[3] =~ /yes/i) {
  81.     $item_requestable[$item_count] = 1;
  82. } else {
  83.     $item_requestable[$item_count] = 0;
  84. }
  85. $a[4] =~ y/A-Z/a-z/; # make lowercase
  86. if($a[4] ne "no") {
  87.     $item_signal[$item_count] = $a[4];
  88. }
  89. $item_count++;
  90.     }
  91. }
  92. close(IN);
  93. sub output_package {
  94.     print O3 "typedef enumn";
  95.     print O3 "{n";
  96.     for($i = 0; $i < $item_count; $i++) {
  97. print O3 "    Mgc", $package_name, "Package", $item_name[$i],",n";
  98.     }
  99.     print O3 "    Mgc",$package_name,"PackageUndefinedn";
  100.     print O3 "} Mgcp$package_name", "PackageItemType;n";
  101.     print O3 "nn";
  102.     print O1 "class Mgc", $package_name, "Packagen";
  103.     print O1 "{n";
  104.     print O1 "public:n";
  105.     # read through the request eventable ones
  106.     for($i = 0; $i < $item_count; $i++) {
  107. if($item_requestable[$i]) {
  108.     print O1 "    static MgcRequestEvent ";
  109.     print O1 "request$item_name[$i](";
  110.     &print_arguments(O1, $argument_type[$i]);
  111.     print O1 ");n";
  112. }
  113.     }
  114.     print O1 "nn";
  115.     # read through the signals
  116.     for($i = 0; $i < $item_count; $i++) {
  117. if($item_signal[$i] eq "oo" || $item_signal[$i] eq "to") {
  118.     # on off type
  119.     print O1 "    static MgcSignalEvent signal", $item_name[$i], "On(";
  120.     &print_arguments(O1, $argument_type[$i]);
  121.     print O1 ");n";
  122.     print O1 "    static MgcSignalEvent signal", $item_name[$i], 
  123.     "Off();n";
  124. } elsif($item_signal[$i]) {
  125.     # other type
  126.     print O1 "    static MgcSignalEvent signal", $item_name[$i], "(";
  127.     &print_arguments(O1, $argument_type[$i]);
  128.     print O1 ");n";
  129. }
  130.     
  131.     }
  132.     print O1 "};nnn";
  133.     print O1 "/// This class has things the Gateway can send to the agent n";
  134.     print O1 "class Mgc", $package_name, "PackageEvent : public MgcObservedEventn";
  135.     print O1 "{n";
  136.     print O1 "public:n";
  137.     print O1 "    ///n";
  138.     print O1 "    Mgc", $package_name, "PackageEvent(const MgcpGenericEvent& e) : MgcObservedEvent(e) {}n";
  139.     print O1 "    /// get the type of event that the Gateway is sending to usn";
  140.     print O1 "    Mgcp", $package_name, "PackageItemType getType();n";
  141. #    print O1 "    /// Get the i'th paramter n";
  142. #    print O1 "    string getParameter(int index);n";
  143. #    print O1 "    /// Get the number of paramters - usually 0 - depends on typen";
  144. #    print O1 "    int getNumParameters();n";
  145.     print O1 "private:n";
  146.     print O1 "// only the Mgc stack can construct these n";
  147.     print O1 "};n";
  148.     # now, do the Mg
  149.     print O2 "class Mg", $package_name, "Packagen";
  150.     print O2 "{n";
  151.     print O2 "public:n";
  152.     # read through the request eventable ones
  153.     for($i = 0; $i < $item_count; $i++) {
  154. if($item_requestable[$i]) {
  155.     print O2 "    static MgNotificationEvent ";
  156.     print O2 "notify$item_name[$i](";
  157.     &print_arguments(O2, $argument_type[$i]);
  158.     print O2 ");n";
  159. }
  160.     }
  161.     print O2 "};n";
  162.     print O2 "nn";
  163.     print O2 "/// This class has things the Gateway can send to the agent n";
  164.     print O2 "class Mg", $package_name, "PackageEvent : public MgEventn";
  165.     print O2 "{n";
  166.     print O2 "public:n";
  167.     print O2 "    ///n";
  168.     print O2 "    Mg", $package_name, "PackageEvent(const MgcpGenericEvent& e) : MgEvent(e) {}n";
  169.     print O2 "    /// get the type of event that the Gateway is sending to usn";
  170.     print O2 "    Mgcp", $package_name, "PackageItemType getType() { return myEvent.get", $package_name, "Type();}n";
  171. #    print O2 "    /// Get the i'th paramter n";
  172. #    print O2 "    string getParameter(int index);n";
  173. #    print O2 "    /// Get the number of paramters - usually 0 - depends on typen";
  174. #    print O2 "    int getNumParameters();n";
  175.     print O2 "private:n";
  176.     print O2 "// only the Mg stack can construct these n";
  177.     print O2 "};n";
  178.     print O2 "/// This class has things the Gateway can send to the agent n";
  179.     print O2 "class Mg", $package_name, "PackageRequestedEvent : public MgRequestedEventn";
  180.     print O2 "{n";
  181.     print O2 "public:n";
  182.     print O2 "    ///n";
  183.     print O2 "    Mg", $package_name, "PackageRequestedEvent(const MgcpGenericEvent& e) : MgRequestedEvent(e) {}n";
  184.     print O2 "    /// get the type of event that the Gateway is sending to usn";
  185.     print O2 "    Mgcp", $package_name, "PackageItemType getType() { return myEvent.get", $package_name, "Type(); }n";
  186.     print O2 "private:n";
  187.     print O2 "/// only the Mg stack can construct these n";
  188.     print O2 "};n";
  189. }
  190. sub print_arguments {
  191.     local($filehandle, $arguments) = @_;
  192.     if($arguments ne "void") {
  193. if($arguments =~ /,/) {
  194.     # more than one, so split and use
  195.     @arglist = split(/,/, $arguments);
  196.     for($arg_count = 0 ; $arg_count <= $#arglist; $arg_count++) {
  197. print $filehandle "const $arglist[$arg_count]& arg$arg_count";
  198. if($arg_count < ($#arglist)) {
  199.     print $filehandle ", ";
  200. }
  201.     }
  202. } else {
  203.     print $filehandle "const $arguments& arg";
  204. }
  205.     }
  206. }