示例#1
0
文件: Remotely.c 项目: jufei/BtsShell
void WriteLog(void)
{
	 char *buffer=""; char pathName[MAX_PATHNAME_LEN];		char dirName[MAX_PATHNAME_LEN];  int fHandle=-1,linenumber=0,i=0,size=0;	int file_size=0,file_status=0;
	 
	GetProjectDir (dirName); 
    MakePathname (dirName, "log.txt", pathName);
	file_status = GetFileSize (pathName, &file_size);
	
	
	if(-1==file_status)
	{
		fHandle = OpenFile (pathName, VAL_WRITE_ONLY, VAL_TRUNCATE, VAL_ASCII);
		WriteLogDateTime(fHandle);
		
	}
	if(0==file_status)
	{
		fHandle = OpenFile (pathName, VAL_WRITE_ONLY, VAL_APPEND, VAL_ASCII);
		WriteLogDateTime(fHandle);
	}
  	 buffer=(char*)malloc(1000); 
	 GetNumTextBoxLines (panelHandle, PANEL_TEXTBOX, &linenumber);
	 for(i=0;i<linenumber;i++)
	 {
		memset(buffer,0,1000);  
		GetTextBoxLine (panelHandle, PANEL_TEXTBOX, i, buffer);
		strcat(buffer,"\n");
		size=strlen(buffer);
		WriteFile (fHandle, buffer, size);
	 }
	 free(buffer); 

	CloseFile(fHandle);														 

}
示例#2
0
文件: Remotely.c 项目: jufei/BtsShell
static int ReadConfigFile( int item)
{
	FILE    *hFile; 		 char pathName[MAX_PATHNAME_LEN]; char dirName[MAX_PATHNAME_LEN];	 char buffer[300]; 	
	
	ResetTextBox (configHandle, CONFIG_BOX, ""); 
	GetProjectDir (dirName); 
	switch(item)
	{
		case MENUBAR_CONFIG_CONFIGIP:
			MakePathname (dirName, "bbuip.txt", pathName);
			break;
		case BBUCOMMON_CONFIGCMD:
			MakePathname (dirName, "command.txt", pathName); 
			break;
	}
	if (hFile = fopen(pathName, "r"))
    {
        while (fgets(buffer, (int)sizeof(buffer), hFile))
        {
			SetCtrlVal (configHandle, CONFIG_BOX, buffer); 
        }
	}
	else
	{
	  return 0;
	}
	if(hFile)
	{
	    fclose(hFile);  
	}
	return 1;
	

}  
/* 辅助函数-Log信息台-右键菜单-回调函数 */
void CVICALLBACK logBoxRightClickMenuCallback(int menuBarHandle, int menuItemID, 
			void *callbackData, int panelHandle){
	switch(menuItemID){
		case 3:
			SYSTEMTIME localTime;
			char dirName[MAX_PATHNAME_LEN];
			char filePath[MAX_PATHNAME_LEN]; 
			char fileName[200]; fileName[0]='\0';
			GetProjectDir(dirName);
			strcat(dirName, "\\Logs");
			GetLocalTime(&localTime);
			sprintf(fileName, "Log,%04d-%d-%d,%d_%02d_%02d.txt", 
					localTime.wYear, localTime.wMonth, localTime.wDay,
					localTime.wHour, localTime.wMinute, localTime.wSecond);
			MakePathname(dirName, fileName, filePath);
			FILE *fp = fopen(filePath, "w");
			int len=0;
			GetCtrlAttribute(panelHdl, MainPanel_MainLogBox, ATTR_STRING_TEXT_LENGTH, &len);
			char tempLog[10000];
			GetCtrlVal(panelHdl, MainPanel_MainLogBox, tempLog);
			fwrite(tempLog, sizeof(char), len, fp);
			fclose(fp);
			ResetTextBox(panelHdl, MainPanel_MainLogBox, "Logs have been saved!");
			break;
		case 4:
			ResetTextBox(panelHdl, MainPanel_MainLogBox, "");
			break;
	}
}
示例#4
0
文件: Remotely.c 项目: jufei/BtsShell
static int WriteOupputBox(int flag) 
{
	FILE    *hFile;  char pathName[MAX_PATHNAME_LEN]; char dirName[MAX_PATHNAME_LEN]; char buffer[300];

	
	ResetTextBox (outputHandle, OUTPUTVIEW_OUTPUTBOX, ""); 
	GetProjectDir (dirName); 
	if (0 == flag)    // mean write output.txt to box
	{
    	MakePathname (dirName, "output.txt", pathName);
	}
	if (1 == flag)     // mean write help.txt to box
	{
	   MakePathname (dirName, "help.txt", pathName); 
	}
	if (hFile = fopen(pathName, "r"))
    {
        while (fgets(buffer, (int)sizeof(buffer), hFile))
        {
			SetCtrlVal (outputHandle, OUTPUTVIEW_OUTPUTBOX, buffer); 
        }
	}
	else
	{
	  return 0;
	}
	if(hFile)
	{
	    fclose(hFile);  
	}		
	return 1;
}
示例#5
0
void acquire_Init (void)
{
    if (utilG.acq.status != ACQ_NONE) {
        util_ChangeInitMessage ("Acquisition Utilities...");
        util_WriteLog("acquire_Init()\nStarting...\n");
        acqG.p.setup = LoadPanel (utilG.p, "acquireu.uir", ACQSETUP);
        
        //SetPanelPos (acqG.p.setup, VAL_AUTO_CENTER, VAL_AUTO_CENTER);
        // Set default data dir and suffix
        int dirNameLen;
        if(FileExists(DFLT_DATA_DIR, &dirNameLen) ) {
            strcpy(dataFile.dataDir, DFLT_DATA_DIR);
        } else {
            char msg[MAX_PATHNAME_LEN*2];
            sprintf(msg, "Default Data Does not exist:\n%s\nUsing application dir.", DFLT_DATA_DIR);
            MessagePopup ("Acquisition Setup", msg );

            GetProjectDir (dataFile.dataDir);
        }
        SetCtrlVal (acqG.p.setup, ACQSETUP_DATADIR, dataFile.dataDir);
        strcpy(dataFile.fileSuffix, DFLT_FILE_SUFFIX);
        SetCtrlVal(acqG.p.setup, ACQSETUP_FILESUFFIX, dataFile.fileSuffix); 

        // This control is a button on startup panel, "control. acquisition, and analysis"
        InstallCtrlCallback (utilG.p, BG_ACQSETUP, AcqSetupCallback, 0);

    } else SetCtrlAttribute (utilG.p, BG_ACQSETUP, ATTR_VISIBLE, FALSE);
}
示例#6
0
文件: Remotely.c 项目: jufei/BtsShell
char *readfoldername(void)
{
	char pathName[MAX_PATHNAME_LEN]; char dirName[MAX_PATHNAME_LEN];  char *buffer="";
	
	GetProjectDir (dirName); 
	MakePathname (dirName, "config.ini", pathName);
	inihandle = Ini_New (0); 
	Ini_ReadFromFile (inihandle, pathName); 
	buffer=(char*)malloc(100);
	memset(buffer,0,100);

	Ini_GetStringIntoBuffer (inihandle, "system", "download_folder_name", buffer, 100);

	Ini_Dispose (inihandle);
	return buffer;
}
/* 系统辅助函数-Init [Directory Sets] this System needs */
void initDirectorySets(void){
	char dirName[MAX_PATHNAME_LEN];
	char DataDirPath[MAX_PATHNAME_LEN];
	char LogDirPath[MAX_PATHNAME_LEN];
	GetProjectDir(dirName);
	sprintf(DataDirPath, "%s\\DataStorage", dirName);
	sprintf(LogDirPath, "%s\\Logs", dirName);
	int oldValue;
	oldValue = SetBreakOnLibraryErrors(0);
	int isDataDirExisted = MakeDir(DataDirPath);
	int isLogDirExisted = MakeDir(LogDirPath);
	SetBreakOnLibraryErrors (oldValue);
	if(isDataDirExisted == 0)
		addLog("Successfully create the Directory:\n\"DataStorage\" and \"Logs\"", 0, panelHdl);
	else if( isDataDirExisted == -9)
		addLog("\"DataStorage\" and \"Logs\" \nDirectory has already existed!", 0, panelHdl);
	
}
示例#8
0
void acquire_Init (void)
{
    char *date, mon[10], day[10], yr[10];
    if (utilG.acq.status != ACQ_NONE) {
        util_ChangeInitMessage ("Acquisition Utilities...");

        acqG.p.setup = LoadPanel (utilG.p, "acquireu.uir", ACQSETUP);
        
        //SetPanelPos (acqG.p.setup, VAL_AUTO_CENTER, VAL_AUTO_CENTER);

        GetProjectDir (dataFile.dir);
        date = DateStr();
        Scan (date, "%s>%s[xt45]%s[xt45]%s", mon, day, yr);
        Fmt (dataFile.name ,"%s<%s[i2]%s%s", yr, mon, day);
        dataFile.ext = 1;
        acquire_UpdateDataFileInfo();

        InstallCtrlCallback (utilG.p, BG_ACQSETUP, AcqSetupCallback, 0);

    } else SetCtrlAttribute (utilG.p, BG_ACQSETUP, ATTR_VISIBLE, FALSE);
}
示例#9
0
文件: Remotely.c 项目: jufei/BtsShell
int CVICALLBACK CheckUptime (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_COMMIT:
			 char buffer[20000]; char pathName[MAX_PATHNAME_LEN];		char dirName[MAX_PATHNAME_LEN];   FILE    *hFile;	  char *p = ""; int i=0; int lenth=0; char temp[20]; //char value[50];
			 int flag =0;		 int row = 0; int column = 0; int insertcolumn = 0;  int confirmresult = 0;	 
	 
			 typedef struct
				{ 
					int x;
					int y; 
				} Point;

			 confirmresult = ConfirmPopup ("Check uptime","Do you want to check uptime now?");
		 
			 if ((outputHandle = LoadPanel (0, "Remotely.uir", OUTPUTVIEW)) < 0)
				 {
				 SetCtrlVal (panelHandle, PANEL_TEXTBOX,  "Load check uptime panel error,please try again!\r\n"); 
			 	 return -1;
				 }
			 SetPanelAttribute (outputHandle, ATTR_TITLE, "CheckUptimeRecord");
			 SetCtrlAttribute (outputHandle, OUTPUTVIEW_OUTPUTBOX, ATTR_VISIBLE, 0);
			 SetCtrlAttribute (outputHandle, OUTPUTVIEW_TABLE, ATTR_VISIBLE, 1);    
			 GetProjectDir (dirName); 
			 MakePathname (dirName, "uptime.csv", pathName);
			 WriteLog();
		   	 ResetTextBox (panelHandle, PANEL_TEXTBOX, ""); 
		 
			 if (hFile = fopen(pathName, "r"))
			{
		    	while (fgets(buffer, (int)sizeof(buffer), hFile))
		    	{
					row++;
					InsertTableRows (outputHandle, OUTPUTVIEW_TABLE, -1, 1, VAL_CELL_STRING);
			
					column = 0;
					p = buffer;
					flag = 0;
					do
					{
						column++;
						if (insertcolumn == 0)
						{
							InsertTableColumns (outputHandle, OUTPUTVIEW_TABLE, -1, 1, VAL_CELL_STRING);
						}
						lenth = FindPattern (p, 0, -1, ",", 0, 0);   // strip  ","
						if (lenth >=0)
						{
							memset(temp,0,20);
							for (i=0;i<lenth;i++)
							{
								temp[i] = *p;
								p++;
							}
							p++;
							SetTableCellVal (outputHandle, OUTPUTVIEW_TABLE, MakePoint(column, row), temp);
						}
						else
						{

							lenth = FindPattern (p, 0, -1, "\n", 0, 0);	  // strip  "\n"
							if (lenth >=0)								 // if find "\n"  write last string to last column
							{
							    memset(temp,0,20);
								for (i=0;i<lenth;i++)
								{
									temp[i] = *p;
									p++;
								}
								SetTableCellVal (outputHandle, OUTPUTVIEW_TABLE, MakePoint(column, row), temp);
								flag = -1;
								insertcolumn = 1;
							}
							else		// if not find "\n", write all to last column
							{
								SetTableCellVal (outputHandle, OUTPUTVIEW_TABLE, MakePoint(column, row), p);
								flag = -1;
								insertcolumn = 1;
							}
		
						}
				
					}while( flag != -1);
					SetTableColumnAttribute (outputHandle, OUTPUTVIEW_TABLE, -1, ATTR_COLUMN_WIDTH, 80);
					memset(buffer,0,20000);
												 
		    	}
		    	fclose(hFile);
			} 
			if (confirmresult)    // if user select yes to check uptime  install popup
			 {
				InstallPopup(outputHandle);
			 }
			else				 // if user select no, discard panel due to load it at beginning of this function
			{
				if (outputHandle)
				    {
		               DiscardPanel (outputHandle);
			        }
			}
			break;
	}
	return 0;
}
示例#10
0
文件: Remotely.c 项目: jufei/BtsShell
static int Initial(int item, int flag)
{
	char pathName[MAX_PATHNAME_LEN]; char dirName[MAX_PATHNAME_LEN];  char *buffer=""; int value=0;  int status=0;  
	
	GetProjectDir (dirName); 
	MakePathname (dirName, "config.ini", pathName);
	inihandle = Ini_New (0);
	status = Ini_ReadFromFile (inihandle, pathName);
	buffer=(char*)malloc(300);
	memset(buffer,0,300);
	
	if ((status)<0)
	{
		return status;
	}
	if (0 == item)  // system operation
	{
	
		if(1 == flag)   //write
		{
			 GetCtrlVal (customizingHandle, CUSTOM_UPDATENAME, buffer);
			 Ini_PutString (inihandle, "system", "update_vendor_name", buffer);

			 Ini_WriteToFile (inihandle, pathName);   
		}
		if(0 == flag)	  // read
		{
			Ini_GetStringIntoBuffer (inihandle, "system", "update_vendor_name", buffer, 100);
			SetCtrlVal (customizingHandle, CUSTOM_UPDATENAME, buffer);     
		}

		
	}
	if (1 == item)	   //  item operation
	{
		if(1 == flag)	   // write
		{
			status = GetCtrlVal (itemHandle, FILE_ITEM_VENDOR, &value);
			 if ((status)<0) 
				{
				return status;
				}
			 status = Ini_PutInt (inihandle, "item", "vendor", value);
			 if ((status)<0) 
				{
				return status;
				}
		 
			 status = GetCtrlVal (itemHandle, FILE_ITEM_SCFC, &value);
			 if ((status)<0) 
				{
				return status;
				}
			 status = Ini_PutInt (inihandle, "item", "scfc", value);
			 if ((status)<0) 
				{
				return status;
				}
		 
			 status = GetCtrlVal (itemHandle, FILE_ITEM_CONFIG, &value);
			 if ((status)<0) 
				{
				return status;
				}
			 status = Ini_PutInt (inihandle, "item", "config", value);
			 if ((status)<0) 
				{
				return status;
				}
		 
			 status = GetCtrlVal (itemHandle, FILE_ITEM_SWCONFIG, &value);
			 if ((status)<0) 
				{
				return status;
				}
			 status = Ini_PutInt (inihandle, "item", "swconfig", value);
			 if ((status)<0) 
				{
				return status;
				}
		 
			 status = GetCtrlVal (itemHandle, FILE_ITEM_HWF, &value);
			 if ((status)<0) 
				{
				return status;
				}
			 status = Ini_PutInt (inihandle, "item", "hwf", value);
			 if ((status)<0) 
				{
				return status;
				}
		 
			 status = GetCtrlVal (itemHandle, FILE_ITEM_SYSINFO, &value);
			 if ((status)<0) 
				{
				return status;
				}
			 status = Ini_PutInt (inihandle, "item", "sysinfo", value);
			 if ((status)<0) 
				{
				return status;
				}
			 
			 status = GetCtrlVal (itemHandle, FILE_ITEM_SELFDEFI, &value);
			 if ((status)<0) 
				{
				return status;
				}
			 status = Ini_PutInt (inihandle, "item", "selfdefi", value);
			 if ((status)<0) 
				{
				return status;
				}
			 
			 status = GetCtrlVal (itemHandle, FILE_ITEM_SELFDEFIPATH, buffer);
			if ((status)<0) 
			{
				return status;
			}
			status = Ini_PutString (inihandle, "item", "selfpath", buffer);
			if ((status)<0) 
			{
				return status;
			}
			
			status = GetCtrlVal (itemHandle, FILE_ITEM_SELFDEFIFILE, buffer);
			if ((status)<0) 
			{
				return status;
			}
			status = Ini_PutString (inihandle, "item", "selffile", buffer);
			if ((status)<0) 
			{
				return status;
			}
			 
			 
		 
			 status = Ini_WriteToFile (inihandle, pathName);
			 if ((status)<0) 
				{
				return status;
				}
		}
		if(0 == flag)		//	   read
		{
			status = Ini_GetInt (inihandle, "item", "vendor", &value);
			if ((status)<0) 
				{
				return status;
				}
			status = SetCtrlVal (itemHandle, FILE_ITEM_VENDOR, value); 
			if ((status)<0) 
				{
				return status;
				}
		
			status = Ini_GetInt (inihandle, "item", "scfc", &value);
			if ((status)<0) 
				{
				return status;
				}
			status = SetCtrlVal (itemHandle, FILE_ITEM_SCFC, value); 
			if ((status)<0) 
				{
				return status;
				}
		
			status = Ini_GetInt (inihandle, "item", "config", &value);
			if ((status)<0) 
				{
				return status;
				}
			status = SetCtrlVal (itemHandle, FILE_ITEM_CONFIG, value); 
			if ((status)<0) 
				{
				return status;
				}
		
			status = Ini_GetInt (inihandle, "item", "swconfig", &value);
			if ((status)<0) 
				{
				return status;
				}
			status = SetCtrlVal (itemHandle, FILE_ITEM_SWCONFIG, value); 
			if ((status)<0) 
				{
				return status;
				}
		
			status = Ini_GetInt (inihandle, "item", "hwf", &value);
			if ((status)<0) 
				{
				return status;
				}
			status = SetCtrlVal (itemHandle, FILE_ITEM_HWF, value); 
			if ((status)<0) 
				{
				return status;
				}
			
			status = Ini_GetInt (inihandle, "item", "sysinfo", &value);
			if ((status)<0) 
				{
				return status;
				}
			status = SetCtrlVal (itemHandle, FILE_ITEM_SYSINFO, value); 
			if ((status)<0) 
				{
				return status;
				}
			
			status = Ini_GetInt (inihandle, "item", "selfdefi", &value);
			if ((status)<0) 
				{
				return status;
				}
			status = SetCtrlVal (itemHandle, FILE_ITEM_SELFDEFI, value); 
			if ((status)<0) 
				{
				return status;
				}
			
			status = Ini_GetStringIntoBuffer (inihandle, "item", "selfpath", buffer, 300);
			if ((status)<0) 
			{
				return status;
			}
			status = SetCtrlVal (itemHandle, FILE_ITEM_SELFDEFIPATH, buffer); 
			if ((status)<0) 
			{
				return status;
			}
			
			status = Ini_GetStringIntoBuffer (inihandle, "item", "selffile", buffer, 300);
			if ((status)<0) 
			{
				return status;
			}
			status = SetCtrlVal (itemHandle, FILE_ITEM_SELFDEFIFILE, buffer); 
			if ((status)<0) 
			{
				return status;
			}
			
		}
	}
	if (2 == item)	   // filter operation
	{
	
		if(1==flag)
		{
			status = GetCtrlVal (itemHandle, FILE_ITEM_TECHLOGS, &value);
		    if ((status)<0) 
			{
				return status;
			}
		    status = Ini_PutInt (inihandle, "filter", "techlogs", value);
			if ((status)<0) 
			{
				return status;
			}
			status = GetCtrlVal (itemHandle, FILE_ITEM_FILTER, buffer);
			if ((status)<0) 
			{
				return status;
			}
			status = Ini_PutString (inihandle, "filter", "filter", buffer);
			if ((status)<0) 
			{
				return status;
			}
			status = Ini_WriteToFile (inihandle, pathName);
			if ((status)<0) 
			{
				return status;
			} 
		}
		if(0==flag)
		{
			status = Ini_GetInt (inihandle, "filter", "techlogs", &value);
			if ((status)<0) 
			{
				return status;
			}
			status = SetCtrlVal (itemHandle, FILE_ITEM_TECHLOGS, value); 
			if ((status)<0) 
			{
				return status;
			}
			status = Ini_GetStringIntoBuffer (inihandle, "filter", "filter", buffer, 300);
			if ((status)<0) 
			{
				return status;
			}
			status = SetCtrlVal (itemHandle, FILE_ITEM_FILTER, buffer); 
			if ((status)<0) 
			{
				return status;
			}
	
		}
	
	}
	if (3 == item)	   // search operation
	{
	
		if(1==flag)
		{
			status = GetCtrlVal (itemHandle, FILE_ITEM_SEARCH, &value);
		    if ((status)<0) 
			{
				return status;
			}
		    status = Ini_PutInt (inihandle, "search", "search", value);
			if ((status)<0) 
			{
				return status;
			}
			memset(buffer,0,100); 
			status = GetCtrlVal (itemHandle, FILE_ITEM_S_FILENAME, buffer);
			if ((status)<0) 
			{
				return status;
			}
			status = Ini_PutString (inihandle, "search", "file_name", buffer);
			if ((status)<0) 
			{
				return status;
			}
			memset(buffer,0,100); 
			status = GetCtrlVal (itemHandle, FILE_ITEM_S_FILEPATH, buffer);
			if ((status)<0) 
			{
				return status;
			}
			status = Ini_PutString (inihandle, "search", "file_path", buffer);
			if ((status)<0) 
			{
				return status;
			}
			status = Ini_WriteToFile (inihandle, pathName);
			if ((status)<0) 
			{
				return status;
			} 
		}
		if(0==flag)
		{
			status = Ini_GetInt (inihandle, "search", "search", &value);
			if ((status)<0) 
			{
				return status;
			}
			status = SetCtrlVal (itemHandle, FILE_ITEM_SEARCH, value); 
			if ((status)<0) 
			{
				return status;
			}
			memset(buffer,0,100); 
			status = Ini_GetStringIntoBuffer (inihandle, "search", "file_name", buffer, 300);
			if ((status)<0) 
			{
				return status;
			}
			status = SetCtrlVal (itemHandle, FILE_ITEM_S_FILENAME, buffer); 
			if ((status)<0) 
			{
				return status;
			}
			memset(buffer,0,100); 
			status = Ini_GetStringIntoBuffer (inihandle, "search", "file_path", buffer, 300);
			if ((status)<0) 
			{
				return status;
			}
			status = SetCtrlVal (itemHandle, FILE_ITEM_S_FILEPATH, buffer); 
			if ((status)<0) 
			{
				return status;
			}
		}
	}
	free(buffer); 
	Ini_Dispose (inihandle); 
	return 1;
}
示例#11
0
文件: Remotely.c 项目: jufei/BtsShell
static int WriteConfig(int flag)
{
	  int fHandle=-1,linenumber=0,i=0,size=0,findflag=0; char *buffer=""; char pathName[MAX_PATHNAME_LEN];		char dirName[MAX_PATHNAME_LEN];   
	  
	  	GetProjectDir (dirName); 
		if(MENUBAR_CONFIG_CONFIGIP == flag)
		{
    		 MakePathname (dirName, "bbuip.txt", pathName);
	  
			 fHandle = OpenFile (pathName, VAL_WRITE_ONLY, VAL_TRUNCATE, VAL_ASCII);
			 if(fHandle<0)
			 {
	   		   SetCtrlVal (panelHandle, PANEL_TEXTBOX,  "Open bbuip.txt file error,please check by yourself!\r\n"); 
			   return -1;
			 }
			 buffer=(char*)malloc(1000); 
			 GetNumTextBoxLines (configHandle, CONFIG_BOX, &linenumber);
			 for(i=0;i<linenumber;i++)
			 {
				memset(buffer,0,1000);  
				GetTextBoxLine (configHandle, CONFIG_BOX, i, buffer);
				strcat(buffer,"\n");
				size=strlen(buffer);
				if (size > 7)
					{
					WriteFile (fHandle, buffer, size);
					}
			 }
			 free(buffer);
			 if(( CloseFile(fHandle))<0)
			 {
	   		   SetCtrlVal (panelHandle, PANEL_TEXTBOX,  "Close bbuip.txt file error,please try again!\r\n"); 
			   return -1;
			 
			 }
			 GetFileSize (pathName, &size); 
			 if(size==0)
			 {
	   		   SetCtrlVal (panelHandle, PANEL_TEXTBOX,  "bbuip.txt size is zero,please check and try again!\r\n"); 
			   return -1;
			 }
		
		}
		if(BBUCOMMON_CONFIGCMD == flag)
		{
			MakePathname (dirName, "command.txt", pathName);
	  
			 fHandle = OpenFile (pathName, VAL_WRITE_ONLY, VAL_TRUNCATE, VAL_ASCII);
			 if(fHandle<0)
			 {
	   		   SetCtrlVal (panelHandle, PANEL_TEXTBOX,  "Open command.txt file error,please check by yourself!\r\n"); 
			   return -1;
			 }
			 buffer=(char*)malloc(1000); 
			 GetNumTextBoxLines (configHandle, CONFIG_BOX, &linenumber); 
			 for(i=0;i<linenumber;i++)
			 {
				memset(buffer,0,1000);  
				GetTextBoxLine (configHandle, CONFIG_BOX, i, buffer);
				strcat(buffer,"\n");
				size=strlen(buffer);
				WriteFile (fHandle, buffer, size);
			 }
			 free(buffer);
			 if(( CloseFile(fHandle))<0)
			 {
	   		   SetCtrlVal (panelHandle, PANEL_TEXTBOX,  "Close command.txt file error,please try again!\r\n"); 
			   return -1;
			 
			 }
			 GetFileSize (pathName, &size); 
			 if(size==0)
			 {
	   		   SetCtrlVal (panelHandle, PANEL_TEXTBOX,  "command.txt size is zero,please check and try again!\r\n"); 
			 }
		}
		
	return 1;
}
/* In another thread, receives data and writes them into TSQ */
int CVICALLBACK receiveDataWriteToTSQ(void *functionData){
	int storeFileFlag = 0;
	GetCtrlVal(panelHdl, MainPanel_StoreTheData_Switch, &storeFileFlag);
	if(0 == dataSrc){ //read data from [device port]
		if(OpenComConfig(comPort, "", baudRate, parity, 
						 dataBits, stopBits, inQueueSize, outQueueSize) <0)
			showError("Failed to open RS232 port!");
		if(storeFileFlag > 0){
			if( writeFPP >0){
				writeFP = fopen(writeFilePath, "a");
				if(writeFP == NULL) 
					showError("Open WriteFile Failed");
				fseek(writeFP, writeFPP, SEEK_SET);
			}else{	
				SYSTEMTIME localTime;
				char dirName[MAX_PATHNAME_LEN];
				char fileName[200];
				GetProjectDir(dirName);
				strcat(dirName, "\\DataStorage");
				GetLocalTime(&localTime);
				sprintf(fileName, "%04d-%d-%d,%d_%02d_%02d.dat", 
						localTime.wYear, localTime.wMonth, localTime.wDay,
						localTime.wHour, localTime.wMinute, localTime.wSecond);
				MakePathname(dirName, fileName, writeFilePath);
				writeFP = fopen(writeFilePath, "a");
				if(writeFP == NULL) showError("Open WriteFile Failed");
			}
		}//if(storeFileFlag)
	}else if(1 == dataSrc){ //read data from [file]
		loadFP = fopen(loadFilePath, "r");
		if(loadFP == NULL){ 
			showError("Load File Failed");
			return -1;
		}
		fseek(loadFP, loadFPP, SEEK_SET);
	}else{ //[simulating data]
	}
	GetCtrlVal(panelHdl, MainPanel_StoreTheData_Switch, &storeFileFlag);
	while(receiveFlag){
		writeTSQEndFlag = 1;
		switch(dataSrc){
			case 0:
				bytesRead = ComRd(comPort, readData, READ_LENGTH);
				if(storeFileFlag > 0)
					fwrite(readData, sizeof(char), READ_LENGTH, writeFP);
				break;
			case 1:
				Delay(fileLoadSpeed);
				if(!feof(loadFP)){
					bytesRead = fread(readData, sizeof(char), READ_LENGTH, loadFP);
				}else{
					receiveFlag = 0;
					MessagePopup("Reach The End", "All data in this file has been read !");
				}
				break;
			case 2:
				for(int i=0; i<READ_LENGTH; i++)
					readData[i] = 0x80;
				Delay(0.1);
				break;
		}//switch()
		CmtWriteTSQData(tsqHdl, &readData, READ_LENGTH, TSQ_INFINITE_TIMEOUT, NULL);
		writeTSQEndFlag = 0;
	}//while()
	switch(dataSrc){
		case 0:
			//CloseCom(comPort);
			if(storeFileFlag >0){
				if(!feof(writeFP))
					writeFPP = ftell(writeFP);
				fclose(writeFP);
				writeFP = NULL;
			}
			break;
		case 1:
			if(!feof(loadFP))
				loadFPP = ftell(loadFP);
			fclose(loadFP);
			loadFP = NULL;
			break;
	}//switch()
	addLog("End-Acq", 0, panelHdl);
	return 0;
}
static void DoClickConfig(
    PF_InData       *in_data,
    PF_OutData      *out_data,
    PF_ParamDef     *params[],
    PF_LayerDef     *output,
    PF_EventExtra   *event_extra,
    ArbitraryData   *arb_data,
    SequenceData    *seq_data)
{
    void *hwndOwner = NULL;

#ifdef WIN_ENV
    PF_GET_PLATFORM_DATA(PF_PlatData_MAIN_WND, &hwndOwner);
#endif

    ConfigVec configs;
    GetStdConfigs(configs);
    
    if(configs.size() == 0)
        configs.push_back("(nada)"); // menu makes a gray entry that says "No configs in $PATH"
    
    
    MenuVec menu_items;
    int selected = 0;
    
    menu_items.push_back("$OCIO"); // menu will gray this out if $OCIO is not defined
    
    menu_items.push_back("(-"); // this tells the menu to make a seperator
    
    for(ConfigVec::const_iterator i = configs.begin(); i != configs.end(); ++i)
    {
        menu_items.push_back( *i );
        
        if(arb_data->source == OCIO_SOURCE_STANDARD && arb_data->path == *i)
        {
            selected = menu_items.size() - 1;
        }
    }
    
    menu_items.push_back("(-");
    
    menu_items.push_back("Custom...");
    
    int custom_choice = menu_items.size() - 1;
    
    if(arb_data->source == OCIO_SOURCE_CUSTOM)
    {
        selected = -1;
    }
    
    
    int choice = PopUpMenu(menu_items, selected, hwndOwner);
    
    
    if(choice == custom_choice)
    {
        // custom is the same as clicking the path
        DoClickPath(in_data, out_data, params, output, event_extra, arb_data, seq_data);
    }
    else if(choice != selected)
    {
        OpenColorIO_AE_Context *new_context = NULL;
        
        if(choice == 0)
        {
            // $OCIO
            char *file = std::getenv("OCIO");
            
            if(file)
            {
                Path path(file, GetProjectDir(in_data));
                
                new_context = new OpenColorIO_AE_Context(path.full_path(),
                                                            OCIO_SOURCE_ENVIRONMENT);
                
                arb_data->source = seq_data->source = OCIO_SOURCE_ENVIRONMENT;
                
                strncpy(arb_data->path, path.full_path().c_str(), ARB_PATH_LEN);
                strncpy(arb_data->relative_path, path.relative_path(false).c_str(), ARB_PATH_LEN);
            }
            else
                throw OCIO::Exception("No $OCIO environment variable defined."); 
        }
        else
        {
            // standard configs
            std::string config = configs[choice - 2];
            
            std::string path = GetStdConfigPath(config);
            
            if( !path.empty() )
            {
                new_context = new OpenColorIO_AE_Context(config, OCIO_SOURCE_STANDARD);
                
                arb_data->source = seq_data->source = OCIO_SOURCE_STANDARD;
                
                strncpy(arb_data->path, config.c_str(), ARB_PATH_LEN);
                strncpy(arb_data->relative_path, path.c_str(), ARB_PATH_LEN);
            }
            else
                throw OCIO::Exception("Problem loading OCIO configuration."); 
        }
        
        
        if(new_context)
        {
            if(seq_data->context)
            {
                delete seq_data->context;
            }
            
            seq_data->context = new_context;
            
            
            strncpy(seq_data->path, arb_data->path, ARB_PATH_LEN);
            strncpy(seq_data->relative_path, arb_data->relative_path, ARB_PATH_LEN);
            
            // try to retain settings if it looks like the same situation,
            // possibly fixing a moved path
            if(OCIO_ACTION_NONE == arb_data->action ||
                (OCIO_ACTION_LUT == new_context->getAction() && OCIO_ACTION_LUT != arb_data->action) ||
                (OCIO_ACTION_LUT != new_context->getAction() && OCIO_ACTION_LUT == arb_data->action) ||
                (OCIO_ACTION_LUT != new_context->getAction() &&
                   (-1 == FindInVec(new_context->getInputs(), arb_data->input) ||
                    -1 == FindInVec(new_context->getInputs(), arb_data->output) ||
                    -1 == FindInVec(new_context->getTransforms(), arb_data->transform) ||
                    -1 == FindInVec(new_context->getDevices(), arb_data->device) ) ) )
            {
                // Configuration is different, so initialize defaults
                arb_data->action = seq_data->context->getAction();
                
                if(arb_data->action == OCIO_ACTION_LUT)
                {
                    arb_data->invert = FALSE;
                    arb_data->interpolation = OCIO_INTERP_LINEAR;
                }
                else
                {
                    strncpy(arb_data->input, seq_data->context->getInput().c_str(), ARB_SPACE_LEN);
                    strncpy(arb_data->output, seq_data->context->getOutput().c_str(), ARB_SPACE_LEN);
                    strncpy(arb_data->transform, seq_data->context->getTransform().c_str(), ARB_SPACE_LEN);
                    strncpy(arb_data->device, seq_data->context->getDevice().c_str(), ARB_SPACE_LEN);
                }
            }
            else
            {
                // Configuration is the same, retain current settings
                if(arb_data->action == OCIO_ACTION_LUT)
                {
                    seq_data->context->setupLUT(arb_data->invert, arb_data->interpolation);
                }
                else if(arb_data->action == OCIO_ACTION_CONVERT)
                {
                    seq_data->context->setupConvert(arb_data->input, arb_data->output);
                }
                else if(arb_data->action == OCIO_ACTION_DISPLAY)
                {
                    seq_data->context->setupDisplay(arb_data->input, arb_data->device, arb_data->transform);
                    
                    // transform may have changed
                    strncpy(arb_data->transform, seq_data->context->getTransform().c_str(), ARB_SPACE_LEN);
                }
            }
            
            params[OCIO_DATA]->uu.change_flags = PF_ChangeFlag_CHANGED_VALUE;
            
            seq_data->status = STATUS_OK;
        }
    }
}
static void DoClickPath(
    PF_InData       *in_data,
    PF_OutData      *out_data,
    PF_ParamDef     *params[],
    PF_LayerDef     *output,
    PF_EventExtra   *event_extra,
    ArbitraryData   *arb_data,
    SequenceData    *seq_data)
{
    ExtensionMap extensions;
    
    for(int i=0; i < OCIO::FileTransform::getNumFormats(); i++)
    {
        const char *extension = OCIO::FileTransform::getFormatExtensionByIndex(i);
        const char *format = OCIO::FileTransform::getFormatNameByIndex(i);
    
        if(extension != std::string("ccc")) // .ccc files require an ID parameter
            extensions[ extension ] = format;
    }
    
    extensions[ "ocio" ] = "OCIO Format";
    

    void *hwndOwner = NULL;

#ifdef WIN_ENV
    PF_GET_PLATFORM_DATA(PF_PlatData_MAIN_WND, &hwndOwner);
#endif

    char c_path[ARB_PATH_LEN + 1] = { '\0' };
    
    bool result = OpenFile(c_path, ARB_PATH_LEN, extensions, hwndOwner);
    
    
    if(result)
    {
        Path path(c_path, GetProjectDir(in_data));
        
        OpenColorIO_AE_Context *new_context = new OpenColorIO_AE_Context(path.full_path(),
                                                                    OCIO_SOURCE_CUSTOM);
        
        if(new_context == NULL)
            throw OCIO::Exception("WTF?");
            
        
        if(seq_data->context)
        {
            delete seq_data->context;
        }
        
        seq_data->context = new_context;
        
        arb_data->source = seq_data->source = OCIO_SOURCE_CUSTOM;
        
        strncpy(arb_data->path, path.full_path().c_str(), ARB_PATH_LEN);
        strncpy(arb_data->relative_path, path.relative_path(false).c_str(), ARB_PATH_LEN);
        
        strncpy(seq_data->path, arb_data->path, ARB_PATH_LEN);
        strncpy(seq_data->relative_path, arb_data->relative_path, ARB_PATH_LEN);
        
        
        // try to retain settings if it looks like the same situation,
        // possibly fixing a moved path
        if(OCIO_ACTION_NONE == arb_data->action ||
            (OCIO_ACTION_LUT == new_context->getAction() && OCIO_ACTION_LUT != arb_data->action) ||
            (OCIO_ACTION_LUT != new_context->getAction() && OCIO_ACTION_LUT == arb_data->action) ||
            (OCIO_ACTION_LUT != new_context->getAction() &&
               (-1 == FindInVec(new_context->getInputs(), arb_data->input) ||
                -1 == FindInVec(new_context->getInputs(), arb_data->output) ||
                -1 == FindInVec(new_context->getTransforms(), arb_data->transform) ||
                -1 == FindInVec(new_context->getDevices(), arb_data->device) ) ) )
        {
            // Configuration is different, so initialize defaults
            arb_data->action = seq_data->context->getAction();
            
            if(arb_data->action == OCIO_ACTION_LUT)
            {
                arb_data->invert = FALSE;
                arb_data->interpolation = OCIO_INTERP_LINEAR;
            }
            else
            {
                strncpy(arb_data->input, seq_data->context->getInput().c_str(), ARB_SPACE_LEN);
                strncpy(arb_data->output, seq_data->context->getOutput().c_str(), ARB_SPACE_LEN);
                strncpy(arb_data->transform, seq_data->context->getTransform().c_str(), ARB_SPACE_LEN);
                strncpy(arb_data->device, seq_data->context->getDevice().c_str(), ARB_SPACE_LEN);
            }
        }
        else
        {
            // Configuration is the same, retain current settings
            if(arb_data->action == OCIO_ACTION_LUT)
            {
                seq_data->context->setupLUT(arb_data->invert, arb_data->interpolation);
            }
            else if(arb_data->action == OCIO_ACTION_CONVERT)
            {
                seq_data->context->setupConvert(arb_data->input, arb_data->output);
            }
            else if(arb_data->action == OCIO_ACTION_DISPLAY)
            {
                seq_data->context->setupDisplay(arb_data->input, arb_data->device, arb_data->transform);
                
                // transform may have changed
                strncpy(arb_data->transform, seq_data->context->getTransform().c_str(), ARB_SPACE_LEN);
            }
        }
        
        params[OCIO_DATA]->uu.change_flags = PF_ChangeFlag_CHANGED_VALUE;
        
        seq_data->status = STATUS_USING_ABSOLUTE;
    }
}
static PF_Err DoClick( 
    PF_InData       *in_data,
    PF_OutData      *out_data,
    PF_ParamDef     *params[],
    PF_LayerDef     *output,
    PF_EventExtra   *event_extra )
{
    PF_Err          err     =   PF_Err_NONE;
    
    ArbitraryData *arb_data = (ArbitraryData *)PF_LOCK_HANDLE(params[OCIO_DATA]->u.arb_d.value);
    SequenceData *seq_data = (SequenceData *)PF_LOCK_HANDLE(in_data->sequence_data);
    
    
    if(event_extra->effect_win.area == PF_EA_CONTROL)
    {
        bool menus_visible = (arb_data->action != OCIO_ACTION_NONE);
        bool third_menu = (arb_data->action == OCIO_ACTION_DISPLAY);
        
        PF_Point local_point;
        
        local_point.h = event_extra->u.do_click.screen_point.h - event_extra->effect_win.current_frame.left;
        local_point.v = event_extra->u.do_click.screen_point.v - event_extra->effect_win.current_frame.top;
        
        UIRegion reg = WhichRegion(local_point, menus_visible, third_menu);
        
        if(reg != REGION_NONE)
        {
            try
            {
                if(reg == REGION_CONFIG_MENU)
                {
                    DoClickConfig(in_data, out_data, params, output,
                                    event_extra, arb_data, seq_data);
                }
                else if(reg == REGION_PATH)
                {
                    if(arb_data->source == OCIO_SOURCE_CUSTOM)
                    {
                        DoClickPath(in_data, out_data, params, output,
                                        event_extra, arb_data, seq_data);
                    }
                }
                else if(arb_data->action != OCIO_ACTION_NONE &&
                        seq_data->status != STATUS_FILE_MISSING)
                {
                    if(seq_data->context == NULL)
                    {
                        seq_data->context = new OpenColorIO_AE_Context(arb_data,
                                                                GetProjectDir(in_data) );
                    }
                        
                    if(reg == REGION_CONVERT_BUTTON || reg == REGION_DISPLAY_BUTTON)
                    {
                        DoClickConvertDisplay(in_data, out_data, params, output,
                                                event_extra, arb_data, seq_data, reg);
                    }
                    else if(reg == REGION_EXPORT_BUTTON)
                    {
                        DoClickExport(in_data, out_data, params, output,
                                        event_extra, arb_data, seq_data, reg);
                    }
                    else // must be a menu then
                    {
                        DoClickMenus(in_data, out_data, params, output,
                                        event_extra, arb_data, seq_data, reg);
                    }
                }
            }
            catch(std::exception &e)
            {
                if(in_data->appl_id == 'FXTC')
                {
                    PF_SPRINTF(out_data->return_msg, e.what());
                    
                    out_data->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE;
                }
                else
                {
                    void *hwndOwner = NULL;

                #ifdef WIN_ENV
                    PF_GET_PLATFORM_DATA(PF_PlatData_MAIN_WND, &hwndOwner);
                #endif

                    ErrorMessage(e.what(), hwndOwner);
                }
            }
            catch(...)
            {
                PF_SPRINTF(out_data->return_msg, "Unknown error");
                
                out_data->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE;
            }
        }
    }
    
    
    PF_UNLOCK_HANDLE(params[OCIO_DATA]->u.arb_d.value);
    PF_UNLOCK_HANDLE(in_data->sequence_data);
    
    event_extra->evt_out_flags = PF_EO_HANDLED_EVENT;
    
    return err;
}