Commit for development environment setup
This commit is contained in:
624
PROMS/ReferencedObjectsOld/LibSource/Utils/UsrRunTime.cs
Normal file
624
PROMS/ReferencedObjectsOld/LibSource/Utils/UsrRunTime.cs
Normal file
@@ -0,0 +1,624 @@
|
||||
/*********************************************************************************************
|
||||
* Copyright 2004 - Volian Enterprises, Inc. All rights reserved.
|
||||
* Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
|
||||
* ------------------------------------------------------------------------------
|
||||
* $Workfile: UsrRunTime.cs $ $Revision: 9 $
|
||||
* $Author: Jsj $ $Date: 10/31/07 10:11a $
|
||||
*
|
||||
* $History: UsrRunTime.cs $
|
||||
*
|
||||
* ***************** Version 9 *****************
|
||||
* User: Jsj Date: 10/31/07 Time: 10:11a
|
||||
* Updated in $/LibSource/Utils
|
||||
* Bug fix to ExeAdjust()
|
||||
*
|
||||
* ***************** Version 8 *****************
|
||||
* User: Jsj Date: 7/21/06 Time: 2:57p
|
||||
* Updated in $/LibSource/Utils
|
||||
* added comment of logic that might be needed in future.
|
||||
*
|
||||
* ***************** Version 7 *****************
|
||||
* User: Jsj Date: 5/17/05 Time: 11:54a
|
||||
* Updated in $/LibSource/Utils
|
||||
* cleanup
|
||||
*
|
||||
* ***************** Version 6 *****************
|
||||
* User: Kathy Date: 4/21/05 Time: 10:17a
|
||||
* Updated in $/LibSource/Utils
|
||||
* issingleuser
|
||||
*
|
||||
* ***************** Version 5 *****************
|
||||
* User: Kathy Date: 4/12/05 Time: 1:00p
|
||||
* Updated in $/LibSource/Utils
|
||||
* B2004-050: single user needed network info
|
||||
*
|
||||
* ***************** Version 4 *****************
|
||||
* User: Kathy Date: 1/24/05 Time: 2:44p
|
||||
* Updated in $/LibSource/Utils
|
||||
* B2005-004 fixes
|
||||
*
|
||||
* ***************** Version 3 *****************
|
||||
* User: Kathy Date: 1/10/05 Time: 12:57p
|
||||
* Updated in $/LibSource/Utils
|
||||
* B2004-063 fix
|
||||
*
|
||||
* ***************** Version 2 *****************
|
||||
* User: Jsj Date: 11/12/04 Time: 10:32a
|
||||
* Updated in $/LibSource/Utils
|
||||
* Save the user's TEMP dir path ExeAjust() handles TEMP dir and Data Dir
|
||||
*
|
||||
* ***************** Version 1 *****************
|
||||
* User: Kathy Date: 7/27/04 Time: 8:34a
|
||||
* Created in $/LibSource/Utils
|
||||
*********************************************************************************************/
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Windows.Forms;
|
||||
using System.Text;
|
||||
using Org.Mentalis.Files;
|
||||
|
||||
namespace Utils
|
||||
{
|
||||
public enum UserCStatus
|
||||
{
|
||||
PRINACTIVE=0, PRACTIVE=1 // process record is NOT active, active respectively
|
||||
};
|
||||
|
||||
public class UserData
|
||||
{
|
||||
public byte UserStatus;
|
||||
public string UserNetworkID;
|
||||
public string UserName;
|
||||
public string UserPhone1;
|
||||
public string UserPhone2;
|
||||
public string UserLoc1;
|
||||
public string UserLoc2;
|
||||
public string UserShell; // 1 - vfw; 2 - browser; 3 - 32-bit browser
|
||||
public string UserProcess;
|
||||
|
||||
// the first constructor loads data from a user's cfg file
|
||||
public UserData(string ucfgpath)
|
||||
{
|
||||
if (File.Exists(ucfgpath)==false) return;
|
||||
// create an xml node from the [User Data] in the cfg file & transfer
|
||||
// to this. Note that the UserNetworkID is not set until the serial
|
||||
// number is read to determine whether in multi-user-mode (B2004-050)
|
||||
PrivateProfile ppUserData = new PrivateProfile(ucfgpath);
|
||||
UserName=ppUserData.Attr("User Data","UserName");
|
||||
UserPhone1=ppUserData.Attr("User Data","UserPhone1");
|
||||
UserPhone2=ppUserData.Attr("User Data","UserPhone2");
|
||||
UserLoc1=ppUserData.Attr("User Data","UserLoc1");
|
||||
UserLoc2=ppUserData.Attr("User Data","UserLoc2");
|
||||
char tmp = '\x03';
|
||||
UserShell = tmp.ToString(); // 1 - vfw; 2 - browser; 3 - 32-bit browser
|
||||
UserProcess="";
|
||||
ppUserData=null;
|
||||
}
|
||||
|
||||
public void SetNetworkID(string ucfgpath, bool inmultiuser)
|
||||
{
|
||||
// create an xml node from the [User Data] in the cfg file & transfer
|
||||
// to this.
|
||||
PrivateProfile ppUserData = new PrivateProfile(ucfgpath);
|
||||
UserNetworkID=ppUserData.Attr("User Data","UserNetworkID");
|
||||
if (inmultiuser && (UserNetworkID == "" || UserNetworkID==null))
|
||||
{
|
||||
MessageBox.Show("Invalid UserNetworkID from " + ucfgpath +", set before reexecuting VE-PROMS.","VE-PROMS Error");
|
||||
Environment.Exit(-1);
|
||||
}
|
||||
ppUserData=null;
|
||||
}
|
||||
// the next constructor gets the input 'nth' record from the dat file (dat file is
|
||||
// passed in via a FileStream
|
||||
public UserData(FileStream dfs, int n)
|
||||
{
|
||||
// seek to the position as defined by n.
|
||||
long skpos = (long)(n * 140); // 140 is the size of the record from old proms.
|
||||
dfs.Seek(skpos,SeekOrigin.Begin);
|
||||
byte [] test = new byte[140];
|
||||
dfs.Read(test,0,140);
|
||||
UserStatus = test[0];
|
||||
string tmp = Encoding.ASCII.GetString(test,0,140);
|
||||
UserNetworkID = tmp.Substring(1,9).Replace('\0',' ').Trim();
|
||||
UserName = tmp.Substring(10,31).Replace('\0',' ').Trim();
|
||||
UserPhone1 = tmp.Substring(41,16).Replace('\0',' ').Trim();
|
||||
UserPhone2 = tmp.Substring(57,16).Replace('\0',' ').Trim();
|
||||
UserLoc1 = tmp.Substring(73,31).Replace('\0',' ').Trim();
|
||||
UserLoc2 = tmp.Substring(104,31).Replace('\0',' ').Trim();
|
||||
UserShell = tmp.Substring(135,2).Replace('\0',' ').Trim();
|
||||
UserProcess = tmp.Substring(137,3).Replace('\0',' ').Trim();
|
||||
}
|
||||
|
||||
// write this user data out to the filestream at the current position in file
|
||||
// defined in dfs
|
||||
public void Write(FileStream dfs)
|
||||
{
|
||||
dfs.WriteByte(UserStatus);
|
||||
byte[] btmp = Encoding.ASCII.GetBytes(UserNetworkID.PadRight(9,'\0'));
|
||||
dfs.Write(btmp,0,9);
|
||||
btmp = Encoding.ASCII.GetBytes(UserName.PadRight(31,'\0'));
|
||||
dfs.Write(btmp,0,31);
|
||||
btmp = Encoding.ASCII.GetBytes(UserPhone1.PadRight(16,'\0'));
|
||||
dfs.Write(btmp,0,16);
|
||||
btmp = Encoding.ASCII.GetBytes(UserPhone2.PadRight(16,'\0'));
|
||||
dfs.Write(btmp,0,16);
|
||||
btmp = Encoding.ASCII.GetBytes(UserLoc1.PadRight(31,'\0'));
|
||||
dfs.Write(btmp,0,31);
|
||||
btmp = Encoding.ASCII.GetBytes(UserLoc2.PadRight(31,'\0'));
|
||||
dfs.Write(btmp,0,31);
|
||||
btmp = Encoding.ASCII.GetBytes(UserShell.PadRight(2,'\0'));
|
||||
dfs.Write(btmp,0,2);
|
||||
btmp = Encoding.ASCII.GetBytes(UserProcess.PadRight(3,'\0'));
|
||||
dfs.Write(btmp,0,3);
|
||||
}
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Summary description for UserRunTime. This class contains all pertinent information
|
||||
/// for the runtime for this instance of the program, including cfg, paths, menu file,
|
||||
/// security, serial number, options, etc.
|
||||
/// </summary>
|
||||
public class UserRunTime
|
||||
{
|
||||
public string exepath;
|
||||
public string syspath;
|
||||
public string netsyspath;
|
||||
public string TempDirPath;
|
||||
|
||||
public string ucfgpath; // user config file name
|
||||
public string appcfgpath; // app config file name
|
||||
|
||||
public Security sec;
|
||||
public SerialNo SerialNumber;
|
||||
public string OptionsFile;
|
||||
public string initials; // user login name
|
||||
public string UserID; // cfg name and/or login
|
||||
public MenuXML menuwinXML;
|
||||
public MenuXML menuwin2XML;
|
||||
public string myUserNetworkID;
|
||||
public UserData myUserData;
|
||||
public bool InMultiUserMode;
|
||||
|
||||
// make some form properties here, such as color. - make need it's own class,
|
||||
//
|
||||
public UserRunTime()
|
||||
{
|
||||
menuwin2XML = null;
|
||||
SetExeName();
|
||||
// load in xml list of plants. Then do exist tests to see if they
|
||||
// exist on the datapath.
|
||||
menuwinXML = new MenuXML(syspath + "\\menuwin.xml");
|
||||
}
|
||||
|
||||
public void SetSecurity(Security isec)
|
||||
{
|
||||
// set the user's run time security settings. also, flag whether this user is
|
||||
// running in multi user mode (just so we don't have to keep making this check
|
||||
// later)
|
||||
sec = isec;
|
||||
// Do this separate (SetUserMode()) to remove interdependent logic path between
|
||||
// security(vesam), user CFG file, and the serial number
|
||||
// InMultiUserMode = (SerialNumber.GetSNOption((uint)Utils.SerialNo.SN_Flags.SN_NETWORK_ON)>0)?true:false;
|
||||
}
|
||||
|
||||
public void SetUserMode()
|
||||
{
|
||||
if (SerialNumber.SerialNum != -1)
|
||||
InMultiUserMode = (SerialNumber.GetSNOption((uint)Utils.SerialNo.SN_Flags.SN_NETWORK_ON)>0)?true:false;
|
||||
if (InMultiUserMode) myUserData.SetNetworkID(ucfgpath, InMultiUserMode);
|
||||
}
|
||||
|
||||
private bool IsSingleUserMode()
|
||||
{
|
||||
// Need to do:
|
||||
// This needs to check if a lock is currently set as well
|
||||
// - jsj 7/20/06
|
||||
return !InMultiUserMode;
|
||||
}
|
||||
|
||||
// Adjust the input file with the required pathname as follows:
|
||||
// '~': (system path) i.e. c:\VE-PROMS
|
||||
// '@': (executable path) i.e. c:\VE-PROMS\BIN
|
||||
// '\342': current data directory i.e. c:\VEHPR1B\PROCS
|
||||
// '\347': resolve for single user mode, append tempdir onto data dir i.e. TEMPS\JOHN____.D00
|
||||
public string ExeAdjust(string str)
|
||||
{
|
||||
if (exepath==null)SetExeName();
|
||||
|
||||
// This logic will allow me to combine the use of our special
|
||||
// tokens. For example, I needed a user temp directory in the
|
||||
// VE-PROMS root for the Search Across Procedure Sets option:
|
||||
// "~\374results" --> C:\VE-PROMS\TEMPS\JOHN____.D00\RESUTLS
|
||||
|
||||
StringBuilder exebuff = new StringBuilder();
|
||||
StringBuilder exetkn = new StringBuilder(str);
|
||||
string exetkn_str = exetkn.ToString();
|
||||
int pos = 0;
|
||||
char[] tchar = "~@\xE7\xE2".ToCharArray();
|
||||
/** Bug Fix: B2007-015
|
||||
* If a short file/directory name contained a ~ character, it was
|
||||
* being processed, when it should not have.
|
||||
* i.e. we were getting the current directory, then looping back up
|
||||
* and searching the directory string (finding a ~ char)
|
||||
*
|
||||
* I added logic to use a starting position in the IndexOfAny() function
|
||||
* so that we can skip past the portions already processes.
|
||||
*/
|
||||
while ((pos=exetkn_str.IndexOfAny(tchar,pos))>-1)
|
||||
{
|
||||
char[] chr;
|
||||
string curdir = Directory.GetCurrentDirectory(); // for use with '\xE2'
|
||||
chr = new char[exetkn_str.Length];
|
||||
chr = exetkn_str.ToCharArray();
|
||||
exetkn.Remove(pos,1);
|
||||
|
||||
switch (chr[0])
|
||||
{
|
||||
case '~': exetkn.Insert(pos,syspath+"\\"); // i.e. c:\VE-PROMS
|
||||
pos += syspath.Length +1;
|
||||
break;
|
||||
case '@': exetkn.Insert(pos,exepath+"\\"); // i.e. c:\VE-PROMS\BIN
|
||||
pos += exepath.Length + 1;
|
||||
break;
|
||||
case '\xE2': // case '\342':
|
||||
exetkn.Insert(pos,curdir+"\\"); // i.e. c:\VEHPR1B\PROCS
|
||||
pos += curdir.Length + 1;
|
||||
break;
|
||||
case '\xE7': // case '\347':
|
||||
if (!IsSingleUserMode()&& TempDirPath!=null)
|
||||
{
|
||||
exetkn.Insert(pos,TempDirPath+"\\"); // i.e. TEMPS\JOHN____.D00
|
||||
pos += TempDirPath.Length + 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
exetkn_str = exetkn.ToString();
|
||||
}
|
||||
return exetkn.ToString();
|
||||
}
|
||||
|
||||
private void SetExeName()
|
||||
{
|
||||
ShortName sname = new ShortName(System.Environment.CommandLine);
|
||||
string cmdlinepath = sname.ShortFileName;
|
||||
string upbuff = cmdlinepath.ToUpper();
|
||||
string tmp = upbuff.Substring(1,upbuff.LastIndexOf("\\")-1);
|
||||
int idx = tmp.IndexOf("VE-PROMS.NET");
|
||||
if (idx > 0)
|
||||
{
|
||||
exepath = tmp.Substring(0,idx+8) + tmp.Substring(idx+12);
|
||||
syspath = exepath.Substring(0,exepath.IndexOf("\\BIN"));
|
||||
netsyspath = syspath + ".NET";
|
||||
}
|
||||
else
|
||||
{
|
||||
exepath = tmp;
|
||||
syspath = exepath.Substring(0,exepath.IndexOf("\\BIN"));
|
||||
netsyspath = syspath + ".NET";
|
||||
}
|
||||
}
|
||||
|
||||
public void SetAppConfig(string pth)
|
||||
{
|
||||
appcfgpath = pth;
|
||||
}
|
||||
|
||||
public bool SetUserConfig()
|
||||
{
|
||||
bool Rtnval = true;
|
||||
PrivateProfile Veproms_ini = new PrivateProfile(ExeAdjust("~veproms.ini"));
|
||||
// Find the UserId (not the number, he name/initials)
|
||||
if (UserID==null || UserID.Equals(""))
|
||||
{
|
||||
// see if it's defined via an environment variable
|
||||
UserID = System.Environment.GetEnvironmentVariable("userid");
|
||||
if (UserID == null)
|
||||
{
|
||||
// Check the VEPROMS.INI file
|
||||
// UserID = Veproms_ini.Attr("/ini/section[@name='veconfig']/param[@name='userid']/@value");
|
||||
UserID = Veproms_ini.Attr("veconfig","userid");
|
||||
}
|
||||
if (UserID == null || UserID.Equals(""))
|
||||
{
|
||||
if (sec.initials != null && !sec.initials.Equals(""))
|
||||
{
|
||||
// default to the user's login name
|
||||
UserID = sec.initials;
|
||||
}
|
||||
else
|
||||
{
|
||||
// default to VEPROMS.CFG
|
||||
UserID = "VEPROMS";
|
||||
}
|
||||
}
|
||||
}
|
||||
// Fing the VECONFIG path
|
||||
ucfgpath=System.Environment.GetEnvironmentVariable("veconfig");
|
||||
// If VECONFIG environment variable not set then check the
|
||||
// VEPROMS.INI file for VECONFIG settings.
|
||||
if (ucfgpath == null || ucfgpath.Equals(""))
|
||||
{
|
||||
// ucfgpath = Veproms_ini.Attr("/ini/section[@name='veconfig']/param[@name='file']/@value");
|
||||
ucfgpath = Veproms_ini.Attr("veconfig","file");
|
||||
if (ucfgpath==null || ucfgpath.Equals(""))
|
||||
{
|
||||
// still no path, use default cfg file path
|
||||
ucfgpath = ExeAdjust("~CONFIG");
|
||||
}
|
||||
}
|
||||
|
||||
if (ucfgpath != null)
|
||||
{
|
||||
string tmp_UID="";
|
||||
// See it the VECONFIG path includes a CFG file name.
|
||||
// if no CFG file name, then build one based on userid
|
||||
bool atroot = ucfgpath.EndsWith(":\\");
|
||||
if (!atroot)
|
||||
{
|
||||
if (ucfgpath.EndsWith("\\"))
|
||||
{
|
||||
// trim the ending backslash
|
||||
ucfgpath = ucfgpath.Substring(0,ucfgpath.Length-1);
|
||||
}
|
||||
}
|
||||
//See if we need to build a CFG file name
|
||||
if (atroot || Directory.Exists(ucfgpath))
|
||||
{
|
||||
// use the no more than the first 8 chars of the userid
|
||||
tmp_UID = (UserID.Length > 8)?UserID.Substring(0,8) : UserID;
|
||||
|
||||
// Build the CFG file name and append to the VECONFIG path
|
||||
ucfgpath = ucfgpath + "\\" + tmp_UID + ".CFG";
|
||||
}
|
||||
}
|
||||
if (File.Exists(ucfgpath))
|
||||
myUserData = new UserData(ucfgpath);
|
||||
else
|
||||
{
|
||||
// error - cfg file does not exist
|
||||
Rtnval = false;
|
||||
MessageBox.Show("Configuration file:\n\n" + ucfgpath + "\n\nDoes not exist","Missing CFG file");
|
||||
}
|
||||
return Rtnval;
|
||||
}
|
||||
|
||||
public void FreeMenuWinXML()
|
||||
{
|
||||
menuwinXML=null;
|
||||
}
|
||||
public void LoadMenuWin2()
|
||||
{
|
||||
if (menuwin2XML == null)
|
||||
menuwin2XML = new MenuXML(syspath + "\\menuwin2.xml");
|
||||
// menuwin2XML = new MenuXML("e:\\ve-proms\\menuwin2.xml");
|
||||
}
|
||||
public void FreeMenuWin2XML()
|
||||
{
|
||||
menuwin2XML=null;
|
||||
}
|
||||
|
||||
// The following methods update the cfg file (delete item, add item & mod)
|
||||
//public bool DeletePathFromCfg(string delpth)
|
||||
//{
|
||||
// IniReader in1 = new IniReader(ucfgpath);
|
||||
// string curpath = in1.ReadString("Menu","DataPath","");
|
||||
// string modpath = curpath.Replace(delpth,"");
|
||||
// inifile.WriteINIKeyValueStr("Menu","DataPath",modpath,ucfgpath);
|
||||
// return true;
|
||||
//}
|
||||
|
||||
//public void AddPathToCfg(string pth)
|
||||
//{
|
||||
// string newpath=null;
|
||||
// INIFile inifile = new INIFile();
|
||||
// string curpath = inifile.GetINIKeyValueStr("Menu","DataPath","",132,ucfgpath);
|
||||
// string tmp = curpath.TrimEnd(" \t".ToCharArray());
|
||||
// // If none exists, just add that entered, if it ends with ';', don't add another
|
||||
// if (tmp==null||tmp=="")
|
||||
// newpath = pth;
|
||||
// else if (tmp.Substring(tmp.Length-1,1)==";")
|
||||
// newpath = tmp + pth;
|
||||
// else
|
||||
// newpath = tmp+";"+pth;
|
||||
// inifile.WriteINIKeyValueStr("Menu","DataPath",newpath,ucfgpath);
|
||||
//}
|
||||
|
||||
//public void ModTitleToCfg(string oldtitle, string newtitle)
|
||||
//{
|
||||
// INIFile inifile = new INIFile();
|
||||
// string curpath = inifile.GetINIKeyValueStr("Menu","DataPath","",132,ucfgpath);
|
||||
// string newpath=curpath.Replace(oldtitle,newtitle);
|
||||
// inifile.WriteINIKeyValueStr("Menu","DataPath",newpath,ucfgpath);
|
||||
//}
|
||||
|
||||
// Check if plant (defined by location) is in the menuwin file. Return 0 if not,
|
||||
// 1 if in file and -1 if error reading file.
|
||||
public int IsInMenuWin(string location)
|
||||
{
|
||||
// see if this plant is already in the file, check menuwin
|
||||
// and if there, assume in both.
|
||||
try
|
||||
{
|
||||
// Create an instance of StreamReader to read from a file.
|
||||
// The using statement also closes the StreamReader.
|
||||
using (StreamReader sr = new StreamReader(syspath+"\\menuwin"))
|
||||
{
|
||||
string line;
|
||||
while ((line = sr.ReadLine()) != null)
|
||||
{
|
||||
int indx;
|
||||
indx = line.ToUpper().IndexOf(location.ToUpper());
|
||||
if (indx>-1)
|
||||
{
|
||||
sr.Close();
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// Let the user know what went wrong.
|
||||
Console.WriteLine("Could not test " + e.Message + " for plant existence in menuwin file");
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public bool AddToMenuWin(string title,string location)
|
||||
{
|
||||
int inmenufile = IsInMenuWin(location);
|
||||
if (inmenufile==-1)return false; // error checking for it
|
||||
if (inmenufile==1)return true; // already there.
|
||||
|
||||
// make backup files in case of failure.
|
||||
FileInfo menuwinbak = new FileInfo(syspath+"\\menuwin");
|
||||
menuwinbak.CopyTo(syspath+"\\menuwin.BAK",true);
|
||||
menuwinbak=null;
|
||||
|
||||
// add the title and location to the menuwin menuwin.xml files.
|
||||
// menuwin first.
|
||||
FileStream fs = new FileStream(syspath+"\\menuwin",
|
||||
FileMode.Open, FileAccess.ReadWrite, FileShare.None);
|
||||
|
||||
// if the file couldn't open, give an error.
|
||||
if (fs == null)
|
||||
{
|
||||
MessageBox.Show("Could not add plant to menuwin file.","VE-PROMS");
|
||||
menuwinbak = new FileInfo(syspath+"\\menuwin.BAK");
|
||||
menuwinbak.Delete();
|
||||
return false;
|
||||
}
|
||||
// go to last character of file & see if we have a /r/n. There
|
||||
// needs to be a single newline between plants in the menuwin file
|
||||
// or an error will occur.
|
||||
fs.Seek(-2,SeekOrigin.End);
|
||||
StreamReader tmpReader = new StreamReader(fs);
|
||||
int tmpi1 = tmpReader.Peek();
|
||||
bool hasnewline=false;
|
||||
if (tmpi1==0xD)hasnewline=true;
|
||||
fs.Seek(0,SeekOrigin.End);
|
||||
|
||||
StreamWriter swFromFileStream = new StreamWriter(fs);
|
||||
if (hasnewline)
|
||||
swFromFileStream.Write(title);
|
||||
else
|
||||
swFromFileStream.Write("\r\n"+title);
|
||||
string tmpl = "\r\n{t}" + location + " menu ~menu1a\r\n";
|
||||
swFromFileStream.Write(tmpl);
|
||||
swFromFileStream.Flush();
|
||||
swFromFileStream.Close();
|
||||
fs.Close();
|
||||
|
||||
// now add menuwin.xml text, add this before the end tags for
|
||||
// system attach & menuwin (i.e. that's the seek part of this
|
||||
// subtracting from end of file the number of characters for
|
||||
// these two tags.
|
||||
// make backup files in case of failure.
|
||||
FileInfo menuwinxbak = new FileInfo(syspath+"\\menuwin");
|
||||
menuwinxbak.CopyTo(syspath+"\\menuwinx.BAK",true);
|
||||
menuwinxbak=null;
|
||||
|
||||
fs = new FileStream(syspath+"\\menuwin.xml",
|
||||
FileMode.Open, FileAccess.Write, FileShare.None);
|
||||
if (fs == null)
|
||||
{
|
||||
MessageBox.Show("Could not add plant to menuwin.xml file.","VE-PROMS");
|
||||
//delete menuwin & rename the bak file.
|
||||
menuwinbak = new FileInfo(syspath+"\\menuwin");
|
||||
menuwinbak.Delete();
|
||||
menuwinbak = null;
|
||||
menuwinbak = new FileInfo(syspath+"\\menuwin.BAK");
|
||||
menuwinbak.CopyTo(syspath+"\\menuwin");
|
||||
menuwinbak.Delete();
|
||||
menuwinxbak = new FileInfo(syspath+"\\menuwinx.BAK");
|
||||
menuwinxbak.Delete();
|
||||
return false;
|
||||
}
|
||||
long flen = fs.Length;
|
||||
fs.SetLength(flen-27); //remove tags.
|
||||
fs.Seek(0,SeekOrigin.End);
|
||||
swFromFileStream = new StreamWriter(fs);
|
||||
swFromFileStream.Write("<Plant>\r\n<MenuName>");
|
||||
swFromFileStream.Write(title);
|
||||
swFromFileStream.Write("</MenuName>\r\n<TemplateName>{t}");
|
||||
swFromFileStream.Write(location);
|
||||
swFromFileStream.Write(" menu menu1a</TemplateName>\r\n</Plant>\r\n");
|
||||
swFromFileStream.Write("</SystemAttach>\r\n</MenuWin>");
|
||||
|
||||
swFromFileStream.Flush();
|
||||
swFromFileStream.Close();
|
||||
fs.Close();
|
||||
menuwinbak = new FileInfo(syspath+"\\menuwin.BAK");
|
||||
menuwinbak.Delete();
|
||||
menuwinxbak = new FileInfo(syspath+"\\menuwinx.BAK");
|
||||
menuwinxbak.Delete();
|
||||
// reload so that the new plant node gets added to the xml tree.
|
||||
menuwinXML = null;
|
||||
menuwinXML = new MenuXML(syspath + "\\menuwin.xml");
|
||||
MessageBox.Show("Please send \\ve-proms\\menuwin & \\ve-proms\\menuwin.xml files to Volian.","VE-PROMS");
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool ModMenuWin(string newtitle, string oldtitle)
|
||||
{
|
||||
// replace the oldtitle with the new in both the menuwin file
|
||||
// and the menuwin.xml file.
|
||||
FileInfo menuwinbak = new FileInfo(syspath+"\\menuwin");
|
||||
menuwinbak.CopyTo(syspath+"\\menuwin.BAK",true);
|
||||
menuwinbak=null;
|
||||
|
||||
// read the whole file, replace the plant title string & save the file.
|
||||
StreamReader sr = File.OpenText(syspath+"\\menuwin");
|
||||
string input;
|
||||
if ((input=sr.ReadToEnd())!=null)
|
||||
{
|
||||
sr.Close();
|
||||
string output = input.Replace(oldtitle,newtitle);
|
||||
StreamWriter sw = new StreamWriter(syspath+"\\menuwin",false);
|
||||
sw.Write(output);
|
||||
sw.Close();
|
||||
}
|
||||
else
|
||||
{
|
||||
sr.Close();
|
||||
MessageBox.Show("Could not update menuwin file with new plant title","VE-PROMS");
|
||||
menuwinbak = new FileInfo(syspath+"\\menuwin.BAK");
|
||||
menuwinbak.CopyTo(syspath+"\\menuwin",true);
|
||||
menuwinbak.Delete();
|
||||
return false;
|
||||
}
|
||||
|
||||
// now do the xml file.
|
||||
menuwinbak = new FileInfo(syspath+"\\menuwin.xml");
|
||||
menuwinbak.CopyTo(syspath+"\\menuwinx.BAK",true);
|
||||
menuwinbak=null;
|
||||
|
||||
// read the whole file, replace the plant title string & save the file.
|
||||
sr = File.OpenText(syspath+"\\menuwin.xml");
|
||||
if ((input=sr.ReadToEnd())!=null)
|
||||
{
|
||||
sr.Close();
|
||||
string output = input.Replace(oldtitle,newtitle);
|
||||
StreamWriter sw = new StreamWriter(syspath+"\\menuwin.xml",false);
|
||||
sw.Write(output);
|
||||
sw.Close();
|
||||
}
|
||||
else
|
||||
{
|
||||
sr.Close();
|
||||
MessageBox.Show("Could not update menuwin.xml file with new plant title","VE-PROMS");
|
||||
menuwinbak = new FileInfo(syspath+"\\menuwin.BAK");
|
||||
menuwinbak.CopyTo(syspath+"\\menuwin",true);
|
||||
menuwinbak.Delete();
|
||||
menuwinbak = new FileInfo(syspath+"\\menuwinx.BAK");
|
||||
menuwinbak.CopyTo(syspath+"\\menuwin.xml",true);
|
||||
menuwinbak.Delete();
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user