📄 db_create.c
字号:
__trimleft(strTemp);
__trimright(strTemp);
// if(strTemp.Find((LPCTSTR)KeyName[4],0) == 0 )//unsigned char
if(strstr(strTemp,(char*)KeyName[4] )==(char*) strTemp )//unsigned char
{
goto Lab_unsi_char;
}
else if(strstr(strTemp,(char*)KeyName[5] )==(char*) strTemp )//unsigned short
{
goto Lab_unsi_short;
}
else if(strstr(strTemp,(char*)KeyName[6]) ==(char*)strTemp )//unsigned int
{
goto Lab_unsi_int;
}
else if(strstr(strTemp,(char*)KeyName[7]) == (char*)strTemp)//unsigned long
{
goto Lab_unsi_long;
}
break;
case 10://uchar
Lab_unsi_char: if(m_pre_flag != 1)
break;
m_field_idx ++;
// strTemp = *pstr;
// strTemp.Replace("uchar","unsigned char");
// strTemp2 = strTemp;
// strTemp.Format(" %s\n",strTemp2);
type_count = GetTypeCount(pstr);
m_Field[m_field_idx].wType = TY_UNSIGNED_CHAR;
// if(pstr->Find("*",0) > 0)
if(strstr(pstr,"*"))
{
m_Field[m_field_idx].wSize = 4*type_count;
m_Field[m_field_idx].wType2 |= 0x02;
if(m_Align==4)
if(m_DbdHeader.Record_Size%4!=0)
{
m_Field[m_field_idx-1].wSize += (m_DbdHeader.Record_Size+3)/4*4-m_DbdHeader.Record_Size;
m_DbdHeader.Record_Size = (m_DbdHeader.Record_Size+3)/4*4;
}
else
if(m_DbdHeader.Record_Size%2!=0)
{
m_Field[m_field_idx-1].wSize++;
m_DbdHeader.Record_Size++;
}
}
else
m_Field[m_field_idx].wSize = type_size[m_Field[m_field_idx].wType][m_IsTaret]*type_count;
if(m_Field[m_field_idx].wSize>1)
m_Field[m_field_idx].wSize--;
m_DbdHeader.Record_Size += m_Field[m_field_idx].wSize;
m_DbdHeader.Field_Count++;
ret = 1;
break;
case 11://ushort
Lab_unsi_short: if(m_pre_flag != 1)
break;
m_field_idx ++;
// strTemp = *pstr;
// strTemp.Replace("ushort","unsigned short");
// strTemp2 = strTemp;
// strTemp.Format(" %s\n",strTemp2);
type_count = GetTypeCount(pstr);
m_Field[m_field_idx].wType = TY_UNSIGNED_SHORT;
// if(pstr->Find("*",0) > 0)
if(strstr(pstr,"*"))
{
m_Field[m_field_idx].wSize = 4*type_count;
m_Field[m_field_idx].wType2 |= 0x02;
if(m_Align==4)
if(m_DbdHeader.Record_Size%4!=0)
{
m_Field[m_field_idx-1].wSize += (m_DbdHeader.Record_Size+3)/4*4-m_DbdHeader.Record_Size;
m_DbdHeader.Record_Size = (m_DbdHeader.Record_Size+3)/4*4;
}
else
if(m_DbdHeader.Record_Size%2!=0)
{
m_Field[m_field_idx-1].wSize++;
m_DbdHeader.Record_Size++;
}
}
else
m_Field[m_field_idx].wSize = type_size[m_Field[m_field_idx].wType][m_IsTaret]*type_count;
m_DbdHeader.Record_Size += m_Field[m_field_idx].wSize;
m_DbdHeader.Field_Count++;
ret = 1;
break;
case 12://uint
Lab_unsi_int: if(m_pre_flag != 1)
break;
m_field_idx ++;
// strTemp = *pstr;
// strTemp.Replace("uint","unsigned int");
// strTemp2 = strTemp;
// strTemp.Format(" %s\n",strTemp2);
type_count = GetTypeCount(pstr);
m_Field[m_field_idx].wType = TY_UNSIGNED_INT;
// if(pstr->Find("*",0) > 0)
if(strstr(pstr,"*"))
{
m_Field[m_field_idx].wSize = 4*type_count;
m_Field[m_field_idx].wType2 |= 0x02;
}
else
m_Field[m_field_idx].wSize = type_size[m_Field[m_field_idx].wType][m_IsTaret]*type_count;
m_DbdHeader.Record_Size += m_Field[m_field_idx].wSize;
m_DbdHeader.Field_Count++;
ret = 1;
break;
case 13://ulong
Lab_unsi_long: if(m_pre_flag != 1)
break;
m_field_idx ++;
// strTemp = *pstr;
// strTemp.Replace("ulong","unsigned long");
// strTemp2 = strTemp;
// strTemp.Format(" %s\n",strTemp2);
type_count = GetTypeCount(pstr);
m_Field[m_field_idx].wType = TY_UNSIGNED_LONG;
// if(pstr->Find("*",0) > 0)
if(strstr(pstr,"*"))
{
m_Field[m_field_idx].wSize = 4*type_count;
m_Field[m_field_idx].wType2 |= 0x02;
}
else
m_Field[m_field_idx].wSize = type_size[m_Field[m_field_idx].wType][m_IsTaret]*type_count;
m_DbdHeader.Record_Size += m_Field[m_field_idx].wSize;
m_DbdHeader.Field_Count++;
ret = 1;
break;
case 14://float
if(m_pre_flag != 1)
break;
m_field_idx ++;
// strTemp = *pstr;
// strTemp2 = strTemp;
// strTemp.Format(" %s\n",strTemp2);
type_count = GetTypeCount(pstr);
m_Field[m_field_idx].wType = TY_FLOAT;
// if(pstr->Find("*",0) > 0)
if(strstr(pstr,"*"))
{
m_Field[m_field_idx].wSize = 4*type_count;
m_Field[m_field_idx].wType2 |= 0x02;
}
else
m_Field[m_field_idx].wSize = type_size[m_Field[m_field_idx].wType][m_IsTaret]*type_count;
m_DbdHeader.Record_Size += m_Field[m_field_idx].wSize;
m_DbdHeader.Field_Count++;
ret = 1;
break;
case 27://varchar myh2002-08-19
if(m_pre_flag != 1)
break;
m_field_idx ++;
m_Field[m_field_idx].wType = TY_VARCHAR;
m_Field[m_field_idx].wSize = 6;
psize1=strstr(pstr,"[");
psize2=strstr(pstr,"]");
memset(strTemp,0,sizeof(strTemp));
if(psize1&&psize2)
{
memcpy(strTemp,psize1+1,strlen(psize1)-strlen(psize2)-1);
type_count=atoi(strTemp);
}
else
{
type_count=1;
}
m_Field[m_field_idx].WReserve=type_count;
m_DbdHeader.Record_Size += m_Field[m_field_idx].wSize;
m_DbdHeader.Field_Count++;
ret = 1;
break;
case 28://varchar myh2002-08-19
if(m_pre_flag != 1)
break;
m_field_idx ++;
m_Field[m_field_idx].wType = TY_VARBYTE;
m_Field[m_field_idx].wSize = 6;
psize1=strstr(pstr,"[");
psize2=strstr(pstr,"]");
memset(strTemp,0,sizeof(strTemp));
if(psize1&&psize2)
{
memcpy(strTemp,psize1+1,strlen(psize1)-strlen(psize2)-1);
type_count=atoi(strTemp);
}
else
{
type_count=1;
}
m_Field[m_field_idx].WReserve=type_count;
m_DbdHeader.Record_Size += m_Field[m_field_idx].wSize;
m_DbdHeader.Field_Count++;
ret = 1;
break;
case 15://double
if(m_pre_flag != 1)
break;
m_field_idx ++;
// strTemp = *pstr;
// strTemp2 = strTemp;
// strTemp.Format(" %s\n",strTemp2);
type_count = GetTypeCount(pstr);
m_Field[m_field_idx].wType = TY_DOUBLE;
// if(pstr->Find("*",0) > 0)
if(strstr(pstr,"*"))
{
m_Field[m_field_idx].wSize = 4*type_count;
m_Field[m_field_idx].wType2 |= 0x02;
}
else
m_Field[m_field_idx].wSize = type_size[m_Field[m_field_idx].wType][m_IsTaret]*type_count;
m_DbdHeader.Record_Size += m_Field[m_field_idx].wSize;
m_DbdHeader.Field_Count++;
ret = 1;
break;
case 16://{
if(m_pre_flag == 1)
{
// strTemp.Format("{\n");
ret = 1;
}
break;
case 17://}
if(m_pre_flag == 1)
{
// strTemp.Format("};\n");
m_pre_flag = 0;
ret = 1;
}
break;
case 18://primary
case 19://alternate
case 20:////
case 21://
case 22://\n
case 23://\r
case 24://\t
case 25://on
case 26://foreign
ret = 1;
break;
default:
m_pre_flag = 0;
ret = 1;
break;
}
}
else
{
m_pre_flag = 0;
ret = 1;
}
m_FileNum++;
return ret;
}
unsigned short GetTypeCount(char *pstr)
{
// TODO: Add your control notification handler code here]
char * strmy;
char * strTmp;
char strTemp[200];
char strTemp3[200];
char strCount[200];
char ddlTmp[1024];
int cur_old;
short ret_len;
char strFieldName[200];
char* pos2,*pos1,*pos3,*pos4;
int i,j,k;
char* find_pos,find_pos2;
int bFlag;
bFlag=0;
i=0;
j=0;
k=0;
ret_len=0;
strcpy(strTemp,pstr);
strcpy(strFieldName,pstr);
for(i=0;i<strlen(strFieldName);i++)
{
if(strFieldName[i]!=0x20)
break;
j++;
}
strcpy(strFieldName,&strFieldName[j]);
for(i=strlen(strFieldName)-1;i>0;i--)
{
if(strFieldName[i]!=0x20)
break;
strFieldName[i]=0;
}
//////
if(pos3=strstr(strFieldName," "))
{
for(i= 0;i<6;i++)
{
pos1 = pos3;
if((pos4=strstr(pos1,(char*)KeyType_[i]))||(pos4=strstr(pos1,(char*)KeyType[i])))
{
pos1=strstr(pos4+3," ");
if(pos1)
pos4=pos1;
if((pos2 = strstr(pos4,"*")))
pos1 = pos2;
else
pos1 = pos4;
break;
}
}
if((pos2=strstr(pos1,"*")))
pos1 = pos2;
if((pos2 =strstr(pos1,"["))||(pos2=strstr(pos1,";")))
{
GetSubStr(strFieldName,strlen(strFieldName)-strlen(pos1)+1,strlen(strFieldName)-strlen(pos2)-1,strFieldName);
for(i=0;i<strlen(strFieldName);i++)
{
if(strFieldName[i]!=0x20)
break;
j++;
}
strcpy(strFieldName,&strFieldName[j]);
for(i=strlen(strFieldName)-1;i>0;i--)
{
if(strFieldName[i]!=0x20)
break;
strFieldName[i]=0;
}
__strupr(strFieldName);
// strFieldName.TrimLeft();
// strFieldName.TrimRight();
// strFieldName.MakeUpper();
}
}
//////
pos1 = strstr(strTemp,"[");
pos2 = strstr(strTemp,"]");
if(pos1 && pos2 )
{
m_Field[m_field_idx].wType2 |= 0x01;
// strCount.Empty();
GetSubStr(strCount,strlen(strTemp)-strlen(pos1)+1,strlen(strTemp)-strlen(pos2)-1,strTemp);
if(strstr(strCount,"+")||strstr(strCount,"-")
||strstr(strCount,"*")||strstr(strCount,"/")
||strstr(strCount,"%")||strstr(strCount,"&")
||strstr(strCount,"|")||strstr(strCount,"!"))
{
return 0;
}
strcpy(ddlTmp,gstrddl);
strTmp=strstr(ddlTmp,"\r\n");
if(strTmp)
{
memset(strTemp3,0,sizeof(strTemp3));
memcpy(strTemp3,ddlTmp,strlen(ddlTmp)-strlen(strTmp));
strcpy(ddlTmp,strTmp+2);
}
else
strcpy(strTemp3,ddlTmp);
while(strlen(strTemp3)>0)
{
__trimleft(strTemp3);
__trimright(strTemp3);
// strTemp3.TrimLeft();
// strTemp3.TrimRight();
// if(strTemp3.Find("define",0) == 0)
if(strstr(strTemp3,"define")==strTemp3)
{
find_pos = strstr(strTemp3,strCount);
if(strlen(strTemp3)-strlen(find_pos)>5)
{
j=strlen(find_pos)-strlen(strCount);
// find_pos += strCount.GetLength();
k=strlen(strTemp3)-1;
// find_pos2 = strTemp3.GetLength()-1;
GetSubStr(strCount,j,k,strTemp3);
//strCount = GetSubStr(find_pos,find_pos2,&strTemp3);
break;
}
}
strTmp=strstr(ddlTmp,"\r\n");
if(strTmp)
{
memset(strTemp3,0,sizeof(strTemp3));
memcpy(strTemp3,strddl,strlen(ddlTmp)-strlen(strTmp));
strcpy(ddlTmp,strTmp+2);
}
else
{
if(bFlag)
strcpy(strTemp3,"");
else
strcpy(strTemp3,ddlTmp);
bFlag=1;
}
}
if(ret_len==0)
ret_len = atoi(strCount);
}
else
ret_len = 1;
return ret_len;
}
int GetSubStr(char* ret,int start,int end,char *pStr)
{
// TODO: Add your control notification handler code here
char strCount[200];
int r;
int iser;
iser=0;
memset(strCount,0,sizeof(strCount));
for(r=start;r<end+1;r++)
strCount[iser++]= pStr[r];
__trimleft(strCount);
__trimright(strCount);
strcpy(ret,strCount);
return 1;
}
int Swap4(int Data)
{
int *val,i;
unsigned char tep[4],tr[4];
memcpy(tep,&Data,sizeof(int));
tr[0] = tep[3];
tr[1] = tep[2];
tr[2] = tep[1];
tr[3] = tep[0];
val = (int*)tr;
i = *val;//memcpy(&val,tr,sizeof(int));
//_swab((char*)&Data,(char*)&val,sizeof(Data));
return *val;
}
short Swap2(short Data)
{
short val=Data;
char csave;
// _swab((char*)&Data,(char*)&val,sizeof(Data));
csave=*((char*)&val);
*((char*)&val)=*((char*)&val+1);
*((char*)&val+1)=csave;
return val;
}
//*** jasonxxx
static char* __strupr(char* str)
{
int ilen=strlen(str);
int i;
for(i=0;i<ilen;i++)
{
if((*(str+i)>97)&&(*(str+i)<123))
*(str+i)=*(str+i)-32;
}
return str;
}
void __trimleft(char* str)
{
int i,j;
i=0;
j=0;
for(i=0;i<strlen(str);i++)
{
if((str[i]!=0x20)&&(str[i]!=0x09))//spacebar+table
break;
j++;
}
strcpy(str,&str[j]);
}
void __trimright(char* str)
{
int i;
for(i=strlen(str)-1;i>0;i--)
{
if((str[i]!=0x20)&&(str[i]!=0x09))//spacebar+table
break;
str[i]=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -