DC-SWAT Forum
DreamShell lua source code - Версия для печати

+- DC-SWAT Forum (http://www.dc-swat.ru/forum)
+-- Форум: DreamShell (/forum-3.html)
+--- Форум: Programming (/forum-28.html)
+--- Тема: DreamShell lua source code (/thread-972.html)

Страниц: 1 2


DreamShell lua source code - SWAT - 02.09.2005 00:12

Думаю для лучшего изучения DreamShell lua скриптов, можно кидать исходники своих скриптов на форуме, так на примерах будет лучше понять:)
Я вот начал уже обновлять CMD Path, сделал одну новую команду, она может конвертировать файл браузера DK или DP в обычный файл, чтобы можно было его использовать в DS(например скрипты). Так же комнда может сразу запускать скрипты из файлов браузера, перед тем сама сконвертировав его.
Ну вообщем вот сам исходник:

Код:
-- DK/DP VMU files manager v1.6
-- Created by SWAT
-- http://www.dc-swat.net.ru
-- dc-swat@nm.ru
-- Usage: lua bfm.lua -flag infile.lua outfile.lua(if needed)

if argv.n < 2 then
print("Usage: bfm -flag file_in file_out(if needed)")
print("Flags:")
print(" -c    -Convert DK or DP VMU file to normal file")
print(" -rl   -Run lua script from DK or DP VMU file")
print(" -rd   -Run dscript from DK or DP VMU file")
return
end


function dpf_convert(filein, fileout)
local buff
local fin = assert(io.open(filein,"r"))
fin:seek(set, 704)
local type = fin:read(5)

if type == "From:" then

   fin:seek(cur, 101)
   buff = fin:read("*a")

end

if type ~= "From:" then

   fin:seek(cur, -5)
   buff = fin:read("*a")

end

io.close(fin)
local fout = assert(io.open(fileout,"w"))
fout:write(buff)
io.close(fout)
end



-- DS.makeabspath(fnin, argv[2], 256);
fnin = argv[2]

if argv[1] == "-c" then
-- DS.makeabspath(fnout, argv[3], 256);
fnout = argv[3]
dpf_convert(fnin, fnout)
return
end


if argv[1] == "-rl" then
dpf_convert(argv[2], "/ram/bf_temp_file___.lua")
DS.ds_exec_one("lua /ram/bf_temp_file___.lua");
DS.ds_exec_one("rm /ram/bf_temp_file___.lua");
return
end


if argv[1] == "-rd" then
dpf_convert(argv[2], "/ram/bf_temp_file___.dsc")
DS.ds_exec_one("dscript /ram/bf_temp_file___.dsc");
DS.ds_exec_one("rm /ram/bf_temp_file___.dsc");
return
end

Причем данный скрипт использует стандартные функции для работы с файлами lua 5... Хоть я интегрировал туда и KOS и стандартные Си функции работы с файлами, думаю нет необходимости писать лишнее если можно это было сделать и со стандартными:)
Да и кстати, прошу заметить коментарии сверху скрипта, в скрипте должен быть хотябы один коментарий в самом верху файла! Когда DreamShell определяет из чего сделана команда(а она может быть dscript, lua и bin) она заглядывает в нутрь файла и определяет что это. Так же в случае и с DScript, у него тоже должен быть комментарий сверху, только он там обозначается символом решетки - #
Надеюсь появятся люди которые будут поддерживать DreamShell все большим числом команд ;)Если что будет не понятно, я обязательно помогу!
И еще, советую использовать редактор lua скриптов для подсветки синтаксиса, так будет полегче:)Есть один хороший, которым я пользуюсь, называется LuaEdit скачать его мона на сайте http://luaedit.luaforge.net/


DreamShell lua source code - SWAT - 05.09.2005 00:42

