Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » FAR Manager (часть 7)

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

shmuz

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
-- started: 2022-11-22
-- http://forum.ru-board.com/topic.cgi?forum=5&topic=51024&start=360#14
 
if ({ far.AdvControl("ACTL_GETFARMANAGERVERSION", true) })[4] < 5443 then return end
 
local COLNAME = "SubD"
local ffi = require "ffi"
local C = ffi.C
local band = bit.band
 
ffi.cdef [[
  typedef struct {
    DWORD    dwFileAttributes;
    FILETIME ftCreationTime;
    FILETIME ftLastAccessTime;
    FILETIME ftLastWriteTime;
    DWORD    nFileSizeHigh;
    DWORD    nFileSizeLow;
    DWORD    dwReserved0;
    DWORD    dwReserved1;
    WCHAR    cFileName[260];
    WCHAR    cAlternateFileName[14];
    DWORD    dwFileType;
    DWORD    dwCreatorType;
    WORD     wFinderFlags;
  } WIN32_FIND_DATAW;
 
 
  HANDLE FindFirstFileW(const wchar_t*, WIN32_FIND_DATAW*);
  BOOL FindNextFileW(HANDLE, WIN32_FIND_DATAW*);
  BOOL FindClose(HANDLE);
  int memcmp(const void*, const void*, size_t);
]]
 
local data = ffi.new("WIN32_FIND_DATAW")
 
local Files = function(filename)
  local fnameW = ffi.cast("wchar_t*", win.Utf8ToUtf16(filename.."\\*\0"))
  local hnd = C.FindFirstFileW(fnameW, data)
  local avail = 1
  return function()
    if hnd == nil then return end
    while avail ~= 0 do
      if 0 ~= band(data.dwFileAttributes, 16)
      and 0 ~= C.memcmp(data.cFileName, ".\0.\0\0\0", 6)
      and 0 ~= C.memcmp(data.cFileName, ".\0\0\0", 4) then
        avail = C.FindNextFileW(hnd, data)
        return true
      end
      avail = C.FindNextFileW(hnd, data)
    end
    C.FindClose(hnd)
  end
end
 
ContentColumns {
  GetContentFields = function(colnames)
    for _,v in ipairs(colnames) do
      if v == COLNAME then return true end
    end
  end;
 
  GetContentData = function(filename, colnames)
    local attr = win.GetFileAttr(filename)
    if attr and attr:find("d") then
      local N, out = 0, {}
      for _ in Files(filename) do N=N+1 end
      for k,v in ipairs(colnames) do
        if v == COLNAME then out[k]=tostring(N) end
      end
      return out
    end
  end;
}

Всего записей: 1863 | Зарегистр. 09-03-2012 | Отправлено: 11:53 23-11-2022
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » FAR Manager (часть 7)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru