home *** CD-ROM | disk | FTP | other *** search
/ High Voltage Shareware / high1.zip / high1 / DIR9 / WIZTOO.ZIP / CODEGEN.CPP < prev    next >
C/C++ Source or Header  |  1993-09-22  |  7KB  |  180 lines

  1. //  Module: CODEGEN.CPP
  2.  
  3. //                                                   September 20, 1993
  4. //                                                   Fairfield, Iowa
  5.  
  6. //          Aerosoft  (R)  Broadcast Channel Wizard   Version 1.0
  7. //          Copyright (c)  Aerosoft 1993     All rights reserved.
  8.  
  9. //          This software source code is FREEWARE.  You may be use the
  10. //          source code or redistribute the source code free of charge.
  11. //          However, you cannot sell this source code or any alteration of
  12. //          the source code.
  13.  
  14. //  This module implements four functions that each perform code generation
  15. //  for one of the four files:
  16.  
  17. //      CHNNLDEF.H, BRDCASTR.H, BRDCASTR.CPP, APP.CPP
  18.  
  19. //  See file BCWIZ.MAN for an explanation of these files.
  20.  
  21. #include    <stdio.h>
  22. #include    <process.h>
  23.  
  24. #include    "CODEGEN.H"
  25.         
  26. void GenCHNNLDEF_H(ChannelSpecs &oChannelSpecs)
  27. {
  28.     FILE    *fid;
  29.     
  30.     if ((fid=fopen(CHNNLDEF_H_FILE, "wt"))==NULL)
  31.     {
  32.         printf("*** Execution error: Unable to open %s.\n", CHNNLDEF_H_FILE); 
  33.         exit(0);
  34.     }
  35.   
  36.     fprintf(fid, "#ifndef _chnnldef_h_\n");
  37.     fprintf(fid, "#define _chnnldef_h_\n\n");
  38.     fprintf(fid, "//  Module: CHNNLDEF.H\n\n"); 
  39.  
  40.     ChannelSpec *opSpec = oChannelSpecs.oChannelSpec;   
  41.     for (int i=0; i<oChannelSpecs.iNumSpecs; i++,opSpec++)
  42.     {
  43.         fprintf(fid, "class %s {\n", opSpec->cpFuncName);
  44.         fprintf(fid, "public:\n");
  45.         fprintf(fid, "virtual void Receive%s %s=0;\n", opSpec->cpFuncName,
  46.                                                          opSpec->cpProtoList);
  47.         fprintf(fid, "};\n\n");
  48.     }
  49.  
  50.     fprintf(fid, "#endif\n");   
  51.     fclose(fid);
  52. }
  53.  
  54. void GenBRDCASTR_CPP(ChannelSpecs &oChannelSpecs)
  55. {
  56.     FILE    *fid;
  57.     
  58.     if ((fid=fopen(BRDCASTR_CPP_FILE, "wt"))==NULL)
  59.     {
  60.         printf("*** Execution error: Unable to open %s.\n", BRDCASTR_CPP_FILE); 
  61.         exit(0);
  62.     }
  63.   
  64.     fprintf(fid, "//  Module: BRDCASTR.CPP\n\n");
  65.     fprintf(fid, "#include <stdio.h>\n");
  66.     fprintf(fid, "#include \"%s\"\n", BRDCASTR_H_FILE);
  67.     fprintf(fid, "#include \"%s\"\n\n", CHNNLDEF_H_FILE);
  68.     fprintf(fid, "    Broadcaster oBroadcaster;\n\n");
  69.     
  70.     ChannelSpec *opSpec = oChannelSpecs.oChannelSpec;   
  71.     for (int i=0; i<oChannelSpecs.iNumSpecs; i++,opSpec++)
  72.     {
  73.         fprintf(fid, "int Broadcaster::Connect (%s *op) {\n",
  74.                                                opSpec->cpFuncName);
  75.         fprintf(fid, "    return o%sChannel.Add(op); }\n",
  76.                                                opSpec->cpFuncName);
  77.                                   
  78.         fprintf(fid, "int Broadcaster::Disconnect (%s *op) {\n",
  79.                                                opSpec->cpFuncName);
  80.         fprintf(fid, "    return o%sChannel.Delete(op); }\n",
  81.                                                opSpec->cpFuncName);
  82.                                                
  83.         fprintf(fid, "void Broadcaster::Broadcast%s %s {\n",
  84.                            opSpec->cpFuncName, opSpec->cpProtoList);
  85.         fprintf(fid, "    for (void *op = o%sChannel.First();\n", opSpec->cpFuncName);
  86.         fprintf(fid, "         op != NULL;\n");
  87.         fprintf(fid, "         op = o%sChannel.Next())\n", opSpec->cpFuncName);
  88.         fprintf(fid, "    {\n");
  89.         fprintf(fid, "        ((%s *)op)->Receive%s%s;\n",
  90.               opSpec->cpFuncName, opSpec->cpFuncName, opSpec->cpArgList);
  91.         fprintf(fid, "    }\n}\n");
  92.     }
  93.  
  94.     fclose(fid);
  95. }
  96.  
  97. void GenBRDCASTR_H(ChannelSpecs &oChannelSpecs)
  98. {
  99.     FILE    *fid;
  100.     
  101.     if ((fid=fopen(BRDCASTR_H_FILE, "wt"))==NULL)
  102.     {
  103.         printf("*** Execution error: Unable to open %s.\n", BRDCASTR_H_FILE); 
  104.         exit(0);
  105.     }
  106.   
  107.     fprintf(fid, "#ifndef _brdcastr_h_\n");
  108.     fprintf(fid, "#define _brdcastr_h_\n\n");
  109.     
  110.     fprintf(fid, "//  Module: BRDCASTR.H\n\n");
  111.     fprintf(fid, "#include \"%s\"\n", CHANNEL_H_FILE);
  112.     fprintf(fid, "#include \"%s\"\n\n", CHNNLDEF_H_FILE);
  113.     fprintf(fid, "class Broadcaster {\n");
  114.     
  115.     ChannelSpec *opSpec = oChannelSpecs.oChannelSpec;   
  116.     for (int i=0; i<oChannelSpecs.iNumSpecs; i++,opSpec++)
  117.     {
  118.         fprintf(fid, "    Channel o%sChannel;\n", opSpec->cpFuncName);
  119.     }
  120.  
  121.     fprintf(fid, "public:\n");    
  122.     opSpec = oChannelSpecs.oChannelSpec;    
  123.     for (i=0; i<oChannelSpecs.iNumSpecs; i++,opSpec++)
  124.     {
  125.         fprintf(fid, "    int Connect (%s *op);\n", opSpec->cpFuncName);
  126.         fprintf(fid, "    int Disconnect (%s *op);\n", opSpec->cpFuncName);
  127.         fprintf(fid, "    int ChannelStatus (%s *)\n", opSpec->cpFuncName);
  128.         fprintf(fid, "    {return o%sChannel.Status();}\n", opSpec->cpFuncName);
  129.         fprintf(fid, "    void Broadcast%s %s;\n",
  130.                                 opSpec->cpFuncName, opSpec->cpProtoList);
  131.     }
  132.  
  133.     fprintf(fid, "};\n\n");
  134.     fprintf(fid, "    extern Broadcaster    oBroadcaster;\n\n");
  135.     fprintf(fid, "#endif\n");
  136.     fclose(fid);
  137. }
  138.  
  139.  
  140. void GenAPP_CPP(ChannelSpecs &oChannelSpecs)
  141. {
  142.     FILE    *fid;
  143.     
  144.     if ((fid=fopen(APP_CPP_FILE, "wt"))==NULL)
  145.     {
  146.         printf("*** Execution error: Unable to open %s.\n", APP_CPP_FILE); 
  147.         exit(0);
  148.     }
  149.   
  150.     fprintf(fid, "//  Module: APP.CPP\n\n");
  151.     fprintf(fid, "//  Cut and paste the contents of this module to create\n");
  152.     fprintf(fid, "//  application code.  There are two sections: Producer\n");
  153.     fprintf(fid, "//  calls and Consumer methods.\n\n");
  154.     fprintf(fid, "#include \"%s\"\n\n", CHNNLDEF_H_FILE);
  155.  
  156.     fprintf(fid, "//  Producer calls --\n\n");    
  157.     ChannelSpec *opSpec = oChannelSpecs.oChannelSpec;   
  158.     for (int i=0; i<oChannelSpecs.iNumSpecs; i++,opSpec++)
  159.     {
  160.         fprintf(fid, "    oBroadcast.Broadcast%s%s;\n",
  161.                                opSpec->cpFuncName, opSpec->cpArgList);
  162.     }
  163.     
  164.     fprintf(fid, "\n//  Consumer methods --\n\n");    
  165.     opSpec = oChannelSpecs.oChannelSpec;    
  166.     for (i=0; i<oChannelSpecs.iNumSpecs; i++,opSpec++)
  167.     {
  168.         fprintf(fid, "class Consumer%d : public %s {\n",
  169.                                i+1, opSpec->cpFuncName);
  170.         fprintf(fid, "public:\n");
  171.         fprintf(fid, "    void Receive%s %s;\n",
  172.                                opSpec->cpFuncName, opSpec->cpProtoList);
  173.         fprintf(fid, "};\n");
  174.         fprintf(fid, "void Consumer%d::Receive%s %s {}\n\n",
  175.                           i+1, opSpec->cpFuncName, opSpec->cpProtoList);
  176.     }
  177.     
  178.     fclose(fid);
  179. }
  180.