forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   PureBasic (http://forum.boolean.name/forumdisplay.php?f=90)
-   -   PB 4.0 + JS скрипты (http://forum.boolean.name/showthread.php?t=3355)

[TY]ran 13.05.2007 08:22

PB 4.0 + JS скрипты
 
вопрос по сабжу - можно как нибудь заставить прогу на Пурике использовать js-скрипты? Хочу написать FLV-конвертер, спер с vixy.net js-скрипт, который конвертирует это дело, но поскольку с явой не дружу, написать тоже самое в пурике не смогу. Может быть ктото сможет помочь?

Chrono Syndrome 13.05.2007 16:21

Re: PB 4.0 + JS скрипты
 
Ознакомься: http://www.purebasic.fr/english/viewtopic.php?p=62775
Примечания:
1) Метод с Userlib не сработает.
2) Структуру Variant придется переименовать.
3) "vbscript", естественно, надо заменить на "jscript".
4) Вместо "tmp.vbs" прописываешь путь до файла со скриптом.
5) Ну и можешь еще мусор всякий вычистить оттуда.
Вроде все.

[TY]ran 13.05.2007 17:31

Re: PB 4.0 + JS скрипты
 
вот ведь блин... а на русском нету? С англицким у меня проблемы

Chrono Syndrome 13.05.2007 17:42

Re: PB 4.0 + JS скрипты
 
Цитата:

вот ведь блин...
Аналогично...

Цитата:

а на русском нету?
Есть:

Код:

Structure Variant
    Type.w
    Reserved1.w
    Reserved2.w   
    Reserved3.w
    String.l
EndStructure
 
#VT_BSTR = 8
x.Variant\Type = #VT_BSTR
 
DataSection
meine_vbs:
  IncludeBinary "tmp.vbs"
  Data.b 0
EndDataSection
 
