int MirandaLoaded(WPARAM wParam, LPARAM lParam) { InitPcre(); ModuleLoad(0, 0); COptPage PopupOptPage(g_PopupOptPage); PopupOptPage.DBToMem(); RecompileRegexps(*(TCString*)PopupOptPage.GetValue(IDC_POPUPOPTDLG_IGNORESTRINGS)); HookEvent(ME_OPT_INITIALISE, OptionsDlgInit); HookEvent(ME_SYSTEM_MODULELOAD, ModuleLoad); HookEvent(ME_SYSTEM_MODULEUNLOAD, ModuleLoad); HookEvent(ME_DB_CONTACT_SETTINGCHANGED, ContactSettingChanged); SkinAddNewSoundEx(CLIENTCHANGED_SOUND, NULL, LPGEN("ClientChangeNotify: Client changed")); if (bPopupExists) { CreateServiceFunction(MS_CCN_TOGGLEPOPUPS, srvTogglePopups); HookEvent(ME_CLIST_PREBUILDMAINMENU, PrebuildMainMenu); CLISTMENUITEM mi = { sizeof(mi) }; mi.flags = CMIF_TCHAR; if (g_PopupOptPage.GetDBValueCopy(IDC_POPUPOPTDLG_POPUPNOTIFY)) mi.ptszName = LPGENT("Disable c&lient change notification"); else mi.ptszName = LPGENT("Enable c&lient change notification"); mi.pszService = MS_CCN_TOGGLEPOPUPS; mi.ptszPopupName = LPGENT("Popups"); g_hTogglePopupsMenuItem = Menu_AddMainMenuItem(&mi); } // seems that Fingerprint is not installed if (!bFingerprintExists && !db_get_b(NULL, MOD_NAME, DB_NO_FINGERPRINT_ERROR, 0)) CreateDialog(g_hInstance, MAKEINTRESOURCE(IDD_CCN_ERROR), NULL, CCNErrorDlgProc); return 0; }
static int OnModulesLoaded(WPARAM, LPARAM) { ReloadGlobals(); LoadGlobalIcons(); LoadMsgLogIcons(); ModuleLoad(0, 0); CMenuItem mi; SET_UID(mi, 0x58d8dc1, 0x1c25, 0x49c0, 0xb8, 0x7c, 0xa3, 0x22, 0x2b, 0x3d, 0xf1, 0xd8); mi.position = -2000090000; mi.flags = CMIF_DEFAULT; mi.hIcolibItem = Skin_GetIconHandle(SKINICON_EVENT_MESSAGE); mi.name.a = LPGEN("&Message"); mi.pszService = MS_MSG_SENDMESSAGE; hMsgMenuItem = Menu_AddContactMenuItem(&mi); IcoLib_ReleaseIcon((HICON)mi.hIcolibItem); HookEvent(ME_SMILEYADD_OPTIONSCHANGED, SmileySettingsChanged); HookEvent(ME_IEVIEW_OPTIONSCHANGED, SmileySettingsChanged); HookEvent(ME_AV_AVATARCHANGED, AvatarChanged); HookEvent(ME_FONT_RELOAD, FontServiceFontsChanged); HookEvent(ME_MSG_ICONPRESSED, StatusIconPressed); HookEvent(ME_MC_DEFAULTTCHANGED, MetaContactChanged); RestoreUnreadMessageAlerts(); OptionsInit(); RegisterStatusIcons(); return 0; }
/* Registers a disk with the VFS * and parses all possible partiions */ void VfsRegisterDisk(DevId_t DiskId) { /* Query for disk stats */ MCoreModule_t *Module = NULL; char TmpBuffer[20]; MCoreDeviceRequest_t Request; Request.Type = RequestQuery; Request.DeviceId = DiskId; Request.Buffer = (uint8_t*)TmpBuffer; Request.Length = 20; /* Memset */ memset(TmpBuffer, 0, sizeof(TmpBuffer)); /* Perform */ DmCreateRequest(&Request); DmWaitRequest(&Request); /* Well, well */ uint64_t SectorCount = *(uint64_t*)&TmpBuffer[0]; uint32_t SectorSize = *(uint32_t*)&TmpBuffer[16]; /* Sanity */ if (!VfsParsePartitionTable(DiskId, 0, SectorCount, SectorSize)) { /* Only one global partition * parse FS type from it */ /* Allocate a filesystem structure */ MCoreFileSystem_t *Fs = (MCoreFileSystem_t*)kmalloc(sizeof(MCoreFileSystem_t)); Fs->State = VfsStateInit; Fs->DiskId = DiskId; Fs->FsData = NULL; Fs->Flags = 0; Fs->Id = GlbFileSystemId; Fs->SectorStart = 0; Fs->SectorCount = SectorCount; Fs->SectorSize = SectorSize; /* Now we have to detect the type of filesystem used * normally two types is used for full-partition * MFS and FAT */ /* MFS 1 */ Module = ModuleFind(MODULE_FILESYSTEM, FILESYSTEM_MFS); /* Load */ if (Module != NULL) ModuleLoad(Module, Fs); if (Fs->State != VfsStateActive) ; //FatInit() /* Lastly */ if (Fs->State == VfsStateActive) VfsInstallFileSystem(Fs); else kfree(Fs); } }
static int MirandaLoaded(WPARAM, LPARAM) { ModuleLoad(0, 0); COptPage PopupOptPage(g_PopupOptPage); PopupOptPage.DBToMem(); RecompileRegexps(*(TCString*)PopupOptPage.GetValue(IDC_POPUPOPTDLG_IGNORESTRINGS)); HookEvent(ME_OPT_INITIALISE, OptionsDlgInit); HookEvent(ME_SYSTEM_MODULELOAD, ModuleLoad); HookEvent(ME_SYSTEM_MODULEUNLOAD, ModuleLoad); HookEvent(ME_DB_CONTACT_SETTINGCHANGED, ContactSettingChanged); g_plugin.addSound(CLIENTCHANGED_SOUND, nullptr, LPGENW("ClientChangeNotify: Client changed")); if (bPopupExists) { CreateServiceFunction(MS_CCN_TOGGLEPOPUPS, srvTogglePopups); HookEvent(ME_CLIST_PREBUILDMAINMENU, PrebuildMainMenu); CMenuItem mi(g_plugin); SET_UID(mi, 0xfabb9181, 0xdb92, 0x43f4, 0x86, 0x40, 0xca, 0xb6, 0x4c, 0x93, 0x34, 0x27); mi.root = g_plugin.addRootMenu(MO_MAIN, LPGENW("Popups"), 0); mi.flags = CMIF_UNICODE; if (g_PopupOptPage.GetDBValueCopy(IDC_POPUPOPTDLG_POPUPNOTIFY)) mi.name.w = LPGENW("Disable c&lient change notification"); else mi.name.w = LPGENW("Enable c&lient change notification"); mi.pszService = MS_CCN_TOGGLEPOPUPS; g_hTogglePopupsMenuItem = Menu_AddMainMenuItem(&mi); } // seems that Fingerprint is not installed if (!bFingerprintExists && !db_get_b(NULL, MODULENAME, DB_NO_FINGERPRINT_ERROR, 0)) CreateDialog(g_plugin.getInst(), MAKEINTRESOURCE(IDD_CCN_ERROR), nullptr, CCNErrorDlgProc); return 0; }
/* Partition table parser */ int VfsParsePartitionTable(DevId_t DiskId, uint64_t SectorBase, uint64_t SectorCount, uint32_t SectorSize) { /* Allocate structures */ void *TmpBuffer = (void*)kmalloc(SectorSize); MCoreModule_t *Module = NULL; MCoreMasterBootRecord_t *Mbr = NULL; MCoreDeviceRequest_t Request; int PartitionCount = 0; int i; /* Read sector */ Request.Type = RequestRead; Request.DeviceId = DiskId; Request.SectorLBA = SectorBase; Request.Buffer = (uint8_t*)TmpBuffer; Request.Length = SectorSize; /* Create & Wait */ DmCreateRequest(&Request); DmWaitRequest(&Request); /* Sanity */ if (Request.Status != RequestOk) { /* Error */ LogFatal("VFSM", "REGISTERDISK: Error reading from disk - 0x%x\n", Request.Status); kfree(TmpBuffer); return 0; } _CRT_UNUSED(SectorCount); /* Cast */ Mbr = (MCoreMasterBootRecord_t*)TmpBuffer; /* Valid partition table? */ for (i = 0; i < 4; i++) { /* Is it an active partition? */ if (Mbr->Partitions[i].Status == PARTITION_ACTIVE) { /* Inc */ PartitionCount++; /* Allocate a filesystem structure */ MCoreFileSystem_t *Fs = (MCoreFileSystem_t*)kmalloc(sizeof(MCoreFileSystem_t)); Fs->State = VfsStateInit; Fs->DiskId = DiskId; Fs->FsData = NULL; Fs->SectorStart = SectorBase + Mbr->Partitions[i].LbaSector; Fs->SectorCount = Mbr->Partitions[i].LbaSize; Fs->Id = GlbFileSystemId; Fs->SectorSize = SectorSize; /* Check extended partitions first */ if (Mbr->Partitions[i].Type == 0x05) { /* Extended - CHS */ } else if (Mbr->Partitions[i].Type == 0x0F || Mbr->Partitions[i].Type == 0xCF) { /* Extended - LBA */ PartitionCount += VfsParsePartitionTable(DiskId, SectorBase + Mbr->Partitions[i].LbaSector, Mbr->Partitions[i].LbaSize, SectorSize); } else if (Mbr->Partitions[i].Type == 0xEE) { /* GPT Formatted */ } /* Check MFS */ else if (Mbr->Partitions[i].Type == 0x61) { /* MFS 1 */ Module = ModuleFind(MODULE_FILESYSTEM, FILESYSTEM_MFS); /* Load */ if (Module != NULL) ModuleLoad(Module, Fs); } /* Check FAT */ else if (Mbr->Partitions[i].Type == 0x1 || Mbr->Partitions[i].Type == 0x6 || Mbr->Partitions[i].Type == 0x8 /* Might be FAT16 */ || Mbr->Partitions[i].Type == 0x11 /* Might be FAT16 */ || Mbr->Partitions[i].Type == 0x14 /* Might be FAT16 */ || Mbr->Partitions[i].Type == 0x24 /* Might be FAT16 */ || Mbr->Partitions[i].Type == 0x56 /* Might be FAT16 */ || Mbr->Partitions[i].Type == 0x8D || Mbr->Partitions[i].Type == 0xAA || Mbr->Partitions[i].Type == 0xC1 || Mbr->Partitions[i].Type == 0xD1 || Mbr->Partitions[i].Type == 0xE1 || Mbr->Partitions[i].Type == 0xE5 || Mbr->Partitions[i].Type == 0xEF || Mbr->Partitions[i].Type == 0xF2) { /* Fat-12 */ } else if (Mbr->Partitions[i].Type == 0x4 || Mbr->Partitions[i].Type == 0x6 || Mbr->Partitions[i].Type == 0xE || Mbr->Partitions[i].Type == 0x16 || Mbr->Partitions[i].Type == 0x1E || Mbr->Partitions[i].Type == 0x90 || Mbr->Partitions[i].Type == 0x92 || Mbr->Partitions[i].Type == 0x9A || Mbr->Partitions[i].Type == 0xC4 || Mbr->Partitions[i].Type == 0xC6 || Mbr->Partitions[i].Type == 0xCE || Mbr->Partitions[i].Type == 0xD4 || Mbr->Partitions[i].Type == 0xD6) { /* Fat16 */ } else if (Mbr->Partitions[i].Type == 0x0B /* CHS */ || Mbr->Partitions[i].Type == 0x0C /* LBA */ || Mbr->Partitions[i].Type == 0x27 || Mbr->Partitions[i].Type == 0xCB || Mbr->Partitions[i].Type == 0xCC) { /* Fat32 */ } /* Lastly */ if (Fs->State == VfsStateActive) VfsInstallFileSystem(Fs); else kfree(Fs); } } /* Done */ kfree(TmpBuffer); return PartitionCount; }