Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22568 Location: Silicon Valley
|
http://shabarshin.com/funny/
02-September-2007 hopeless-v0.2.tar.bz2 (98K)
* функция "read" теперь может запускать команды (если в начале имени файла стоит !)
* новый пример test/_run.hop который демонстрирует #!/..., argv и read("!...")
Last edited by Shaos on 09 Aug 2009 15:22, edited 1 time in total.
|
01 Sep 2007 20:36 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22568 Location: Silicon Valley
|
Пример показывает как делать из Hope-программ запускаемые скрипты, выводит аргументы в файл argv.txt (по одному в строку), а также создаёт список строк, которые получаются на выходе после запуска Hope-программы io.in (из каталога test) на исполнение (стандартный выход такого запуска посылается в файл и содержимое этого файла возвращается как результат функции read).
|
01 Sep 2007 20:44 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22568 Location: Silicon Valley
|
а вообще интересно получается:
lines(read("!arch")) возвращает список из одной строки с именем архитектуры компьютера (у меня ["i686"])
lines(read("!ls")) возвращает список строк - имён файлов в текущем каталоге
|
02 Sep 2007 22:35 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22568 Location: Silicon Valley
|
Сегодня я впервые написал полезный скрипт на языке Hope!
Задача: имеем AVI и список эпизодов с указанием номера первого и последнего кадра , а также названия эпизода:
1000 1100 name_1 2000 2200 name_2
и т.д. - требуется с помощью менкодера по данному списку слить указанные эпизоды в отдельные файлы:
episodes.hop
| | | | Code: #!/usr/local/bin/hopeless -f
! episodes.hop - Alexander Shabarshin ! http://www.funnylang.org ! argv@0 - name ! argv@1 - fps ! script is loaded from file "name" ! movie is loaded from file "name.avi" ! episodes saved to "name_second_suffix.avi" ! format of script: ! start_frame end_frame suffix_name ! comment starts with #
uses list,lines,words;
type string == list(char); data script_entry == make_script_entry(num,num,string);
dec script_line : list(string) # num -> script_entry; --- script_line(t1::t2::ss::nil,fps) <= let t_beg == (str2num(t1))/fps in let t_end == (str2num(t2)+1)/fps in let t_duration == t_end - t_beg in if t_duration =< 0 then error("end time smaller than begin time in " <> ss) else make_script_entry(t_beg,t_duration,ss);
dec parse_script : num # list(string) -> list(script_entry); --- parse_script(_,nil) <= nil; --- parse_script(fps,h::l) <= script_line(words(h),fps) :: parse_script(fps,l); --- parse_script(fps,('#'::_)::l) <= parse_script(fps,l);
dec run_script : string # list(script_entry) -> list(string); --- run_script(_, nil) <= "Ok" :: nil; --- run_script(name, h::l) <= let make_script_entry(ss,endpos,suffix) == h in lines(read(unwords(["!episodes ", name, name <> "_" <> num2str(floor(ss)) <> "_" <> suffix, num2str(ss), num2str(endpos)]))) <> run_script(name,l);
run_script(argv@0,parse_script(str2num(argv@1),lines(read(argv@0))));
| | | | |
Вышеизложенный скрипт в процессе работы вызывает вот этот консольный скриптик (упрощено 11 сентября): episodes
Имея список эпизодов в файле с именем test, а видео в файле с именем test.avi (предположим с частотой кадров 50) вызываем скрипт так:
./episodes.hop test 50
Last edited by Shaos on 11 Sep 2007 19:26, edited 1 time in total.
|
03 Sep 2007 11:59 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22568 Location: Silicon Valley
|
Чтобы ещё покодить такого, чтобы поюзать новую функциональность Hopeless по запуску внешних приложений?
P.S. У этой реализации Hope отсутствует полное описание встроенных библиотек - может сделать веб-сайт на эту тему с уроками, блогом/форумом и т.д.?
|
03 Sep 2007 21:17 |
|
|
Mac Buster
Retired
Joined: 03 Aug 2003 22:37 Posts: 1474 Location: Moscow
|
Уроки и примеры были бы очень кстати
_________________ Extreme Entertainment
|
03 Sep 2007 21:37 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22568 Location: Silicon Valley
|
Пользовательский ввод оказывается можно также через read сделать (причём в оригинальной версии эта возможность уже была) - путём чтения файла /dev/stdin (чтение файлов тут ленивое, поэтому функции принимающие список будут получать строчку за строчкой по мере поступления) - вот пример простого скрипта, который переставляет введённое с клавиатуры в обратном порядке:
Пример работы (жирным показано что было введено юзером):
|
03 Sep 2007 22:04 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22568 Location: Silicon Valley
|
Ну на оригинальном сайте есть ref_man и hope_tut так сказать для первоначального погружения (как я и говорил - далеко не полные)
Ну и Филда читаем (правда например функция map тут юзается не как map(f,list), а как map f list - т.е. не по Филду и reduce тут нету - вместо неё foldl)
P.S. Поправочка - map и reduce по Филду имеются в hope_tut.in (тестовый скрипт по туториалу - НЕ либа)
|
03 Sep 2007 22:10 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22568 Location: Silicon Valley
|
Обновил версию для винды:
http://shabarshin.com/funny/hopeless_cygwin.zip (845K)
Включил туда пример _input.hop для Windows:
А также поправил lines.hop, чтобы игнорировало '\r'
|
04 Sep 2007 16:25 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22568 Location: Silicon Valley
|
Скрипт для покадровой обработки видео, разбитого на PNG-файлы (непосредственно обработкой занимается программа bluescreen, написанная на Си):
По видимому надо написать платформонезависимую функцию получения списка файлов в текущем каталоге по маске
|
11 Sep 2007 19:30 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22568 Location: Silicon Valley
|
Я ещё в прошлом году создал либу system.hop, специфичную для платформы. Например вот так она выглядит для Linux:
а так для Windows:
А сейчас я пробую применять Hopeless в качестве скриптового языка CGI
P.S. "dir" под виндой пока глючит...
Last edited by Shaos on 21 Jun 2008 20:16, edited 1 time in total.
|
05 Apr 2008 16:27 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22568 Location: Silicon Valley
|
http://shabarshin.com/funny/
21-Jun-2008 hopeless-v0.3.tar.bz2 (99K)
* новый пример test/_input.hop который показывает ввод с клавиатуры (stdin)
* поправлена либа lib/lines.hop чтобы пропускать символ '\r'
* новые либы lib/system.hop и lib/system_win.hop (функции "getc" и "gets")
* новая либа lib/string.hop (сейчас там только определение типа "string")
* в либы lib/system.hop и lib/system_win.hop добавлена функция "dir"
* новый предопределённый список "env" с некоторыми переменными окружения для CGI
Last edited by Shaos on 09 Aug 2009 15:23, edited 1 time in total.
|
21 Jun 2008 20:15 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22568 Location: Silicon Valley
|
http://shabarshin.com/funny/
22-Jun-2008 hopeless-v0.4.tar.bz2 (99K)
* отдельный файл version.h для APPNAME и VERSION макросов
* поддержка более длинных имён файлов (сейчас 256 против 100)
* поддержка большего количества одновременных стримов (сейчас 100 против 20)
* ограниченный режим (-r) теперь разрешает чтение, но запрещает запуск команд ("!...")
* сейчас функция "mktemp" используется для создания имён временных файлов для запуска команд
* больше доступных переменных в "env" для CGI режима
Last edited by Shaos on 09 Aug 2009 15:23, edited 1 time in total.
|
22 Jun 2008 12:23 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22568 Location: Silicon Valley
|
Пример простого CGI-скрипта на языке HOPE:
вот как он себя ведёт:
при простом вызове без параметров будут напечатаны только переменные окружения с пустой переменной QUERY_STRING
при вызове с одним параметром (без символа '=' внутри) передаваемая строка появится в аргументах и в переменной QUERY_STRING (метод GET)
при вызове с параметрами вида name=value (более одной пары разделяются символом &) пары попадут только в QUERY_STRING (метод GET)
при посылке через метод POST (например из формы) параметры в виде пар name=value разделенных символом & попадут во входной поток, а переменная QUERY_STRING останется пустой
Last edited by Shaos on 21 Nov 2012 17:46, edited 1 time in total.
|
22 Jun 2008 12:30 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22568 Location: Silicon Valley
|
Пофиксил "dir" в виндовом варианте - скоро ждите обновления!
|
24 Jun 2008 19:43 |
|
|