public static int CRC8(ref byte[] arr, int len, CODE_TYPE code_type) { byte[] crc_table = new byte[256] { 0x00, 0x07, 0x0E, 0x09, 0x1C, 0x1B, 0x12, 0x15, 0x38, 0x3F, 0x36, 0x31, 0x24, 0x23, 0x2A, 0x2D, 0x70, 0x77, 0x7E, 0x79, 0x6C, 0x6B, 0x62, 0x65, 0x48, 0x4F, 0x46, 0x41, 0x54, 0x53, 0x5A, 0x5D, 0xE0, 0xE7, 0xEE, 0xE9, 0xFC, 0xFB, 0xF2, 0xF5, 0xD8, 0xDF, 0xD6, 0xD1, 0xC4, 0xC3, 0xCA, 0xCD, 0x90, 0x97, 0x9E, 0x99, 0x8C, 0x8B, 0x82, 0x85, 0xA8, 0xAF, 0xA6, 0xA1, 0xB4, 0xB3, 0xBA, 0xBD, 0xC7, 0xC0, 0xC9, 0xCE, 0xDB, 0xDC, 0xD5, 0xD2, 0xFF, 0xF8, 0xF1, 0xF6, 0xE3, 0xE4, 0xED, 0xEA, 0xB7, 0xB0, 0xB9, 0xBE, 0xAB, 0xAC, 0xA5, 0xA2, 0x8F, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9D, 0x9A, 0x27, 0x20, 0x29, 0x2E, 0x3B, 0x3C, 0x35, 0x32, 0x1F, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0D, 0x0A, 0x57, 0x50, 0x59, 0x5E, 0x4B, 0x4C, 0x45, 0x42, 0x6F, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7D, 0x7A, 0x89, 0x8E, 0x87, 0x80, 0x95, 0x92, 0x9B, 0x9C, 0xB1, 0xB6, 0xBF, 0xB8, 0xAD, 0xAA, 0xA3, 0xA4, 0xF9, 0xFE, 0xF7, 0xF0, 0xE5, 0xE2, 0xEB, 0xEC, 0xC1, 0xC6, 0xCF, 0xC8, 0xDD, 0xDA, 0xD3, 0xD4, 0x69, 0x6E, 0x67, 0x60, 0x75, 0x72, 0x7B, 0x7C, 0x51, 0x56, 0x5F, 0x58, 0x4D, 0x4A, 0x43, 0x44, 0x19, 0x1E, 0x17, 0x10, 0x05, 0x02, 0x0B, 0x0C, 0x21, 0x26, 0x2F, 0x28, 0x3D, 0x3A, 0x33, 0x34, 0x4E, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5C, 0x5B, 0x76, 0x71, 0x78, 0x7F, 0x6A, 0x6D, 0x64, 0x63, 0x3E, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2C, 0x2B, 0x06, 0x01, 0x08, 0x0F, 0x1A, 0x1D, 0x14, 0x13, 0xAE, 0xA9, 0xA0, 0xA7, 0xB2, 0xB5, 0xBC, 0xBB, 0x96, 0x91, 0x98, 0x9F, 0x8A, 0x8D, 0x84, 0x83, 0xDE, 0xD9, 0xD0, 0xD7, 0xC2, 0xC5, 0xCC, 0xCB, 0xE6, 0xE1, 0xE8, 0xEF, 0xFA, 0xFD, 0xF4, 0xF3 }; byte crc = 0; for (var i = 0; i < len - 1; ++i) { crc = crc_table[crc ^ arr[i]]; } if (code_type == CODE_TYPE.ENCODE) { crc = crc_table[crc ^ arr[len - 1]]; arr[len] = crc; } else if (crc != arr[len - 1]) { return(0); } return(1); }
public static string GenerateCode(string EmployeeCode, CODE_TYPE codeType, int deptRole) { switch (codeType) { case CODE_TYPE.SALER_ORDER: return(new IDGenerateHelper().JFGenerateOrderCode(EmployeeCode, deptRole, 5)); case CODE_TYPE.CUSTOMER: return("C" + new IDGenerateHelper().GetIdentity(5).ToString()); case CODE_TYPE.TAOBAO_CUSTOMER: return("TB" + new IDGenerateHelper().GetIdentity(5).ToString()); case CODE_TYPE.PROMPT_CODE: return("CX" + new IDGenerateHelper().GetIdentity(5).ToString()); default: return(string.Empty); } }
/// <summary> /// generate objects string and compile string baed on given source codes type /// </summary> /// <param name="swatFolder">The SWAT source codes folder</param> /// <param name="type">C or Fortran</param> /// <param name="inSameFolder">If the Makefile would be in the same folder as the source codes</param> /// <param name="isDebug">If it's for debug version</param> /// <param name="is64bit">If it's for release version</param> /// <param name="objs">The string for objectives</param> /// <param name="compiles">The string for compilers</param> private static void generateMakefile(string swatFolder, CODE_TYPE type, bool inSameFolder, bool isDebug, bool is64bit, out string objs, out string compiles) { objs = ""; compiles = ""; DirectoryInfo info = new DirectoryInfo(swatFolder); FileInfo[] files = info.GetFiles(type == CODE_TYPE.FORTRAN ? "*.f*" : "*.c"); if (files == null || files.Length == 0) { Console.WriteLine("Don't find any " + type.ToString() + " codes in " + swatFolder); return; } string subFolder = getSubFolderName(isDebug, is64bit); string o_prefix = subFolder + "/"; string f_prefix = ""; if (!inSameFolder) { o_prefix = "./"; f_prefix = "../"; } //-ffpe-trap=invalid,zero,overflow,underflow will make program stop when these errors happen //-fbacktrace: Specifies that if the program crashes, a backtrace should be produced if possible, showing what functions or subroutines were being called at the time of the error. string compiler = "${" + (type == CODE_TYPE.FORTRAN ? "FC" : "CC") + "}"; string commonFlag = "${" + (type == CODE_TYPE.FORTRAN ? NAME_FORTRAN_FLAG : NAME_C_FLAG) + "}"; string debugFlag = "${" + (isDebug ? NAME_DEBUG_FLAG : NAME_RELEASE_FLAG) + "}"; string architecture = "${" + (is64bit ? NAME_ARCHITECTURE_64 : NAME_ARCHITECTURE_32) + "}"; string modLocation = ""; if (inSameFolder) { modLocation = subFolder; } StringBuilder makefilesb = new StringBuilder(); StringBuilder objfilesb = new StringBuilder(); bool isSQLiteProject = false; int version = -1; int revision = -1; GetSWATVersion(swatFolder + @"\main.f", out version, out revision); foreach (FileInfo f in files) { string sourceName = f.Name.ToLower(); //BIOZONE.F is upper case, need to convert to lowercase if (sourceName.Equals("modparm.f")) { continue; } if (sourceName.Equals("readmgtsave.f")) { continue; //for rev435, double define readmgt in readmgt.f and readmgtsave.f } if (sourceName.Equals("fsqlite.f90")) { isSQLiteProject = true; } string longFortranflag = ""; string o_file = ""; if (sourceName.Contains(".f90")) { o_file = o_prefix + sourceName.Replace(".f90", ".o"); if (System.Array.IndexOf(LONG_F90_NAMES, sourceName) > -1) { longFortranflag = "${" + NAME_LONG_FREE_FORMAT + "}"; } } else if (sourceName.Contains(".f")) { o_file = o_prefix + sourceName.Replace(".f", ".o"); if (System.Array.IndexOf(LONG_F_NAMES, sourceName) > -1 || (version != 2009 && System.Array.IndexOf(LONG_F_NAMES_2012, sourceName) > -1) || (version == 2009 && revision == 528 && System.Array.IndexOf(LONG_F_NAMES_Rev528, sourceName) > -1)) { longFortranflag = "${" + NAME_LONG_FIX_FORMAT + "}"; } } else if (sourceName.Contains(".c")) { o_file = o_prefix + sourceName.Replace(".c", ".o"); } string f_file = f_prefix + sourceName; //geneate the line for the rule string line_rule = o_file + ": " + f_file; //Add dependency modparm.f to main.f to recompile main.f when moadparm.f is changed //Add dependency main.o to other files to recompile main.f when moadparm.f is changed //Add dependency fsqlite.o to main.o to recompile main.f when fsqlite.f90 is changed, only for SQLite version if (type == CODE_TYPE.FORTRAN) { if (sourceName.Equals("main.f")) { line_rule += " " + f_prefix + "modparm.f"; if (isSQLiteProject) { line_rule += " " + o_prefix + "fsqlite.o"; } } else if (!sourceName.Equals("fsqlite.f90")) //fsqlite.f90 doesn't depends on main { line_rule += " " + o_prefix + "main.o"; } } //generate the line for compile string line_compile = string.Format("\t{0} {6} {1} {2} {3} {4} -o {5}", compiler, commonFlag, debugFlag, longFortranflag, f_file, o_file, architecture); //As gfortran will try to search for the mod file in the same folder as Makefile, there is need //to specify the location of the mod file. //-J specify the location where the mod file will be saved, only used by main.f //-I specify the location where the mod file will be search for, used by other files except main.f if (type == CODE_TYPE.FORTRAN && inSameFolder) { line_compile += (System.Array.IndexOf(MODE_FILES, sourceName) > -1 ? " -J " : " -I ") + modLocation; } makefilesb.AppendLine(""); makefilesb.AppendLine(line_rule); makefilesb.AppendLine(line_compile); objfilesb.Append(" " + o_file); } objs = objfilesb.ToString(); compiles = makefilesb.ToString(); }
public static int Slip(ref byte[] old_arr, ref byte[] new_arr, int old_buf_size, CODE_TYPE code_type) { var new_len = old_buf_size; var full_pack = false; if (code_type == CODE_TYPE.ENCODE) { for (var i = 0; i < old_buf_size; ++i) { if ((old_arr[i] == (byte)(SLIP_BYTES.END)) || (old_arr[i] == (byte)(SLIP_BYTES.ESC))) { new_len++; } } new_len++; full_pack = true; } else { for (var i = 0; i < old_buf_size - 1; ++i) { if (((old_arr[i] == (byte)(SLIP_BYTES.ESC)) && (old_arr[i + 1] == (byte)(SLIP_BYTES.ESC_END))) || ((old_arr[i] == (byte)(SLIP_BYTES.ESC)) && (old_arr[i + 1] == (byte)(SLIP_BYTES.ESC_ESC)))) { new_len--; } if (old_arr[i] == (byte)(SLIP_BYTES.END)) { full_pack = true; new_len--; break; } } if ((!full_pack) && (old_arr[old_buf_size - 1] == (byte)(SLIP_BYTES.END))) { full_pack = true; new_len--; } if (!full_pack) { return(0); } } //byte[] new_arr = new byte[new_len]; //Array.Resize<byte>(ref new_arr, new_len); new_len = 0; if (code_type == CODE_TYPE.ENCODE) { for (var i = 0; i < old_buf_size; ++i) { if (old_arr[i] == (byte)(SLIP_BYTES.END)) { new_arr[new_len] = (byte)(SLIP_BYTES.ESC); new_arr[new_len + 1] = (byte)(SLIP_BYTES.ESC_END); new_len += 2; } else if (old_arr[i] == (byte)(SLIP_BYTES.ESC)) { new_arr[new_len] = (byte)(SLIP_BYTES.ESC); new_arr[new_len + 1] = (byte)(SLIP_BYTES.ESC_ESC); new_len += 2; } else { new_arr[new_len] = old_arr[i]; new_len += 1; } } new_arr[new_len] = (byte)(SLIP_BYTES.END); new_len++; } else { var i = 0; while (old_arr[i] != (byte)(SLIP_BYTES.END)) { if ((i < old_buf_size - 1) && (old_arr[i] == (byte)(SLIP_BYTES.ESC)) && (old_arr[i + 1] == (byte)(SLIP_BYTES.ESC_END))) { new_arr[new_len] = (byte)SLIP_BYTES.END; i += 2; } else if ((i < old_buf_size - 1) && (old_arr[i] == (byte)(SLIP_BYTES.ESC)) && (old_arr[i + 1] == (byte)(SLIP_BYTES.ESC_ESC))) { new_arr[new_len] = (byte)SLIP_BYTES.ESC; i += 2; } else { new_arr[new_len] = old_arr[i]; i++; } new_len++; } } return(new_len); }