⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eppwidget.c

📁 TcL 中嵌入C代码
💻 C
字号:
/*************************************************File:eppwidget.c*Function:GUI Program to TCL/TK*Author:Nai Xueshang*Date:2003-7-28************************************************/#include "eppwidget.h"#include <string.h>#include <unistd.h>#include "lutest.h"Tcl_Interp *tclInterp=NULL;int graphInterfaceDisp =0;int interpInit=0;unsigned int printOption=0;extern int SOCKET_USE_PRINT;/*main(void){ char *ar[]={""};  EppWidgetInit(1,ar); exit(0);}*/void EppWidgetInit(int argc, char *argv[]){ 	Tk_Main(argc, argv,Tcl_AppInit);	exit(0);}/** Tcl_AppInit is called from Tcl_Main* after the Tcl interpreter has been created,* and before the script file* or interactive command loop is entered.*/int Tcl_AppInit(Tcl_Interp *interp){		char *tcl_RcFileName;	char *VarPtr; 		/*	* Initialize packages	* Tcl_Init sets up the Tcl library facility.	*/	if (Tcl_Init(interp) == TCL_ERROR) 	{		return TCL_ERROR;	}	if (Tk_Init(interp) == TCL_ERROR)	{		return TCL_ERROR;	}	/* 	 *Global pointer to TCL interp for data send	 */	tclInterp=interp;			/*	* Define application-specific commands here.	*/	interpInit=1;	Tcl_CreateCommand(interp, "eppcmd", EppWidgetCmd,		(ClientData)Tk_MainWindow(interp),		(Tcl_CmdDeleteProc *)NULL);		/*	* Define startup filename. This file is read in	* case the program is run interactively.	*/	tcl_RcFileName ="./mgeppwid.tcl";	VarPtr = Tcl_SetVar( interp, "tcl_rcFileName",		"./mgeppwid.tcl", 0 );	return TCL_OK;}	/*	* EppWidgetCmd --	* This implements the eppcmd Tcl command. With specific 	* arguments the command will implement the user instruction.	* Ex: "eppcmd register" command line will register current 	* termination."eppcmd startcall" will start bulk call etc.	* note eppcmd command must have 1 parameter at least.	*/int EppWidgetCmd(ClientData clientData,	Tcl_Interp *interp,	int argc, char *argv[]){	int error;	int result = -1;	//cmdName 0	//BulkcmdType 1	char callerTermType[20];//2	unsigned int callerTermNo;//3	unsigned int callerTermNum;//4	unsigned int totalCallerNum;//5	char calledTermType[20];//6	unsigned int calledTermNo;//7	unsigned int calledTermNum;//8	unsigned int totalCalledNum;//9	unsigned int callNum=0;//10	char interval[INTERSTRLEN];//s/ms/us	unsigned int callOrder=0;//12	unsigned int callerHandOnFlag=0;//13	unsigned int duration=0;//14	unsigned int type=0;	unsigned int optionVal=300;	if (argc < 2)	{		interp->result = "Usage: random ?range?";		return TCL_ERROR;	}	if (argc >= 2)	{		//error = Tcl_GetInt(interp, argv[1], &limit);		type=GetCmdType(argv[1]);		switch(type)		{		case BULK_START_GRAPH:			graphInterfaceDisp=1;			break;		case BULK_TERM_SET:		case BULK_TERM_CREATE:		case BULK_TERM_APPEND:			//SetInfoToTcl("Data Set OK!");			if(argc<14)			{				return -1;//Parameter num few			}			strcpy(callerTermType,argv[2]);			error=Tcl_GetInt(interp, argv[3], &callerTermNo);			if (error != TCL_OK)			{				return error;			}			error=Tcl_GetInt(interp, argv[4], &callerTermNum);			if (error != TCL_OK)			{				return error;			}			error=Tcl_GetInt(interp, argv[5], &totalCallerNum);			if (error != TCL_OK)			{				return error;			}			strcpy(calledTermType,argv[6]);			error=Tcl_GetInt(interp, argv[7], &calledTermNo);			if (error != TCL_OK)			{				return error;			}			error=Tcl_GetInt(interp, argv[8], &calledTermNum);			if (error != TCL_OK)			{				return error;			}			error=Tcl_GetInt(interp, argv[9], &totalCalledNum);			if (error != TCL_OK)			{				return error;			}			error=Tcl_GetInt(interp, argv[10], &callNum);			if (error != TCL_OK)			{				return error;			}			strcpy(interval,argv[11]);//Call Interval			/*error=Tcl_GetInt(interp,argv[11],&interval);			if (error != TCL_OK)			{				return error;			}*/			/*error=Tcl_GetInt(interp, argv[12], &callOrder);			if (error != TCL_OK)			{				return error;			}			error=Tcl_GetInt(interp, argv[13], &callerHandOnFlag);			if (error != TCL_OK)			{				return error;			}			error=Tcl_GetInt(interp, argv[14], &duration);			if (error != TCL_OK)			{				return error;			}*/			if(SetCall(type,callerTermType,callerTermNo,callerTermNum,				totalCallerNum,calledTermType,calledTermNo,				calledTermNum,totalCalledNum,callNum,interval,				callOrder,callerHandOnFlag,duration)==0)			{				result=-1;			}			break;		case BULK_TERM_REGISTER:			CallInit(); 						error=TCL_OK;			break;		case BULK_TERM_UNREGISTER:			break;		case BULK_TERM_STARTCALL:			SEND_OFFHOOK_FLAG=1;			callStatus=START_CALL;			error=TCL_OK;			break;		case BULK_TERM_STOPCALL:			SEND_OFFHOOK_FLAG=0;			callStatus=STOP_CALL;			error=TCL_OK;			break;		case BULK_TERM_PRINTOPTION:			SetPrintOption(GetPrintType(argv[2]));			error=TCL_OK;			break;				case BULK_TERM_TEST:			SetCallTestType(argv[2]);			error=TCL_OK;			break;		case BULK_STATISTICS:			if(strcmp(argv[2],"result")==0)			{				StatisticsCallResult();			}			else if(strcmp(argv[2],"state")==0)			{				StatisticsCallState();			}			error=TCL_OK;			break;		case BULK_TERM_NOTSET:			result=-1;			error=TCL_ERROR;			break;		case BULK_OPTION_SET:			error=Tcl_GetInt(interp, argv[3], &optionVal);			if(error==TCL_ERROR)			{				result=-1;				error=TCL_ERROR;			}			else			{				BulkOptionSet(argv[2],optionVal);				error=TCL_OK;			}			break;		default:			result=-1;			error=TCL_ERROR;			break;		}		/*The procedure Tcl_GetInt is used to convert		the string-valued argument to an integer.		It does error checking and sets the interpreter’s		result field in the case of error, so we can just		return if it fails to return TCL_OK. */		if (error != TCL_OK)		{			return error;		}	}	sprintf(interp->result, "%d", error);	return TCL_OK;}/*set call attrmake*/int SetCall(unsigned int setType,		char * callerTermType,		unsigned int callerTermNo,		unsigned int callerTermNum,		unsigned int totalCallerNum,		char * calledTermType,		unsigned int calledTermNo,		unsigned int calledTermNum,		unsigned int totalCalledNum,		unsigned int callNum,		char *interval,		unsigned int callOrder,		unsigned int callerHandOnFlag,		unsigned int duration){	char termBuffer[128];	char line[128];	unsigned int totalNum=0;	unsigned int i;	unsigned int callerTermNum1=0;	char callerTermNumStr[8];	char callerTermId[32];	unsigned int  calledTermNum1=0;	char calledTermNumStr[8];	char calledTermId[32];	char termIdTemp[32];	unsigned int registerNum=0;	FILE *fp,*gp,*hp;	strcpy(termBuffer,"");	strcpy(line,"");	strcpy(callerTermNumStr,"");	strcpy(callerTermId,"");	strcpy(calledTermNumStr,"");	strcpy(calledTermId,"");	strcpy(termIdTemp,"");	totalNum=totalCallerNum;	if (totalCallerNum>totalCalledNum)			totalNum=totalCalledNum;	if (((callerTermNum<calledTermNum)&&(calledTermNum<callerTermNum+totalNum))||		((callerTermNum>calledTermNum)&&(callerTermNum<calledTermNum+totalNum)))	{		return -1;	}	else if(((callerTermNo<calledTermNo)&&(calledTermNo<callerTermNo+totalNum))||		((callerTermNo>calledTermNo)&&(callerTermNo<calledTermNo+totalNum)))	{		return -1;	}	else	{		if(setType==BULK_TERM_CREATE)		{			if(FileExist("calldata.cfg"))			{				unlink("calldata.cfg");			}			if(FileExist("registerdata.cfg"))			{				unlink("registerdata.cfg");			}					}		//append		if(FileExist("temp.cfg"))		{			unlink("temp.cfg");		}		if((fp=fopen("calldata.cfg","a+t"))==NULL)		{			return 0;		}		if((gp=fopen("registerdata.cfg","a+t"))==NULL)		{			fclose(fp);			return 0;		}		if((hp=fopen("temp.cfg","a+t"))==NULL)		{			fclose(fp);			fclose(gp);			return 0;		}		for(i=0;i<totalNum;i++)		{			strcpy(callerTermId,callerTermType);			strcat(callerTermId,"/");			strcpy(calledTermId,calledTermType);			strcat(calledTermId,"/");			callerTermNum1=callerTermNum+i;			calledTermNum1=calledTermNum+i;			//itoa(i+callerTermNo,termIdTemp,10);			sprintf(termIdTemp,"%u",i+callerTermNo);			strcat(callerTermId,termIdTemp);			fprintf(gp,"%s   %u\n",callerTermId,GetTermType(callerTermType));			//itoa(i+calledTermId,termIdTemp,10);			sprintf(termIdTemp,"%u",i+calledTermNo);			strcat(calledTermId,termIdTemp);			fprintf(hp,"%s   %u\n",calledTermId,GetTermType(calledTermType));			sprintf(callerTermNumStr,"%u",callerTermNum1);			sprintf(calledTermNumStr,"%u",calledTermNum1);			sprintf(termBuffer,"%s %u %s %u %u",callerTermId,callerTermNum1,calledTermId,calledTermNum1,callNum);    		//Caller_LargeReadData(callerSlcId,callerSlcNoStr,calledSlcId,calledSlcNoStr,(int)m_lCallNum);			fprintf(fp,"%s\n",termBuffer);//Write call data		}		fclose(fp);		registerNum=2*totalNum;		fclose(hp);		if((hp=fopen("temp.cfg","r"))==NULL)		{			fclose(gp);			return 0;		}		while(fgets(line,128,hp)!=NULL)		{			fprintf(gp,line);		}		fclose(gp);		fclose(hp);	//OnOK();	}	//Call Interval ms	//callInterval=interval;	CallIntervalSet(interval);	return 1;}/* *Set call interval */void CallIntervalSet(char *intervalStr){	char *p;	if(strstr(intervalStr,"ms")!=NULL)	{		if((p=strchr(intervalStr,'m'))!=NULL)		{			*p='\0';		}		else		{			TkMsgPrint("Error CallInterval,Use Default Value",PRINT_ALL);			return;		}		callInterval=atoi(intervalStr);		interSleepMode=MODE_MSECOND;	}	else if(strstr(intervalStr,"us")!=NULL)	{		if((p=strchr(intervalStr,'u'))!=NULL)		{			*p='\0';		}		else		{			TkMsgPrint("Error CallInterval,Use Default Value",PRINT_ALL);			return;		}		callInterval=atoi(intervalStr);		interSleepMode=MODE_USECOND;	}	else if(strchr(intervalStr,'s')!=0)	{		if((p=strchr(intervalStr,'s'))!=NULL)		{			*p='\0';		}		else		{			TkMsgPrint("Error CallInterval,Use Default Value",PRINT_ALL);			return;		}		callInterval=atoi(intervalStr);		interSleepMode=MODE_SECOND;	}	else if(strcmp(intervalStr,"no")==0)	{		interSleepMode=MODE_NOSLEEP;	}	else	{		//default value type is MODE_USECIND		callInterval=atoi(intervalStr);		interSleepMode=MODE_USECOND;	}}unsigned int GetCmdType(char * strCmdType){	if(strcmp(strCmdType,"startGraph")==0)	{		return BULK_START_GRAPH;	}	else if(strcmp(strCmdType,"set")==0)	{		return BULK_TERM_SET;	}	else if(strcmp(strCmdType,"register")==0)	{		return BULK_TERM_REGISTER;	}	else if(strcmp(strCmdType,"unregister")==0)	{		return BULK_TERM_UNREGISTER;	}	else if(strcmp(strCmdType,"startcall")==0)	{		return BULK_TERM_STARTCALL;	}	else if(strcmp(strCmdType,"stopcall")==0)	{		return BULK_TERM_STOPCALL;	}	else if(strcmp(strCmdType,"create")==0)	{		return BULK_TERM_CREATE;	}	else if(strcmp(strCmdType,"append")==0)	{		return BULK_TERM_APPEND;	}	else if(strcmp(strCmdType,"print")==0)	{		return BULK_TERM_PRINTOPTION;	}	else if(strcmp(strCmdType,"test")==0)	{		return BULK_TERM_TEST;	}	else if(strcmp(strCmdType,"statistics")==0)	{		return BULK_STATISTICS;	}	else if(strcmp(strCmdType,"optionset")==0)	{		return BULK_OPTION_SET;	}	else	{		return BULK_TERM_NOTSET;	}}unsigned int GetTermType(char * strTerm){	if((strstr(strTerm,"SLC")!=NULL)||(strstr(strTerm,"line")!=NULL))	{		return TERM_SLC;	}	else if((strstr(strTerm,"M3UA")!=NULL)||(strstr(strTerm,"trunk")!=NULL))	{		return TERM_TRUNK;	}	else if(strstr(strTerm,"ISDN")!=NULL)	{		return TERM_ISDN;	}	else if(strstr(strTerm,"DT")!=NULL)	{		return TERM_DT;	}	else	{		return (unsigned int )-1;	}}int FileExist(const char *fileName){	int exist=0;	FILE *fp;	if((fp=fopen(fileName,"r"))!=NULL)	{		exist=1;		fclose(fp);	}	return exist;}void SetInfoToTcl(const char *info){	char script[256];	strcpy(script,"");	if(interpInit==1)	{	//	sprintf(script,"$log insert end %s",info);		sprintf(script,"SetInfoToLog \"%s\"",info);			Tcl_Eval(tclInterp,script);	}	}void SetPrintOption(unsigned int option){	printOption=option;}void TkMsgPrint(char *msg,unsigned int option){	if((printOption&option)==0)	{		return;	}	else	{		SetInfoToTcl(msg);	}}unsigned int GetPrintType(char * option){	if(strcmp(option,"no")==0)	{		return PRINT_NO;	}	else if(strcmp(option,"call")==0)	{		return PRINT_CALL;	}	else if(strcmp(option,"all")==0)	{		return PRINT_ALL;	}	return (unsigned int)-1;}void SetCallTestType(const char * testType){	if(strcmp(testType,"offon")==0)	{		callFlowTestType=CALL_OFFHOOK_ONHOOK;	}	else if(strcmp(testType,"toneon")==0)	{		callFlowTestType=CALL_DIATONE_ONHOOK;	}	else if(strcmp(testType,"firstnumon")==0)	{		callFlowTestType=CALL_FIRNUM_ONHOOK;	}	else if(strcmp(testType,"digitcomon")==0)	{		callFlowTestType=CALL_DIGCOM_ONHOOK;	}	else if(strcmp(testType,"offno")==0)	{		callFlowTestType=CALL_OFFHOOK_NOOPER;	}	else if(strcmp(testType,"normalcall")==0)	{		callFlowTestType=CALL_NORMAL;	}	else	{		callFlowTestType=(unsigned int)-1;	}}void BulkOptionSet(char *optionType,unsigned int val){	if(strcmp(optionType,"taskperiod")==0)	{		//us-->ms		taskPeriod=1000*val;	}	else if(strcmp(optionType,"callinterval")==0)	{		callInterval=val;	}	else if(strcmp(optionType,"socket_use_print")==0)	{		if(1==SOCKET_USE_PRINT)		{			SOCKET_USE_PRINT=0;		}		else		{			SOCKET_USE_PRINT=1;		}	}	else	{		printf("error option]n");	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -