Exemplo n.º 1
0
void
SessionImpl::RegisterFileTypes ()
{
    for (int ft = FileType::None + 1; ft < FileType::E_N_D; ++ ft)
    {
        RegisterFileType (static_cast<FileType::EnumType>(ft));
    }
}
Exemplo n.º 2
0
//===========================================================================
void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
   // ---------------------------------------------------
    frmLogoDiALab = new TfrmLogoDiALab(NULL);
    //frmLogoDiALab->Show();
    Application->ProcessMessages();
    Sleep(2300);
   // ---------------------------------------------------
      WhoUseProgram = wupSensei;
      //WhoUseProgram = wupTsisarzh;
      //WhoUseProgram = wupTanjaKvant;

      if (WhoUseProgram == wupTsisarzh) { // ---- ѕровер¤ем винты ------// || WhoUseProgram == wupSensei
            unsigned long  aa = MAX_PATH;
            char           VolumeName[MAX_PATH], FileSystemName[MAX_PATH];
            unsigned long  VolumeSerialNo;
            unsigned long  MaxComponentLength, FileSystemFlags;

            GetVolumeInformation("C:\\", VolumeName, aa, &VolumeSerialNo,
                                 &MaxComponentLength,&FileSystemFlags,
                                 FileSystemName,aa);

            AnsiString  HexVolumeSerialNo = IntToHex((int)VolumeSerialNo,8);

            if ( HexVolumeSerialNo != "0D471DF1" && HexVolumeSerialNo != "104E16FB" && HexVolumeSerialNo != "256E13FC") {
                Error_None_LicenseProgram(Handle);
                ExitProcess(0);
            }
      }

   // ---------------------------------------------------
      Left   = 0;
      Top    = 0;
      Height = 730;
      EnabledTVModivication = true;

   // ---- –егистрирую в ¬индовсе расширение ------------
      RegisterFileType("dls", Application->ExeName, 1);
      AddNewFileToMainMenu(pmFile, "Load", LoadProjectFromMenu);

   // ------- «аполн¤ем “ри¬ью —писками элементов -----
      SetupTreeView();

   // -------
      aAllAction(aNewScheme);

   // ------- »нициализаци¤ пути ќпен и —айф ƒиалога --------
      OpenDialog1->InitialDir =  ExtractFilePath( Application->ExeName );
      SaveDialog1->InitialDir =  ExtractFilePath( Application->ExeName );

   // -----
      TimerLogo->Enabled = true;
}
Exemplo n.º 3
0
InternalFileTypeInfo *
SessionImpl::GetInternalFileTypeInfo (/*[in]*/ FileType fileType)
{
    RegisterFileType (fileType);
    return (&fileTypes[fileType.Get()]);
}
Exemplo n.º 4
0
void
SessionImpl::RegisterFileType (/*[in]*/ FileType fileType)
{
    if (fileType.Get() >= fileTypes.size())
    {
        fileTypes.resize (FileType::E_N_D);
    }


    if (fileTypes[fileType.Get()].fileType == fileType.Get())
    {
        // already registered
        return;
    }

    switch (fileType.Get())
    {

    case FileType::AFM:
        RegisterFileType (
            FileType::AFM,
            "afm",
            0,
            ".afm",
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_AFM_DIR)),
            P2_("AFMFONTS", "TEXFONTS"));
        break;

    case FileType::BASE:
        RegisterFileType (
            FileType::BASE,
            "base",
            "METAFONT",
            ".base",
            P2_(CURRENT_DIRECTORY, s_(MIKTEX_PATH_BASE_DIR)),
            "");
        break;

    case FileType::BIB:
        RegisterFileType (
            FileType::BIB,
            "bib",
            "BibTeX",
            ".bib",
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_BIBTEX_DIR "/bib")),
            P2_("BIBINPUTS", "TEXBIB"));
        break;

    case FileType::BST:
        RegisterFileType (
            FileType::BST,
            "bst",
            "BibTeX",
            ".bst",
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_BIBTEX_DIR "/{bst,csf}")),
            "BSTINPUTS");
        break;

    case FileType::CID:
        RegisterFileType (
            FileType::CID,
            "cid maps",
            0,
            P2_(".cid", ".cidmap"),
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_CIDMAP_DIR)),
            "FONTCIDMAPS");
        break;

    case FileType::CLUA:
        RegisterFileType (
            FileType::CLUA,
            "clua",
            0,
            P2_(".dll", ".so"),
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_SCRIPT_DIR "/{$progname,$engine,}/lua")),
            "CLUAINPUTS");
        break;

    case FileType::CNF:
        RegisterFileType (
            FileType::CNF,
            "cnf",
            0,
            ".cnf",
            S_(MIKTEX_PATH_WEB2C_DIR),
            "TEXMFCNF");
        break;

    case FileType::CMAP:
        RegisterFileType (
            FileType::CMAP,
            "cmap files",
            0,
            "",
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_CMAP_DIR)),
            P2_("CMAPFONTS", "TEXFONTS"));
        break;

    case FileType::CWEB:
        RegisterFileType (
            FileType::CWEB,
            "cweb",
            "CWeb",
            ".w",
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_CWEB_DIR)),
            "CWEBINPUTS");
        break;

    case FileType::DB:
        RegisterFileType (
            FileType::DB,
            "ls-R",
            0,
            "",
            "",
            "TEXMFDBS");
        break;

    case FileType::DVI:
        RegisterFileType (
            FileType::DVI,
            "dvi",
            0,
            ".dvi",
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_DOC_DIR)),
            "");
        break;

    case FileType::DVIPSCONFIG:
        RegisterFileType (
            FileType::DVIPSCONFIG,
            "dvips config",
            "Dvips",
            "",
            R_(MIKTEX_PATH_DVIPS_DIR),
            "TEXCONFIG");
        break;

    case FileType::ENC:
        RegisterFileType (
            FileType::ENC,
            "enc",
            0,
            ".enc",
            P6_(CURRENT_DIRECTORY,
                R_(MIKTEX_PATH_ENC_DIR),
                R_(MIKTEX_PATH_MIKTEX_CONFIG_DIR),
                R_(MIKTEX_PATH_DVIPS_DIR),
                R_(MIKTEX_PATH_PDFTEX_DIR),
                R_(MIKTEX_PATH_DVIPDFM_DIR)),
            P2_("ENCFONTS", "TEXFONTS"));
        break;

    case FileType::EXE:
