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

cmt_script.cxx

Go to the documentation of this file.
00001 #include <stdio.h>
00002 #include <stdlib.h>
00003 #include <string.h>
00004 #include <ctype.h>
00005 
00006 #include "cmt_script.h"
00007 #include "cmt_use.h"
00008 
00009 /*----------------------------------------------------------*/
00010 /*                                                          */
00011 /*  Operations on Scripts                                   */
00012 /*                                                          */
00013 /*----------------------------------------------------------*/
00014 
00015 /*----------------------------------------------------------*/
00016 void Script::action (const CmtSystem::cmt_string_vector& words,
00017                      ScriptType type,
00018                      Use* use)
00019 /*----------------------------------------------------------*/
00020 {
00021   cmt_string name;
00022   Script* script;
00023 
00024   if (use == 0) use = &(Use::current());
00025 
00026   name = words[1];
00027   if (name == "") return;
00028 
00029   script = add (name, type, use);
00030 }
00031 
00032 /*----------------------------------------------------------*/
00033 Script* Script::find (const cmt_string& name, Use* use)
00034 /*----------------------------------------------------------*/
00035 {
00036   int script_index;
00037 
00038   if (use == 0) use = &(Use::current());
00039 
00040   if (use->scripts.size () == 0) return (0);
00041 
00042   for (script_index = 0;
00043        script_index < use->scripts.size ();
00044        script_index++)
00045     {
00046       Script& script = use->scripts[script_index];
00047 
00048       if (script.name == name)
00049         {
00050           return (&script);
00051         }
00052     }
00053 
00054   return (0);
00055 }
00056 
00057 /*----------------------------------------------------------*/
00058 Script* Script::add (const cmt_string& name, ScriptType type, Use* use)
00059 /*----------------------------------------------------------*/
00060 {
00061   cmt_string short_name = name;
00062 
00063   if (use == 0) use = &(Use::current());
00064 
00065   int pos;
00066 
00067   pos = short_name.find (".csh");
00068   if (pos != cmt_string::npos)
00069     {
00070       short_name.erase (pos);
00071     }
00072 
00073   pos = short_name.find (".sh");
00074   if (pos != cmt_string::npos)
00075     {
00076       short_name.erase (pos);
00077     }
00078 
00079   {
00080     Script* script;
00081 
00082     if (short_name == "") return (0);
00083     script = find (short_name, use);
00084     if (script != 0)
00085       {
00086         script->type = type;
00087         return (script);
00088       }
00089   }
00090 
00091   Script& script = use->scripts.add ();
00092 
00093   script.name = short_name;
00094   script.type = type;
00095 
00096   return (&script);
00097 }
00098 
00099 /*----------------------------------------------------------*/
00100 void Script::all_print_clean (PrintMode mode)
00101 /*----------------------------------------------------------*/
00102 {
00103   int number;
00104   int script_number;
00105   Use::UsePtrVector& uses = Use::uses ();
00106 
00107   if (uses.size () > 0)
00108     {
00109       for (number = 0; number < uses.size (); number++)
00110         {
00111           const Use* use = uses[number];
00112 
00113           if (use->package == "CMT") continue;
00114 
00115           for (script_number = 0;
00116                script_number < use->scripts.size ();
00117                script_number++)
00118             {
00119               Script& script = use->scripts[script_number];
00120 
00121               if (script.type == CleanupScript)
00122                 {
00123                   if (script.print (mode, use)) cout << "; ";
00124                 }
00125             }
00126         }
00127     }
00128 }
00129 
00130 /*----------------------------------------------------------*/
00131 void Script::all_print (PrintMode mode)
00132 /*----------------------------------------------------------*/
00133 {
00134   int number;
00135   int script_number;
00136   Use::UsePtrVector& uses = Use::uses ();
00137 
00138   if (uses.size () > 0)
00139     {
00140       for (number = 0; number < uses.size (); number++)
00141         {
00142           const Use* use = uses[number];
00143 
00144           if (use->package == "CMT") continue;
00145 
00146           for (script_number = 0;
00147                script_number < use->scripts.size ();
00148                script_number++)
00149             {
00150               Script& script = use->scripts[script_number];
00151 
00152               if (script.type == SetupScript)
00153                 {
00154                   if (script.print (mode, use)) cout << "; ";
00155                 }
00156             }
00157         }
00158     }
00159 
00160   {
00161     const Use& use = Use::current ();
00162 
00163     for (script_number = 0;
00164          script_number < use.scripts.size ();
00165          script_number++)
00166       {
00167         Script& script = use.scripts[script_number];
00168 
00169         if (script.type == SetupScript)
00170           {
00171             if (script.print (mode, &use)) cout << "; ";
00172           }
00173       }
00174   }
00175 }
00176 
00177 /*----------------------------------------------------------*/
00178 void Script::clear_all ()
00179 /*----------------------------------------------------------*/
00180 {
00181 }
00182 
00183 /*----------------------------------------------------------*/
00184 Script::Script ()
00185 /*----------------------------------------------------------*/
00186 {
00187 }
00188 
00189 /*----------------------------------------------------------*/
00190 Script::~Script ()
00191 /*----------------------------------------------------------*/
00192 {
00193 }
00194 
00195 /*----------------------------------------------------------*/
00196 int Script::print (PrintMode mode, const Use* use)
00197 /*----------------------------------------------------------*/
00198 {
00199   int result = 1;
00200   cmt_string suffix;
00201 
00202   if (name == "") return (0);
00203 
00204   switch (mode)
00205     {
00206       case Csh :
00207         suffix = ".csh";
00208         cout << "source ";
00209         break;
00210       case Sh :
00211         suffix = ".sh";
00212         cout << ". ";
00213         break;
00214     }
00215 
00216   if (name.find (SLASH) == cmt_string::npos)
00217     {
00218       cout << "${" << use->prefix << "ROOT}/";
00219       if (use->style == cmt_style) cout << "cmt/";
00220       else cout << "mgr/";
00221     }
00222 
00223   cout << name << suffix;
00224 
00225   return (result);
00226 }

Generated at Thu Apr 11 16:49:42 2002 for CMT by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000