int32_t ScanGroups(void) { CACHE1D_FIND_REC *srch; struct grpcache *fg, *fgg; initprintf("Searching for game data...\n"); LoadGameList(); LoadGroupsCache(); srch = klistpath("/", "*.grp", CACHE1D_FIND_FILE); ProcessGroups(srch); klistfree(srch); srch = klistpath("/", "*.ssi", CACHE1D_FIND_FILE); ProcessGroups(srch); klistfree(srch); FreeGroupsCache(); for (grpfile_t *grp = foundgrps; grp; grp=grp->next) { if (grp->type->dependency) { if (FindGroup(grp->type->dependency) == NULL) // couldn't find dependency { //initprintf("removing %s\n", grp->name); RemoveGroup(grp); grp = foundgrps; // start from the beginning so we can remove anything that depended on this grp continue; } } } if (usedgrpcache) { int32_t i = 0; FILE *fp; fp = fopen(GRPCACHEFILE, "wt"); if (fp) { for (fg = usedgrpcache; fg; fg=fgg) { fgg = fg->next; fprintf(fp, "\"%s\" %d %d %d\n", fg->name, fg->size, fg->mtime, fg->crcval); Bfree(fg); i++; } fclose(fp); } // initprintf("Found %d recognized GRP %s.\n",i,i>1?"files":"file"); return 0; } initprintf("Found no recognized game data!\n"); return 0; }
void HighlightFiles::HiEdit(int MenuPos) { Changed = true; VMenu HiMenu(MSG(MHighlightTitle),nullptr,0,ScrY-4); HiMenu.SetHelp(HLS.HighlightList); HiMenu.SetFlags(VMENU_WRAPMODE|VMENU_SHOWAMPERSAND); HiMenu.SetPosition(-1,-1,0,0); HiMenu.SetBottomTitle(MSG(MHighlightBottom)); FillMenu(&HiMenu,MenuPos); int NeedUpdate; Panel *LeftPanel=CtrlObject->Cp()->LeftPanel; Panel *RightPanel=CtrlObject->Cp()->RightPanel; HiMenu.Show(); while (1) { while (!HiMenu.Done()) { int Key=HiMenu.ReadInput(); int SelectPos=HiMenu.GetSelectPos(); NeedUpdate=FALSE; switch (Key) { /* $ 07.07.2000 IS Если нажали ctrl+r, то восстановить значения по умолчанию. */ case KEY_CTRLR: case KEY_RCTRLR: { if (Message(MSG_WARNING,2,MSG(MHighlightTitle), MSG(MHighlightWarning),MSG(MHighlightAskRestore), MSG(MYes),MSG(MCancel))) break; HierarchicalConfig *cfg = CreateHighlightConfig(); SetHighlighting(true, cfg); //delete old settings HiMenu.Hide(); ClearData(); InitHighlightFiles(cfg); delete cfg; NeedUpdate=TRUE; break; } case KEY_NUMDEL: case KEY_DEL: { int *Count=nullptr; int RealSelectPos=MenuPosToRealPos(SelectPos,&Count); if (Count && RealSelectPos<(int)HiData.getCount()) { const wchar_t *Mask; HiData.getItem(RealSelectPos)->GetMask(&Mask); if (Message(MSG_WARNING,2,MSG(MHighlightTitle), MSG(MHighlightAskDel),Mask, MSG(MDelete),MSG(MCancel))) break; HiData.deleteItem(RealSelectPos); (*Count)--; NeedUpdate=TRUE; } break; } case KEY_NUMENTER: case KEY_ENTER: case KEY_F4: { int *Count=nullptr; int RealSelectPos=MenuPosToRealPos(SelectPos,&Count); if (Count && RealSelectPos<(int)HiData.getCount()) if (FileFilterConfig(HiData.getItem(RealSelectPos),true)) NeedUpdate=TRUE; break; } case KEY_INS: case KEY_NUMPAD0: { int *Count=nullptr; int RealSelectPos=MenuPosToRealPos(SelectPos,&Count,true); if (Count) { FileFilterParams *NewHData = HiData.insertItem(RealSelectPos); if (!NewHData) break; if (FileFilterConfig(NewHData,true)) { (*Count)++; NeedUpdate=TRUE; } else HiData.deleteItem(RealSelectPos); } break; } case KEY_F5: { int *Count=nullptr; int RealSelectPos=MenuPosToRealPos(SelectPos,&Count); if (Count && RealSelectPos<(int)HiData.getCount()) { FileFilterParams *HData = HiData.insertItem(RealSelectPos); if (HData) { *HData = *HiData.getItem(RealSelectPos+1); HData->SetTitle(L""); if (FileFilterConfig(HData,true)) { NeedUpdate=TRUE; (*Count)++; } else HiData.deleteItem(RealSelectPos); } } break; } case KEY_CTRLUP: case KEY_CTRLNUMPAD8: case KEY_RCTRLUP: case KEY_RCTRLNUMPAD8: { int *Count=nullptr; int RealSelectPos=MenuPosToRealPos(SelectPos,&Count); if (Count && SelectPos > 0) { if (UpperCount && RealSelectPos==FirstCount && RealSelectPos<FirstCount+UpperCount) { FirstCount++; UpperCount--; SelectPos--; } else if (LowerCount && RealSelectPos==FirstCount+UpperCount && RealSelectPos<FirstCount+UpperCount+LowerCount) { UpperCount++; LowerCount--; SelectPos--; } else if (LastCount && RealSelectPos==FirstCount+UpperCount+LowerCount) { LowerCount++; LastCount--; SelectPos--; } else HiData.swapItems(RealSelectPos,RealSelectPos-1); HiMenu.SetCheck(--SelectPos); NeedUpdate=TRUE; break; } HiMenu.ProcessInput(); break; } case KEY_CTRLDOWN: case KEY_CTRLNUMPAD2: case KEY_RCTRLDOWN: case KEY_RCTRLNUMPAD2: { int *Count=nullptr; int RealSelectPos=MenuPosToRealPos(SelectPos,&Count); if (Count && SelectPos < (int)HiMenu.GetItemCount()-2) { if (FirstCount && RealSelectPos==FirstCount-1) { FirstCount--; UpperCount++; SelectPos++; } else if (UpperCount && RealSelectPos==FirstCount+UpperCount-1) { UpperCount--; LowerCount++; SelectPos++; } else if (LowerCount && RealSelectPos==FirstCount+UpperCount+LowerCount-1) { LowerCount--; LastCount++; SelectPos++; } else HiData.swapItems(RealSelectPos,RealSelectPos+1); HiMenu.SetCheck(++SelectPos); NeedUpdate=TRUE; } HiMenu.ProcessInput(); break; } default: HiMenu.ProcessInput(); break; } // повторяющийся кусок! if (NeedUpdate) { ScrBuf.Lock(); // отменяем всякую прорисовку HiMenu.Hide(); ProcessGroups(); if (Opt.AutoSaveSetup) SaveHiData(); //FrameManager->RefreshFrame(); // рефрешим LeftPanel->Update(UPDATE_KEEP_SELECTION); LeftPanel->Redraw(); RightPanel->Update(UPDATE_KEEP_SELECTION); RightPanel->Redraw(); FillMenu(&HiMenu,MenuPos=SelectPos); HiMenu.SetPosition(-1,-1,0,0); HiMenu.Show(); ScrBuf.Unlock(); // разрешаем прорисовку } } if (HiMenu.Modal::GetExitCode()!=-1) { HiMenu.ClearDone(); HiMenu.WriteInput(KEY_F4); continue; } break; } }