#if defined(MIKTEX_WINDOWS)
    case FileType::WindowsCommandScriptFile:
#endif
    {
        string extensions;
#if defined(MIKTEX_WINDOWS)
        if (! Utils::GetEnvironmentString("PATHEXT", extensions)
                || extensions.empty())
        {
            extensions = P3_(".com",".exe", ".bat");
        }
#elif defined(MIKTEX_EXE_FILE_SUFFIX)
        extensions = MIKTEX_EXE_FILE_SUFFIX;
#endif
        string exePath;
        PathName userBinDir = GetSpecialPath(SpecialPath::UserInstallRoot);
        userBinDir += MIKTEX_PATH_BIN_DIR;
        userBinDir.Canonicalize ();
        if (! IsAdminMode()
                && ! Utils::Contains(exePath.c_str(),
                                     userBinDir.Get(),
                                     PATH_DELIMITER_STRING))
        {
            if (! exePath.empty())
            {
                exePath += PATH_DELIMITER;
            }
            exePath += userBinDir.Get();
        }
        PathName commonBinDir = GetSpecialPath(SpecialPath::CommonInstallRoot);
        commonBinDir += MIKTEX_PATH_BIN_DIR;
        commonBinDir.Canonicalize ();
        if (! Utils::Contains(exePath.c_str(),
                              commonBinDir.Get(),
                              PATH_DELIMITER_STRING))
        {
            if (! exePath.empty())
            {
                exePath += PATH_DELIMITER;
            }
            exePath += commonBinDir.Get();
        }
        string str;
        if (Utils::GetEnvironmentString(MIKTEX_ENV_BIN_DIR, str))
        {
            PathName binDir = str;
            binDir.Canonicalize ();
            if (! Utils::Contains(exePath.c_str(),
                                  binDir.Get(),
                                  PATH_DELIMITER_STRING))
            {
                if (! exePath.empty())
                {
                    exePath += PATH_DELIMITER;
                }
                exePath += binDir.Get();
            }
        }
        PathName myLocation = GetMyLocation(true);
        if (! Utils::Contains(exePath.c_str(),
                              myLocation.Get(),
                              PATH_DELIMITER_STRING))
        {
            if (! exePath.empty())
            {
                exePath += PATH_DELIMITER;
            }
            exePath += myLocation.Get();
        }
        if (fileType.Get() == FileType::EXE)
        {
            RegisterFileType (
                FileType::EXE,
                "exe",
                0,
                extensions.c_str(),
                exePath.c_str(),
                "");
        }
#if defined(MIKTEX_WINDOWS)
        else if (fileType.Get() == FileType::WindowsCommandScriptFile)
        {
            RegisterFileType (
                FileType::WindowsCommandScriptFile,
                "Windows command script file",
                0,
                P2_(".bat", ".cmd"),
                P_(R_(MIKTEX_PATH_SCRIPT_DIR), exePath.c_str()),
                "");
        }
#endif
        break;
    }

    case FileType::FEA:
        RegisterFileType (
            FileType::FEA,
            "font feature files",
            0,
            ".fea",
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_FONT_FEATURE_DIR)),
            "FONTFEATURES");
        break;

    case FileType::FMT:
        RegisterFileType (
            FileType::FMT,
            "fmt",
            "TeX",
            ".fmt",
            P2_(CURRENT_DIRECTORY, s_(MIKTEX_PATH_FMT_DIR "/{$engine,}")),
            "");
        break;

    case FileType::GF:
        RegisterFileType (
            FileType::GF,
            "gf",
            0,
            ".gf",
            // <todo>
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_FONT_DIR)),
            // <todo/>
            P3_("GFFONTS", "GLYPHFONTS", "TEXFONTS"));
        break;

    case FileType::GLYPHFONT:
        RegisterFileType (
            FileType::GLYPHFONT,
            "bitmap font",
            0,
            "",
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_FONT_DIR)),
            P2_("GLYPHFONTS", "TEXFONTS"));
        break;

    case FileType::GRAPHICS:
        RegisterFileType (
            FileType::GRAPHICS,
            "graphic/figure",
            0,
            P3_(".eps", ".epsi",".png"),
            P4_(CURRENT_DIRECTORY,
                R_(MIKTEX_PATH_DVIPS_DIR),
                R_(MIKTEX_PATH_PDFTEX_DIR),
                R_(MIKTEX_PATH_TEX_DIR)),
            P2_("TEXPICTS", "TEXINPUTS"));
        break;

    case FileType::HBF:
        RegisterFileType (
            FileType::HBF,
            "hbf",
            0,
            ".hbf",
            P3_(CURRENT_DIRECTORY,
                R_(MIKTEX_PATH_HBF_DIR),
                R_(MIKTEX_PATH_TYPE1_DIR)),
            "");
        break;

    case FileType::IST:
        RegisterFileType (
            FileType::IST,
            "ist",
            "MakeIndex",
            ".ist",
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_MAKEINDEX_DIR)),
            P2_("TEXINDEXSTYLE", "INDEXSTYLE"));
        break;

    case FileType::LIG:
        RegisterFileType (
            FileType::LIG,
            "lig files",
            0,
            ".lig",
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_LIG_DIR)),
            "TEXFONTS");
        break;

    case FileType::LUA:
        RegisterFileType (
            FileType::LUA,
            "lua",
            0,
            P7_(".lua", ".luatex", ".luc", ".luctex", ".texlua", ".texluc", ".tlu"),
            P_(CURRENT_DIRECTORY,
               R_(MIKTEX_PATH_SCRIPT_DIR "/{$progname,$engine,}/{lua,}"),
               GetFileTypeInfo(FileType::TEX).searchPath.c_str()),
            "LUAINPUTS");
        break;

    case FileType::MAP:
        RegisterFileType (
            FileType::MAP,
            "map",
            0,
            ".map",
            P6_(CURRENT_DIRECTORY,
                R_(MIKTEX_PATH_MAP_DIR "/{$progname,pdftex,dvips,}"),
                R_(MIKTEX_PATH_MIKTEX_CONFIG_DIR),
                R_(MIKTEX_PATH_DVIPS_DIR),
                R_(MIKTEX_PATH_PDFTEX_DIR),
                R_(MIKTEX_PATH_DVIPDFM_DIR)),
            P2_("TEXFONTMAPS", "TEXFONTS"));
        break;

    case FileType::MEM:
        RegisterFileType (
            FileType::MEM,
            "mem",
            "MetaPost",
            ".mem",
            CURRENT_DIRECTORY,
            "");
        break;

    case FileType::MF:
        RegisterFileType (
            FileType::MF,
            "mf",
            "METAFONT",
            ".mf",
            P3_(CURRENT_DIRECTORY,
                R_(MIKTEX_PATH_METAFONT_DIR),
                R_(MIKTEX_PATH_FONT_SOURCE_DIR)),
            "MFINPUTS");
        break;

    case FileType::MFPOOL:
        RegisterFileType (
            FileType::MFPOOL,
            "mfpool",
            0,
            ".pool",
            CURRENT_DIRECTORY,
            P2_("MFPOOL", "TEXMFINI"));
        break;

    case FileType::MFT:
        RegisterFileType (
            FileType::MFT,
            "mft",
            0,
            ".mft",
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_MFT_DIR)),
            "MFTINPUTS");
        break;

    case FileType::MISCFONT:
        RegisterFileType (
            FileType::MISCFONT,
            "misc fonts",
            0,
            "",
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_MISCFONTS_DIR)),
            P2_("MISCFONTS","TEXFONTS"));
        break;

    case FileType::MLBIB:
        RegisterFileType (
            FileType::MLBIB,
            "mlbib",
            0,
            P2_(".mlbib", ".bib"),
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_BIBTEX_DIR "/bib/{mlbib,}")),
            P3_("MLBIBINPUTS", "BIBINPUTS", "TEXBIB"));
        break;

    case FileType::MLBST:
        RegisterFileType (
            FileType::MLBST,
            "mlbst",
            0,
            ".bst",
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_BIBTEX_DIR "/{mlbst,bst}")),
            P2_( "MLBSTINPUTS", "BSTINPUTS"));
        break;

    case FileType::MP:
        RegisterFileType (
            FileType::MP,
            "mp",
            "MetaPost",
            ".mp",
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_METAPOST_DIR)),
            "MPINPUTS");
        break;

    case FileType::MPPOOL:
        RegisterFileType (
            FileType::MPPOOL,
            "mppool",
            0,
            ".pool",
            CURRENT_DIRECTORY,
            P2_("MPPOOL", "TEXMFINI"));
        break;

    case FileType::MPSUPPORT:
        RegisterFileType (
            FileType::MPSUPPORT,
            "MetaPost support",
            0,
            "",
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_MPSUPPORT_DIR)),
            "MPSUPPORT");
        break;

    case FileType::OCP:
        RegisterFileType (
            FileType::OCP,
            "ocp",
            "Omega",
            ".ocp",
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_OCP_DIR)),
            "OCPINPUTS");
        break;

    case FileType::OFM:
        RegisterFileType (
            FileType::OFM,
            "ofm",
            "Omega",
            P2_(".ofm", ".tfm"),
            P3_(CURRENT_DIRECTORY,
                R_(MIKTEX_PATH_OFM_DIR),
                R_(MIKTEX_PATH_TFM_DIR)),
            P2_("OFMFONTS", "TEXFONTS"));
        break;

    case FileType::OPL:
        RegisterFileType (
            FileType::OPL,
            "opl",
            0,
            ".opl",
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_OPL_DIR)),
            P2_("OPLFONTS", "TEXFONTS"));
        break;

    case FileType::OTP:
        RegisterFileType (
            FileType::OTP,
            "otp",
            "otp2ocp",
            ".otp",
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_OTP_DIR)),
            "OTPINPUTS");
        break;

    case FileType::OTF:
        RegisterFileType (
            FileType::OTF,
            "opentype fonts",
            0,
            ".otf",
            P_(CURRENT_DIRECTORY,
               R_(MIKTEX_PATH_OPENTYPE_DIR),
               GetLocalFontDirectories().c_str()),
            P2_("OPENTYPEFONTS", "TEXFONTS"));
        break;

    case FileType::OVF:
        RegisterFileType (
            FileType::OVF,
            "ovf",
            0,
            ".ovf",
            P3_(CURRENT_DIRECTORY,
                R_(MIKTEX_PATH_OVF_DIR),
                R_(MIKTEX_PATH_VF_DIR)),
            P2_("OVFFONTS", "TEXFONTS"));
        break;

    case FileType::OVP:
        RegisterFileType (
            FileType::OVP,
            "ovp",
            0,
            ".ovp",
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_OVP_DIR)),
            P2_("OVPFONTS", "TEXFONTS"));
        break;

    case FileType::PDFTEXCONFIG:
        RegisterFileType (
            FileType::PDFTEXCONFIG,
            "pdftex config",
            0,
            "",
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_PDFTEX_DIR "/{$progname,}")),
            "PDFTEXCONFIG");
        break;

    case FileType::PERLSCRIPT:
        RegisterFileType (
            FileType::PERLSCRIPT,
            "perlscript",
            0,
            ".pl",
            P8_(R_(MIKTEX_PATH_SCRIPT_DIR),
                R_(MIKTEX_PATH_CONTEXT_DIR),
                R_(MIKTEX_PATH_MIKTEX_DIR),
                R_(MIKTEX_PATH_NTS_DIR),
                R_(MIKTEX_PATH_PDFTEX_DIR),
                R_(MIKTEX_PATH_PSUTILS_DIR),
                R_(MIKTEX_PATH_SOURCE_DIR),
                R_(MIKTEX_PATH_TEX_DIR)),
            "");
        break;

    case FileType::PK:
        RegisterFileType (
            FileType::PK,
            "pk",
            0,
            ".pk",
            // <todo>
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_FONT_DIR)),
            // </todo>
            "");
        break;

    case FileType::PROGRAMBINFILE:
        RegisterFileType (
            FileType::PROGRAMBINFILE,
            "other binary files",
            0,
            "",
            P2_(CURRENT_DIRECTORY, R_("/$progname")),
            "");
        break;

    case FileType::PROGRAMTEXTFILE:
        RegisterFileType (
            FileType::PROGRAMTEXTFILE,
            "other text files",
            0,
            "",
            P2_(CURRENT_DIRECTORY, R_("/$progname")),
            "");
        break;

    case FileType::PSHEADER:
        RegisterFileType (
            FileType::PSHEADER,
            "PostScript header",
            0,
            P2_(".pro", ".enc"),
            P10_(CURRENT_DIRECTORY,
                 R_(MIKTEX_PATH_MIKTEX_CONFIG_DIR),
                 R_(MIKTEX_PATH_DVIPS_DIR),
                 R_(MIKTEX_PATH_PDFTEX_DIR),
                 R_(MIKTEX_PATH_DVIPDFM_DIR),
                 R_(MIKTEX_PATH_ENC_DIR),
                 R_(MIKTEX_PATH_TYPE1_DIR),
                 R_(MIKTEX_PATH_TYPE42_DIR),
                 R_(MIKTEX_PATH_TYPE3_DIR),
                 "$psfontdirs"),
            P2_("TEXPSHEADERS", "PSHEADERS"));
        break;

    case FileType::SCRIPT:
        RegisterFileType (
            FileType::SCRIPT,
            "texmfscripts",
            0,
            "",
            R_(MIKTEX_PATH_SCRIPT_DIR "/{$progname,$engine,}"),
            "TEXMFSCRIPTS");
        break;

    case FileType::SFD:
        RegisterFileType (
            FileType::SFD,
            "subfont definition files",
            0,
            ".sfd",
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_SFD_DIR)),
            P2_("SFDFONTS", "TEXFONTS"));
        break;

    case FileType::TCX:
        RegisterFileType (
            FileType::TCX,
            "tcx",
            0,
            ".tcx",
            P3_(CURRENT_DIRECTORY,
                S_(MIKTEX_PATH_MIKTEX_CONFIG_DIR),
                S_(MIKTEX_PATH_WEB2C_DIR)),
            "");
        break;

    case FileType::TEX:
        RegisterFileType (
            FileType::TEX,
            "tex",
            "TeX",
            ".tex",
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_TEX_DIR "/{$progname,generic,}")),
            "TEXINPUTS");
        break;

    case FileType::TEXPOOL:
        RegisterFileType (
            FileType::TEXPOOL,
            "texpool",
            0,
            ".pool",
            CURRENT_DIRECTORY,
            P2_("TEXPOOL", "TEXMFINI"));
        break;

    case FileType::TEXSOURCE:
        RegisterFileType (
            FileType::TEXSOURCE,
            "TeX system sources",
            0,
            "",
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_SOURCE_DIR)),
            "TEXSOURCES");
        break;

    case FileType::TEXSYSDOC:
        RegisterFileType (
            FileType::TEXSYSDOC,
            "TeX system documentation",
            0,
#if defined(MIKTEX_WINDOWS)
            P6_(".chm", ".dvi", ".html", ".txt", ".pdf", ".ps"),
#else
            P5_(".dvi", ".html", ".txt", ".pdf", ".ps"),
#endif
            P2_(R_(MIKTEX_PATH_MIKTEX_DOC_DIR),
                R_(MIKTEX_PATH_DOC_DIR)),
            "TEXDOCS");
        break;

    case FileType::TFM:
        RegisterFileType (
            FileType::TFM,
            "tfm",
            0,
            ".tfm",
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_TFM_DIR)),
            P2_("TFMFONTS", "TEXFONTS"));
        break;

    case FileType::TROFF:
        RegisterFileType (
            FileType::TROFF,
            "troff fonts",
            0,
            "",
            "",
            "TRFONTS");
        break;

    case FileType::TTF:
        RegisterFileType (
            FileType::TTF,
            "truetype fonts",
            0,
            P2_(".ttf", ".ttc"),
            P_(CURRENT_DIRECTORY,
               R_(MIKTEX_PATH_TRUETYPE_DIR),
               GetLocalFontDirectories().c_str()),
            P2_("TTFONTS", "TEXFONTS"));
        break;

    case FileType::TYPE1:
        RegisterFileType (
            FileType::TYPE1,
            "type1 fonts",
            0,
            P2_(".pfb", ".pfa"),
            P_(CURRENT_DIRECTORY,
               R_(MIKTEX_PATH_TYPE1_DIR),
               GetLocalFontDirectories().c_str()),
            P5_("T1FONTS", "T1INPUTS", "TEXFONTS", "TEXPSHEADERS", "PSHEADERS"));
        break;

    case FileType::TYPE42:
        RegisterFileType (
            FileType::TYPE42,
            "type42 fonts",
            0,
#if defined(MIKTEX_WINDOWS)
            ".t42",
#else
            P2_(".t42", ".T42"),
#endif
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_TYPE42_DIR)),
            P2_("T42FONTS", "TEXFONTS"));
        break;

    case FileType::VF:
        RegisterFileType (
            FileType::VF,
            "vf",
            0,
            ".vf",
            P2_(CURRENT_DIRECTORY, R_(MIKTEX_PATH_VF_DIR)),
            P2_("VFFONTS", "TEXFONTS"));
        break;

    case FileType::WEB:
        RegisterFileType (
            FileType::WEB,
            "web",
            0,
            ".web",
            R_(MIKTEX_PATH_WEB_DIR),
            "WEBINPUTS");
        break;

    case FileType::WEB2C:
        RegisterFileType (
            FileType::WEB2C,
            "web2c files",
            0,
            "",
            R_(MIKTEX_PATH_WEB2C_DIR),
            "");
        break;

    default:
        UNEXPECTED_CONDITION ("SessionImpl::RegisterFileType");
    }
}
Exemplo n.º 5
0
BOOL CMortScriptApp::InitInstance()
{
    SetRegistryKey( L"Mort" );

	CParseCmdLine myCmdLine;
	myCmdLine.ParseCmdLine( m_lpCmdLine );

	TCHAR exe[MAX_PATH];
   ::GetModuleFileName(NULL,exe,MAX_PATH);

	ExecuteFileName = exe;

    CStr file = myCmdLine.Filename; // m_lpCmdLine;
    // file.TrimLeft( '\"' ); file.TrimRight( '\"' );

    if ( myCmdLine.RegOnly || file.IsEmpty() )
    {
        RegisterFileClass();
        RegisterFileType( L".jscr", L"JScripts" );
        RegisterFileType( L".mscr", L"JScripts" );
		if ( !myCmdLine.RegOnly )
		{
			MessageBox( NULL
					  , L".jscr and .mscr extensions registered.\nPlease run any .jscr/.mscr file or read the manual.\n\n"
						L"(c) Mirko Schenk 2005-2007"
					  , L"JScripts V" + CStr( VERSION_INFO )
					  , MB_OK|MB_SETFOREGROUND );
		}
    }
	else
	{
		if (   file.GetLength() >= 4
			/* file.GetLength() >= 8 && file.Right(8).CompareNoCase( L".mortrun" ) == 0
			|| file.GetLength() >= 5 && file.Right(5).CompareNoCase( L".mscr" ) == 0 */
		   )
		{
            CStr mutexName = file;
            mutexName.MakeLower();
#ifdef DESKTOP
			// Windows XP doesn't like some path characters in the mutex' name
			mutexName.Replace( ':', '_' );
			mutexName.Replace( '\\', '/' );
#endif
          MutexName = (LPCTSTR)mutexName;

	        HANDLE mutex = ::CreateMutex(NULL, FALSE, MutexName);

            if ( mutex!=NULL )
	        {
				int exists = ::GetLastError();
		        if ( exists == ERROR_ALREADY_EXISTS) 
		        {
					DWORD procId = GetRunningScriptProcId( file );

					if ( procId != NULL )
					{
						/*
						 CString msg;
						 msg.Format( L"Process ID: %08x", procId );
						 MessageBox( NULL, msg, L"Debug", MB_SETFOREGROUND );
						*/

						FindAppT findApp;
						findApp.procId = procId;
						findApp.hWnd   = NULL;
						::EnumWindows( FindApplicationWindowProc, (LPARAM)&findApp );
						if ( findApp.hWnd != NULL )
						{
							// msg.Format( L"Set foreground window: %08x", findApp.hWnd );
							// MessageBox( NULL, msg, L"Debug", MB_SETFOREGROUND );
							::SetForegroundWindow( findApp.hWnd );
						}
					}
					else
						exists = 0;

					//MessageBox( NULL, L"Process opened", L"Debug", MB_SETFOREGROUND );
					/*
						TCHAR procName[256];
				    	::GetModuleFileName((HMODULE)procId,procName,256);
						//MessageBox( NULL, procName, L"Debug", MB_SETFOREGROUND );
						if ( CString(procName).Right(14).CompareNoCase( L"MortScript.exe" ) == 0 )
						{
							int aw = MessageBox( NULL
											   , L"Script seems to be running. Cancel old script?"
											   , L"Script already running"
											   , MB_YESNO|MB_SETFOREGROUND
											   );
							if ( aw == IDYES )
							{
								RegWriteDW( HKEY_CURRENT_USER, L"Software\\JScripts\\Abort", MutexName, 1 );
								DWORD exitCode = 0;
								SetCursor(LoadStandardCursor(IDC_WAIT));
								for ( int i=0; i<=10; i++ )
								{
									Sleep(1000);
									if ( GetExitCodeProcess( hProc, &exitCode ) == FALSE )
									{
										//MessageBox( NULL, L"GetExitCode failed", L"Debug", MB_SETFOREGROUND );
										exitCode = 0;
										break;
									}
									else
									{
										if ( exitCode != STILL_ACTIVE )
										{
											//MessageBox( NULL, L"No longer active", L"Debug", MB_SETFOREGROUND );
											break;
										}
									}
								}
								SetCursor(LoadStandardCursor(IDC_ARROW)); 
								if ( exitCode == STILL_ACTIVE )
								{
									int aw = MessageBox( NULL
													   , L"Script seems to be hanging or busy. Terminate old script?"
													   , L"Script still running"
													   , MB_YESNO|MB_SETFOREGROUND
													   );
									if ( aw == IDYES )
									{
										TerminateProcess( hProc, 0 );
									}
								}
							}
						}
						else
						{
							exists = 0;
						}

						CloseHandle( hProc );
					}
					else
					{
						exists = 0;
					}
					*/
                }

                if ( exists != ERROR_ALREADY_EXISTS )
                {
	                HKEY    key;
	                if ( RegOpenKeyEx( HKEY_CURRENT_USER, L"Software\\JScripts\\Processes", 0, 0, &key ) == ERROR_SUCCESS )
	                {
                        RegDeleteValue( key, MutexName );
		                RegCloseKey( key );
	                }

					DWORD currProcId = GetCurrentProcessId();
					//CString dbg;
					//dbg.Format(L"ProcId: %d", GetCurrentProcessId());
					//MessageBox( NULL, dbg, L"Debug", MB_SETFOREGROUND );

					// Remove old script entries with same process id
	                if ( RegOpenKeyEx( HKEY_CURRENT_USER, L"Software\\JScripts\\Processes", 0, 0, &key ) == ERROR_SUCCESS )
	                {
						int   idx;
						TCHAR valName[MAX_PATH];
						DWORD valSize = MAX_PATH, type;
						DWORD value, valueSize = sizeof(DWORD);

						CStrArray oldProcesses;
						for ( idx = 0; RegEnumValue( key, idx, valName, &valSize, NULL, &type, (BYTE*)&value, &valueSize ) == ERROR_SUCCESS; idx++ )
						{
							if ( type == REG_DWORD && value == currProcId )
							{
								oldProcesses.Add( valName );
							}
							valSize = MAX_PATH;
							valueSize = sizeof(DWORD);
						}

						for ( idx = 0; idx < oldProcesses.GetSize(); idx++ )
						{
							RegDeleteValue( key, oldProcesses.GetAt(idx) );
						}

		                RegCloseKey( key );
					}

					RegWriteDW( HKEY_CURRENT_USER, L"Software\\JScripts\\Processes", MutexName, currProcId );

					if ( myCmdLine.WaitForFile > 0 && (long)FileOrDirExists( file, 0 ) == 0 )
					{
						CDlgWait wait(NULL);
						wait.AllowOK = TRUE;
						wait.Countdown = myCmdLine.WaitForFile;
						wait.Expression = L"FileExists(\"" + file + L"\")";
						wait.Title = L"JScripts";
						wait.m_Label = L"Script " + file + " not found, waiting for existance (storage card not initialized?)";
						wait.DoModal();
					}

					if ( myCmdLine.WaitForFile <= 0 || (long)FileOrDirExists( file, 0 ) == 1 )
					{
						g_hInst = theApp.m_hInstance;

						SYSTEMTIME now;
						GetLocalTime( &now );
						long seed = SystemTimeToUnixTime( now );
						srand( seed );

						AppPath = m_pszHelpFilePath;
						AppPath = AppPath.Left( AppPath.ReverseFind('\\') );

						ScriptAborted = CreateEvent( 0, TRUE, FALSE, CStr(MutexName)+L"ScriptAborted" );
					    StatusDialog = new CDlgStatus( file );
						//status.DoModal();

						CInterpreter interpreter;
						//Debug(file);

						//jwz:modi
						interpreter.RunFile( file );
						interpreter.Parser();
						//jwz:modi end

						if ( StatusWindow != NULL )
						{
							StatusDialog->ScriptFinished = TRUE;
							SendMessage( StatusWindow, WM_EXIT_STATUS, 0, 0 );
							WaitForSingleObject( StatusDialogFinished, INFINITE );
							CloseHandle( StatusDialogFinished );
						}

						delete StatusDialog;

						UnloadToolhelp();

						CloseHandle( ScriptAborted );
						ReleaseMutex( mutex );

						Variables.RemoveAll();
						for ( int i = 0; i<LocalVariablesStack.GetSize(); i++ )
							delete (CMapStrToValue*)LocalVariablesStack.GetAt(i);

						POSITION pos = FileHandles.GetStartPosition();
						CStr key; void *value;
						while ( pos != 0 )
						{
							FileHandles.GetNextAssoc( pos, key, value );
							if ( value != NULL )
							{
								delete (CFileInfo*)value;
							}
						}
						FileHandles.RemoveAll();

						if ( ChoiceFont != NULL ) DeleteObject( ChoiceFont );
						if ( StatusListFont != NULL ) DeleteObject( StatusListFont );
					}

					if ( RegOpenKeyEx( HKEY_CURRENT_USER, L"Software\\JScripts\\Processes", 0, KEY_WRITE, &key ) == ERROR_SUCCESS )
	                {
                        RegDeleteValue( key, MutexName );
		                RegCloseKey( key );
	                }
                }
                CloseHandle( mutex );
            }
			else
			{
				int error = ::GetLastError();
				MessageBox( NULL
						  , L"Error creating mutex"
						  , L"JScripts"
						  , MB_OK|MB_SETFOREGROUND );
			}
		}
		else
		{
			MessageBox( NULL
					  , L"Invalid file type for MortScript"
					  , L"JScripts"
					  , MB_OK|MB_SETFOREGROUND );
		}
	}

	// Since the dialog has been closed, return FALSE so that we exit the
	//  application, rather than start the application's message pump.
	return FALSE;
}