Beispiel #1
0
 void NumberTextBox_TextChanged(object sender, EventArgs e)
 {
     if ((int)KeyCode >= (int)Keys.A && (int)KeyCode <= (int)Keys.F)
     {
         if (U_Text.Length >= 2 && U_Text.Substring(0, 2).ToLower().Equals("0x"))
         {
             _Text = base.Text.Substring(2);
             setNumber(TypeHandling.TypeName.HexString);
         }
         else
         {
             U_Text = "";
             setNumber(TypeHandling.TypeName.Integer);
             return;
         }
     }
     else if (KeyCode == Keys.X)
     {
         if (U_Text.Length >= 1 && U_Text[0] == '0')
         {
             //U_Text = base.Text;
             _Text = "";
             setNumber(TypeHandling.TypeName.Integer);
         }
         else
         {
             U_Text = "";
             setNumber(TypeHandling.TypeName.Integer);
         }
     }
     else if ((int)KeyCode >= (int)Keys.D0 && (int)KeyCode <= (int)Keys.D9)
     {
         U_Text = base.Text;
         TypeHandling.TypeName typeName = TypeHandling.getTypeKind(U_Text);
         setNumber(typeName);
     }
     else if ((int)KeyCode >= (int)Keys.NumPad0 && (int)KeyCode <= (int)Keys.NumPad9)
     {
         U_Text = base.Text;
         TypeHandling.TypeName typeName = TypeHandling.getTypeKind(U_Text);
         setNumber(typeName);
     }
     else if (KeyCode == Keys.OemPeriod)
     {
         if (U_Text.Count(p => p.Equals('.')) == 1 && U_Text.Length > 0)
         {
             //U_Text = base.Text;
         }
         else
         {
             U_Text = "";
             setNumber(TypeHandling.TypeName.Integer);
         }
     }
     else
     {
         U_Text = "";
         setNumber(TypeHandling.TypeName.Integer);
     }
 }
Beispiel #2
0
 void NumberTextBox_TextChanged(object sender, EventArgs e)
 {
     U_Text = base.Text;
     if (_Text.Length > 0)
     {
         TypeHandling.TypeName _type = TypeHandling.getTypeKind(_Text);
         setNumber(_type);
     }
 }
        public static String ToDecimal(string value)
        {
            TypeHandling.TypeName type = TypeHandling.getTypeKind(value);
            switch (type)
            {
            case TypeHandling.TypeName.HexString:
                return(TypeHandling.getHexNumber <int>(value).ToString());

            case TypeHandling.TypeName.Float:
                return(((int)double.Parse(value)).ToString());

            case TypeHandling.TypeName.Integer:
                return(value);

            default:
                return("-1");
            }
        }
