示例#1
0
doc to_doc(char *s)
{
  int a[9];
  doc ret;
  memset(&ret, 0, sizeof(ret));

  while (*s) switch (*s) {
  case 'l': GET1(a[0] >= 1 && a[0] <= 1000,
            new_line(&ret, ret.size, a[0])); EOL; break;
  case 'i': GET0(ret.size >= 1,
            new_item(&ret.l[ret.size-1], ret.l[ret.size-1].size));
            EOL; break;
  case 'c': GET3(ret.size >= 1 &&
                 ret.l[ret.size-1].size >= 1 &&
                 a[0] >= CLEF_SOL && a[0] <= CLEF_DO &&
                 a[1] >= 0 && a[1] < ret.l[ret.size-1].n &&
                 a[2] >= -100 && a[2] <= 100,
            new_vertical_item(&ret.l[ret.size-1].i[ret.l[ret.size-1].size-1],
                          ret.l[ret.size-1].i[ret.l[ret.size-1].size-1].size,
                              CLEF, a[0], a[1], a[2]));
            EOL; break;
  case 'a': GET3(ret.size >= 1 &&
                 ret.l[ret.size-1].size >= 1 &&
                 (a[0] == DIESE || a[0] == BEMOL) &&
                 a[1] >= 0 && a[1] < ret.l[ret.size-1].n &&
                 a[2] >= -100 && a[2] <= 100,
            new_vertical_item(&ret.l[ret.size-1].i[ret.l[ret.size-1].size-1],
                          ret.l[ret.size-1].i[ret.l[ret.size-1].size-1].size,
                              ARMATURE, a[0], a[1], a[2]));
            EOL; break;
  case 'n': GET9(ret.size >= 1 &&
                 ret.l[ret.size-1].size >= 1 &&
                 a[0] >= 0 && a[0] <= 16 &&
                 a[1] >= 0 && a[1] <= 4 &&
                 a[2] >= NO_ALTERATION && a[2] <= BECARRE &&
                 a[3] >= 0 && a[3] < ret.l[ret.size-1].n &&
                 a[4] >= -100 && a[4] <= 100 &&
                 a[5] >= STEM_UP && a[5] <= STEM_NONE
                 /* l, m, o may be whatever, no check */,
            new_vertical_item(&ret.l[ret.size-1].i[ret.l[ret.size-1].size-1],
                          ret.l[ret.size-1].i[ret.l[ret.size-1].size-1].size,
                              NOTE, a[0], a[1], a[2], a[3], a[4], a[5],
                              a[6], a[7], a[8]));
            EOL; break;
  case 's': GET4(ret.size >= 1 &&
                 ret.l[ret.size-1].size >= 1 &&
                 a[0] >= 0 && a[0] <= 16 &&
                 a[1] >= 0 && a[1] <= 4 &&
                 a[2] >= 0 && a[2] < ret.l[ret.size-1].n &&
                 a[3] >= -100 && a[3] <= 100,
            new_vertical_item(&ret.l[ret.size-1].i[ret.l[ret.size-1].size-1],
                          ret.l[ret.size-1].i[ret.l[ret.size-1].size-1].size,
                              SILENCE, a[0], a[1], a[2], a[3]));
            EOL; break;
  case 'b': GET0(ret.size >= 1 &&
                 ret.l[ret.size-1].size >= 1,
            new_vertical_item(&ret.l[ret.size-1].i[ret.l[ret.size-1].size-1],
                          ret.l[ret.size-1].i[ret.l[ret.size-1].size-1].size,
                              BAR));
            EOL; break;
  case 't': GET3(ret.size >= 1 &&
                 ret.l[ret.size-1].size >= 1 &&
                 a[2] > 0,
            do {
              int tlen;
              char *t = malloc(a[2]+1); if (t == NULL) abort();
              s++;
              /* not pretty */
              while (*s && *s != ' ') s++; if (*s == ' ') s++;
              while (*s && *s != ' ') s++; if (*s == ' ') s++;
              while (*s && *s != ' ') s++; if (*s == ' ') s++;
              while (*s && *s != ' ') s++; if (*s == ' ') s++;
              for (tlen = 0; *s && tlen < a[2]; tlen++, s++) t[tlen] = *s;
              t[tlen] = 0;
              new_text(&ret.l[ret.size-1].i[ret.l[ret.size-1].size-1],
                       t, a[0], a[1]);
              free(t);
            } while (0));
            EOL; break;
  case '#': EOL; break; /* why not deal with comments? only 1 line of code! */
  default: printf("error in string to doc, ignoring a line\n"); EOL; break;
  }

  return ret;
}
示例#2
0
int UppleReloadTermTransDefTBL()
{
	int			ret;
	char			fileName[512];
	char			*p;
	int			i;
	int			realNum = 0;

#ifdef USE_REDIS
	{
		char GName[ 128 ];

		char s_realNum[20];
		int realNum= 0;

		sprintf( GName, "#TermTransDefTBL.realNum" );
		memset( s_realNum, 0x00, sizeof(s_realNum) );
		GET0( GName, s_realNum);

		if( *s_realNum)
		{

			sprintf( GName, "#TermTransDefTBL" );
			memset( pguppleTermTransDefTBL, 0x00, sizeof(TUppleTermTransDefTBL)  );
			GET0( GName, pguppleTermTransDefTBL );

			UppleLog2(__FILE__,__LINE__, "#TEST:TermTransDefTBL...2,pguppleTermTransDefTBL->realNum=[%d]\n", pguppleTermTransDefTBL->realNum);

			if(pguppleTermTransDefTBL->realNum <= 0)
				UppleLog2(__FILE__,__LINE__, "#TEST:TermTransDefTBL...error,pguppleTermTransDefTBL->realNum=[%d] <= 0, load again\n", pguppleTermTransDefTBL->realNum);
			else /* 确保读取到的REC配置项的数目大于零,才返回正确 */
				return(pguppleTermTransDefTBL->realNum);
		}

	}
#endif

	if ((ret = UppleConnectTermTransDefTBL()) < 0)
	{
		UppleUserErrLog2(__FILE__,__LINE__,"in UppleReloadTermTransDefTBL:: UppleConnectTermTransDefTBL!\n");
		return(ret);
	}

	for (i = 0,pguppleTermTransDefTBL->maxNumOfRecords = UppleGetMaxNumOfTermTransDef(); i < pguppleTermTransDefTBL->maxNumOfRecords; i++)
	{
		UppleInitTermTransDef(&(pguppleTermTransDefTBL->records[i]));
	}

	memset(fileName,0,sizeof(fileName));
	UppleGetConfFileNameOfTermTransDefTBL(fileName);
	if ((ret = UppleInitEnvi(fileName)) < 0)
	{
		UppleUserErrLog2(__FILE__,__LINE__,"in UppleReloadTermTransDefTBL:: UppleInitEnvi [%s]!\n",fileName);
		return(ret);
	}

	for (i = 0; (i < UppleGetEnviVarNum()) && (realNum < pguppleTermTransDefTBL->maxNumOfRecords); i++)
	{
		// 读取处理模块的ID号
		if ((p = UppleGetEnviVarOfTheIndexByIndex(i,0)) == NULL)
		{
			UppleUserErrLog2(__FILE__,__LINE__,"in UppleReloadTermTransDefTBL:: UppleGetEnviVarOfTheIndexByIndex [%d] [%d]\n",i,0);
			continue;
		}
		if (!UppleIsValidTermTransDealMDLID(pguppleTermTransDefTBL->records[realNum].idOfDealMDL = UppleGenerateDealMDLIDOfTermTrans(atol(p))))
		{
			UppleUserErrLog2(__FILE__,__LINE__,"in UppleReloadTermTransDefTBL:: UppleIsValidTermTransDealMDLID [%lld]\n",pguppleTermTransDefTBL->records[realNum].idOfDealMDL);
			continue;
		}
		// 读取MTI
		if ((p = UppleGetEnviVarOfTheIndexByIndex(i,1)) == NULL)
		{
			UppleUserErrLog2(__FILE__,__LINE__,"in UppleReloadTermTransDefTBL:: UppleGetEnviVarOfTheIndexByIndex [%d] [%d]\n",i,0);
			continue;
		}
		if (strlen(p) > sizeof(pguppleTermTransDefTBL->records[realNum].fld000) - 1)
			continue;
		strcpy(pguppleTermTransDefTBL->records[realNum].fld000,p);
		// 读取处理码
		if ((p = UppleGetEnviVarOfTheIndexByIndex(i,2)) == NULL)
		{
			UppleUserErrLog2(__FILE__,__LINE__,"in UppleReloadTermTransDefTBL:: UppleGetEnviVarOfTheIndexByIndex [%d] [%d]\n",i,1);
			continue;
		}
		if (strlen(p) > sizeof(pguppleTermTransDefTBL->records[realNum].fld003) - 1)
			continue;
		strcpy(pguppleTermTransDefTBL->records[realNum].fld003,p);
		// 路由标识
		if ((p = UppleGetEnviVarOfTheIndexByIndex(i,3)) == NULL)
		{
			UppleUserErrLog2(__FILE__,__LINE__,"in UppleReloadTermTransDefTBL:: UppleGetEnviVarOfTheIndexByIndex [%d] [%d]\n",i,1);
			continue;
		}
		if (strlen(p) > sizeof(pguppleTermTransDefTBL->records[realNum].routeid) - 1)
			continue;
		strcpy(pguppleTermTransDefTBL->records[realNum].routeid,p);
		// 读取说明
		memset(pguppleTermTransDefTBL->records[realNum].remark,0,sizeof(pguppleTermTransDefTBL->records[realNum].remark));
		if ((p = UppleGetEnviVarOfTheIndexByIndex(i,4)) != NULL)
		{
			if (strlen(p) > sizeof(pguppleTermTransDefTBL->records[realNum].remark) - 1)
				memcpy(pguppleTermTransDefTBL->records[realNum].remark,p,sizeof(pguppleTermTransDefTBL->records[realNum].remark) - 1);
			else
				strcpy(pguppleTermTransDefTBL->records[realNum].remark,p);
		}
		realNum++;
	}
	pguppleTermTransDefTBL->maxNumOfRecords = realNum;
	pguppleTermTransDefTBL->realNum = realNum;
	UppleClearEnvi();

#ifdef USE_REDIS
	{
		char GName[ 128 ];

		char s_realNum[20];
		//int realNum= 0;

		memset( s_realNum, 0x00, sizeof(s_realNum) );
		sprintf( s_realNum, "%d", pguppleTermTransDefTBL->realNum);	    

		sprintf( GName, "#TermTransDefTBL" );
		SET0( GName, pguppleTermTransDefTBL, sizeof(TUppleTermTransDefTBL)+1  );
		sprintf( GName, "#TermTransDefTBL.realNum" );
		/*caiyucheng, test*/
		//SET0( GName, s_realNum, strlen(s_realNum)+1 );
		SET0( GName, s_realNum, strlen(s_realNum));
	}
#endif

	return(realNum);
}