Скрипт для рипа GD-ROM'ов с помощью модема.
Пока конечно не удобен в использовании из за того что сектора нужно указывать самому :(
Просто я не внедрил в lua пару нужных сидиромных функций, у меня просто не получилось их туда засунуть, если бы они там были бы, то процесс я бы сделал полностью автомотическим, а так придется указывать сектора, думаю можно просто указать весь диск :) скрипт сам рубанет процесс, когда читать будет нечего :)
Да и кстати, нет поддержки GD-ROM с аудио треками...
Я не смог сделать автораспознание, по той же причине, но если уж так надо будет, то просто нужно поменять размер сектора на 2352.
Вообщем вот:

Код:
-- RIP GD-ROM with modem using
-- Created by SWAT
-- http://www.dc-swat.net.ru
-- dc-swat@nm.ru
-- Usage: lua gdrip.lua first_sector num_sec_for_read


function write_data(sbuf, sbyte)

local bw = DS.modem_write_data(sbuf, sbyte);
&nbsp;
if bw == 0 then
&nbsp; print("DS_ERROR: 0 bytes written, maybe modem is not connected?")
end
&nbsp; &nbsp; &nbsp;
return bw
end



function rip_sec(first, nsec)

local secbyte, rerr, werr, istep, secbuf
secbyte = 2048
rerr = 0
werr = 1

print("\nCerrent Sector | Total MBytes\n")

    for istep=0, nsec do
    
    rerr = DS.cdrom_read_sectors(secbuf,first+istep,1)
&nbsp;
&nbsp;if rerr ~= 0 then
&nbsp; &nbsp; &nbsp; print("DS_ERROR: GD-ROM read error")
&nbsp; &nbsp; return
&nbsp;end
&nbsp;
    werr = write_data(secbuf,secbyte)
&nbsp;
&nbsp; &nbsp;if werr == 0 then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break
&nbsp;end
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp;if istep == 0 then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print(first+istep, "", secbyte/102400)
&nbsp; &nbsp; &nbsp; &nbsp;end
&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp;if istep > 0 then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print(first+istep, "", istep*secbyte/102400)
&nbsp; &nbsp; &nbsp; &nbsp;end
    end
end


if argv.n < 2 then
&nbsp; print("Usage: gdrip first_sector num_sec_for_read \n")
&nbsp; print("DS_INF: Do not overlook to connect the modem before the beginning!")
&nbsp;return
end

print("DS_PROCESS: Ripping GD-ROM...")
rip_sec(tonumber(argv[1]), tonumber(argv[2]))

Модемное подключение выбираете сами, сначало подключаетесь с помощью команды modem, а потом рипаете...
Для РС прогу я не писал, может попробую... Я просто незнаю как там с модемом работать :)
Может кто поможет с этим?

Можно попробовать сделать на TCP/IP, просто в рипе сделать клиент а для РС сервер, так я сделать смогу, но вот я не уверен в корректной работе PPP соединения в DreamShell...


DreamShell lua source code - SWAT - 06.09.2005 02:29

Окончательно решился обучению вас скриптам :)
Привожу примеры скриптов с использованием SDL.
Скрипт выполнены в 2 версиях, одна для интерпритатора скриптов для РС, сделанный мной с поддержкой SDL специально для проверки скриптов на РС, он находится в DreamShell Service v5.
Вторая непосредственно для DreamShell.
Скрипт включает в себя функции для загрузки и показа картинок на экране:

DreamShell Service version
Код:
-- DreamShell lua SDL Test 2, Load and display images
-- Created by SWAT

SDL.SDL_BlitSurface = SDL.SDL_UpperBlit;

function ShowIMG(file, screen)
local img_t

img_t = SDL.IMG_Load(file);

   if img_t == nil then
       print("DS_ERROR: Couldn't load ", file);
     return;
   end

SDL.SDL_BlitSurface(img_t, NULL, screen, NULL);
SDL.SDL_Flip(screen);
SDL.SDL_FreeSurface(img_t);
end


