Ejemplo n.º 1
0
intptr_t WINAPI ProcessEditorInputW(const ProcessEditorInputInfo *InputInfo)
{
	LPWSTR FileName=NULL;
	BOOL Result=FALSE;

	if (Opt.ProcessEditorInput)
	{
		if (InputInfo->Rec.EventType==KEY_EVENT && InputInfo->Rec.Event.KeyEvent.bKeyDown && inputrecord_compare(InputInfo->Rec,Opt.RecKey))
		{
			Info.EditorControl(-1,ECTL_GETINFO,0,&ei);
			size_t FileNameSize=Info.EditorControl(-1,ECTL_GETFILENAME,0,0);

			if (FileNameSize)
			{
				FileName=new wchar_t[FileNameSize];

				if (FileName)
				{
					Info.EditorControl(-1,ECTL_GETFILENAME,FileNameSize,FileName);
				}
			}

			if (CheckExtension(FileName))
			{
				ShowCurrentHelpTopic();
				Result=TRUE;
			}
		}
	}

	if (FileName)
	{
		delete[] FileName;
	}

	return Result;
}
Ejemplo n.º 2
0
intptr_t WINAPI ProcessEditorInputW(const ProcessEditorInputInfo *InputInfo)
{
	BOOL Result=FALSE;

	if (Opt.ProcessEditorInput)
	{
		if (InputInfo->Rec.EventType==KEY_EVENT && InputInfo->Rec.Event.KeyEvent.bKeyDown && inputrecord_compare(InputInfo->Rec,Opt.RecKey))
		{
			Info.EditorControl(-1,ECTL_GETINFO,0,&ei);
			wchar_t *FileName=GetEditorFileName();

			if (IsHlf() || (Opt.CheckMaskFile && CheckExtension(FileName)))
			{
				if (ShowCurrentHelpTopic())
					Result=TRUE;
			}

			if (FileName)
				delete[] FileName;
		}
	}

	return Result;
}
Ejemplo n.º 3
0
HANDLE WINAPI OpenW(const struct OpenInfo *OInfo)
{
	if (OInfo->OpenFrom==OPEN_COMMANDLINE)
	{
		const wchar_t* cmd=((OpenCommandLineInfo*)OInfo->Data)->CommandLine;
		if (lstrlen(cmd))
		{
			static wchar_t cmdbuf[1024], FileName[MAX_PATH], *ptrTopic, *ptrName;
			lstrcpyn(cmdbuf,cmd,ARRAYSIZE(cmdbuf));
			FSF.Trim(cmdbuf);
			ptrName=ptrTopic=cmdbuf;

			if (*cmdbuf==L'\"')
			{
				ptrName++;
				ptrTopic++;

				while (*ptrTopic!=L'\"' && *ptrTopic)
					ptrTopic++;
			}
			else
			{
				while (*ptrTopic!=L' ' && *ptrTopic)
					ptrTopic++;
			}

			int hasTopic = (*ptrTopic == L' ');
			*ptrTopic=0;

			wchar_t *ptrCurDir=NULL;

			if (FSF.PointToName(ptrName) == ptrName)
			{
				size_t Size=FSF.GetCurrentDirectory(0,NULL);

				if (Size)
				{
					ptrCurDir=new WCHAR[Size+lstrlen(ptrName)+8];
					FSF.GetCurrentDirectory(Size,ptrCurDir);
					lstrcat(ptrCurDir,L"\\");
					lstrcat(ptrCurDir,ptrName);
					ptrName=(wchar_t *)ptrCurDir;
				}
			}

			GetFullPathName(ptrName,MAX_PATH,FileName,&ptrName);

			if (ptrCurDir)
				delete[] ptrCurDir;

			if (hasTopic)
			{
				ptrTopic++;

				if (lstrlen(ptrTopic))
					FSF.Trim(ptrTopic);
				else
					ptrTopic=NULL;
			}
			else
			{
				ptrTopic = NULL;
			}

			ShowHelp(FileName,ptrTopic,true);
		}
		else
		{
			Info.ShowHelp(Info.ModuleName,L"cmd",FHELP_SELFHELP);
		}
	}
	else if (OInfo->OpenFrom == OPEN_EDITOR)
	{
		if (IsHlf())
		{
			ShowCurrentHelpTopic();
		}
		else
		{
			const wchar_t *Items[] = { GetMsg(MTitle), GetMsg(MNotAnHLF), GetMsg(MOk) };
			Info.Message(&MainGuid, nullptr, 0, NULL, Items, ARRAYSIZE(Items), 1);
		}
	}

	return nullptr;
}
Ejemplo n.º 4
0
HANDLE WINAPI OpenW(const struct OpenInfo *OInfo)
{
	if (OInfo->OpenFrom == OPEN_EDITOR || OInfo->OpenFrom==OPEN_FROMMACRO)
	{
		HANDLE MacroResult=nullptr;
		// в редакторе проверяем файл на принадлежность к системе помощи Far Manager
		if (IsHlf())
		{
			if (ShowCurrentHelpTopic())
				MacroResult=INVALID_HANDLE_VALUE;
		}
		else if (OInfo->OpenFrom!=OPEN_FROMMACRO)
		{
			const wchar_t *Items[] = { GetMsg(MTitle), GetMsg(MNotAnHLF), GetMsg(MOk) };
			Info.Message(&MainGuid, nullptr, 0, NULL, Items, ARRAYSIZE(Items), 1);
		}

		return (OInfo->OpenFrom==OPEN_FROMMACRO)?MacroResult:nullptr;
	}

	if (OInfo->OpenFrom==OPEN_COMMANDLINE)
	{
		static wchar_t cmdbuf[1024], FileName[MAX_PATH], *ptrTopic, *ptrName;

		// разбор "параметров ком.строки"
		lstrcpyn(cmdbuf,((OpenCommandLineInfo*)OInfo->Data)->CommandLine,ARRAYSIZE(cmdbuf));

		if (cmdbuf[0])
		{
			FSF.Trim(cmdbuf);
			ptrName=ptrTopic=cmdbuf;

			if (*cmdbuf==L'\"')
			{
				ptrName++;
				ptrTopic++;

				while (*ptrTopic!=L'\"' && *ptrTopic)
					ptrTopic++;
			}
			else
			{
				while (*ptrTopic!=L' ' && *ptrTopic)
					ptrTopic++;
			}

			int hasTopic = (*ptrTopic == L' ');
			*ptrTopic=0;
			if (hasTopic)
			{
				ptrTopic++;
				if (*ptrTopic == L'@')
					ptrTopic++;

				if (lstrlen(ptrTopic))
					FSF.Trim(ptrTopic);
				else
					ptrTopic=NULL;
			}
			else
			{
				if (*ptrName == L'@')
				{
					ptrTopic=ptrName+1;
					FSF.Trim(ptrTopic);
					ptrName=NULL;
				}
				else
					ptrTopic = NULL;
			}

			wchar_t *ptrCurDir=NULL;

			// Здесь: ptrName - тмя файла/GUID, ptrTopic - имя темы

			// показ темы помощи по GUID`у
			GUID FindGuid;
			bool guidMode=StrToGuid(ptrName,&FindGuid);
			if (!guidMode && *ptrName == L'{')
			{
				ptrName++;
				wchar_t *ptrNameEnd=ptrName+lstrlen(ptrName)-1;

				if (*ptrNameEnd == L'}')
					*ptrNameEnd=0;
				guidMode=StrToGuid(ptrName,&FindGuid);
			}

			if (guidMode)
				Info.ShowHelp((const wchar_t*)&FindGuid,ptrTopic,FHELP_GUID);

			// по GUID`у не найдено, пробуем имя файла
			if (!guidMode)
			{
				wchar_t TempFileName[MAX_PATH*2];
				wchar_t ExpFileName[MAX_PATH*2];
				lstrcpyn(TempFileName,ptrName,ARRAYSIZE(TempFileName));

				// Если имя файла без пути...
				if (FSF.PointToName(ptrName) == ptrName)
				{
					// ...смотрим в текущем каталоге
					size_t Size=FSF.GetCurrentDirectory(0,NULL);

					if (Size)
					{
						ptrCurDir=new WCHAR[Size+lstrlen(ptrName)+8];
						FSF.GetCurrentDirectory(Size,ptrCurDir);
						lstrcat(ptrCurDir,L"\\");
						lstrcat(ptrCurDir,ptrName);
						if (FileExists(ptrCurDir))
							ptrName=(wchar_t *)ptrCurDir;
					}

					// ...в текущем нет...
					if (FSF.PointToName(ptrName) == ptrName)
					{
						// ...смотрим в %FARHOME%
						ExpandEnvironmentStrings(L"%FARHOME%",ExpFileName,ARRAYSIZE(ExpFileName));
						FSF.AddEndSlash(ExpFileName);
						lstrcat(ExpFileName,ptrName);
						if (!FileExists(ExpFileName))
						{
							// ...в %FARHOME% нет, поищем по путям плагинов.
							if (FindPluginHelp(ptrName,ExpFileName))
								ptrName=ExpFileName;
						}
						else
							ptrName=ExpFileName;
					}
				}
				else
				{
					// ptrName указан с путём.
					ExpandEnvironmentStrings(ptrName,ExpFileName,ARRAYSIZE(ExpFileName));
					ptrName=ExpFileName;
				}

				GetFullPathName(ptrName,MAX_PATH,FileName,&ptrName);

				if (ptrCurDir)
					delete[] ptrCurDir;

				if (!ShowHelp(FileName,ptrTopic,true,(!ptrTopic || !*ptrTopic?false:true)))
				{
					// синтаксис hlf:topic_из_ФАР_хелпа ==> TempFileName
					Info.ShowHelp(nullptr,TempFileName,FHELP_FARHELP);
				}
			}
		}
		else
		{
			// параметры не указаны, выводим подсказку по использованию плагина.
			Info.ShowHelp(Info.ModuleName,L"cmd",FHELP_SELFHELP);
		}
	}

	return nullptr;
}