// //The following are the implementations of all command handler. //The handler's name is the same as command. // static DWORD inputb(__CMD_PARA_OBJ* lpCmdObj) { WORD wInputPort = 0; UCHAR bt = 0; DWORD dwInputPort = 0; CHAR strBuffer[15] = {0}; if(NULL == lpCmdObj) //Parameter check. return IOCTRL_TERMINAL; if(lpCmdObj->byParameterNum < 2) //Two small parameters. { PrintLine("Please input the port where to read."); return IOCTRL_NORMAL; } if(!Str2Hex(lpCmdObj->Parameter[1],&dwInputPort)) //Convert the string value to hex. { PrintLine("Invalid port value."); return IOCTRL_NORMAL; } wInputPort = (WORD)dwInputPort; //Now,wInputPort contains the port number. //ReadByteFromPort(&bt,wInputPort); //Read one byte from port. bt = __inb(wInputPort); dwInputPort = 0; dwInputPort += bt; strBuffer[0] = ' '; strBuffer[1] = ' '; strBuffer[2] = ' '; strBuffer[3] = ' '; Hex2Str(dwInputPort,&strBuffer[4]); PrintLine(strBuffer); //Print out the byte. return 0; }
static DWORD memalloc(__CMD_PARA_OBJ* lpCmdObj) { DWORD dwMemSize = 0; LPVOID lpMemAddr = NULL; CHAR strBuffer[16]; if(NULL == lpCmdObj) //Parameter check. return SHELL_CMD_PARSER_FAILED; if(lpCmdObj->byParameterNum < 2) //Not enough parameters. { PrintLine("Please input the memory size to be allocated."); return SHELL_CMD_PARSER_SUCCESS; } if(!Str2Hex(lpCmdObj->Parameter[1],&dwMemSize)) //Invalid size value. { PrintLine("Invalid memory size value."); return SHELL_CMD_PARSER_SUCCESS; } lpMemAddr = KMemAlloc(dwMemSize,KMEM_SIZE_TYPE_ANY); if(NULL == lpMemAddr) //Failed to allocate memory. { PrintLine("Can not allocate memory."); return SHELL_CMD_PARSER_SUCCESS; } Hex2Str((DWORD)lpMemAddr,&strBuffer[4]); //Convert to string. strBuffer[0] = ' '; strBuffer[1] = ' '; strBuffer[2] = '0'; strBuffer[3] = 'x'; PrintLine(strBuffer); //Print out the result. return SHELL_CMD_PARSER_SUCCESS; }
static DWORD overload(__CMD_PARA_OBJ* lpCmdObj) { DWORD dwTimerNum = 10; DWORD dwTimerID = 00200000; DWORD dwTimeSpan = 100; __COMMON_OBJECT* lpTimerObject = NULL; if((NULL == lpCmdObj) || (lpCmdObj->byParameterNum < 2)) //Parameter check. { PrintLine(" Please input the beep time,in millionsecond."); return SHELL_CMD_PARSER_INVALID; } if(!Str2Hex(lpCmdObj->Parameter[1],&dwTimerNum)) //Get the time span to beep. { PrintLine(" Invalid time parameter."); return SHELL_CMD_PARSER_INVALID; } while(dwTimerNum) { lpTimerObject = System.SetTimer((__COMMON_OBJECT*)&System, KernelThreadManager.lpCurrentKernelThread, dwTimerID, dwTimeSpan, NULL, NULL, TIMER_FLAGS_ONCE); if(NULL == lpTimerObject) //Failed to set timer. { PrintLine(" Can not set timer,please try again."); return SHELL_CMD_PARSER_FAILED; } dwTimerNum --; } return SHELL_CMD_PARSER_SUCCESS; }
static DWORD inputw(__CMD_PARA_OBJ* lpCmdObj) { WORD wInputPort = 0; WORD wr = 0; DWORD dwInputPort = 0; CHAR strBuffer[15] = {0}; if(NULL == lpCmdObj) //Parameter check. return SHELL_CMD_PARSER_FAILED; if(lpCmdObj->byParameterNum < 2) //Two small parameters. { PrintLine("Please input the port where to read."); return SHELL_CMD_PARSER_SUCCESS; } if(!Str2Hex(lpCmdObj->Parameter[1],&dwInputPort)) //Convert the string value to hex. { PrintLine("Invalid port value."); return SHELL_CMD_PARSER_SUCCESS; } wInputPort = (WORD)(dwInputPort); //Now,wInputPort contains the port number. //ReadWordFromPort(&wr,wInputPort); //Read one byte from port. wr = __inw(wInputPort); dwInputPort = 0; dwInputPort += wr; strBuffer[0] = ' '; strBuffer[1] = ' '; strBuffer[2] = ' '; strBuffer[3] = ' '; Hex2Str(dwInputPort,&strBuffer[4]); PrintLine(strBuffer); //Print out the byte. return SHELL_CMD_PARSER_SUCCESS; }
/****************************************************************************** ** Add a new node name to the list. */ void AddNodeName(char * pAddr, char * pName) { PNODENAME pNew; /* Create new node name. */ pNew = (PNODENAME) malloc(sizeof(NODENAME)); if (!pNew) return; /* Convert address. */ pNew->Address[0] = Str2Hex(pAddr); pAddr += 2; pNew->Address[1] = Str2Hex(pAddr); pAddr += 2; pNew->Address[2] = Str2Hex(pAddr); pAddr += 2; pNew->Address[3] = Str2Hex(pAddr); pAddr += 2; pNew->Address[4] = Str2Hex(pAddr); pAddr += 2; pNew->Address[5] = Str2Hex(pAddr); /* Copy in name (truncated). */ pName[7] = '\0'; strcpy(pNew->szName, pName); /* Check for null list. */ if (NameList == NULL) { /* Set as root. */ pNew->Next = NULL; pTail = pNew; NameList = pNew; } else /* List not empty. */ { /* Tag on end. */ pNew->Next = NULL; pTail->Next = pNew; pTail = pNew; } }
static DWORD beep(__CMD_PARA_OBJ* lpCmdObj) { __KERNEL_THREAD_MESSAGE Msg; DWORD dwTimerID = 00100000; DWORD dwTimeSpan = 0; __COMMON_OBJECT* lpTimerObject = NULL; UCHAR ucCtrlByte; if((NULL == lpCmdObj) || (lpCmdObj->byParameterNum < 2)) //Parameter check. { PrintLine(" Please input the beep time,in millionsecond."); return SYS_DIAG_CMD_PARSER_INVALID; } if(!Str2Hex(lpCmdObj->Parameter[1],&dwTimeSpan)) //Get the time span to beep. { PrintLine(" Invalid time parameter."); return SYS_DIAG_CMD_PARSER_INVALID; } // //Now,the variable dwTimeSpan countains the time to beep. // lpTimerObject = System.SetTimer((__COMMON_OBJECT*)&System, KernelThreadManager.lpCurrentKernelThread, dwTimerID, dwTimeSpan, NULL, NULL, TIMER_FLAGS_ONCE); if(NULL == lpTimerObject) //Failed to set timer. { PrintLine(" Can not set timer,please try again."); return SYS_DIAG_CMD_PARSER_FAILED; } // //Begin to beep. // //ReadByteFromPort(&ucCtrlByte,0x61); ucCtrlByte = __inb(0x61); ucCtrlByte |= 0x03; //WriteByteToPort(ucCtrlByte,0x61); __outb(ucCtrlByte,0x61); while(TRUE) { if(KernelThreadManager.GetMessage((__COMMON_OBJECT*)KernelThreadManager.lpCurrentKernelThread,&Msg)) { if((Msg.wCommand == KERNEL_MESSAGE_TIMER) && //Beep time is over. (Msg.dwParam == dwTimerID)) { ucCtrlByte &= ~0x03; //WriteByteToPort(ucCtrlByte,0x61); //Stop the beep. __outb(ucCtrlByte,0x61); PrintLine(" Beep over"); goto __TERMINAL; } } } __TERMINAL: return SYS_DIAG_CMD_PARSER_SUCCESS; }
//A helper routine used to convert a ascii string into __EXTERNAL_MOD_DESC object. static BOOL FetchModDesc(LPSTR pszLine,__EXTERNAL_MOD_DESC* pModDesc) { BOOL bResult = FALSE; int i; CHAR numStr[9]; while(' ' == *pszLine) //Skip the leading space. { pszLine ++; } if(0 == *pszLine) //End of the string line. { goto __TERMINAL; } //Fetch module name. for(i = 0;i < MAX_MOD_FILENAME;i ++) { if(0 == *pszLine) //End of line,invalid. { goto __TERMINAL; } if(' ' == *pszLine) { break; } pModDesc->ModFileName[i] = *pszLine ++; } pModDesc->ModFileName[i] = 0; //Skip non-space characters,suppose the scenario that file name's length larger than MAX_MOD_FILENAME. while(' ' != *pszLine) { if(0 == *pszLine) { goto __TERMINAL; } pszLine ++; } //Skip the space between file name and load address. while(' ' == *pszLine) { *pszLine ++; } if(0 == *pszLine) { goto __TERMINAL; } for(i = 0;i < 8;i ++) { if(0 == *pszLine) { goto __TERMINAL; } if(' ' == *pszLine) { break; } numStr[i] = *pszLine ++; } numStr[i] = 0; //Convert the address from string to numeric. if(!Str2Hex(numStr,&pModDesc->StartAddress)) { goto __TERMINAL; } //Skip non-space characters,suppose the scenario that start address's length larger than 8. while(' ' != *pszLine) { if(0 == *pszLine) { goto __TERMINAL; } pszLine ++; } //Skip the space between load address and attribute. while(' ' == *pszLine) { *pszLine ++; } if(0 == *pszLine) { goto __TERMINAL; } for(i = 0;i < 8;i ++) { if(0 == *pszLine) { goto __TERMINAL; } if(' ' == *pszLine) { break; } numStr[i] = *pszLine ++; } numStr[i] = 0; //Convert the attribute into numeric. if(!Str2Hex(numStr,&pModDesc->dwModAttribute)) { goto __TERMINAL; } bResult = TRUE; //All successful. __TERMINAL: return bResult; }
int DB_DES(char *inbuf, int inlen, char *outbuf, int *outlen, int flag) { unsigned char r[17]; unsigned char r1[17]; unsigned char r2[17]; unsigned char src[256]; unsigned char sHex[512]; unsigned char sDest[512]; int i; int nSrcLen; int nHexLen; memset(r,0,17); memset(r2,0,17); memset(src, 0, sizeof(src)); memset(sHex, 0, sizeof(sHex)); memset(sDest, 0, sizeof(sDest)); if (inlen > 255) return -1; memcpy(src, inbuf, inlen); nSrcLen = strlen(src); printf("nSrcLen=%d src[%s]\n", nSrcLen, src); if ( flag == 0) /* Encrypt */ { for(i=0; i< nSrcLen; i++) sprintf(sHex+2*i, "%02x", src[i]); nHexLen = 2*nSrcLen; printf("nHexLen=%d sHex[%s]\n", nHexLen, sHex); }else if ( flag == 1 ) /* DisEncrypt */ { nHexLen = nSrcLen; memcpy(sHex, src, nHexLen); } printf("Des KEY ==%s== \n", KEY); for(i=0; i<nHexLen; i+=16) { printf("---------i=%d----------\n", i); memset(r, 0, sizeof(r)); memset(r1, 0, sizeof(r1)); if ( (nHexLen-i) < 16 ) { memset(r, '0', 16); memcpy(r, sHex+i, nHexLen-i); }else memcpy(r, sHex+i, 16); printf("Des ==%s== \n",r); if (flag == 0 ) Des(KEY, r, r1); else if (flag == 1 ) _Des(KEY, r, r1); printf("Des result ==%s== \n",r1); memcpy(sDest+i, r1, 16); /*memset(r2, 0, sizeof(r2)); //_Des(KEY, r1, r2); //printf("Des r2 ==%s== \n",r2);*/ } printf("sDest[%s]\n", sDest); *outlen = strlen(sDest); memcpy(outbuf, sDest, *outlen); if (flag == 1) { memset(outbuf, 0, sizeof(outbuf)); Str2Hex(sDest, outbuf, *outlen); *outlen = *outlen/2; } printf("outlen=%d\n", *outlen); return 0; }
int PackSendGenMac(char *sIntMsgBuf, char* sOutMsgBuf, int nOutMsgLen) { char sMac[8]; char sTemp16[16+1]; int nReturnCode, i; char merch_id[15+1]; char term_id[8+1]; char sTxnNum[5]; char sSrvId[5]; char sDestFlag[2+1]; char sMacBlock[1024]; char inst_id[8+1]; int nMacBlockLen; char szKeyFlag[2+1]; int nToSrvId; memset(sMac, 0x00, sizeof(sMac)); memset(sTemp16, 0x00, sizeof(sTemp16)); memset(merch_id, 0x00, sizeof(merch_id)); memset(term_id, 0x00, sizeof(term_id)); memset(sTxnNum, 0x00, sizeof(sTxnNum)); memset(sSrvId, 0x00, sizeof(sSrvId)); memset(sDestFlag,0x00, sizeof(sDestFlag)); memset(sMacBlock,0x00, sizeof(sMacBlock)); memset(inst_id, 0x00, sizeof(inst_id)); HtLog (gsTmpLogFile, HT_LOG_MODE_NORMAL, __FILE__,__LINE__, "PackSendGenMac begin"); HtLog (gsTmpLogFile, HT_LOG_MODE_NORMAL, __FILE__,__LINE__, "RcvgCode = [%.8s] ", ((T_IpcIntTxnDef*)sIntMsgBuf)->sRcvgInstIdCode); memcpy (sSrvId, sIntMsgBuf+SRV_ID_LEN, SRV_ID_LEN); if( memcmp(sSrvId,"1701", SRV_ID_LEN ) == 0 ) { strcpy(szKeyFlag,"02"); } else if( memcmp(sSrvId,"1705", SRV_ID_LEN ) == 0 ) { strcpy(szKeyFlag,"02"); } else if( memcmp(sSrvId,"1706", SRV_ID_LEN ) == 0 ) { strcpy(szKeyFlag,"02"); } else if( memcmp(sSrvId,"1707", SRV_ID_LEN ) == 0 ) { strcpy(szKeyFlag,"02"); } else if( memcmp(sSrvId,"1717", SRV_ID_LEN ) == 0 ) { strcpy(szKeyFlag,"02"); } else if( memcmp(sSrvId,"1727", SRV_ID_LEN ) == 0 ) { strcpy(szKeyFlag,"02"); } else if( memcmp(sSrvId,"1801", SRV_ID_LEN ) == 0 ) { strcpy(szKeyFlag,"02"); } else if( memcmp(sSrvId,"1708", SRV_ID_LEN ) == 0 ) { strcpy(szKeyFlag,"02"); } else if( memcmp(sSrvId,"1709", SRV_ID_LEN ) == 0 ) { strcpy(szKeyFlag,"02"); } else { strcpy(szKeyFlag,"00"); } memcpy(inst_id, ((T_IpcIntTxnDef*)sIntMsgBuf)->sRcvgInstIdCode, 8); memcpy(merch_id, ((T_IpcIntTxnDef*)sIntMsgBuf)->sCardAccptrId, F042_LEN); memcpy(term_id, ((T_IpcIntTxnDef*)sIntMsgBuf)->sCardAccptrTermnlId, F041_LEN); memcpy(sTxnNum, ((T_IpcIntTxnDef*)sIntMsgBuf)->sTxnNum, FLD_TXN_NUM_LEN); if(sOutMsgBuf[24] = '\x60') { nMacBlockLen = nOutMsgLen-24-11-8; memcpy(sMacBlock, sOutMsgBuf+24+11, nMacBlockLen); } //HtDebugString (gsTmpLogFile, HT_LOG_MODE_ERROR, __FILE__,__LINE__,sMacBlock, nMacBlockLen); nReturnCode = KmsGenerateMac(szKeyFlag, merch_id, term_id, inst_id, nMacBlockLen, sMacBlock, sTemp16); if(nReturnCode) { return nReturnCode; } Str2Hex(sTemp16,sMac,16); if (nReturnCode<0) { HtLog(gsTmpLogFile, HT_LOG_MODE_NORMAL, __FILE__,__LINE__, "GenTermMac error: [%d]", nReturnCode); return -1; } //HtDebugString(gsTmpLogFile, HT_LOG_MODE_NORMAL, __FILE__,__LINE__, sMac, 8); HtLog(gsTmpLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__,"GenTermMac END"); memcpy(sOutMsgBuf + nOutMsgLen - 8, sMac, 8); return 0; }
int Str2Hex(string &s, string &dst) { return Str2Hex(s,dst,s.length()); }
/************************* **功能:内部报文->FSK报文 *************************/ int ConvFSKInToOut(char* vvpInBuf, char* vvpOutBuf, int* vnpOutBufL ) { TXN_MSG_DTL stMsgDtl; TERM_TXN_MESS stTermMess; unsigned char* lspInBuf; unsigned char sTmp[32]; unsigned char sTmp1[32]; unsigned char sOutBuf[600]; unsigned char sMess[512]; unsigned char cChkVal; char sTxnNum[4]; int iLen, iTmp; int iOffSet; iOffSet = SRV_ID_LEN*2+FLD_MSQ_TYPE_LEN; lspInBuf = ( unsigned char *)(vvpInBuf + iOffSet); /* lspInBuf = ( unsigned char *)(vvpInBuf + iOffSet); */ /**报文头原样返回**/ memset(sOutBuf, 0, sizeof(sOutBuf)); memcpy(sOutBuf, vvpInBuf, iOffSet + EPOS_HEADER_LEN ); /**取返回交易码**/ memset(sTxnNum, 0, sizeof(sTxnNum)); memcpy(sTxnNum, lspInBuf+(EPOS_HEADER_LEN-4), 4 ); /**消息类型**/ memset(sTmp, 0, sizeof(sTmp)); memset(sTmp1, 0, sizeof(sTmp1)); memcpy(sTmp, lspInBuf+EPOS_HEADER_LEN, 2 ); Str2Hex(sTmp, sTmp1, 2 ); /* 1byte */ memcpy(sOutBuf+iOffSet+ EPOS_HEADER_LEN, sTmp1, 1 ); /**长度**/ memset(sTmp, 0, sizeof(sTmp)); memset(sTmp1, 0, sizeof(sTmp1)); memcpy(sTmp, lspInBuf+EPOS_HEADER_LEN+2, 4 ); Str2Hex(sTmp, sTmp1, 4 ); memcpy(sOutBuf+iOffSet+ EPOS_HEADER_LEN+1, sTmp1, 2 ); /**交易同步随机数**/ memset(sTmp, 0, sizeof(sTmp)); memset(sTmp1, 0, sizeof(sTmp1)); memcpy(sTmp, lspInBuf+EPOS_HEADER_LEN+2+4, 8 ); Str2Hex(sTmp, sTmp1, 8 ); memcpy(sOutBuf+iOffSet+ EPOS_HEADER_LEN+1+2, sTmp1, 4 ); /**报文同步序号**/ iTmp = 0; memset(sTmp, 0, sizeof(sTmp)); memset(sTmp1, 0, sizeof(sTmp1)); memcpy(sTmp, lspInBuf+EPOS_HEADER_LEN+2+4+8, 2 ); iTmp = atoi((char *)sTmp); sTmp1[0] = iTmp; memcpy(sOutBuf+iOffSet+ EPOS_HEADER_LEN+1+2+4, sTmp1, 1 ); /* 管理类交易 报文拼装完成 */ if(sTxnNum[0] == TXN_NUM_MANAGE ) { cChkVal = GenChkVal(sOutBuf+iOffSet+ EPOS_HEADER_LEN, 1+2+4+1 ); sOutBuf[iOffSet+ EPOS_HEADER_LEN+1+2+4+1] = cChkVal; *vnpOutBufL = iOffSet+ EPOS_HEADER_LEN+1+2+4+1+1; /*HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__, "vnpOutBufL[%d]", *vnpOutBufL ); coredump??? */ memcpy(vvpOutBuf, sOutBuf, *vnpOutBufL ); return 0; } /* 以下代码为非管理类代码段 消息内容 */ iLen = 0; memset((unsigned char*)&stMsgDtl, 0x20, sizeof(stMsgDtl)); memcpy((unsigned char*)&stMsgDtl, lspInBuf + EPOS_HEADER_LEN + 2/* 消息类型 */ + 4 /* 长度 */ + 8 /* 随机数 */ + 2 /* 同步序号 */ + 4 /* sMsgLen */, sizeof(stMsgDtl)); iLen = MessInToOut(sMess, &stMsgDtl ); /* HtDebugString (gsLogFile, HT_LOG_MODE_DEBUG, __FILE__, __LINE__, (char *)sMess, iLen );*/ /**消息内容长度**/ memset(sTmp, 0, sizeof(sTmp)); sprintf((char *)sTmp, "%04X", iLen ); Str2Hex(sTmp, sTmp1, 4 ); memcpy(sOutBuf+iOffSet+ EPOS_HEADER_LEN+1+2+4+1, sTmp1, 2 ); memcpy(sOutBuf+iOffSet+ EPOS_HEADER_LEN+1+2+4+1+2, sMess, iLen ); /**校验位**/ /* HtDebugString (gsLogFile, HT_LOG_MODE_DEBUG, __FILE__, __LINE__, (char *)(sOutBuf+iOffSet+ EPOS_HEADER_LEN), 1+2+4+1+2+iLen );*/ cChkVal = GenChkVal(sOutBuf+iOffSet+ EPOS_HEADER_LEN, 1+2+4+1+2+iLen ); sOutBuf[iOffSet+ EPOS_HEADER_LEN+1+2+4+1+2+iLen] = cChkVal; *vnpOutBufL = iOffSet+ EPOS_HEADER_LEN+1+2+4+1+2+iLen+1; memcpy(vvpOutBuf, sOutBuf, *vnpOutBufL ); return 0; }
/************************ **功能:消息内容转换***** ************************/ int MessInToOut(unsigned char *sMess, TXN_MSG_DTL *pstMsgDtl ) { unsigned char sTmp[17]; unsigned char sTmp1[17]; unsigned char sFlwCd[3]; unsigned char sBuf[512]; int iMsgLen, iLen; int iCnt, i, iBufLen ; /*报文类型*/ memset(sTmp, 0, sizeof(sTmp)); memset(sTmp1, 0, sizeof(sTmp1)); memcpy(sTmp, pstMsgDtl->sMsqType, 2 ); Str2Hex(sTmp, sTmp1, 2 ); memcpy(sMess, sTmp1, 1 ); iLen = 1; HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__, "报文类型[%2.2s]", pstMsgDtl->sMsqType ); /*结束标志*/ memset(sTmp, 0, sizeof(sTmp)); memset(sTmp1, 0, sizeof(sTmp1)); memcpy(sTmp, pstMsgDtl->sEndFlg, 2 ); Str2Hex(sTmp, sTmp1, 2 ); memcpy(sMess+iLen, sTmp1, 1 ); iLen = iLen + 1; HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__, "程序版本号[%4.4s]", pstMsgDtl->sProVer); #if 0 /* 程序版本号 */ memset(sTmp, 0, sizeof(sTmp)); memset(sTmp1, 0, sizeof(sTmp1)); memcpy(sTmp, pstMsgDtl->sProVer, 4); Str2Hex(sTmp, sTmp1, 4 ); memcpy(sMess+iLen, sTmp1, 2 ); iLen = iLen + 2; HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__, "应用版本号[%8.8s]", pstMsgDtl->sAppVer); /* 应用版本号 */ memset(sTmp, 0, sizeof(sTmp)); memset(sTmp1, 0, sizeof(sTmp1)); memcpy(sTmp, pstMsgDtl->sAppVer, 8); Str2Hex(sTmp, sTmp1, 8 ); memcpy(sMess+iLen, sTmp1, 4 ); iLen = iLen + 4; #endif /*序列号*/ memset(sTmp, 0, sizeof(sTmp)); asc_to_bcd(sTmp, pstMsgDtl->sTsamNo, 16, 1 ); memcpy(sMess+iLen, sTmp, 8 ); iLen = iLen + 8; HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__, "序列号[%16.16s]", pstMsgDtl->sTsamNo ); /*系统日期*/ memset(sTmp, 0, sizeof(sTmp)); HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__, "系统日期[%8.8s]", pstMsgDtl->sSysDt ); asc_to_bcd(sTmp, pstMsgDtl->sSysDt, 8, 1 ); memcpy(sMess+iLen, sTmp, 4 ); iLen = iLen + 4; /*系统时间*/ memset(sTmp, 0, sizeof(sTmp)); asc_to_bcd(sTmp, pstMsgDtl->sSysTm, 6, 1 ); memcpy(sMess+iLen, sTmp, 3 ); iLen = iLen + 3; /*交易流水号*/ memset(sTmp, 0, sizeof(sTmp)); asc_to_bcd(sTmp, pstMsgDtl->sTxnSeq, 6, 1 ); memcpy(sMess+iLen, sTmp, 3 ); iLen = iLen + 3; /*交易代码*/ memset(sTmp, 0, sizeof(sTmp)); memcpy(sTmp, pstMsgDtl->sTxnCode, 3 ); memcpy(sMess+iLen, sTmp, 3 ); iLen = iLen + 3; /*流程代码总数*/ memset(sTmp, 0, sizeof(sTmp)); memset(sTmp1, 0, sizeof(sTmp1)); memcpy(sTmp, pstMsgDtl->sFlowNum, 2 ); HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__,"流程代码个数[%2.2s]", sTmp ); Str2Hex(sTmp, sTmp1, 2 ); memcpy(sMess+iLen, sTmp1, 1 ); iLen = iLen + 1; HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__, "iLen[%d]", iLen ); /*流程代码集*/ iCnt = sTmp1[0]; iMsgLen = 0; iBufLen = 0; HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__,"流程代码个数[%d]", iCnt ); memset(sBuf, 0, sizeof(sBuf)); for(i = 0; i < iCnt; i ++ ) { memset(sTmp, 0, sizeof(sTmp)); memset(sTmp1, 0, sizeof(sTmp1)); memset(sFlwCd, 0, sizeof(sFlwCd)); memcpy(sTmp, pstMsgDtl->sFlowCode+iMsgLen, 2 ); HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__, "流程代码[%s]", sTmp ); Str2Hex(sTmp, sTmp1, 2 ); /*HtDebugString (gsLogFile, HT_LOG_MODE_DEBUG, __FILE__, __LINE__, (char *)sTmp1, 2 );*/ sTmp1[0] = sTmp1[0] >> 6; /*HtDebugString (gsLogFile, HT_LOG_MODE_DEBUG, __FILE__, __LINE__, (char *)sTmp1, 2 );*/ if(sTmp1[0] == 0x03 ) { /**3字节**/ memset(sTmp, 0, sizeof(sTmp)); memcpy(sTmp, pstMsgDtl->sFlowCode+iMsgLen, 6 ); Str2Hex(sTmp, sFlwCd, 6 ); memcpy(sBuf+iBufLen, sFlwCd, 3 ); iBufLen = iBufLen + 3; iMsgLen = iMsgLen + 6; } else if(sTmp1[0] == 0x00 ) { /**双字节**/ memset(sTmp, 0, sizeof(sTmp)); memcpy(sTmp, pstMsgDtl->sFlowCode+iMsgLen, 4 ); Str2Hex(sTmp, sFlwCd, 4 ); memcpy(sBuf+iBufLen, sFlwCd, 2 ); iBufLen = iBufLen + 2; iMsgLen = iMsgLen + 4; } else { /**单字节**/ memset(sTmp, 0, sizeof(sTmp)); memcpy(sTmp, pstMsgDtl->sFlowCode+iMsgLen, 2 ); Str2Hex(sTmp, sFlwCd, 2 ); memcpy(sBuf+iBufLen, sFlwCd, 1 ); iBufLen = iBufLen + 1; iMsgLen = iMsgLen + 2; } }/*end for */ HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__, "iBufLen[%d]", iBufLen ); memcpy(sMess+iLen, sBuf, iBufLen ); iLen = iLen + iBufLen; HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__, "iLen[%d]", iLen ); /*有效数据长度*/ memset(sTmp, 0, sizeof(sTmp)); memset(sTmp1, 0, sizeof(sTmp1)); memcpy(sTmp, pstMsgDtl->sDataLen, 4 ); HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__,"有效数据长度[%s]", sTmp ); Str2Hex(sTmp, sTmp1, 4 ); memcpy(sMess+iLen, sTmp1, 2 ); iLen = iLen + 2; /*有效数据*/ iMsgLen = (sTmp1[0]*256 + sTmp1[1]) - 8; HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__,"有效数据长度[%d]", iMsgLen ); memcpy(sMess+iLen, pstMsgDtl->sDataDtl, iMsgLen ); HtDebugString(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__, __LINE__, (char*)pstMsgDtl->sDataDtl, iMsgLen ); iLen = iLen + iMsgLen; HtLog(gsLogFile, HT_LOG_MODE_DEBUG, __FILE__,__LINE__, "iLen[%d]", iLen ); /*MAC*/ memset(sTmp, 0, sizeof(sTmp)); asc_to_bcd(sTmp, pstMsgDtl->sMac, 16, 1 ); memcpy(sMess+iLen, sTmp, 8 ); iLen = iLen + 8; return iLen; }
DWORD Fibonacci(LPVOID lpParam) { //LPSTR lpszParam = (LPSTR)lpParam; __CMD_PARA_OBJ* pCmdParaObj = (__CMD_PARA_OBJ*)lpParam; __FIBONACCI_CONTROL_BLOCK ControlBlock[5] = {0}; HANDLE hThread[5] = {NULL}; CHAR Buffer[12]; DWORD dwCounter; DWORD dwIndex,i; PrintLine("Fibonacci application running..."); GotoHome(); ChangeLine(); if(NULL == pCmdParaObj || pCmdParaObj->byParameterNum < 2) { return 0; } dwCounter = 0; for(i = 0;i < 5;i ++) { dwIndex = 0; while(pCmdParaObj->Parameter[1][dwCounter]) { Buffer[dwIndex] = pCmdParaObj->Parameter[1][dwCounter]; dwIndex ++; dwCounter ++; } Buffer[dwIndex] = 0; Str2Hex(Buffer,&ControlBlock[i].dwInitNum); //Convert the parameter to integer. if(pCmdParaObj->Parameter[1][dwCounter]) { break; } } i = 5; for(i;i > 0;i --) { hThread[i - 1] = CreateKernelThread( 0, //Stack size,use default. KERNEL_THREAD_STATUS_READY, //Status. PRIORITY_LEVEL_NORMAL, CalculateThread, //Start routine. (LPVOID)&ControlBlock[i - 1], NULL, "FIBONACCI"); if(NULL == hThread[i - 1]) //Failed to create kernel thread. { PrintLine("Create kernel thread failed."); break; } } // //Waiting for the kernel thread to over. // WaitForThisObject(hThread[0]); WaitForThisObject(hThread[1]); WaitForThisObject(hThread[2]); WaitForThisObject(hThread[3]); WaitForThisObject(hThread[4]); // //Now,we have calculated the fibonacci number,print them out. // for(i = 0;i < 5;i ++) { Int2Str(ControlBlock[i].dwInitNum,Buffer); PrintStr(Buffer); PrintStr("'s result is: "); Int2Str(ControlBlock[i].dwResult,Buffer); PrintStr(Buffer); GotoHome(); ChangeLine(); } // //Close the kernel thread. // DestroyKernelThread(hThread[0]); DestroyKernelThread(hThread[1]); DestroyKernelThread(hThread[2]); DestroyKernelThread(hThread[3]); DestroyKernelThread(hThread[4]); return 1L; }