build-iface
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:11k
源码类别:

流媒体/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: build-iface,v 1.6 2000/08/12 01:25:09 bogawa Exp $
  41. # TODO
  42. do "config-build.pl";
  43. $parameter_count = 0;
  44. open(IN, "request-parameter-matrix");
  45. while(<IN>) {
  46.     chomp;
  47.     # remove lines starting with "#"
  48.     s/^#.*$//;
  49.     @a = split(/|/);
  50.     if($a[1]) {
  51. shift(@a);
  52. foreach(@a) {
  53.     # kill leading/trailing whitespace
  54.     s/^s*//;
  55.     s/s*$//;
  56.     s/*$//;
  57. }
  58. #| Parameter name      |  EP|  CR|  MD|  DL|  RQ|  NT|  AU|  AU|
  59. #|                     |  CF|  CX|  CX|  CX|  NT|  FY|  EP|  CX|
  60. #|_____________________|____|____|____|____|____|____|____|____|
  61. # ordering
  62. # 0   --  parameter name
  63. # 1   -- endpoint config
  64. # 2   -- create connection
  65. # 3   -- modify connection
  66. # 4   -- delete connection
  67. # 5   -- request notification
  68. # 6   -- notify
  69. # 7   -- audit endpoint
  70. # 8   -- audit connection
  71. $parameter_name[$parameter_count] = $a[0];
  72. for($i = 1; $i <= 8; $i++) {
  73.     $parameter_matrix->[$parameter_count][$i-1] = $a[$i];
  74. }
  75. $parameter_count++;
  76.     }
  77. }
  78. close(IN);
  79. $response_parameter_count = 0;
  80. open(IN, "response-parameter-matrix");
  81. while(<IN>) {
  82.     chomp;
  83.     # remove lines starting with "#"
  84.     s/^#.*$//;
  85.     @a = split(/|/);
  86.     if($a[1]) {
  87. shift(@a);
  88. foreach(@a) {
  89.     # kill leading/trailing whitespace
  90.     s/^s*//;
  91.     s/s*$//;
  92.     s/*$//;
  93. }
  94. #| Parameter name      |  EP|  CR|  MD|  DL|  RQ|  NT|  AU|  AU|
  95. #|                     |  CF|  CX|  CX|  CX|  NT|  FY|  EP|  CX|
  96. #|_____________________|____|____|____|____|____|____|____|____|
  97. # ordering
  98. # 0   --  parameter name
  99. # 1   -- endpoint config
  100. # 2   -- create connection
  101. # 3   -- modify connection
  102. # 4   -- delete connection
  103. # 5   -- request notification
  104. # 6   -- notify
  105. # 7   -- audit endpoint
  106. # 8   -- audit connection
  107. # $response_parameter_name[$parameter_count] = $a[0];
  108. for($i = 1; $i <= 8; $i++) {
  109.     $response_parameter_matrix->[$response_parameter_count][$i-1] = $a[$i];
  110. }
  111. $response_parameter_count++;
  112.     }
  113. }
  114. close(IN);
  115. open(IN, "parameter-types");
  116. while(<IN>) {
  117.     chomp;
  118.     # remove lines starting with "#"
  119.     s/^#.*$//;
  120.     @a = split(/ +/);
  121.     $parameter_style{$a[2]} = $a[0];
  122.     $parameter_type{$a[2]} = $a[1];
  123. }
  124. close(IN);
  125. open(IN, "verb-data");
  126. $verb_count = 0;
  127. while(<IN>) {
  128.     chomp;
  129.     # remove lines starting with "#"
  130.     s/^#.*$//;
  131.     @a = split(/|/);
  132.     
  133.     if($a[1]) {
  134. foreach(@a) {
  135.     # kill leading/trailing whitespace
  136.     s/^s*//;
  137.     s/s*$//;
  138. }
  139. $verb_name[$verb_count] = $a[0];
  140. $verb_abbreviation[$verb_count] = $a[1];
  141. $class_direction[$verb_count] = $a[2];
  142. $verb_count++;
  143.     }
  144. }
  145. close(IN);
  146. open(MGC_CLASS, ">mgc.hxx");
  147. print MGC_CLASS "#ifndef MGC_CLASS_H_n";
  148. print MGC_CLASS "#define MGC_CLASS_H_n";
  149. print MGC_CLASS "#include "$mgc_events"nn";
  150. print MGC_CLASS "#include "$generic_event_file"nn";
  151. print MGC_CLASS "///n";
  152. print MGC_CLASS "enum MgcCommandTypen";
  153. print MGC_CLASS "{n";
  154. for($i = 0; $i < $verb_count ; $i++) {
  155.     $class_name = "Mgc$verb_name[$i]";
  156.     print MGC_CLASS "    $class_name", "Type,n";
  157. }
  158. print MGC_CLASS "};n";
  159. print MGC_CLASS "nn";
  160. print MGC_CLASS "class MgcCommandn";
  161. print MGC_CLASS "{n";
  162. print MGC_CLASS "public:n";
  163. print MGC_CLASS "};n";
  164. for($i = 0; $i < $verb_count ; $i++) {
  165.     print MGC_CLASS "///n";
  166.     $class_name = "Mgc$verb_name[$i]";
  167.     print MGC_CLASS "class $class_name : public MgcCommandn";
  168.     print MGC_CLASS "{n";
  169.     print MGC_CLASS "public: n";
  170.     $command_matrix = $parameter_matrix;
  171.     $response_matrix = $response_parameter_matrix;
  172.     &do_sender_side(MGC_CLASS);
  173. }
  174. print MGC_CLASS "#endifn";
  175. close(MGC_CLASS);
  176. sub do_sender_side {
  177.     local($fh) = $_[0];
  178.     # do the stuff for each mandatory parameter
  179.     $not_first_parameter = 0;
  180.     $constructor_arguments = "";
  181.     for($j = 0; $j < $parameter_count; $j++) {
  182. if($command_matrix->[$j][$i] eq "M") {
  183.     # mandatory parameter
  184.     if($not_first_parameter) {
  185. $constructor_arguments .= ", ";
  186.     }
  187.     $pn = $parameter_name[$j];
  188.     $constructor_arguments .= "const $parameter_type{$pn}& $pn";
  189.     $not_first_parameter = 1;
  190. }
  191.     }
  192.     print $fh "    ///n";
  193.     print $fh "    $class_name($constructor_arguments);n";
  194.     print $fh "n";
  195.     print $fh "    ///n";
  196.     print $fh "    MgcCommandType getType();n";
  197.     print $fh "n";
  198.     # now create the optional parameter accessors
  199.     for($j = 0; $j < $parameter_count; $j++) {
  200. if($command_matrix->[$j][$i] eq "O") {
  201.     $pn = $parameter_name[$j];
  202.     # optional parameter
  203.     if($parameter_style{$pn} eq "normal") {
  204. print $fh "    ///n";
  205. print $fh "    set$pn(const $parameter_type{$pn}& parameter);n";
  206.     } elsif($parameter_style{$pn} eq "iter") {
  207. print $fh "    ///n";
  208. print $fh "    add$pn(const $parameter_type{$pn}& parameter);n";
  209. print $fh "    ///n";
  210. print $fh "    clear$pn();n";
  211.     }
  212. }
  213.     }
  214.     # now create the response accessors
  215.     for($j = 0; $j < $response_parameter_count; $j++) {
  216. if(($response_matrix->[$j][$i] eq "O") || 
  217.   ($response_matrix->[$j][$i] eq "M")) {
  218.     $pn = $parameter_name[$j];
  219.     # optional parameter
  220.     if($parameter_style{$pn} eq "normal") {
  221. print $fh "    ///n";
  222. print $fh "    $parameter_type{$pn} get$pn();n";
  223.     } elsif($parameter_style{$pn} eq "iter") {
  224. print $fh "    ///n";
  225. print $fh "    int getNum$pn();n";
  226. print $fh "    ///n";
  227. print $fh "    $parameter_type{$pn} getItem$pn(int index);n";
  228.     }
  229. }
  230.     }
  231.     print $fh "};nnn";
  232. }
  233. open(MG_CLASS, ">mg.hxx");
  234. print MG_CLASS "#ifndef MG_CLASS_H_n";
  235. print MG_CLASS "#define MG_CLASS_H_n";
  236. print MG_CLASS "#include "$mg_events"nn";
  237. print MG_CLASS "#include "$generic_event_file"nn";
  238. # create the enum for the types of the commands
  239. print MG_CLASS "///n";
  240. print MG_CLASS "enum MgCommandTypen";
  241. print MG_CLASS "{n";
  242. for($i = 0; $i < $verb_count ; $i++) {
  243.     $class_name = "Mg$verb_name[$i]";
  244.     print MG_CLASS "    $class_name", "Type,n";
  245. }
  246. print MG_CLASS "};n";
  247. print MG_CLASS "nn";
  248. print MG_CLASS "class MgCommandn";
  249. print MG_CLASS "{n";
  250. print MG_CLASS "public:n";
  251. print MG_CLASS "};n";
  252. for($i = 0; $i < $verb_count ; $i++) {
  253.     print MG_CLASS "///n";
  254.     $class_name = "Mg$verb_name[$i]";
  255.     print MG_CLASS "class $class_name : public MgCommandn";
  256.     print MG_CLASS "{n";
  257.     print MG_CLASS "public: n";
  258.     # do the stuff for each mandatory parameter
  259.     $command_matrix = $parameter_matrix;
  260.     $response_matrix = $response_parameter_matrix;
  261.     &do_response_side(MG_CLASS);
  262. }
  263. print MG_CLASS "#endifn";
  264. close(MG_CLASS);
  265. sub do_response_side {
  266.     local($fh) = $_[0];
  267.     $not_first_parameter = 0;
  268.     $constructor_arguments = "";
  269.     for($j = 0; $j < $parameter_count; $j++) {
  270. if($command_matrix->[$j][$i] eq "M") {
  271.     # mandatory parameter
  272.     if($not_first_parameter) {
  273. $constructor_arguments .= ", ";
  274.     }
  275.     $pn = $parameter_name[$j];
  276.     $constructor_arguments .= "const $parameter_type{$pn}& $pn";
  277.     $not_first_parameter = 1;
  278. }
  279.     }
  280.     print $fh "    ///n";
  281.     print $fh "    $class_name($constructor_arguments);n";
  282.     print $fh "n";
  283.     print $fh "    ///n";
  284.     print $fh "    MgCommandType getType();n";
  285.     print $fh "n";
  286.     # now create the optional parameter accessors
  287.     for($j = 0; $j < $parameter_count; $j++) {
  288. if(($command_matrix->[$j][$i] eq "O") || 
  289.    ($command_matrix->[$j][$i] eq "M")) {
  290.     $pn = $parameter_name[$j];
  291.     # optional parameter
  292.     if($parameter_style{$pn} eq "normal") {
  293. print $fh "    ///n";
  294. print $fh "    $parameter_type{$pn} get$pn();n";
  295.     } elsif($parameter_style{$pn} eq "iter") {
  296. print $fh "    ///n";
  297. print $fh "    int getNum$pn();n";
  298. print $fh "    ///n";
  299. print $fh "    $parameter_type{$pn} getItem$pn(int index);n";
  300.     }
  301. }
  302.     }
  303.     # now create the response accessors
  304.     for($j = 0; $j < $response_parameter_count; $j++) {
  305. if(($response_matrix->[$j][$i] eq "O") ||
  306.    ($response_matrix->[$j][$i] eq "M")) {
  307.     $pn = $parameter_name[$j];
  308.     # optional parameter
  309.     if($parameter_style{$pn} eq "normal") {
  310. print $fh "    ///n";
  311. print $fh "    set$pn(const $parameter_type{$pn}& parameter);n";
  312.     } elsif($parameter_style{$pn} eq "iter") {
  313. print $fh "    ///n";
  314. print $fh "    add$pn(const $parameter_type{$pn}& parameter);n";
  315. print $fh "    ///n";
  316. print $fh "    clear$pn();n";
  317.     }
  318. }
  319.     }
  320.     print $fh "};nnn";
  321. }