function ShowIMG_xy(file, screen, x, y)
local img_t, dest

dest = SDL.SDL_Rect_new();

img_t = SDL.IMG_Load(file);

     if img_t == nil then
         print("DS_ERROR: Couldn't load ", file);
       return;
     end
     
   dest.x = x
   dest.y = y
   dest.w = img_t.w
   dest.h = img_t.h
   
   SDL.SDL_BlitSurface(img_t, NULL, screen, dest);
   SDL.SDL_Flip(screen);
   SDL.SDL_FreeSurface(img_t);
end


-- Инициализируем SDL
SDL.SDL_Init(SDL.SDL_INIT_VIDEO);

-- Устанавливаем видеорежим
flags = SDL.bit_or(SDL.SDL_HWSURFACE, SDL.SDL_DOUBLEBUF);
screen = SDL.SDL_SetVideoMode(640,480,16,flags);


-- Показываем картинку
ShowIMG("image.jpg", screen)

-- Ждем 3 секунды
SDL.SDL_Delay(3000);

-- Показываем картинку с указанием координат
ShowIMG_xy("image.jpg", screen, 100, 50)

-- Ждем 3 секунды
SDL.SDL_Delay(3000);


DreamShell version
Код:
-- DreamShell lua SDL Test 2, Load and display images
-- Created by SWAT

SDL.SDL_BlitSurface = SDL.SDL_UpperBlit;

function ShowIMG(file, screen)
local img_t

img_t = SDL.IMG_Load(file);

   if img_t == nil then
       print("DS_ERROR: Couldn't load ", file);
     return;
   end

SDL.SDL_BlitSurface(img_t, NULL, screen, NULL);
SDL.SDL_Flip(screen);
SDL.SDL_FreeSurface(img_t);
end


function ShowIMG_xy(file, screen, x, y)
local img_t, dest

dest = SDL.SDL_Rect_new();

img_t = SDL.IMG_Load(file);

     if img_t == nil then
         print("DS_ERROR: Couldn't load ", file);
       return;
     end
     
   dest.x = x
   dest.y = y
   dest.w = img_t.w
   dest.h = img_t.h
   
   SDL.SDL_BlitSurface(img_t, NULL, screen, dest);
   SDL.SDL_Flip(screen);
   SDL.SDL_FreeSurface(img_t);
end


-- Закрываем графику DreamShell
DS.ds_draw_shutdown();

-- Показываем картинку
ShowIMG("/rd/image/logos/DSXT1.jpg", DS.screen)

-- Ждем 3 секунды
SDL.SDL_Delay(3000);

-- Показываем картинку с указанием координат
ShowIMG_xy("/rd/image/logos/DSXT1.jpg", DS.screen, 100, 50)

-- Ждем 3 секунды
SDL.SDL_Delay(3000);

-- Инициализируем назад графику DreamShell
DS.ds_draw_init();



DreamShell lua source code - SWAT - 06.09.2005 23:59

В связи с вынужденным обновлением DS, я решил воспользоваться возможностью и всетаки впихнуть нужные функции для CD-ROM.
И написал более автоматизированный скрипт по рипу GD-ROM'ов
Теперь не нужно указывать сектора, скрипт все треки сам рипанет и рипанет как надо :)

Работает он естественно только в v2.3.1

Код:
-- RIP GD-ROM with modem using v1.5
-- Created by SWAT
-- http://www.dc-swat.net.ru
-- dc-swat@nm.ru
-- Usage: lua gdrip.lua



function write_data(sbuf, sbyte)

return DS.modem_write_data(sbuf, sbyte);

end



function rip_sec(trak_num, first, nsec, type)

local secbyte, rerr, werr, istep, secbuf


if type == 4 then
&nbsp; secbyte = 2048
end

if type ~= 4 then
&nbsp; secbyte = 2352
end

rerr = 0
werr = 1

print("\nCerrent Sector | Total MBytes| Track number\n")

    for istep=0, nsec do

&nbsp;
    rerr = DS.cdrom_read_sectors(secbuf,first+istep,1)
&nbsp;
&nbsp;if rerr ~= 0 then
&nbsp; &nbsp; &nbsp; print("DS_ERROR: GD-ROM read error")
&nbsp; &nbsp; return
&nbsp;end

    werr = write_data(secbuf, secbyte)

&nbsp;
&nbsp; &nbsp;if werr == 0 then
&nbsp; &nbsp; &nbsp; &nbsp;print("DS_ERROR: 0 bytes written, maybe modem not connected?")
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break
&nbsp;end
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp;if istep == 0 then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print(first+istep, "", secbyte/102400, "", trak_num)
&nbsp; &nbsp; &nbsp; &nbsp;end
&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp;if istep > 0 then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print(first+istep, "", istep*secbyte/102400, "", trak_num)
&nbsp; &nbsp; &nbsp; &nbsp;end
    end
end






print("DS_PROCESS: Ripping GD-ROM...")

local start, s_end, s_size, type, tn
toc = DS.CDROM_TOC_new();

for session=0, 1 do

local ret = DS.cdrom_read_toc(toc, session);
    if ret > 0 then
&nbsp;print("DS_ERROR: Toc read error")
&nbsp; &nbsp; return
    end

local first = DS.TOC_TRACK_(toc.first);
local last = DS.TOC_TRACK_(toc.last);

    print("DS_INF: Session ", session+1)

    for tn=first, last do

&nbsp;type = DS.TOC_CTRL_(toc.entry[tn-1]);
&nbsp;start = DS.TOC_LBA_(toc.entry[tn-1]);
&nbsp;
&nbsp;if tn == last then
&nbsp; &nbsp;s_end = DS.TOC_LBA_(toc.dunno);
&nbsp;end

&nbsp;if tn ~= last then
&nbsp; &nbsp;s_end = DS.TOC_LBA_(toc.entry[tn]);
&nbsp;end

&nbsp;s_size = s_end - start
&nbsp;rip_sec(tn, start, s_size, type)
    end
end

print("DS_OK: End ripping.")



DreamShell lua source code - zaero - 01.10.2005 18:48

Вот калькулятор:


Код:
-- lua calc by zaero
-- zaero@list.ru

if argv.n < 1 then
print("\n\nLua calc v.0.1 by zaero")
print("Usage: calc -flag(if needed) arg1 operator arg2")
print("Flags:")
print(" -d    -date and clock")
print(" -o    -operations")
print(" -v    -print version")
print(" -h    -help")
print("\n")
print("Examples: calc 2 / 2")
print("\t  calc 2 + 2")
return
end

if argv[1] == "-v" then
print("Lua calc 0.1 for DreamshellXT")
return
end

if argv[1] == "-o" then
print("This version supports such operations: +, -, *, /")
return
end

if argv[1] == "-h" then
print("This flag is not supported")
return
end

if argv[1] == "-d" then
print(os.date())
return
end

if argv[1] then
   if argv[2] then

     if argv[2] == '+' then
       print(argv[1]+argv[3])
     end
     if argv[2] == '-' then
       print(argv[1]-argv[3])
     end
     if argv[2]== '*' then
       print(argv[1]*argv[3])
     end
     if argv[2]== '/' then
       print(argv[1]/argv[3])
     end

   end
return
end



DreamShell lua source code - SWAT - 02.10.2005 20:18

Вот пример использования функций файловой системы KOS в DS lua скриптах:

Скрипт считает количество файлов в директории и выдает их имена.
Код:
-- KOS Filesystem in lua test - Reading dir's
-- Created by SWAT
-- http://www.dc-swat.net.ru
-- dc-swat@nm.ru


local ent
  
function read_dir(hnd)

ent = DS.fs_readdir(hnd)
return ent

end


function find_files_count(dirname)

local flags = SDL.bit_or(DS.O_RDONLY, DS.O_DIR);
local fcount = 0

hnd = DS.fs_open(dirname, flags);

if hnd == -1 then return 0 end


while read_dir(hnd) do


if ent.name ~= ".." then

   -- Use if needed print list files
      print(ent.name)

fcount = fcount + 1

  end
end

DS.fs_close(hnd);
return fcount

end


-- Example using
local cn = find_files_count("/cmd")
print(cn)



DreamShell lua source code - SWAT - 02.10.2005 20:48

Еще один пример работы с файлами в DS lua с использованием KOS filesystem.


Скрипт считывает все данные из одного файла и записывает их в другой:
Код:
-- KOS Filesystem in lua test - Reading and writing primitive
-- Created by SWAT
-- http://www.dc-swat.net.ru
-- dc-swat@nm.ru



local buff

-- Открываем файл
local src = DS.fs_open("/rd/doc/about.txt", DS.O_RDONLY);

-- Проверяем, открылся ли файл?
if src < 0 then

   print("DS_ERROR: Error opening ", srcfn);
return

end


-- Тоже самое...
local dest = DS.fs_open("/ram/about.txt", DS.O_WRONLY);

if dest < 0 then

   print("DS_ERROR: Error opening ", destfn);
  DS.fs_close(src);
return;

end

-- Узнаем размер файла src
local sizef = DS.fs_total(src);

        -- Считываем все данные из файла src
        DS.fs_read(src, buff, sizef);
        
        -- Записываем все прочтенные данные из файда src в файл dst
        DS.fs_write(dest, buff, sizef);

        -- Закрываем файлы
        DS.fs_close(src);
        DS.fs_close(dest);



DreamShell lua source code - alex - 12.11.2005 22:18

извиняюсь что не совсем в тему:)
на днях наткнулся на сайт
и у меня возник вопрос
а мона ли такое на dreamshell lua сделать:)


DreamShell lua source code - zaero - 12.11.2005 22:38

Впринципе можно такое сделать на луа и SDL.


Только часы не получется. Dreamshell не умеет щитать время. =(


DreamShell lua source code - SWAT - 12.11.2005 22:46

Можно взять основу, но есть некоторые функции которые интегрированы туда автором этого плеера, так же как и я делал в DS, так что его функции не полуится использовать в DS, а основу пожалуйста...


DreamShell lua source code - zaero - 20.11.2005 22:56

Сват выручай нужны примеры работы с SDL


DreamShell lua source code - SWAT - 21.11.2005 18:31

Что именно? Мне нужно знать к чему клонить то хоть...


DreamShell lua source code - zaero - 21.11.2005 18:37

Любое...
Ну например надо вывести прямую


DreamShell lua source code - SWAT - 21.11.2005 18:43

Я попробую помочь...


DreamShell lua source code - zaero - 21.11.2005 22:05

Вот блокнот. Теперь при нажатии ентер каретка не будет возвращена и вы сможете писать дальше. Надеюсь хоть теперь кто-то начнет писать приложения, благо теперь это можно делать прямо в дримшелл.

Кратко о notepad v0.3full:
1)Для работы требует клавиатуру
2)Теперь при нажатии на ентер вы можете писать дальше
3)Сохраняет при нажатии на &quot;~&quot;(консоль, тильда)

Код:
-- Lua notepad v 0.3full by zaero
-- Большое спасибо Swat'y за помощь и поддержку
-- This is notepad.
-- http://bbrclan.dc-swat.net.ru/dreamshell/


-- This is filter ASCII => in char.

    function convert_ascii(num)

      -- Special symbol and digital

          if num == 96 then return "" end
          if num == 61 then return "=" end
          if num == 59 then return ";" end
          if num == 126 then return "~" end
          if num == 32 then return " " end
          if num == 48 then return "0" end
          if num == 49 then return "1" end
          if num == 50 then return "2" end
          if num == 51 then return "3" end
          if num == 52 then return "4" end
          if num == 53 then return "5" end
          if num == 54 then return "6" end
          if num == 55 then return "7" end
          if num == 56 then return "8" end
          if num == 57 then return "9" end
          if num == 33 then return "!" end
          if num == 64 then return "@" end
          if num == 35 then return "#" end
          if num == 36 then return "$" end
          if num == 37 then return "%" end
          if num == 94 then return "^" end
          if num == 38 then return "&amp;" end
          if num == 42 then return "*" end
          if num == 40 then return "(" end
          if num == 41 then return ")" end
          if num == 45 then return "-" end
          if num == 95 then return "_" end
          if num == 43 then return "+" end
          if num == 124 then return "|" end
          if num == 91 then return "[" end
          if num == 93 then return "]" end
          if num == 123 then return "{" end
          if num == 125 then return "}" end
          if num == 46 then return "." end
          if num == 44 then return "," end
          if num == 58 then return ":" end
          if num == 39 then return "'" end
          if num == 34 then return '"' end
          if num == 60 then return "<" end
          if num == 62 then return ">" end
          if num == 47 then return "/" end
          if num == 63 then return "?" end
          if num == 10 then return "\n" end

      -- Big char

          if num == 65 then return "A" end
          if num == 66 then return "B" end
          if num == 67 then return "C" end
          if num == 68 then return "D" end
          if num == 69 then return "E" end
          if num == 70 then return "F" end
          if num == 71 then return "G" end
          if num == 72 then return "H" end
          if num == 73 then return "I" end
          if num == 74 then return "J" end
          if num == 75 then return "K" end
          if num == 76 then return "L" end
          if num == 77 then return "M" end
          if num == 78 then return "N" end
          if num == 79 then return "O" end
          if num == 80 then return "P" end
          if num == 81 then return "Q" end
          if num == 82 then return "R" end
          if num == 83 then return "S" end
          if num == 84 then return "T" end
          if num == 85 then return "U" end
          if num == 86 then return "V" end
          if num == 87 then return "W" end
          if num == 88 then return "X" end
          if num == 89 then return "Y" end
          if num == 90 then return "Z" end

      -- Little char

          if num == 97  then return "a" end
          if num == 98  then return "b" end
          if num == 99  then return "c" end
          if num == 100 then return "d" end
          if num == 101 then return "e" end
          if num == 102 then return "f" end
          if num == 103 then return "g" end
          if num == 104 then return "h" end
          if num == 105 then return "i" end
          if num == 106 then return "j" end
          if num == 107 then return "k" end
          if num == 108 then return "l" end
          if num == 109 then return "m" end
          if num == 110 then return "n" end
          if num == 111 then return "o" end
          if num == 112 then return "p" end
          if num == 113 then return "q" end
          if num == 114 then return "r" end
          if num == 115 then return "s" end
          if num == 116 then return "t" end
          if num == 117 then return "u" end
          if num == 118 then return "v" end
          if num == 119 then return "w" end
          if num == 110 then return "x" end
          if num == 121 then return "y" end
          if num == 122 then return "z" end

end



function save_data(filename, data, size)
local i
local buff = {}

fout_write = assert(io.open(filename,"w"))
  
     for i = 0, size do
    
         buff[i] = convert_ascii(data[i])
         fout_write:write(buff[i])
        
     end
    
  io.close(fout_write)
end






local ibuff = {}
local bc = 0
local exit = 1

    -- open input outpat streem. This need to buffer.

while exit do

ibuff[bc] = DS.getchar()



if ibuff[bc] == 96 then
    
    save_data("/ram/note.txt", ibuff, bc)
    print("Saved in /ram/note.txt\n")    
    break end


bc = bc+1
end



DreamShell lua source code - SWAT - 22.11.2005 15:28