Procedure.l Ansi2Uni(ansi.s)
  size.l=MultiByteToWideChar_(#CP_ACP,0,ansi,-1,0,0)
  Dim unicode.w(size)
  MultiByteToWideChar_(#CP_ACP, 0, ansi, Len(ansi), unicode(), size)
  ProcedureReturn @unicode() 
EndProcedure
 
Procedure.s Uni2Ansi(*Unicode.l)
  size.l = WideCharToMultiByte_(#CP_ACP, 0, *Unicode, -1, #Null, #Null, #Null, #Null)
  ansi.s=Space(size)
  WideCharToMultiByte_(#CP_ACP, 0, *Unicode, -1, @ansi, size, #Null, #Null)
  ProcedureReturn ansi 
EndProcedure
 
Enumeration ; ScriptControlStates
  #Initialized = 0
  #Connected = 1
EndEnumeration
 
; DispInterfaces
 
Interface IScriptProcedure Extends IDispatch
  get_Name(a)
  get_NumArgs(a)
  get_HasReturnValue(a)
EndInterface
 
Interface IScriptProcedureCollection Extends IDispatch
  get__NewEnum(a)
  get_Item(a,b,c,d,e)
  get_Count(a)
EndInterface
 
Interface IScriptModule Extends IDispatch
  get_Name(a)
  get_CodeObject(a)
  get_Procedures(a)
  AddCode(a)
  Eval(a,b)
  ExecuteStatement(a)
  Run(a,b,c)
EndInterface
 
Interface IScriptModuleCollection Extends IDispatch
  get__NewEnum(a)
  get_Item(a,b,c,d,e)
  get_Count(a)
  Add(a,b,c)
EndInterface
 
Interface IScriptError Extends IDispatch
  get_Number(a)
  get_Source(a)
  get_Description(a)
  get_HelpFile(a)
  get_HelpContext(a)
  get_Text(a)
  get_Line(a)
  get_Column(a)
  Clear()
EndInterface
 
Interface IScriptControl Extends IDispatch
  get_Language(a)
  put_Language(a)
  get_State(a)
  put_State(a)
  put_SitehWnd(a)
  get_SitehWnd(a)
  get_Timeout(a)
  put_Timeout(a)
  get_AllowUI(a)
  put_AllowUI(a)
  get_UseSafeSubset(a)
  put_UseSafeSubset(a)
  get_Modules(a)
  get_Error(a)
  get_CodeObject(a)
  get_Procedures(a)
  _AboutBox()
  AddObject(a,b,c)
  Reset()
  AddCode(a)
  Eval(a,b)
  ExecuteStatement(a)
  Run(a,b,c)
EndInterface
 
CoInitialize_(0)
If CoCreateInstance_(?CLSID_ScriptControl,0,1,?IID_IScriptControl,@Object.IScriptControl) = 0
 
object\reset()
object\put_Language(Ansi2Uni("vbscript"))
object\AddCode(Ansi2Uni(PeekS(?meine_vbs)))
;
object\Eval(Ansi2Uni("soft"),@x)
meine_variX.s = UCase(uni2ansi(x\String))
;
object\reset()
;
object\release()
 
EndIf
CoUninitialize_()
 
MessageRequester("vbs variable",meine_variX,#PB_MessageRequester_Ok)
 
DataSection
  CLSID_ScriptControl:
  Data.l $0e59f1d5
  Data.w $1fbe,$11d0
  Data.b $8f,$f2,$00,$a0,$d1,$00,$38,$bc
 
  IID_IScriptControl:
  Data.l $0e59f1d3
  Data.w $1fbe,$11d0
  Data.b $8f,$f2,$00,$a0,$d1,$00,$38,$bc
EndDataSection


[TY]ran 13.05.2007 18:45

Re: PB 4.0 + JS скрипты
 
Лады, будем пробовать

Chrono Syndrome 14.05.2007 14:31

Re: PB 4.0 + JS скрипты
 
Это, у меня тут одна идейка появилась... Дело в том, что если тебе требуется всего-навсего запустить один скрипт, то, в принципе, вполне достаточно следующего кода :
Код:

RunProgram("путь до файла со скриптом")

[TY]ran 14.05.2007 14:46

Re: PB 4.0 + JS скрипты
 
Дело в том что код довольно обьемный, и наверняка получает какие то данные из вне. Но если хочешь подмочь, то вот код (js)
Код:

var jsv = 0;
var winIe = 0;
var macIe = 0;
/*@cc_on jsv = @_jscript_version; @if (@_win64 || @_win32 || @_win16) winIe = 1; @elif (@_mac && (@_PowerPC || @_mc680x0)) macIe = 1; @end @*/

var procStatus = 0;

window.onbeforeunload = function(event)
{
    if (procStatus == 1)
    {
        event = event || window.event;
        event.returnValue = "It's still processing the conversion.";
    }
}

///////////////////////////////////////////////////////////////////////////////////////
function get_hex2(val)
{
    val = parseInt(val);
    if (val == 0) return '00';

    var out='';
    while (val)
    {
        out = '0123456789abcdef'.substr(val % 16, 1) + out;
        val = parseInt(val / 16);
    }
   
    if (val.length == 1) return '0' + out;
    return out;
}

///////////////////////////////////////////////////////////////////////////////////////
function FlvdlBase(url)
{
    this.id = '';
    this.url = url;
    this.ext = '.mov';
    this.is_fecthing = false;
    this.size = 0;
    this.ui = null;
    this.dl_base_url = null;
}

FlvdlBase.prototype =
{
    set_ui : function(ui)
    {
        this.ui = ui;
    },

    set_ext : function(ext)
    {
        this.ext = ext;
    },

    _get_dl_url : function()
    {
        return this.dl_base_url + '?c=dl&id='+this.id;
    },
   
    _get_process_frame_url : function()
    {
        var svurl = svurls[Math.floor(Math.random() * svurls.length)];
        return svurl + '?c=process&u=' + escape(this.url) + '&e='+this.ext;
    },
   
    kick_cancel : function()
    {
        set_process_frame(null);
    },
   
    kick_process : function()
    {
        set_process_frame(this._get_process_frame_url());
    },
   
    on_recieve_json : function(obj)
    {
        var s = (obj.status == 'ok');
        switch(obj.process)
        {
        case 'connected':
            this.ui.on_connected();
            break;
        case 'initial':
            if (s)
            {
                this.size = obj.size;
                this.url = obj.url;
                this.id = obj.id;
                this.ui.on_file_info_end(obj.size, null);
            }
            else this.ui.on_file_info_end(0, obj.reason);
            break;
        case 'start':
            if (!s)
            {
                this.ui.on_start_failed(obj.reason);
            }
            break;
        case 'fetching':
            this.ui.on_fetching(s, obj.size==undefined?0:obj.size, this.size);
            break;
        case 'fetched':
            this.ui.on_fetch_end(s);
            break;
        case 'converted':
            this.dl_base_url = obj.dl_base_url;
            this.ui.on_convert_end(s, this._get_dl_url());
            break;
        }
    }
}

/////

function FlvdlUI()
{
    this.base = null;
}

FlvdlUI.prototype =
{
    _is_valid_url : function(url)
    {
        return url.match(/^http:\/\//);
    },
   
    _inputs_disabled : function(dis)
    {
        $('start_button').disabled = dis;
    },
   
    _html_reset : function()
    {
        Element.hide('process');
        Element.hide('download');
        Element.hide('input-button-back');
        Element.show('input-button');
        Element.show('inputbox');
        this._set_process_msg(TITLE_INIT);
        this._show_process_progress(false);
        this._set_progress(0,0,0);
        this._inputs_disabled(false);
        set_download_frame(null);
        $('url').focus();
        procStatus = 0;
    },
   
    _show_initialize : function()
    {
        this._set_process_msg(TITLE_CONNECTING);
        this._show_process_progress(true);
        $('source-url').innerHTML = $('url').value;
        $('conv-format').innerHTML = $('format').value;
    },
   
    _show_process_progress : function(show)
    {
        if (show)
        {
            Element.show('panim');
        }
        else
        {
            Element.hide('panim');
        }
    },
       
    _set_process_msg : function(msg)
    {
        $('title').innerHTML = msg;
    },
   
    _set_progress : function(percent, size, totalsize)
    {
        var ps = String(percent) + '%';
        var ptag = $('progress');
        if (percent > 10)
        {
            ptag.innerHTML = ps;
        }
        else
        {
            ptag.innerHTML = '';
        }
       
        ptag.style.width = ps;
       
        var cs;
        if (totalsize > 0)
        {
            cs = this._kb(size) + '/' + this._kb(totalsize) + 'KB';
        }
        else
        {
            cs ='-/-KB';
        }
       
        $('conv-size').innerHTML = cs;
    },
   
    _send_cancel : function()
    {
        if (this.base)
        {
            this.base.kick_cancel();
            this.base = null;
        }
    },

    _clear : function()
    {
        this.base = null;
        this._html_reset();
    },
   
    _kb : function(size)
    {
        return String(Math.floor(Number(size) / 1024));
    },
   
    _start_download : function(url)
    {
        set_download_frame(null);

        if (winIe)
        {
            this._set_process_msg(TITLE_COMPL_DL);
        }
        else
        {
            this._set_process_msg(TITLE_COMPL_AT);
            set_download_frame(url);
        }
       
        Element.hide('process');
        Element.hide('input-button');
        Element.hide('inputbox');

        $('download_a').href = url;
       
        //insert_468x60_cjad('download_ad');

        Element.show('download');
   
        if(navigator.userAgent.indexOf("Safari")!=-1)
        {
            // for safari
            $('input-button-back').innerHTML = '<p style="text-align:center;"><a href="http://vixy.net/">Back</a></p>';
        }

        Element.show('input-button-back');
   
        $('url').value = '';
       
//        urchinTracker('/flvtc_trakcing/dl/'+escape(url));
        procStatus = 2;
    },
       
    /////
   
    // from base
    on_connected : function()
    {
        this._set_process_msg(TITLE_RESLV);
    },
   
    on_file_info_end : function(size, err)
    {
        if (size > 0)
        {
            this._set_process_msg(TITLE_STARTING);
        }
        else
        {
            this._show_process_progress(false);
            var html = "<span style='color:red;'>Error: " + err + "</span>";
            this._set_process_msg(html);
            procStatus = 0;
        }
    },
   
    on_start_failed : function(err)
    {
        this._show_process_progress(false);
        var html = "<span style='color:red;'>Error: " + err + "</span>";
        this._set_process_msg(html);
        procStatus = 0;
    },
   
    on_fetching : function(suceeded, size, filesize)
    {
        if (suceeded)
        {
            this._set_process_msg(TITLE_PROCESS);
            var p = Math.floor(size * 100 / filesize);
            this._set_progress(p, size, filesize);
        }
    },

    on_fetch_end : function(succeeded)
    {
        if (succeeded)
        {
        }
        else
        {
            this._show_process_progress(false);
            this._set_process_msg(TITLE_PROC_FAILED);
            procStatus = 0;
        }
    },
   
    on_convert_end : function(suceeded, dlurl)
    {
        this._show_process_progress(false);
        if (suceeded)
        {
            this._set_progress(100, 0, 0);
            this._start_download(dlurl);
        }
        else
        {
            this._set_process_msg(TITLE_CONV_FAILED);
            procStatus = 0;
        }
    },
   
    /////
    // from html
    on_load : function()
    {
    },
   
    on_unload : function()
    {
        this._send_cancel();
    },
   
    on_start : function()
    {
        this.base = null;

        var url = $('url').value;
        url = url.replace(/\s/ig,'');
        if (this._is_valid_url(url))
        {
            this._inputs_disabled(true);
           
            Element.hide('inputbox');
            Element.show('process');

            this.base = new FlvdlBase(url);
            this.base.set_ui(this);
            this.base.set_ext($('format').value);
            this.base.kick_process();

            this._show_initialize();
           
//            urchinTracker('/flvtc_trakcing/start/'+escape(url));
            procStatus = 1;
        }
        else
        {
            this._html_reset();
        }
    },
   
    on_cancel : function()
    {
        this._send_cancel();
        this._clear();
    },
   
    on_back : function()
    {
        location.href="http://vixy.net/";
    },
   
    /////
    // from process_frame
    on_recieve_json : function(obj)
    {
        if (this.base)
        {
            this.base.on_recieve_json(obj);
        }
    }
   
}

/////

function get_query_url()
{
    var q = String(location.href).split('?');
    if (q[1] == undefined) return '';

    var qs = q[1].split('&');
    for(var i = 0; i < qs.length; i++)
    {
        var qu = qs[i].split('=');
        if (qu[0] == 'u')
        {
            return unescape(qu[1]);
        }
    }
    return '';
}

var flvdlui = new FlvdlUI();

function on_body_load()
{
    $('url').focus();
    var url = get_query_url();
    if (url != '') $('url').value = url;
   
    flvdlui.on_load();
}

function on_body_unload()
{
    flvdlui.on_unload();
}

function set_process_frame(url)
{
    if (url)
    {
        $('process_frame').src = url;
    }
    else
    {
        $('process_frame').src = 'about:blank';
    }
}

function set_download_frame(url)
{
    if (url)
    {
        $('download_frame').src = url;
    }
    else
    {
        $('download_frame').src = 'about:blank';
    }
}

var recieve_json = function(obj)
{
    flvdlui.on_recieve_json(obj);
}


Chrono Syndrome 14.05.2007 15:53

Re: PB 4.0 + JS скрипты
 
Ах вон оно как... Так вам, уважаемый, надо было бы для начала с самим скриптом разобраться, а уже потом думать, как его из Пурика запустить.

[TY]ran 14.05.2007 17:45

Re: PB 4.0 + JS скрипты
 
Так помаленьку и разбираюсь... и там и там...

Chrono Syndrome 14.05.2007 17:53

Цитата:

Сообщение от [TY]ran
Так помаленьку и разбираюсь... и там и там...

Совет: разберись сначала со скриптом. По крайней мере настолько, чтобы понять, нужны ему входные данные или нет.

Цитата:

Хорошо приведем наши доводы, надеюсь все верят AG.RU
Я вот не верю. Наидебильнейший ресурс, ИМХО.

Цитата:

ароч тест непродуман.
Честно говоря, я тоже так считаю -_- ...

Хм, а может кто подсказать хороший сервер с рейтами >1k ?

Цитата:

Как в пуре определить координаты курсора крысы в 3Д???
Ну, если ты решил использовать в качестве движка встроенную пародию на OGRE, то это будет проблематично... Если что-то другое - напиши что именно.

Кто-нибудь здесь еще, кроме меня, играл в эту замечательную TBS ?

Цитата:

Сообщение от alcoSHoLiK
Линки?

http://www.triumphstudios.com/shadowmagic/index.php подойдет ?
Вот еще центральный фан-сайт, для комплекта: http://aow2.heavengames.com/

Цитата:

прикольно, но герои мну больше нравяцо
Чем же ? ИМХО, они (сужу по 1-3 частям, остальных не видела) практически по всем статьям проигрывают AoW...

Цитата:

Гляньте на тот же Warhammer: Online ну дубликат WoW, только они додумались от себя добавить нового, и пробуют переплюнуть WoW, хотя уже 2 раза облажались, один из разов, это из-за недостатка финансов, студия отказалась от разработки.
А еще Толкиен, гад, нагло стырил из WoW орков с эльфами:-).

Почти в тему: http://www.cyty.com/robocom/

Я вот тут думаю: может стоит почистить тему ?


Цитата:

Говорят, что есть Виста совместимый PureBasic v4.10
Не совсем так: пока есть только его первая бета-версия.

Цитата:

есть ли существенные изменения
Гм, вроде же список представлен: http://www.purebasic.fr/english/viewtopic.php?t=27343 ?

Цитата:

а помоему она уже давно доступна вроде
Давно, но не для всех: раньше тестирование было закрытым.

Цитата:

Естественно, читал, но хочется узнать человеческое, "живое" мнение, а не сухие строки листа изменений.
Ну это уж точно не к Maxus'у (:@)...

Maxus, а вот можно поинтересоваться: нафига ты это написал ? Тебя немного о другом спрашивали, это-то все мы и сами знаем.

Добавила обновление до версии 4.02 (см. первый пост).

Значит так:
До тех пор, пока Maxus будет паразитировать здесь на должности модератора, я отказываюсь посещать данный раздел (с модерацией, я надеюсь, справятся СМы).
Имейте ввиду.

kvitaliy 15.05.2007 09:24

Re: PB 4.0 + JS скрипты
 
Если вопрос стоит только в работе с flv файлами, то замем нужен этот скрипт? Проанализировав способы проигрования на сайтах пришёл к выводу, что flv воспроизводиться обыкновенной Flash(.swf) программой, которая в свою очередь воспроизводиться обыкновенным Flash Player. PB умеет через ShockwaveFlash (ActiveX) воспроизводить swf файлы, Найди флешку(сграбь с сайта, где она используеться) которая умеет воспроизводить flv файлы. Осталось только всё это обьединить в одно целое и можно создать flvplayer на PureBasic! Ну, а всё что можно воспроизвести на экране монитора, то можно и захватить и сконвертировать в другой формат, если надо.

[TY]ran 15.05.2007 15:45

Re: PB 4.0 + JS скрипты
 
хм, похоже на идею... интереснее конечно сделать без ActiveX, на чистом коде, но для первого раза пойдет

kvitaliy 15.05.2007 16:35

Re: PB 4.0 + JS скрипты
 
Готовое решение уже есть вот тут:

http://pbasic.spb.ru/phpBB2/viewtopic.php?t=115

jimon 15.05.2007 16:58

Re: PB 4.0 + JS скрипты
 

flv ето сокращение от Flash Video :)
и вообще к современым плеерам уже понаделывали плагины которые позволяют flv декодировать ... к примеру jetAudio может

[TY]ran 15.05.2007 19:36

Re: PB 4.0 + JS скрипты
 
Все равно своего охота! Kvitalliy ты не против если я поизваращаюсь с этим кодом и попробую сделать реальный flv плеер с конвертацией? Если получицца конечно...


Часовой пояс GMT +4, время: 11:27.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot