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); 
   
 if bw == 0 then 
   print("DS_ERROR: 0 bytes written, maybe modem is not connected?") 
 end 
       
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) 
   
  if rerr ~= 0 then 
       print("DS_ERROR: GD-ROM read error") 
     return 
  end 
   
    werr = write_data(secbuf,secbyte) 
   
    if werr == 0 then 
          break 
  end 
   
        if istep == 0 then 
           print(first+istep, "", secbyte/102400) 
        end 
          
        if istep > 0 then 
           print(first+istep, "", istep*secbyte/102400) 
        end 
    end 
end 
 
 
if argv.n < 2 then 
   print("Usage: gdrip first_sector num_sec_for_read \n") 
   print("DS_INF: Do not overlook to connect the modem before the beginning!") 
  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 
   secbyte = 2048 
end 
 
if type ~= 4 then 
   secbyte = 2352 
end 
 
rerr = 0 
werr = 1 
 
print("\nCerrent Sector | Total MBytes| Track number\n") 
 
    for istep=0, nsec do 
 
   
    rerr = DS.cdrom_read_sectors(secbuf,first+istep,1) 
   
  if rerr ~= 0 then 
       print("DS_ERROR: GD-ROM read error") 
     return 
  end 
 
    werr = write_data(secbuf, secbyte) 
 
   
    if werr == 0 then 
        print("DS_ERROR: 0 bytes written, maybe modem not connected?") 
          break 
  end 
   
        if istep == 0 then 
           print(first+istep, "", secbyte/102400, "", trak_num) 
        end 
          
        if istep > 0 then 
           print(first+istep, "", istep*secbyte/102400, "", trak_num) 
        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 
  print("DS_ERROR: Toc read error") 
     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 
 
  type = DS.TOC_CTRL_(toc.entry[tn-1]); 
  start = DS.TOC_LBA_(toc.entry[tn-1]); 
   
  if tn == last then 
    s_end = DS.TOC_LBA_(toc.dunno); 
  end 
 
  if tn ~= last then 
    s_end = DS.TOC_LBA_(toc.entry[tn]); 
  end 
 
  s_size = s_end - start 
  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)Сохраняет при нажатии на "~"(консоль, тильда) 
 
Код: 
 -- 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 "&" 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();
  
 
 
 
 |