--------------------------------------------------
-- Ф-я инициализирует gfx-окно с заданными параметрами
-- Кроме того, установим шрифт, который будем использовать
function Init()
  local name,width,height,dockstate,xpos,ypos = "Test", 1000, 200, 0, 200, 200
  gfx.init(name,width,height,dockstate,xpos,ypos)
  local fontidx, fontface, fontsz, fontflags = 1, "Verdana", 20
  gfx.setfont(1,"Verdana",20) -- set font 1
end
--------------------------------------------------
-- Здесь будем рисовать каждый кадр, в дефолтный framebuffer
-- Описываю подробно встречающиеся ф-и, хотя все это в документации
function Draw()
  -- Информационная строка -------------
  gfx.set(1,0.6,1,1) -- r,g,b,a, устанавливаем цвет, которым будем рисовать info
  gfx.x, gfx.y = 10, 10 -- уст. gfx.x, gfx.y, строки рисуются отталкиваясь от этих координат!
  local info = "Внутри окна нажмите правую, левую кнопку мыши, Alt, Ctrl, Shift, нажмите все одновременно."
  gfx.drawstr(info)
 
 
  -- Иллюстрация -----------------------
  gfx.set(1,0.7,0.4,1) -- цвет, которым будем рисовать иллюстрацию
  -- Текущее значение mouse_cap --
  gfx.x, gfx.y = 10, 80
  gfx.drawstr("mouse_cap = " .. gfx.mouse_cap)
 
  local x, y = 900, 80 -- начальные координаты, рисовать будем справа налево, от младшего к старшим разрядам
  local w, h = 40, 40  -- здесь зададим ширину и высоту квадратиков, соответствующих разрядам
 
  for i = 0, 15, 1 do -- будем идти от нулевого, до 15 разряда. В Lua счет от единицы, но нам здесь удобнее, никто не запрещает!
    gfx.rect(x, y, w, h, 0) -- рисуем квадратик, соотв. разряду
    -- над квадратиком - номер разряда
    gfx.x, gfx.y = x, y - h -- уст. gfx.x, gfx.y
    -- от gfx.x, gfx.y - говорил выше, но...здесь тоже есть возможность выравнивания, опять же, используются флаги!!!
    gfx.drawstr(tostring(i), 5, gfx.x + w, gfx.y + h) -- над квадратиком - номер разряда, flags = 5!
    ------------------------------
    -- вот здесь мы создадим битовую маску
    local Mask = 1<<i -- с помощью сдвига влево("<<") устанавливаем один конкретный бит
    if gfx.mouse_cap&Mask ~= 0 then -- с помощью побитового "И"("&") проверяем, установлен ли этот бит в mouse_cap
      -- в квадратике - значение маски
      gfx.x, gfx.y = x, y
      gfx.drawstr(tostring(Mask), 5, gfx.x + w, gfx.y + h)
    end
    ------------------------------
    x = x - w
  end
end
--------------------------------------------------
-- Осн. луп будет вызывать ф-ю Draw() примерно 30 раз в секунду, пока gfx-окно открыто
function mainloop()
  ---------------
  Draw()
  ---------------
  local char = gfx.getchar() -- символ с клавиатуры, а если =-1 - окно gfx закрыто
  if char~=-1 then reaper.defer(mainloop) end -- defer(пока окно открыто)
  gfx.update() -- обновляет кадр
end
--------------------------------------------------
Init() -- Инициализируем окно
mainloop() -- Запускаем осн. луп