Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

Prototyper Class Reference

Inheritance diagram for Prototyper

Inheritance graph
[legend]
Collaboration diagram for Prototyper:

Collaboration graph
[legend]
List of all members.

Public Methods

 Prototyper (bool static_functions = false)
void begin ()
void filter (const cmt_string& line)
void end ()

Private Attributes

bool m_running
cmt_string m_out_file_name
FILE* m_output
bool m_static_functions
cmt_string m_full_line
cmt_string m_prev_line
cmt_string m_suffix
cmt_string m_define_suffix

Constructor & Destructor Documentation

Prototyper::Prototyper ( bool static_functions = false ) [inline]
 

Definition at line 2691 of file cmt_generator.cxx.

02691                                              :
02692     m_static_functions(static_functions)
02693   {
02694     if (m_static_functions)
02695       {
02696         m_suffix = "_static.phnew";
02697         m_define_suffix = "_static_ph";
02698       }
02699     else
02700       {
02701         m_suffix = ".phnew";
02702         m_define_suffix = "_ph";
02703       }
02704   }


Member Function Documentation

void Prototyper::begin ( ) [inline, virtual]
 

Reimplemented from Awk.

Definition at line 2706 of file cmt_generator.cxx.

02707   {
02708     m_running = false;
02709 
02710     static cmt_string suffix;
02711     static cmt_string name;
02712 
02713     CmtSystem::get_dot_suffix (m_file_name, suffix);
02714     CmtSystem::basename (m_file_name, suffix, name);
02715 
02716     m_out_file_name  = "";
02717 
02718     if (m_dir_name != "")
02719       {
02720         m_out_file_name  = m_dir_name;
02721         m_out_file_name += CmtSystem::file_separator ();
02722       }
02723 
02724     m_out_file_name += name;
02725     m_out_file_name += m_suffix;
02726 
02727     CmtSystem::basename (m_file_name, suffix, m_file_name);
02728 
02729     m_output = fopen (m_out_file_name.c_str (), "wb");
02730 
02731     if (m_output != 0)
02732       {
02733         fprintf (m_output, "#ifndef __%s%s__\n", m_file_name.c_str (),
02734                  m_define_suffix.c_str ());
02735         fprintf (m_output, "#define __%s%s__\n", m_file_name.c_str (),
02736                  m_define_suffix.c_str ());
02737 
02738         fprintf (m_output, "\n");
02739         fprintf (m_output, "#ifdef __cplusplus\n");
02740         fprintf (m_output, "extern \"C\" {\n");
02741         fprintf (m_output, "#endif\n");
02742         fprintf (m_output, "\n");
02743       }
02744     else
02745       {
02746         stop ();
02747       }
02748   }

void Prototyper::end ( ) [inline, virtual]
 

Reimplemented from Awk.

Definition at line 2818 of file cmt_generator.cxx.

02819   {
02820     if (m_output != 0)
02821       {
02822         fprintf (m_output, "\n");
02823         fprintf (m_output, "#ifdef __cplusplus\n");
02824         fprintf (m_output, "}\n");
02825         fprintf (m_output, "#endif\n");
02826         fprintf (m_output, "\n");
02827         fprintf (m_output, "#endif\n");
02828         fprintf (m_output, "\n");
02829 
02830         fclose (m_output);
02831       }
02832 
02833     Generator::check (m_out_file_name);
02834   }

void Prototyper::filter ( const cmt_string & line ) [inline, virtual]
 

Reimplemented from Awk.

Definition at line 2750 of file cmt_generator.cxx.

02751   {
02752     char c = line[0];
02753 
02754     if (!m_running)
02755       {
02756         if ((c == ' ') ||
02757             (c == '/') ||
02758             (c == '|') ||
02759             (c == '\t') ||
02760             (c == '#')) return;
02761         if (line.find ('(') == cmt_string::npos)
02762           {
02763             m_prev_line = line;
02764             return;
02765           }
02766 
02767         m_running = true;
02768         m_full_line = line;
02769         m_full_line.replace ("(", " (");
02770 
02771         static CmtSystem::cmt_string_vector words;
02772 
02773         CmtSystem::split (m_full_line, " \t", words);
02774 
02775         const cmt_string& second = words[1];
02776         if (second[0] == '(')
02777           {
02778             m_full_line = m_prev_line;
02779             m_full_line += " ";
02780             m_full_line += line;
02781 
02782             m_prev_line = "";
02783           }
02784       }
02785     else
02786       {
02787         m_full_line += line;
02788       }
02789     if (line.find (')') == cmt_string::npos) return;
02790     m_running = false;
02791 
02792     if (m_full_line.find (';') != cmt_string::npos) return;
02793     if (m_full_line.find ("::") != cmt_string::npos) return;
02794     if (m_full_line.find ('<') != cmt_string::npos) return;
02795     if (m_full_line.find ('>') != cmt_string::npos) return;
02796     if (m_full_line.find ('{') != cmt_string::npos) return;
02797     if (m_full_line.find ('}') != cmt_string::npos) return;
02798     if (m_full_line.find ("typedef") != cmt_string::npos) return;
02799     if (m_full_line.find ("yy") != cmt_string::npos) return;
02800     if (m_full_line.find ("YY") != cmt_string::npos) return;
02801     if (m_static_functions)
02802       {
02803         if (m_full_line.find ("static") == cmt_string::npos) return;
02804       }
02805     else
02806       {
02807         if (m_full_line.find ("static") != cmt_string::npos) return;
02808       }
02809 
02810     m_full_line += ";";
02811 
02812     if (m_output != 0)
02813       {
02814         fprintf (m_output, "%s\n", m_full_line.c_str ());
02815       }
02816   }


Member Data Documentation

cmt_string Prototyper::m_define_suffix [private]
 

Definition at line 2844 of file cmt_generator.cxx.

cmt_string Prototyper::m_full_line [private]
 

Definition at line 2841 of file cmt_generator.cxx.

cmt_string Prototyper::m_out_file_name [private]
 

Definition at line 2838 of file cmt_generator.cxx.

FILE * Prototyper::m_output [private]
 

Definition at line 2839 of file cmt_generator.cxx.

cmt_string Prototyper::m_prev_line [private]
 

Definition at line 2842 of file cmt_generator.cxx.

bool Prototyper::m_running [private]
 

Definition at line 2837 of file cmt_generator.cxx.

bool Prototyper::m_static_functions [private]
 

Definition at line 2840 of file cmt_generator.cxx.

cmt_string Prototyper::m_suffix [private]
 

Definition at line 2843 of file cmt_generator.cxx.


The documentation for this class was generated from the following file:
Generated at Thu Apr 11 16:50:54 2002 for CMT by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000