00001 #include <stdio.h>
00002 #include <stdlib.h>
00003 #include <string.h>
00004 #include <ctype.h>
00005
00006 #include "cmt_include.h"
00007 #include "cmt_use.h"
00008
00009
00010
00011
00012
00013
00014
00015
00016 void Include::action (const CmtSystem::cmt_string_vector& words, Use* use)
00017
00018 {
00019 cmt_string name;
00020
00021 if (use == 0) use = &(Use::current());
00022
00023 for (int i = 1; i < words.size (); i++)
00024 {
00025 name = words[i];
00026 if (name == "") return;
00027 add (name, use);
00028 }
00029 }
00030
00031
00032 Include* Include::find (const cmt_string& name, Use* use)
00033
00034 {
00035 int include_index;
00036
00037 if (use == 0) use = &(Use::current());
00038
00039 if (use->includes.size () == 0) return (0);
00040
00041 for (include_index = 0;
00042 include_index < use->includes.size ();
00043 include_index++)
00044 {
00045 Include& incl = use->includes[include_index];
00046
00047 if (incl.use != use) continue;
00048
00049 if (incl.name == name)
00050 {
00051 return (&incl);
00052 }
00053 }
00054
00055 return (0);
00056 }
00057
00058
00059 Include* Include::add (const cmt_string& name, Use* use)
00060
00061 {
00062 if (name == "") return (0);
00063
00064 if (use == 0) use = &(Use::current());
00065
00066 {
00067 Include* incl;
00068
00069 incl = find (name, use);
00070 if (incl != 0) return (incl);
00071 }
00072
00073 Include& incl = use->includes.add ();
00074
00075 incl.name = name;
00076 incl.use = use;
00077
00078 return (&incl);
00079 }
00080
00081
00082 void Include::print_all (PrintMode mode)
00083
00084 {
00085 int number;
00086 int include_number;
00087 Use::UsePtrVector& uses = Use::uses ();
00088
00089 if (uses.size () > 0)
00090 {
00091 for (number = 0; number < uses.size (); number++)
00092 {
00093 const Use* use = uses[number];
00094
00095 if (use->package == "CMT") continue;
00096
00097 cout << "-I${" << use->prefix << "ROOT}/src ";
00098
00099 for (include_number = 0;
00100 include_number < use->includes.size ();
00101 include_number++)
00102 {
00103 const Include& incl = use->includes[include_number];
00104
00105 cout << "-I" << incl.name << " ";
00106 }
00107 }
00108 }
00109
00110 for (include_number = 0;
00111 include_number < (Use::current()).includes.size ();
00112 include_number++)
00113 {
00114 const Include& incl = (Use::current()).includes[include_number];
00115
00116 cout << "-I" << incl.name << " ";
00117 }
00118 }
00119
00120
00121 void Include::print_filters (PrintMode mode)
00122
00123 {
00124 int number;
00125 int include_number;
00126 Use::UsePtrVector& uses = Use::uses ();
00127
00128 if (uses.size () > 0)
00129 {
00130 for (number = 0; number < uses.size (); number++)
00131 {
00132 Use* use = uses[number];
00133
00134 cout << "s#" <<
00135 ".*" << SLASH <<
00136 use->package << SLASH <<
00137 use->version << SLASH <<
00138 "#$(" << use->prefix << "ROOT)" << SLASH <<
00139 "#g" << endl;
00140
00141 for (include_number = 0;
00142 include_number < use->includes.size ();
00143 include_number++)
00144 {
00145 Include& incl = use->includes[include_number];
00146
00147 const cmt_string& d = Cmt::filter_dir (incl.name);
00148
00149 if (d.size () > 0)
00150 {
00151 cout << "s#" << d << "#" <<
00152 incl.name << "#g" << endl;
00153 }
00154 }
00155 }
00156 }
00157
00158 {
00159 const Use* use = &(Use::current());
00160
00161 cout << "s#" << ".*" << SLASH <<
00162 use->package << SLASH <<
00163 use->version << SLASH <<
00164 "#$(" << use->prefix << "ROOT)" << SLASH <<
00165 "#g" << endl;
00166
00167 for (include_number = 0;
00168 include_number < use->includes.size ();
00169 include_number++)
00170 {
00171 const Include& incl = use->includes[include_number];
00172
00173 const cmt_string& d = Cmt::filter_dir (incl.name);
00174
00175 if (d.size () > 0)
00176 {
00177 cout << "s#" << d << "#" <<
00178 incl.name << "#g" << endl;
00179 }
00180 }
00181 }
00182 }
00183
00184
00185 void Include::clear_all ()
00186
00187 {
00188 }
00189
00190
00191 Include::Include ()
00192
00193 {
00194 use = 0;
00195 }
00196
00197
00198 Include::~Include ()
00199
00200 {
00201 use = 0;
00202 }
00203