Program.cs~RFab5f66.TMP 12.4 KB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Windows.Forms;
using Microsoft.VisualStudio.VCProjectEngine;
using System.Threading;

namespace Convert_vc6TOvc9_cmd
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            string oTxt = "";
            //string argsStr = String.Join(" ", args);
            string tipocompilazione = "0"; //solo .NET
            //string tipocompilazione = "1"; //solo .COM
            //string tipocompilazione = "2"; //.COM e .NET
            if (args.Length > 1)
                tipocompilazione = args[1];
            string[] sep = { "," };
            string[] prjConv = args[0].Split(sep, StringSplitOptions.None);
            for (int i = 0; i < prjConv.Length; i++)
            {
                Console.WriteLine("Start: [" + prjConv[i] + "]");
                string sExecute = "";
                DirectoryInfo diIn = new DirectoryInfo(prjConv[i]);
                FileInfo[] dspFile = diIn.GetFiles("*.dsp");
                sExecute = execute(prjConv[i] + @"\" + dspFile[0].Name, dspFile[0].Name);
                Console.WriteLine ("Convert: [" + sExecute.ToString() + "]");
                if (sExecute != "CATCH")
                {
                    Console.WriteLine("ReplaceVcproj");
                    replaceVcproj(diIn.FullName + @"\" + sExecute.Replace(".dsp", ""), sExecute.Replace(".dsp", ""));
                    //Replace _L( in SOURCEFILE
                    DirectoryInfo diIn2 = new DirectoryInfo(prjConv[i] + "\\src");
                    FileInfo[]  coFile = diIn2.GetFiles("Co*.cpp");
                    FileStream fs = File.Open(coFile[0].FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                    StreamReader reader = new StreamReader(fs);
                    string contentFile = reader.ReadToEnd();
                    if (contentFile.IndexOf("_L(") > -1)
                    {
                        Console.WriteLine("Replace _L");
                        contentFile = contentFile.Replace("_L(", "_T(");
                        reader.Close();
                        fs.Close();
                        FileInfo tw = new FileInfo(coFile[0].FullName);
                        StreamWriter texW = tw.CreateText();
                        texW.Write(contentFile);
                        texW.Close();
                    }
                    else
                    {
                        reader.Close();
                        fs.Close();
                    }
                    Console.WriteLine("ReplaceVcproj: end");
                }
                else
                {
                    //traccio ko
                    Console.WriteLine("execute: ko");
                }

            }

        }

        static bool replaceVcproj(string path, string sExecute)
        {
            FileInfo fi = new FileInfo(path);
            StreamReader sw = fi.OpenText();
            string sLine;
            string tmp;
            string sLineAll = "";
            bool inizioAnalisi = false;
            string countTmp = "000000";
            bool ok = false;
            bool okFirstTime = true;
            string[] replaceStr = {@"Name=""Svil Debug|Win32", 
                                  @"ATLMinimizesCRunTimeLibraryUsage=""false",
                                  @"PreprocessorDefinitions=""WIN32;_DEBUG;_WINDOWS;_USRDLL",
                                  @"RuntimeLibrary=""0",
                                  @"AdditionalDependencies=""qtlbased.lib libcpmtd.lib atl.lib LIBCMTD.lib COMSUPP.lib xlibd.lib",
                                  @"IgnoreAllDefaultLibraries=""true",
                                  @"&#x0A;copy $(TargetPath)",
                                  @"AdditionalDependencies=""qtlbased.lib libcpmtd.lib atl.lib LIBCMTD.lib COMSUPP.lib",
                                  @"AdditionalDependencies=""Xlibd.lib qtlbased.lib libcpmtd.lib atl.lib LIBCMTD.lib COMSUPP.lib",
                                  @"AdditionalDependencies=""qtlbased.lib libcpmtd.lib atl.lib LIBCMTD.lib Xlibd.lib COMSUPP.lib"
                                  };
            string[] replaceStrCon = {"", 
                                  @"CharacterSet=""2""",
                                  @"PreprocessorDefinitions=""WIN32;_DEBUG;_WINDOWS;""",
                                  @"RuntimeLibrary=""3""",
                                  @"AdditionalDependencies=""qtlbased.lib xlibd.lib""",
                                  @"IgnoreAllDefaultLibraries=""false""",
                                  @"&#x0A;copy &quot;$(TargetPath)&quot;",
                                  @"AdditionalDependencies=""qtlbased.lib""",
                                  @"AdditionalDependencies=""qtlbased.lib xlibd.lib""",
                                  };
            string[] replaceStrCon2 = {"", 
                                  "",
                                  "",
                                  @"EnableFunctionLevelLinking=""false""",
                                  "",
                                  @"IgnoreDefaultLibraryNames=""msvcprtd.lib libcmtd.lib"""
                                  };
            StringBuilder sb = new StringBuilder();
            sb.AppendFormat("\t\t\t\t");
            while ((sLine = sw.ReadLine()) != null)
            {
                if (sLine.IndexOf(replaceStr[0]) > 0 && okFirstTime)
                {
                    inizioAnalisi = true;
                    countTmp = countTmp.Remove(0, 1);
                    countTmp = countTmp.Insert(0, "1");
                    okFirstTime = false;
                }
                if (inizioAnalisi)
                {
                    if (sLine.ToLower().IndexOf(replaceStr[1].ToLower()) > 0)
                    {
                        tmp = sLine;
                        tmp = tmp.Replace(replaceStr[1], replaceStrCon[1]);
                        tmp = sb.ToString() + replaceStrCon[1];
                        sLineAll = sLineAll + tmp + "\r";
                        countTmp = countTmp.Remove(1, 1);
                        countTmp = countTmp.Insert(1, "1");
                    }
                    else if (sLine.ToLower().IndexOf(replaceStr[2].ToLower()) > 0)
                    {
                        tmp = sLine;
                        tmp = tmp.Replace(replaceStr[2], replaceStrCon[2]);
                        tmp = sb.ToString() + replaceStrCon[2];
                        sLineAll = sLineAll + tmp + "\r";
                        countTmp = countTmp.Remove(2, 1);
                        countTmp = countTmp.Insert(2, "1");
                    }
                    else if (sLine.ToLower().IndexOf(replaceStr[3].ToLower()) > 0)
                    {
                        tmp = sLine;
                        tmp = tmp.Replace(replaceStr[3], replaceStrCon[3]);
                        tmp = sb.ToString() + replaceStrCon[3];
                        sLineAll = sLineAll + tmp + "\r";
                        tmp = sLine;
                        tmp = tmp.Replace(replaceStr[3], replaceStrCon2[3]);
                        tmp = sb.ToString() + replaceStrCon2[3];
                        sLineAll = sLineAll + tmp + "\r";
                        countTmp = countTmp.Remove(3, 1);
                        countTmp = countTmp.Insert(3, "1");
                    }
                    else if (sLine.ToLower().IndexOf(replaceStr[4].ToLower()) > 0 || sLine.ToLower().IndexOf(replaceStr[7].ToLower()) > 0 || sLine.ToLower().IndexOf(replaceStr[8].ToLower()) > 0 || sLine.ToLower().IndexOf(replaceStr[9].ToLower()) > 0)
                    {
                        int eccDovePrendo;
                        if (sLine.ToLower().IndexOf(replaceStr[4].ToLower()) > 0)
                        {
                            eccDovePrendo = 4;
                        }
                        else if (sLine.ToLower().IndexOf(replaceStr[7].ToLower()) > 0)
                        {
                            eccDovePrendo = 7;
                        }
                        else
                        {
                            eccDovePrendo = 8;
                        }
                        tmp = sLine;
                        tmp = tmp.Replace(replaceStr[eccDovePrendo], replaceStrCon[eccDovePrendo]);
                        tmp = sb.ToString() + replaceStrCon[eccDovePrendo];
                        sLineAll = sLineAll + tmp + "\r";
                        countTmp = countTmp.Remove(4, 1);
                        countTmp = countTmp.Insert(4, "1");
                    }
                    else if (sLine.ToLower().IndexOf(replaceStr[5].ToLower()) > 0)
                    {
                        tmp = sLine;
                        tmp = tmp.Replace(replaceStr[5], replaceStrCon[5]);
                        tmp = sb.ToString() + replaceStrCon[5];
                        sLineAll = sLineAll + tmp + "\r";
                        tmp = sLine;
                        tmp = tmp.Replace(replaceStr[5], replaceStrCon2[5]);
                        tmp = sb.ToString() + replaceStrCon2[5];
                        sLineAll = sLineAll + tmp + "\r";
                        countTmp = countTmp.Remove(5, 1);
                        countTmp = countTmp.Insert(5, "1");
                    }
                    else if (sLine.ToLower().IndexOf(replaceStr[6].ToLower()) > 0)
                    {
                        tmp = sLine;
                        tmp = tmp.Replace(replaceStr[6], replaceStrCon[6]);
                        //tmp = sb.ToString() + replaceStrCon[6];
                        sLineAll = sLineAll + tmp + "\r";
                    }
                    else if (sLine.IndexOf("</Configuration>") > 0)
                    {
                        sLineAll = sLineAll + sLine + "\r";
                        if (countTmp.IndexOf("0") >= 0)
                        {
                            //Manca qualche riferimento
                            inizioAnalisi = false;
                        }
                        else
                        {
                            //Tutto ok
                            ok = true;
                            inizioAnalisi = false;
                        }
                    }
                    else
                    {
                        if (sLine.IndexOf(replaceStr[6]) > 0)
                        {
                            tmp = sLine;
                            tmp = tmp.Replace(replaceStr[6], replaceStrCon[6]);
                            sLineAll = sLineAll + tmp + "\r";
                        }
                        else
                        {
                            sLineAll = sLineAll + sLine + "\r";
                        }
                    }
                }
                else
                {
                    if (sLine.IndexOf(replaceStr[6]) > 0)
                    {
                        tmp = sLine;
                        tmp = tmp.Replace(replaceStr[6], replaceStrCon[6]);
                        sLineAll = sLineAll + tmp + "\r";
                    }
                    else
                    {
                        sLineAll = sLineAll + sLine + "\r";
                    }
                }
            }
            sw.Close();
            if (ok)
            {
                StreamWriter swToFile = new StreamWriter(path);
                swToFile.Write(sLineAll);
                swToFile.Flush();
                swToFile.Close();
                return true;
            }
            else
            {
                return false;
            }
        }


        static string execute(string path, string nameDsp)
        {
            try
            {
                Console.WriteLine("Convert start: [" + nameDsp + "]");
                Microsoft.VisualStudio.VCProjectEngine.VCProjectEngineObject vcPengine = new VCProjectEngineObject();
                VCProject obj = vcPengine.LoadProject(path) as VCProject;
                obj.ProjectFile = nameDsp.Replace(".dsp", "") + ".vcproj";
                obj.Save();
                return nameDsp + ".vcproj";
            }
            catch (Exception ecc)
            {
                Console.WriteLine("Convert exception: [" + ecc.Message + "]");
                return "CATCH";

            }

        }

    }
}