예제 #1
0
char *GetFirstLine (char *pszLine) {

	char szLineBuffer [iMaxLineLength];
	int iEndSel = HIWORD (Edit_GetSel (hEditWnd));
	int iCopyCount;
	int iLineNr;
	register int i;

/* lese akt. Zeile */
	for (i = 0; i < sizeof (szLineBuffer); i++)
		 szLineBuffer [i] = '\0';
	iLineNr = Edit_LineFromChar (hEditWnd, iEndSel);
	Edit_GetLine (hEditWnd, iLineNr, szLineBuffer,
				  sizeof (szLineBuffer) -1);

/* berechne Indizes für Kopieren des sel. Strings */
   iEndSel -= Edit_LineIndex (hEditWnd, iLineNr);

/* berechne Anz. zu kopierender Zeichen */
   iCopyCount = strlen (szLineBuffer) - iEndSel;

/* überflüssige Zeichen überschreiben */
   memmove (szLineBuffer, szLineBuffer+iEndSel, iCopyCount);
   szLineBuffer [iCopyCount] = '\0';	// setze Endekennzeichen

/* in Zielstring kopieren */
   strcpy (pszLine, szLineBuffer);

   return (pszLine);
}
int MainMenuSection::ProcessMsg(WPARAM wParam, LPARAM lParam)
{
	int result = 0;
	int s;

	for (int i = 0; i < mControlCount; i++)
	{
		// check if the notification came from this section's control
		if (mControlPack[i].mControl == (HWND)lParam)
		{
			char freq;
			switch ( HIWORD(wParam) )
			{
				// button clicked
			case BN_CLICKED:
				if (mControlPack[2].mControl == (HWND)lParam)
				{
					Edit_GetLine(mControlPack[0].mControl, 0, LPTSTR(&freq), 1);
					switch (freq)
					{
					case '1':
						getParams.Frequency = 11025;
						break;
					case '2':
						getParams.Frequency = 22050;
						break;
					case '4':
						getParams.Frequency = 44100;
						break;
					}
					Edit_GetLine(mControlPack[1].mControl, 0, LPTSTR(getParams.FreqType), 23);
					return 1;
					break;
				}
				else
					if (mControlPack[3].mControl == (HWND)lParam)
					{
						return 1;
					}
			}
		}
	}

	return 0;
}
예제 #3
0
/* Text suchen und selektieten Punkt übergeben  */
BOOL SearchText (char* pszKeyStr, POINT* pPoint) {

	register int i;
	int iEnd;
	char szLine [iMaxLineLength];
	char *pszAktPos;
	int iStart = HIWORD (Edit_GetSel (hEditWnd));
	int iLineNr = Edit_LineFromChar (hEditWnd, iStart);
	int iMaxLineNr = Edit_GetLineCount (hEditWnd);
	int iLineLength = Edit_LineLength (hEditWnd, iStart);

/*  1. (akt.) Zeile untersuchen */
	if (iLineLength) {
		for (i = 0; i < sizeof (szLine); i++)
			szLine [i] = '\0';
		GetFirstLine (szLine);
		if (pszAktPos = CompareStrings (szLine, pszKeyStr)) {
			iStart += pszAktPos - szLine;
			iEnd = iStart + strlen (pszKeyStr);
			pPoint->x = iStart; pPoint->y = iEnd;
			return (TRUE);
		}
		else
		   iStart += strlen (szLine) + 2; // einschl. 0D0A
	}
	else
		iStart += 2;

/* alle restlichen Zeilen untersuchen */
	for (++iLineNr; iLineNr < iMaxLineNr; iLineNr++) {
		if (iLineLength = Edit_LineLength (hEditWnd, iStart)) {
			for (i = 0; i < sizeof (szLine); i++)
				szLine [i] = '\0';
			Edit_GetLine (hEditWnd, iLineNr, szLine, sizeof (szLine) -1);
			if (pszAktPos = CompareStrings (szLine, pszKeyStr)) {
				iStart += pszAktPos - szLine;
				iEnd = iStart + strlen (pszKeyStr);
				pPoint->x = iStart; pPoint->y = iEnd;
				return (TRUE);
			}
			else
				iStart += iLineLength + 2;
		}
		else
			iStart += 2;
	}

/* Punkt auf ungültigen Wert setzen */
	pPoint->x = -1; pPoint->y = -1;
	return (FALSE);
}
예제 #4
0
/* Selektierten Text lesen */
char *GetSelectedText (char *pszResultText, int iMaxCopy) {

	char szLineBuffer [iMaxLineLength];
	DWORD dwSel = Edit_GetSel (hEditWnd);
	int iAnfSel = LOWORD (dwSel);
	int iEndSel = HIWORD (dwSel);
	int iCopyCount;
	int iLineNr;
	register int i;
		
	iCopyCount = iEndSel - iAnfSel;
	if (iCopyCount) {

/* akt. Zeile lesen */
		for (i = 0; i < sizeof (szLineBuffer); i++)
			szLineBuffer [i] = '\0';
		iLineNr = Edit_LineFromChar (hEditWnd, -1);
		Edit_GetLine (hEditWnd, iLineNr, szLineBuffer,
					  sizeof (szLineBuffer) -1);

/* berechne Indizes für Kopieren des sel. Strings */
		iAnfSel -= Edit_LineIndex (hEditWnd, iLineNr);

/* korrigiere ggf. Anz. zu kopierender Zeichen */
		if (Edit_LineFromChar (hEditWnd, iEndSel) != iLineNr) {
			iEndSel = strlen (szLineBuffer);
			iCopyCount = iEndSel - iAnfSel;
		}

/* begrenze ggf. Anz. zu kopierender Zeichen */
		if (iCopyCount > iMaxCopy)
			iCopyCount = iMaxCopy;

/* überflüssige Zeichen überschreiben */
		memmove (szLineBuffer, szLineBuffer+iAnfSel, iCopyCount);
		szLineBuffer [iCopyCount] = '\0';	 // setze Endekennzeichen

/* in Zielstring kopieren */
		strcpy (pszResultText, szLineBuffer);
	}
	return (pszResultText);
}
예제 #5
0
static void notify_textchange(struct datawindow_priv *datawindow, int param1, int param2)
{

    struct attr search_attr;
    struct search_list_result *res;
    char search_string[1024];
    TCHAR converted_iso2[32];
    

    int lineLength = Edit_LineLength(datawindow->hwndEdit, 0);
    TCHAR line[lineLength + 1];
    (void)Edit_GetLine(datawindow->hwndEdit, 0, line, lineLength  + 1);
    line[lineLength] = 0;


    (void)ListView_DeleteAllItems( datawindow->hwndList);

    TCHAR_TO_UTF8(line, search_string);

    search_attr.type = datawindow->currentSearchState;
    search_attr.u.str = search_string;

    if (lineLength<1)
        return;

    search_list_search(datawindow->sl, &search_attr, 1);


    TCHAR *tcharBuffer = NULL;
    int listIndex = 0;
    LVITEM lvI;

    lvI.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE;
    lvI.state = 0;
    lvI.stateMask = 0;

    while ((res=search_list_get_result(datawindow->sl)) && listIndex < 50)
    {

        switch (search_attr.type)
        {
        case attr_country_name:
            tcharBuffer = newSysString(res->country->name);
            break;
        case attr_town_name:
            tcharBuffer = newSysString(res->town->common.town_name);
            break;
        case attr_street_name:
            if (res->street->name)
            {
                tcharBuffer = newSysString(res->street->name);
            }
            else
            {
                continue;
            }
            break;
        default:
            dbg(0, "Unhandled search type");
        }

        lvI.iItem = listIndex;
        lvI.iImage = listIndex;
        lvI.iSubItem = 0;
        lvI.lParam = (LPARAM) res->country->iso2;
        UTF8_TO_TCHAR(res->country->iso2, converted_iso2);
        lvI.pszText = converted_iso2;//LPSTR_TEXTCALLBACK; // sends an LVN_GETDISP message.
        (void)ListView_InsertItem(datawindow->hwndList, &lvI);
        ListView_SetItemText(datawindow->hwndList, listIndex, 1, tcharBuffer);
        g_free(tcharBuffer);
        dbg(0,"%s\n", res->country->name);
        listIndex++;
    }
}
예제 #6
0
static ErrNo GetMatrix(const HWND hwndEdit,double **pMatrix,const int nRows,const int nColumns)
{
	TCHAR	szBuffer_t[MAXSIZE];
	bool	data = false;
	TCHAR	seps[] = TEXT(" \t");
	TCHAR	*ptemp,*pstr,*pnext_token = NULL,*szBuffer = NULL;
	int		iLine,iLength,iStart,iCount;
	int		iMax = nColumns*20;							//缺憾 获取数据还是有限定的 每行字符个数不能超过iMax个

	szBuffer = new TCHAR[iMax];		//存储每一行获得的字符

	iLine = Edit_GetLineCount(hwndEdit);
	if(iLine == 1)											 //判断是否没有输入数据
	{
		if(!(iLength = Edit_GetText(hwndEdit,szBuffer,iMax)))
		{
			return NO_DATA_INPUT;
		}
	}
	else if(iLine<nRows)
	{
		return WRONG_MATRIX;
	}

	data = false;
	for(int i=0;i<iLine;i++)
	{
		iLength = Edit_GetLine(hwndEdit,i,szBuffer_t,MAXSIZE);
		if(iLength)				//找出第一个有数据的行
		{
			for(int j=0;j<iLength;j++)
			{
				if((szBuffer_t[j] >= TEXT('0') && szBuffer_t[j] <= TEXT('9')) || szBuffer_t[j] == TEXT('.'))
				{
					iStart = i;
					data = true;
					break;
				}
			}
			if(data)
				break;
		}
	}

	for(int i=iStart,k=0;i<iStart+nRows;i++,k++)			//获取每行数据
	{
		iCount = 0;
		iLength = Edit_GetLine(hwndEdit,i,szBuffer,iMax-1);
		szBuffer[iLength]=TEXT('\0');
		//字符串分割
		pstr = wcstok_s(szBuffer,seps,&pnext_token);
		while(pstr!=NULL)
		{
			if(*pstr == TEXT('+'))								//判断是否有分割行							
				return WRONG_MATRIX;	
			else if(!CharacterJudgement(pstr))					//判断是否非法字符输入
				return INCORRECT_DATA;
			if(iCount >= nColumns)								//判断每行输入数据个数是否超出限定矩阵维数
				return WRONG_MATRIX;
			pMatrix[k][iCount] = wcstod(pstr,&ptemp);
			pstr = wcstok_s(NULL,seps,&pnext_token);
			iCount++;
		}
		if(iCount != nColumns)
			return WRONG_MATRIX;
	}

	delete szBuffer;
	szBuffer = NULL;
	return 0;
}