Ты проверял его в самой DS? В DSS то работает DS.getchar(), а вот в DS я не уверен...
И еще, размер буфера в твоем случае можеш делать какой хочеш, так как буфер ввода в DS тут тебе не помеха совсем, ведь буфер у тебя свой...
А вообще молодец!!!


DreamShell lua source code - zaero - 22.11.2005 20:14

Спасибо!=)
В дримшелл еще не проверял. Т.к не было времени подключать дрим к нету и качать скрипт.


DreamShell lua source code - SWAT - 22.11.2005 22:11

Давно пора тебе собрать Coders Cable:)


DreamShell lua source code - zaero - 22.11.2005 22:19

Надо. Были б руки прямые сделал бы =)
А если серьезно, то надо уже делать.



DreamShell lua source code - SWAT - 23.11.2005 20:09

Вот обещаный пример как нарисовать примитивы в DS lua.
Можно попробовать их как в DS так и в DSS, что для этого нужно, я написал в коментариях.

Код:
-- DreamShell lua SDL Test 3, Draw func from SDL_prime
-- Created by SWAT


SDL.SDL_BlitSurface = SDL.SDL_UpperBlit;

-- Инициализируем SDL(нужно сделать только если пробуем в DSS)
-- SDL.SDL_Init(SDL.SDL_INIT_VIDEO);


-- Закрываем графику DreamShell
-- (Если в DSS пробуем, то удолите эту функцию или поместите в коментарий)
DS.ds_draw_shutdown();


-- Устанавливаем видеорежим
flags = SDL.bit_or(SDL.SDL_HWSURFACE, SDL.SDL_DOUBLEBUF);
screen = SDL.SDL_SetVideoMode(640,480,16,flags);



-- Сделаем функцию для рисовки квадрата из функций для рисовки линий.

function DrawBox(scr, x, y, width, height, clr, alpha, flags)

SDL.SDL_drawLine_TG(scr, x, y, x + width, y, clr, alpha, flags);
SDL.SDL_drawLine_TG(scr, x, y, x, y+height, clr, alpha, flags);
SDL.SDL_drawLine_TG(scr, x+width, y, x + width, y+height, clr, alpha, flags);
SDL.SDL_drawLine_TG(scr, x, y+height, x + width, y + height, clr, alpha, flags);

end



-- Что за параметры функциям я задавал,
-- можно посмотреть в списке внедренных в DS lua функций SDL(конкретно это SDL_prime)


-- Рисуем линию
SDL.SDL_drawLine_TG(screen, 200, 200, 50, 50, 255, 0, SDL.SDL_TG_ANTIALIAS);

-- Круг
SDL.SDL_drawCircle_TG(screen, 300, 300, 20, 255, 0, SDL.SDL_TG_ANTIALIAS);

-- Треугольник
SDL.SDL_drawTriangle_TG(screen, 400, 400, 350, 350, 300, 300, 255, 0, SDL.SDL_TG_ANTIALIAS);

-- Рисуем 1 пиксель
SDL.SDL_putPixel(screen, 320, 240, 255);

-- 1 Пиксель с альфа блендом
SDL.SDL_blendPixel(screen, 310, 240, 255, 0);

-- Квадрат
DrawBox(screen, 100, 100, 50, 50, 255, 0, SDL.SDL_TG_ANTIALIAS);


-- Так как видеорежим мы сделали с двойным буфером,
-- мы меняем местами буфер тот который мы сейчас видим,
-- на тот буфер который мы изменили поместив туда разные объекты.
-- Если после этого мы еще что нибудь нарисуем, то потребуется вызвать эту функцию еще раз.

SDL.SDL_Flip(screen);


-- Ждем 30 секунд и наслаждаемся тем что нарисовали :)

SDL.SDL_Delay(30000);


-- Инициализируем назад графику DreamShell
-- (Если в DSS пробуем, то удолите эту функцию или поместите в коментарий)

DS.ds_draw_init();