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; }
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); }