Beispiel #4
0
 void NumberTextBox_LostFocus(object sender, EventArgs e)
 {
     if (this._Text.Length == 0)
     {
         base.Text = "0";
     }
     else
     {
         TypeHandling.TypeName typeName = TypeHandling.getTypeKind(base.Text);
         if (typeName == TypeHandling.TypeName.String || typeName == TypeHandling.TypeName.Char)
         {
             MessageBox.Show("숫자가 아닙니다.");
             BackSpace();
             this.Focus();
             this.SelectAll();
             return;
         }
         else
         {
             setNumber(typeName);
         }
     }
     this.DeselectAll();
 }
        public static bool ItemsToPacket(List <CPacketItem> items, bool swap, Byte[] sendBuff, out int totalSendSize)
        {
            totalSendSize = 0;
            Boolean unsigned = false;

            for (int i = 0; i < items.Count; i++)
            {
                int    typeSize = 4;
                String type     = items[i].TypeString;
                Array  packets  = TypeHandling.GetArrayByTypeName(type, items[i].Length, out typeSize, out unsigned);

                if (packets == null || packets.Length < 1 || typeSize < 0)
                {
                    String error = "타입명세실패";
                    throw new Exception(error);
                }


                if (type.Equals("char") || type.Equals("string"))
                {
                    if (items[i].InitString == null || items[i].InitString.Length == 0)
                    {
                        continue;
                    }
                    packets = Encoding.UTF8.GetBytes(items[i].InitString);
                    Buffer.BlockCopy(packets, 0, sendBuff, totalSendSize, packets.Length);
                    totalSendSize += packets.Length;
                }
                else
                {
                    String[] units = items[i].InitValues;
                    for (int k = 0; k < units.Length; k++)
                    {
                        TypeHandling.TypeName typeName = TypeHandling.getTypeKind(units[k]);

                        if (typeName == TypeHandling.TypeName.Integer)
                        {
                            if (unsigned == false)
                            {
                                if (typeSize == 1)
                                {
                                    packets.SetValue(SByte.Parse(units[k]), k);
                                }
                                else if (typeSize == 2)
                                {
                                    packets.SetValue(Int16.Parse(units[k]), k);
                                }
                                else if (typeSize == 4)
                                {
                                    packets.SetValue(Int32.Parse(units[k]), k);
                                }
                                else
                                {
                                    packets.SetValue(Int64.Parse(units[k]), k);
                                }
                            }
                            else
                            {
                                if (typeSize == 1)
                                {
                                    packets.SetValue(Byte.Parse(units[k]), k);
                                }
                                else if (typeSize == 2)
                                {
                                    packets.SetValue(UInt16.Parse(units[k]), k);
                                }
                                else if (typeSize == 4)
                                {
                                    packets.SetValue(UInt32.Parse(units[k]), k);
                                }
                                else
                                {
                                    packets.SetValue(UInt64.Parse(units[k]), k);
                                }
                            }
                        }
                        else if (typeName == TypeHandling.TypeName.HexString)
                        {
                            if (unsigned)
                            {
                                if (typeSize == 1)
                                {
                                    packets.SetValue((byte)TypeHandling.getHexNumber <byte>(units[k]), k);
                                }
                                else if (typeSize == 2)
                                {
                                    packets.SetValue((ushort)TypeHandling.getHexNumber <ushort>(units[k]), k);
                                }
                                else if (typeSize == 4)
                                {
                                    packets.SetValue((uint)TypeHandling.getHexNumber <uint>(units[k]), k);
                                }
                                else
                                {
                                    packets.SetValue((UInt64)TypeHandling.getHexNumber <ulong>(units[k]), k);
                                }
                            }
                            else
                            {
                                if (typeSize == 1)
                                {
                                    packets.SetValue((sbyte)TypeHandling.getHexNumber <sbyte>(units[k]), k);
                                }
                                else if (typeSize == 2)
                                {
                                    packets.SetValue((short)TypeHandling.getHexNumber <short>(units[k]), k);
                                }
                                else if (typeSize == 4)
                                {
                                    packets.SetValue((int)TypeHandling.getHexNumber <int>(units[k]), k);
                                }
                                else
                                {
                                    packets.SetValue((Int64)TypeHandling.getHexNumber <long>(units[k]), k);
                                }
                            }
                        }
                        else if (typeName == TypeHandling.TypeName.Float)
                        {
                            if (typeSize == 4)
                            {
                                packets.SetValue(float.Parse(units[k]), k);
                            }
                            else
                            {
                                packets.SetValue(Double.Parse(units[k]), k);
                            }
                        }
                        else if (typeName == TypeHandling.TypeName.Bin)
                        {
                            if (typeSize == 1)
                            {
                                packets.SetValue((byte)TypeHandling.getBinNumber(units[k]), k);
                            }
                            else if (typeSize == 2)
                            {
                                packets.SetValue((short)TypeHandling.getBinNumber(units[k]), k);
                            }
                            else if (typeSize == 4)
                            {
                                packets.SetValue((int)TypeHandling.getBinNumber(units[k]), k);
                            }
                            else
                            {
                                packets.SetValue((Int64)TypeHandling.getBinNumber(units[k]), k);
                            }
                        }
                    }
                    //buff = new Byte[Marshal.SizeOf(packets.GetValue(0)) * packets.Length];
                    if (swap) //전체 swap
                    {
                        if (items[i].IsSwap == false)
                        {
                            Swaper.swapWithSize(packets, sendBuff, typeSize, Buffer.ByteLength(packets), 0, totalSendSize);
                        }
                        else
                        {
                            Buffer.BlockCopy(packets, 0, sendBuff, totalSendSize, Buffer.ByteLength(packets));
                        }
                    }
                    else //일부만 swap
                    {
                        if (items[i].IsSwap)
                        {
                            Swaper.swapWithSize(packets, sendBuff, typeSize, Buffer.ByteLength(packets), 0, totalSendSize);
                        }
                        else
                        {
                            Buffer.BlockCopy(packets, 0, sendBuff, totalSendSize, Buffer.ByteLength(packets));
                        }
                    }
                    totalSendSize += Buffer.ByteLength(packets);
                }
            }

            /*
             * if(_sendBuff.Equals(PacketBuffer)){ //만일 _sendBuff가 Packet버퍼와 같을 때, 사이즈를 조정한다.(초기사이즈->실제사이즈)
             *  Byte[] buff = new Byte[totalSendSize];
             *  Buffer.BlockCopy(_sendBuff, 0, buff, 0, totalSendSize);
             *  PacketBuffer = buff;
             * }
             */
            return(true);
        }
        /// <summary>
        /// Items의 내용을 바꾸어 packet으로 변경한다.
        /// Send할 패킷을 만드는 데 사용된다.
        /// </summary>
        /// <param name="items"></param>
        /// <param name="funcList">사용될 function의 리스트. function은 String들을 argument로 받고, String[]을 리턴하는 function들이다.</param>
        /// <param name="varList">사용될 variables의 리스트. 같은 CPacketItem의 다른 item들을 찾아보고, 찾을 수 없다면 이 리스트에서 찾는다.</param>
        /// <param name="swap">전체적으로 swap을 할 것인지를 묻는다. 이 arguemnt가 true인데 단일 item이 IsSwap에 true가 되어있다면 다른 것과는 반대로 동작한다. 즉, swap되지 않는다</param>
        /// <param name="dataBuff">패킷데이터가 저장될 버퍼</param>
        /// <param name="dataSize">전체 크기</param>
        /// <returns></returns>
        public void ItemsToPacket(List <CPacketItem> items, Dictionary <String, InitVarFunc> funcList, Dictionary <String, VariableInfo> varList, bool swap, Byte[] dataBuff, out int dataSize)
        {
            dataSize = 0;
            Boolean unsigned = false;
            Dictionary <String, VariableInfo> vars = new Dictionary <string, VariableInfo>(); // = new Dictionary<string, string[]>(varList);

            for (int i = 0; i < items.Count; i++)                                             //static 하게 정의된 item의 요소는 변수로 사용가능하다.
            {
                if (items[i].InitValues.Length > 0)
                {
                    vars.Add(items[i].Name, new VariableInfo(items[i].Name, items[i].InitValues));
                }
            }
            for (int i = 0; i < varList.Count; i++)
            {
                if (vars.Keys.Contains(varList.Keys.ElementAt(i)))
                {
                    continue;                                               //같은 변수명이면 같은 패킷에 속한 것이 적용된다.
                }
                else
                {
                    vars.Add(varList.Keys.ElementAt(i), varList.Values.ElementAt(i));
                }
            }


            for (int i = 0; i < items.Count; i++)
            {
                int typeSize = 4;

                String type    = items[i].TypeString;
                Array  packets = TypeHandling.GetArrayByTypeName(type, items[i].Length, out typeSize, out unsigned);

                //Byte[] buff;
                if (items[i].Function.Exists)
                {
                    items[i].InitValues = runFunction(funcList, vars, items[i].Function);
                }
                else if (items[i].Var.Exists)
                {
                    String refName = items[i].Var.Name;
                    if (vars.Keys.Contains(refName))
                    {
                        if (vars[refName].Values != null && vars[refName].Values.Length > 0)
                        {
                            items[i].InitValues = vars[items[i].Var.Name].Values;
                        }
                        else
                        {
                            throw new Exception("변수" + refName + "가 존재하지 않거나 값이 설정되지 않았습니다.");
                        }
                    }
                }

                if (type.Equals("char") || type.Equals("string"))
                {
                    if (items[i].InitString == null || items[i].InitString.Length == 0)
                    {
                        continue;
                    }
                    packets = Encoding.UTF8.GetBytes(items[i].InitString);
                    Buffer.BlockCopy(packets, 0, dataBuff, dataSize, packets.Length);
                    dataSize += packets.Length;
                }
                else
                {
                    for (int k = 0; k < items[i].InitValues.Length; k++)
                    {
                        TypeHandling.TypeName typeName = TypeHandling.getTypeKind(items[i].InitValues[k]);
                        if (typeName == TypeHandling.TypeName.Integer)
                        {
                            if (unsigned == false)
                            {
                                if (typeSize == 1)
                                {
                                    packets.SetValue(SByte.Parse(items[i].InitValues[k]), k);
                                }
                                else if (typeSize == 2)
                                {
                                    packets.SetValue(Int16.Parse(items[i].InitValues[k]), k);
                                }
                                else if (typeSize == 4)
                                {
                                    packets.SetValue(Int32.Parse(items[i].InitValues[k]), k);
                                }
                                else
                                {
                                    packets.SetValue(Int64.Parse(items[i].InitValues[k]), k);
                                }
                            }
                            else
                            {
                                if (typeSize == 1)
                                {
                                    packets.SetValue(Byte.Parse(items[i].InitValues[k]), k);
                                }
                                else if (typeSize == 2)
                                {
                                    packets.SetValue(UInt16.Parse(items[i].InitValues[k]), k);
                                }
                                else if (typeSize == 4)
                                {
                                    packets.SetValue(UInt32.Parse(items[i].InitValues[k]), k);
                                }
                                else
                                {
                                    packets.SetValue(UInt64.Parse(items[i].InitValues[k]), k);
                                }
                            }
                        }
                        else if (typeName == TypeHandling.TypeName.HexString)
                        {
                            if (typeSize == 1)
                            {
                                packets.SetValue(TypeHandling.getHexNumber <byte>(items[i].InitValues[k]), k);
                            }
                            else if (typeSize == 2)
                            {
                                packets.SetValue(TypeHandling.getHexNumber <ushort>(items[i].InitValues[k]), k);
                            }
                            else if (typeSize == 4)
                            {
                                packets.SetValue(TypeHandling.getHexNumber <uint>(items[i].InitValues[k]), k);
                            }
                            else
                            {
                                packets.SetValue(TypeHandling.getHexNumber <ulong>(items[i].InitValues[k]), k);
                            }
                        }
                        else if (typeName == TypeHandling.TypeName.Float)
                        {
                            if (typeSize == 4)
                            {
                                packets.SetValue(float.Parse(items[i].InitValues[k]), k);
                            }
                            else
                            {
                                packets.SetValue(Double.Parse(items[i].InitValues[k]), k);
                            }
                        }
                        else if (typeName == TypeHandling.TypeName.Bin)
                        {
                            if (typeSize == 1)
                            {
                                packets.SetValue((byte)TypeHandling.getBinNumber(items[i].InitValues[k]), k);
                            }
                            else if (typeSize == 2)
                            {
                                packets.SetValue((short)TypeHandling.getBinNumber(items[i].InitValues[k]), k);
                            }
                            else if (typeSize == 4)
                            {
                                packets.SetValue((int)TypeHandling.getBinNumber(items[i].InitValues[k]), k);
                            }
                            else
                            {
                                packets.SetValue((Int64)TypeHandling.getBinNumber(items[i].InitValues[k]), k);
                            }
                        }
                    }
                    //buff = new Byte[Marshal.SizeOf(packets.GetValue(0)) * packets.Length];
                    if (swap)//전체 swap
                    {
                        if (items[i].IsSwap == false)
                        {
                            Swaper.swapWithSize(packets, dataBuff, typeSize, Buffer.ByteLength(packets), 0, dataSize);
                        }
                        else
                        {
                            Buffer.BlockCopy(packets, 0, dataBuff, dataSize, Buffer.ByteLength(packets));
                        }
                    }
                    else //각각 swap
                    {
                        if (items[i].IsSwap)
                        {
                            Swaper.swapWithSize(packets, dataBuff, typeSize, Buffer.ByteLength(packets), 0, dataSize);
                        }
                        else
                        {
                            Buffer.BlockCopy(packets, 0, dataBuff, dataSize, Buffer.ByteLength(packets));
                        }
                    }
                    dataSize += Buffer.ByteLength(packets);
                }
            }

            /*
             * if(_sendBuff.Equals(PacketBuffer)){ //만일 _sendBuff가 Packet버퍼와 같을 때, 사이즈를 조정한다.(초기사이즈->실제사이즈)
             *  Byte[] buff = new Byte[totalSendSize];
             *  Buffer.BlockCopy(_sendBuff, 0, buff, 0, totalSendSize);
             *  PacketBuffer = buff;
             * }
             */
        }
        public static List <CPacketItem> CodeToItems(String str)
        {
            List <CPacketItem> items = new List <CPacketItem>();

            /*
             * names.Clear();
             * types.Clear();
             * sizes.Clear();
             * initStr.Clear();
             * initValues.Clear();
             */


            String[] lines = str.Split(";".ToCharArray()); //각 라인으로 나누어서
            String[] initValues;
            for (int i = 0; i < lines.Length; i++)
            {//각 라인들
                String line = lines[i];
                line = removeOuterWhiteSpace(line);

                if (line.Length == 0)
                {
                    continue;
                }

                int firstSpace  = -1;
                int secondSpace = -1;
                int thirdSpace  = -1;
                int typeSpace   = -1;
                try
                {
                    firstSpace  = line.IndexOf(' ');
                    secondSpace = line.IndexOf(' ', firstSpace + 1);
                    thirdSpace  = line.IndexOf(' ', secondSpace + 1);
                }
                catch { }
                if (firstSpace < 0)
                {
                    firstSpace = line.IndexOf('[');
                }
                if (firstSpace < 0)
                {
                    firstSpace = line.IndexOf('=');
                }
                if (firstSpace < 0)
                {
                    firstSpace = line.Length;
                }
                String type = line.Substring(0, firstSpace);

                if (TypeHandling.getTypeFromTypeName(type) == null)
                {//첫번째 토큰에서 제대로된 타입이 검출안되면
                    if (secondSpace > 0)
                    {
                        type = line.Substring(0, secondSpace);                  //두번째 검색
                    }
                    else
                    {
                        setError("타입정의가 맞지 않습니다.", i, line); //두번째 스페이스가 없으면 에러
                        return(null);
                    }

                    if (TypeHandling.getTypeFromTypeName(type) == null)
                    {//두번째 토큰에서 타입틀리면
                        if (thirdSpace > 0)
                        {
                            type = line.Substring(0, thirdSpace);                //세번째 검색
                        }
                        else
                        {
                            setError("타입정의가 맞지 않습니다.", i, line);//세번째 스페이스 없으면 에러
                            return(null);
                        }

                        if (TypeHandling.getTypeFromTypeName(type) == null)
                        {                                        //세번째 토큰에서도 타입이 틀리다면
                            setError("타입정의가 맞지 않습니다.", i, line); //무조건 에러
                            return(null);
                        }
                        else
                        {
                            typeSpace = thirdSpace;
                        }
                    }
                    else
                    {
                        typeSpace = secondSpace;
                    }
                }
                else
                {
                    typeSpace = firstSpace;
                }
                type = type.ToLower();
                String rest = line.Substring(typeSpace);

                if (type.ToLower().Equals("string") == false)
                {
                    rest = rest.Trim();                                          // rest.Replace(" ", ""); //string이 아니라면 나머지에서는 빈칸이 필요없다.
                }
                //초기값 입력받기
                bool isSwap = false;
                if (rest.Length > 5 && rest.Substring(0, 5).ToLower().Equals("swap@")) //swap명령어.
                {
                    rest   = rest.Substring(5);                                        //명령어 삭제.
                    isSwap = true;                                                     //값을 핸들링할 때 swap한다.
                }
                String   initValue = "0";                                              //기본값은 0이다.
                String[] token     = rest.Split("=".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                int      openBracket;
                int      closeBracket;
                if (token.Length == 2)
                {
                    token[0]  = token[0].Trim();
                    token[1]  = token[1].Trim();
                    initValue = token[1];
                }
                else if (token.Length > 2)
                {
                    setError("= 이 2번 이상 들어갑니다.", i, line);
                    return(null);
                }

                rest = token[0]; //=오른쪽의 값은 잘라버림.
                //배열검사
                openBracket  = rest.IndexOf('[');
                closeBracket = rest.IndexOf(']');

                int arrSize = 1;                         //arrSize가 1이면 단순값이다.

                if (openBracket > 0 || closeBracket > 0) //배열인지 검사하여
                {
                    if (openBracket < 0 || closeBracket < 0)
                    {
                        setError("배열을 나타내는 [,] 기호 둘 중 하나가 없습니다", i, line);
                        return(null);
                    }
                    String numStr = rest.Substring(openBracket + 1, closeBracket - openBracket - 1);

                    if (numStr.Length == 0)
                    {
                        arrSize = initValue.Split(",".ToCharArray()).Length;
                        rest    = rest.Substring(0, openBracket); //배열 크기를 가져왔으므로 배열기호그룹 삭제
                    }
                    else
                    {
                        int num = -1;
                        if (Int32.TryParse(numStr, out num) == false)
                        {
                            setError("배열기호[] 안에는 정수가 와야합니다.", i, line);
                            return(null);
                        }
                        else
                        {
                            if (num <= 0)
                            {
                                setError("배열의 크기는 1보다 작을 수 없습니다.", i, line);
                                return(null);
                            }
                            else
                            {
                                arrSize = num;
                                rest    = rest.Substring(0, openBracket); //배열 크기를 가져왔으므로 배열기호그룹 삭제
                            }
                        }
                    }
                } //배열검사 끝.

                //초기값 검사
                openBracket  = initValue.IndexOf('{');
                closeBracket = initValue.IndexOf('}');
                //initValues.Add(new object[arrSize]);//값 배열을 만들어줌
                initValues = new String[arrSize];
                if (openBracket >= 0 || closeBracket >= 0 || initValue.IndexOf(',') >= 0) //배열형식의 초기값이라면
                {
                    if (openBracket < 0 || closeBracket < 0)
                    {
                        setError("{ 나 } 중에서 하나가 없습니다.", i, line);
                        return(null);
                    }
                    String numStr = initValue.Substring(openBracket + 1, closeBracket - openBracket - 1); //브래킷 내부의 내용 가져옴
                    token = numStr.Split(",".ToCharArray());



                    if (token.Length > arrSize) //배열의 크기보다 클 때
                    {
                        setError("배열의 크기를 넘어서 초기화를 시도했습니다. size:" + arrSize + "  this:" + token.Length, i, line);
                        return(null);
                    }
                    string newInitStr = "";

                    for (int j = 0; j < token.Length; j++) //초기값들의 타입을 검사한다.
                    {
                        Int64  intValue    = 0;
                        Double doubleValue = 0.0;
                        String strValue    = "";
                        initValues[j] = token[j];
                        TypeHandling.getValueAndType(token[j], ref intValue, ref doubleValue, ref strValue);

                        /*
                         * switch (TypeHandling.getValueAndType(token[j], ref intValue, ref doubleValue, ref strValue))
                         * {//hex나 oct형식등을 모두 숫자형으로 먼저 치환한다.
                         *  case TypeHandling.TypeName.Integer:
                         *      if (isSwap)
                         *      {
                         *          if (TypeHandling.getTypeFromTypeName(type) == typeof(byte)) initValues[j] = Swaper.swap<byte>((byte)intValue).ToString();
                         *          else if (TypeHandling.getTypeFromTypeName(type) == typeof(short)) initValues[j] = Swaper.swap<short>((short)intValue).ToString();
                         *          else if (TypeHandling.getTypeFromTypeName(type) == typeof(int)) initValues[j] = Swaper.swap<int>((int)intValue).ToString();
                         *          else if (TypeHandling.getTypeFromTypeName(type) == typeof(long)) initValues[j] = Swaper.swap<long>((long)intValue).ToString();
                         *          else if (TypeHandling.getTypeFromTypeName(type) == typeof(ushort)) initValues[j] = Swaper.swap<ushort>((ushort)intValue).ToString();
                         *          else if (TypeHandling.getTypeFromTypeName(type) == typeof(uint)) initValues[j] = Swaper.swap<uint>((uint)intValue).ToString();
                         *          else if (TypeHandling.getTypeFromTypeName(type) == typeof(ulong)) initValues[j] = Swaper.swap<ulong>((ulong)intValue).ToString();
                         *      }
                         *      else
                         *      {
                         *          initValues[j] = intValue.ToString();
                         *      }
                         *      break;
                         *  case TypeHandling.TypeName.Float:
                         *      initValues[j] = doubleValue.ToString();
                         *      break;
                         *  case TypeHandling.TypeName.String:
                         *      initValues[j] = strValue;
                         *      break;
                         * }
                         */
                        if (j != 0)
                        {
                            newInitStr += ",";
                        }
                        newInitStr += initValues[j].ToString();
                        if (TypeHandling.isValidType(initValues[j].ToString(), type) == false)
                        {
                            setError("초기값이 타입과 다릅니다.Type:" + type + "  value:" + token[j], i, line);
                            return(null);
                        }
                    }
                    initValue = newInitStr;
                }
                else  //배열형식이 아니라 단순값일 때
                {
                    if (initValue[0] != '-' && Char.IsDigit(initValue[0]) == false && initValue[0] != '\"')//첫글자가 문자로 시작하고, 따옴표(")로시작하지 않으면 함수나 변수이거나 문자열이다.
                    {
                        int argstart = initValue.IndexOf("(");
                        int argend   = initValue.LastIndexOf(")");

                        if (argstart < 0 && argend < 0 && initValue.IndexOf("@") == 0)//변수임.
                        {
                            items[i].Var = new VariableInfo(initValue);
                        }
                        else if (argstart > 1 && argend == initValue.Length - 1)
                        {//함수임.
                            String   funcName = initValue.Substring(0, argstart);
                            String[] args     = initValue.Substring(argstart + 1, argend - 1 - argstart).Split(",".ToCharArray());
                            if (FunctionsList.ContainsKey(funcName))
                            {
                                items[i].Function = new FunctionInfo(FunctionsList[funcName], args);
                            }
                            else
                            {
                                items[i].Function = new FunctionInfo(funcName, null, args);
                            }
                        }
                        else if (type.Equals("string"))
                        {
                            initValue = initValue.Replace("\\\"", "@'aAiIOo~{|\\]~"); //\"를 구분하기 위해 모두 특수한 문자로 바꾸어준다.
                            initValue = initValue.Replace("\"", "");
                            initValue = initValue.Replace("@'aAiIOo~{|\\]~", "\\\""); //\"를 다시 복구한다.

                            initValues[0] = initValue;                                //따옴표를 지우고 넣어준다.
                        }
                        else
                        {
                            setError("함수정의가 맞지 않습니다. 괄호가 완성되지 않았습니다.", i, line);
                            return(null);
                        }
                    }
                    else
                    {
                        if (type.Equals("sring"))
                        {
                            initValue = initValue.Replace("\\\"", "@'aAiIOo~{|\\]~"); //\"를 구분하기 위해 모두 특수한 문자로 바꾸어준다.
                            initValue = initValue.Replace("\"", "");
                            initValue = initValue.Replace("@'aAiIOo~{|\\]~", "\\\""); //\"를 다시 복구한다.

                            initValues[0] = initValue;                                //따옴표를 지우고 넣어준다.
                        }
                        else if (initValue.Length == 0)
                        {
                            initValues = new String[] { "0" }
                        }
                        ;
                        else
                        {
                            for (int initc = 0; initc < arrSize; initc++)
                            {
                                initValues[initc] = initValue; //모두 같은 값으로 채워줌.
                            }
                        }
                    }
                    #region old

                    /*
                     * switch (TypeHandling.getValueAndType(initValue, ref intValue, ref doubleValue, ref strValue))
                     * {//hex나 oct형식등을 모두 숫자형으로 먼저 치환한다.
                     *  case TypeHandling.TypeName.Integer:
                     *      //initValues[i][0] = intValue;
                     *      if (isSwap)
                     *      {
                     *          if (TypeHandling.getTypeFromTypeName(type) == typeof(byte)) initValues[0] = Swaper.swap<byte>((byte)intValue).ToString();
                     *          else if (TypeHandling.getTypeFromTypeName(type) == typeof(short)) initValues[0] = Swaper.swap<short>((short)intValue).ToString();
                     *          else if (TypeHandling.getTypeFromTypeName(type) == typeof(int)) initValues[0] = Swaper.swap<int>((int)intValue).ToString();
                     *          else if (TypeHandling.getTypeFromTypeName(type) == typeof(long)) initValues[0] = Swaper.swap<long>((long)intValue).ToString();
                     *          else if (TypeHandling.getTypeFromTypeName(type) == typeof(ushort)) initValues[0] = Swaper.swap<ushort>((ushort)intValue).ToString();
                     *          else if (TypeHandling.getTypeFromTypeName(type) == typeof(uint)) initValues[0] = Swaper.swap<uint>((uint)intValue).ToString();
                     *          else if (TypeHandling.getTypeFromTypeName(type) == typeof(ulong)) initValues[0] = Swaper.swap<ulong>((ulong)intValue).ToString();
                     *      }
                     *      else
                     *      {
                     *          initValues[0] = intValue.ToString();
                     *      }
                     *      break;
                     *  case TypeHandling.TypeName.Float:
                     *      initValues[0] = doubleValue.ToString();
                     *      break;
                     *  case TypeHandling.TypeName.String:
                     *      initValues[0] = strValue;
                     *      break;
                     * }
                     * */
                    #endregion
                    if (TypeHandling.isValidType(initValues[0].ToString(), type) == false)
                    {
                        String error = "초기값이 타입과 다릅니다.";
                        if (TypeHandling.getTypeKind(initValue) == TypeHandling.TypeName.HexString)
                        {
                            error += " hex값을 넣어주실 때는 unsigned 타입으로 지정하십시오.";
                        }
                        setError(error, i, line);
                        return(null);
                    }


                    initValue = initValues[0].ToString();
                }
                //초기값 검사 끝
                rest = rest.Replace(" ", "");
                //변수명검사
                for (int j = 0; j < rest.Length; j++) //변수명 검사
                {
                    if ((Char.IsLetterOrDigit(rest[j]) == false) && rest[j].Equals('_') == false)
                    {
                        setError("변수명에는 기호가 들어갈 수 없습니다.", i, line);
                        return(null);
                    }
                    else if (j == 0 && Char.IsDigit(rest[j]))
                    {
                        setError("변수명의 첫번째에는 숫자가 들어갈 수 없습니다.", i, line);
                        return(null);
                    }
                }//변수명 검사 끝
                if (rest.Length == 0)
                {
                    rest = "var" + i;
                }
                CPacketItem item = new CPacketItem(rest, type, arrSize, initValues);
                item.IsSwap = isSwap;
                //item.InitString = initValue;
                items.Add(item);

                /*
                 * ns.names.Add(rest);
                 * ns.sizes.Add(arrSize);
                 * ns.types.Add(type);
                 * ns.isSwap.Add(isSwap);
                 * ns.initStr.Add(initValue);
                 */
            }//각 라인들 검색 끝

            return(items);
        }