296 lines
12 KiB
C#
296 lines
12 KiB
C#
/*********************************************************************************************
|
|
* Copyright 2004 - Volian Enterprises, Inc. All rights reserved.
|
|
* Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
|
|
* ------------------------------------------------------------------------------
|
|
* $Workfile: SerialNo.cs $ $Revision: 7 $
|
|
* $Author: Jsj $ $Date: 12/06/07 3:32p $
|
|
*
|
|
* $History: SerialNo.cs $
|
|
*
|
|
* ***************** Version 7 *****************
|
|
* User: Jsj Date: 12/06/07 Time: 3:32p
|
|
* Updated in $/LibSource/Utils
|
|
* turn on backgrounds for point beach
|
|
*
|
|
* ***************** Version 6 *****************
|
|
* User: Jsj Date: 7/18/06 Time: 11:40a
|
|
* Updated in $/LibSource/Utils
|
|
* fixed parse of plant name from SERIAL.NO file
|
|
*
|
|
* ***************** Version 5 *****************
|
|
* User: Jsj Date: 6/29/06 Time: 1:38p
|
|
* Updated in $/LibSource/Utils
|
|
* turned on enhanced backgrounds for byron and braidwood
|
|
*
|
|
* ***************** Version 4 *****************
|
|
* User: Jsj Date: 6/29/06 Time: 1:27p
|
|
* Updated in $/LibSource/Utils
|
|
* turned on Deviations for byron and braidwood
|
|
*
|
|
* ***************** Version 3 *****************
|
|
* User: Jsj Date: 5/17/05 Time: 11:53a
|
|
* Updated in $/LibSource/Utils
|
|
* cleanup
|
|
*
|
|
* ***************** Version 2 *****************
|
|
* User: Kathy Date: 4/12/05 Time: 1:00p
|
|
* Updated in $/LibSource/Utils
|
|
* B2005-019: bad serial num message
|
|
*
|
|
* ***************** Version 1 *****************
|
|
* User: Kathy Date: 7/27/04 Time: 8:34a
|
|
* Created in $/LibSource/Utils
|
|
*********************************************************************************************/
|
|
|
|
using System;
|
|
using System.IO;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
|
|
namespace Utils
|
|
{
|
|
/// <summary>
|
|
/// Summary description for SerialNo.
|
|
/// </summary>
|
|
public class SerialNo
|
|
{
|
|
private string sernofile;
|
|
public int SerialNum;
|
|
private string SerialNumTitle;
|
|
private static byte sum =0xcf;// used in serial number code (nextchar)
|
|
|
|
public enum SN_Flags
|
|
{
|
|
SN_NETWORK_ON =0x0001,
|
|
SN_BACKGROUND_ON =0x0002,
|
|
SN_DEVIATION_ON =0x0004,
|
|
SN_CHECKLISTEXPORT_ON =0x0008,
|
|
SN_REVISIONFUNCTION_ON =0x0010,
|
|
SN_ONLYAPPROVEONCE_ON =0x0020,
|
|
SN_BGEPLANTWIDEOPT_ON =0x0040,
|
|
SN_REVISESTRIPPC_ON =0x0080,
|
|
SN_PROCCOMMENT_ON =0x0400,
|
|
SN_REMOVECHGID_ON =0x0800,
|
|
SN_OPTIONALACCEDIT_ON =0x1000,
|
|
SN_TEMPCHANGE_ON =0X2000,
|
|
SN_VOLIANONLY_ON =0x8000
|
|
};
|
|
|
|
public SN_Flags[] SerialNumberOptionsByPlant=
|
|
{
|
|
/* 0 Volian Enterprises, Inc. */ (SN_Flags)0xFFFF,
|
|
/* 1 Entergy Nuclear Northeast - Indian Point Unit 2 */ SN_Flags.SN_BACKGROUND_ON|SN_Flags.SN_NETWORK_ON,
|
|
/* 2 Virginia Power - Surry (1A) */ SN_Flags.SN_NETWORK_ON,
|
|
/* 3 Virginia Power - North Anna */ SN_Flags.SN_DEVIATION_ON|SN_Flags.SN_NETWORK_ON,
|
|
/* 4 Northern States Power - Prairie Island */ SN_Flags.SN_DEVIATION_ON,
|
|
/* 5 American Electric Power - D. C. Cook - AOPs */ SN_Flags.SN_NETWORK_ON|SN_Flags.SN_BACKGROUND_ON,
|
|
/* 6 Wisconsin Electric Power - Point Beach */ SN_Flags.SN_NETWORK_ON|SN_Flags.SN_BACKGROUND_ON,
|
|
/* 7 Rochester Gas and Electric Corp. - Ginna */ SN_Flags.SN_BACKGROUND_ON,
|
|
/* 8 TUEC - Comanche Peak */ 0,
|
|
/* 9 Entergy Nuclear Northeast - Indian Point Unit 3 */ SN_Flags.SN_BACKGROUND_ON|SN_Flags.SN_NETWORK_ON,
|
|
/*10 Maine Yankee Atomic Power Company - Maine Yankee */ 0,
|
|
/*11 Yankee Atomic Electric - Yankee Rowe */ 0,
|
|
/*12 Wisconsin Public Service Corp.- Kewaunee */ SN_Flags.SN_NETWORK_ON|SN_Flags.SN_BACKGROUND_ON,
|
|
/*13 Wisconsin Public Service Corp.- Kewaunee Operating Procedures*/ SN_Flags.SN_NETWORK_ON|SN_Flags.SN_BACKGROUND_ON,
|
|
/*14 South Carolina Gas and Electric - V.C. Summer */ 0,
|
|
/*15 Louisiana Power and Light - Waterford */ 0,
|
|
/*16 Pacific Gas and Electric - Diablo Canyon */ SN_Flags.SN_OPTIONALACCEDIT_ON,
|
|
/*17 Southern California Edison - San Onofre */ 0,
|
|
/*18 Carolina Power and Light - Robinson */ SN_Flags.SN_NETWORK_ON,/*|SN_BACKGROUND_ON|SN_DEVIATION_ON, */
|
|
/*19 Arkansas Nuclear One - Unit 1 */ 0,
|
|
/*20 Arkansas Nuclear One - Unit 2 */ SN_Flags.SN_NETWORK_ON|SN_Flags.SN_ONLYAPPROVEONCE_ON|SN_Flags.SN_REVISIONFUNCTION_ON|SN_Flags.SN_REVISESTRIPPC_ON|SN_Flags.SN_PROCCOMMENT_ON,
|
|
/*21 Southern Nuclear Operating Company - Vogtle */ SN_Flags.SN_BACKGROUND_ON|SN_Flags.SN_DEVIATION_ON,
|
|
/*22 Florida Power and Light - Turkey Point (Unit 3) */ SN_Flags.SN_NETWORK_ON|SN_Flags.SN_DEVIATION_ON|SN_Flags.SN_BACKGROUND_ON,
|
|
/*23 Houston Lighting & Power Company - South Texas */ SN_Flags.SN_NETWORK_ON|SN_Flags.SN_BACKGROUND_ON,
|
|
/*24 Carolina Power & Light - Shearon Harris */ 0,
|
|
/*25 Virginia Power - EPIP */ SN_Flags.SN_NETWORK_ON,
|
|
/*26 Wolf Creek Nuclear Operating Corp. - Wolf Creek */ SN_Flags.SN_NETWORK_ON|SN_Flags.SN_BACKGROUND_ON|SN_Flags.SN_OPTIONALACCEDIT_ON|SN_Flags.SN_TEMPCHANGE_ON|SN_Flags.SN_CHECKLISTEXPORT_ON,
|
|
/*27 Duke Power - Catawba */ SN_Flags.SN_NETWORK_ON|SN_Flags.SN_BACKGROUND_ON|SN_Flags.SN_DEVIATION_ON,
|
|
/*28 Duke Power - McGuire */ SN_Flags.SN_NETWORK_ON|SN_Flags.SN_BACKGROUND_ON|SN_Flags.SN_DEVIATION_ON,
|
|
/*29 Exelon Nuclear - Braidwood */ SN_Flags.SN_NETWORK_ON | SN_Flags.SN_BACKGROUND_ON | SN_Flags.SN_DEVIATION_ON,
|
|
/*30 Exelon Nuclear - Byron */ SN_Flags.SN_NETWORK_ON | SN_Flags.SN_BACKGROUND_ON | SN_Flags.SN_DEVIATION_ON,
|
|
/*31 Virginia Power - Innsbrook */ SN_Flags.SN_NETWORK_ON,
|
|
/*32 Constellation Energy Group - Calvert Cliffs */ SN_Flags.SN_NETWORK_ON|SN_Flags.SN_REVISIONFUNCTION_ON|SN_Flags.SN_ONLYAPPROVEONCE_ON|SN_Flags.SN_BGEPLANTWIDEOPT_ON|SN_Flags.SN_OPTIONALACCEDIT_ON|SN_Flags.SN_REMOVECHGID_ON,
|
|
/*33 American Electric Power - D. C. Cook - EOPs */ SN_Flags.SN_NETWORK_ON|SN_Flags.SN_BACKGROUND_ON,
|
|
/*34 American Electric Power - D. C. Cook - Training */ 0,
|
|
/*35 North Atlantic Energy Service Corp. - Seabrook Nuclear Plant */ SN_Flags.SN_TEMPCHANGE_ON,
|
|
/*36 Entergy - River Bend Nuclear Station */ SN_Flags.SN_NETWORK_ON|SN_Flags.SN_REVISIONFUNCTION_ON,
|
|
/*37 Southern Nuclear Operating Company - Farley Nuclear Plant */ SN_Flags.SN_NETWORK_ON|SN_Flags.SN_BACKGROUND_ON|SN_Flags.SN_DEVIATION_ON,
|
|
/*38 AmerenUE - Callaway Plant */ SN_Flags.SN_NETWORK_ON|SN_Flags.SN_BACKGROUND_ON
|
|
};
|
|
|
|
public SerialNo(string isernofile,string ucfgpath, UserRunTime usrRT, bool DemoMode)
|
|
{
|
|
sernofile = isernofile;
|
|
PrivateProfile ppCfg;
|
|
string sn;
|
|
// byte xor=0xCF;
|
|
ppCfg = new PrivateProfile(ucfgpath);
|
|
// sn=ppCfg.Attr("/ini/section[@name='override']/param[@name='SN']/@value");
|
|
sn=ppCfg.Attr("override","SN");
|
|
if (sn!=null && sn!="")
|
|
{
|
|
int indx = 0;
|
|
if ((indx = sn.IndexOf(";",0,sn.Length))>0)
|
|
SerialNum=System.Convert.ToInt32(sn.Substring(0,indx));
|
|
else
|
|
SerialNum=System.Convert.ToInt32(sn);
|
|
if (SerialNum>SerialNumberOptionsByPlant.Length)
|
|
{
|
|
MessageBox.Show("Serial number in " + ucfgpath + " is invalid. Demo mode will be used","VE-PROMS");
|
|
SerialNum=-1;
|
|
}
|
|
SerialNumTitle="Override";
|
|
return;
|
|
}
|
|
|
|
ppCfg=null;
|
|
SerialNum = -1;
|
|
if (DemoMode || !File.Exists(usrRT.ExeAdjust(sernofile)))
|
|
{
|
|
// no serial number file, put into demo mode.
|
|
SerialNumTitle = "Demo Mode";
|
|
// MessageBox.Show("No Serial Number. Defaulting to Working Demo Mode.\n\nTo purchase VE-PROMS, contact Volian Enterorices Inc.\n\nPhone: (724) 335-3744\n\nEmail: VEPROMS@VOLIAN.COM\n\nSerial Number Warning");
|
|
if (DemoMode)
|
|
{
|
|
MessageBox.Show("Thank you for trying our VE-PROMS Working Demo.\n\n"+
|
|
"To purchase VE-PROMS, contact Volian Enterprises, Inc.\n\n"+
|
|
"Phone: (724) 335-3744\n\n"+
|
|
"Email: VolianEnterprises@volian.com",
|
|
"VE-PROMS Working Demo");
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("No Serial Number. Defaulting to Working Demo Mode.\n\n"+
|
|
"To purchase VE-PROMS, contact Volian Enterprises, Inc.\n\n"+
|
|
"Phone: (724) 335-3744\n\n"+
|
|
"Email: VolianEnterprises@volian.com",
|
|
"Serial Number Warning");
|
|
}
|
|
return;
|
|
}
|
|
|
|
// open file & read in serial number
|
|
int i;
|
|
byte j;
|
|
FileStream fssn = null;
|
|
BinaryReader brsn = null;
|
|
byte xor=0xCF;
|
|
// sum=0xcf;
|
|
try
|
|
{
|
|
fssn = new FileStream(usrRT.ExeAdjust(sernofile),FileMode.Open,FileAccess.Read,FileShare.ReadWrite);
|
|
brsn = new BinaryReader(fssn);
|
|
int length = (int)fssn.Length-1024;
|
|
for (i=0;i<1024;i++)
|
|
{
|
|
j = nextchar(brsn);
|
|
xor ^= (byte)j;
|
|
if (j==0xCF)
|
|
{
|
|
if (SerialNum != -1) return;
|
|
SerialNum=i;
|
|
}
|
|
}
|
|
if (SerialNum == -1)
|
|
{
|
|
SerialNumTitle = "Demo Mode";
|
|
// MessageBox.Show("No Serial Number. Defaulting to Working Demo Mode.\n\nTo purchase VE-PROMS, contact Volian Enterorices Inc.\n\nPhone: (724) 335-3744\n\nEmail: VEPROMS@VOLIAN.COM\n\nSerial Number Warning","VE-PROMS");
|
|
MessageBox.Show("No Serial Number. Defaulting to Working Demo Mode.\n\n"+
|
|
"To purchase VE-PROMS, contact Volian Enterprises, Inc.\n\n"+
|
|
"Phone: (724) 335-3744\n\n"+
|
|
"Email: VolianEnterprises@volian.com",
|
|
"Serial Number Warning");
|
|
return;
|
|
}
|
|
// Just read past this byte. At this point we already
|
|
// have a serial number. We now just want to get the
|
|
// description text (usually plant/utility name) associated
|
|
// with the serial number.
|
|
j = nextchar(brsn);
|
|
//
|
|
// This was always failing. Could not find a reason why. Appears that
|
|
// the Exclusive OR arithmatic is a little different in .NET. The
|
|
// nextchar() funtion seems to be returning the correct values.
|
|
//
|
|
// if (j!=xor)
|
|
// {
|
|
// if (brsn!=null) brsn.Close();
|
|
// if (fssn!=null) fssn.Close();
|
|
// return;
|
|
// }
|
|
char [] title = new char[length];
|
|
i=0;
|
|
while((--length) > 0 && (j=nextchar(brsn))!=0xFF)
|
|
{
|
|
title[i++] = (char)j;
|
|
}
|
|
SerialNumTitle = new string(title);
|
|
// remove the serial number at the beginning of the title
|
|
// - we didn't need to do this - jsj 7/18/2006
|
|
// SerialNumTitle = SerialNumTitle.Substring(SerialNumTitle.IndexOf(' ')+1);
|
|
}
|
|
catch(Exception e)
|
|
{
|
|
MessageBox.Show(e.Message,"Serial Number Error");
|
|
return;
|
|
}
|
|
if (brsn!=null) brsn.Close();
|
|
if (fssn!=null) fssn.Close();
|
|
}
|
|
|
|
private byte nextchar(BinaryReader br)
|
|
{
|
|
byte retval = 0xFF; // unsigned -1
|
|
try
|
|
{
|
|
byte nxt;
|
|
retval = br.ReadByte();
|
|
if(retval != 0xFF)
|
|
{
|
|
nxt=retval;
|
|
retval=(byte)((nxt-sum) & 0xFF);
|
|
sum=(byte)(((nxt<<1) & 0xFE) | ((nxt>>7) & 0x1));
|
|
}
|
|
}
|
|
catch(Exception e)
|
|
{
|
|
// MessageBox.Show(e.Message);
|
|
return retval;
|
|
}
|
|
|
|
return retval;
|
|
}
|
|
|
|
public uint GetSNOption(uint a)
|
|
{
|
|
if (SerialNum == -1)
|
|
return 0;
|
|
else
|
|
return ((uint)SerialNumberOptionsByPlant[SerialNum]&(uint)a);
|
|
}
|
|
|
|
public string SerialNumberString
|
|
{
|
|
get
|
|
{
|
|
string rtnstr = "";
|
|
if (SerialNum == -1) // demo
|
|
rtnstr = "Thank you for trying VE-PROMS";
|
|
else
|
|
rtnstr = "Serial Number: " + SerialNum.ToString();
|
|
|
|
return rtnstr;
|
|
}
|
|
}
|
|
|
|
public string SerialNumberTitleString
|
|
{
|
|
get
|
|
{
|
|
return SerialNumTitle;
|
|
}
|
|
}
|
|
}
|
|
}
|