Java Script Interpreter
(ver.A beta 2)

author: DEM0STEN
(http://demosten.com, stjordanov@hotmail.com)

Technical documentation / Техническа документация
(blah)

 

Цел:

Целта на Java Script интерпретатора е да даде на разработчиците на софтуер възможност да използват скрипт език в своите продукти с което да разширят тяхната функционалност. Така се дава на потребителя възможност за по-добра работа с програмния продукт.

Какво е по-различното (предимства):

Java Script интерпретатора разполага с удобен интерфейс за разработчиците даващ възможност за дефиниране както на външни функции така и на външни променливи, които след това се използват от скрипт файлове.

Прилики и разлики с езика Java Script дефиниран от Netscape:

Java Script интерпретатора е разработен въз основа на документация на Java Script версия 1.1.

Разлики с оригиналния Java Script версия 1.1 (към версия A (beta 2)):

Особености (към версия A (beta 2)):

 

Описание на функциите които могат да се използват за управление на интерпретатора:

TPostfix JSI_API JSI_InterpretMem(char *szMem);
Стартира интерпретатора използвайки съдържанието на буфера szMem. Буфера трябва да сочи към ANSI стринг завършващ с 0. Резултата се съдържа в структура от тип TPostfix, която ще бъде описана по-късно.

 

TPostfix JSI_API JSI_InterpretFile(char *szFileName);
Стартира интерпретатора използвайки съдържанието на файла szFileName. Буфера трябва да сочи към ANSI стринг завършващ с 0. На вътрешно ниво функцията прочита целия файл в буфер и го подава като аргумент на JSI_InterpretMem(). Резултата се съдържа в структура от тип TPostfix, която ще бъде описана по-късно.

 

int JSI_API JSI_GetError(DWORD *pdwLine, DWORD *pdwColumn);
Връща номера на грешката или 0 ако няма такава. Параметрите са съответно за получаване на реда и колоната на които е възникнала грешката в скрипта. Ако pdwLine или pdwColumn са NULL, те не се попълват. Ако върнатата стойност е равна на JSI_UNKNOWN (0xFFFFFFFFUL), то съответно реда или колоната не са известни.

 

void JSI_API JSI_SetErrorNum(int iErr);
Задава номер на грешка. За външни грешки са запазени номерата започващи от JSIE_USERBASE (5000)

 

void JSI_API JSI_GetErrorStringEnglish(char *szString);
Връща грешката като стринг на английски. За целта на вътрешно ниво тази функция използва JSI_GetError().

 

BOOL JSI_API JSI_AddExtrFunction(char *szName, pJSI_Func pFunction);
Добавя функцията сочена от pFunction като функция която може да се вика от скрипта които ще се интерпретира. За име се използва szName.

Пример:

/*********************************************************/
int JSI_CALLBACK test(int argc, PVar argv)
{
int iCounter;
char *szValue;
double dValue;

    for (iCounter = 0; iCounter < argc; iCounter++) {
        if (JSI_GetParam(iCounter, &szValue, &dValue, argv) == varNum) {
            printf("%f", dValue);
        }
        else
            printf("%s", szValue);
    }
    return 0;
}
/*********************************************************/
int main(int argc, char *argv[])
{
    JSI_AddExtrFunction("write", test);
    return 0;
}
/*********************************************************/

Така се добавя функция с име write, която може да бъде извикана по следния начин от скрипта:

write(‘The number is ‘, 22, ‘\n’)    // като различни параметри
write(‘The number is ‘ + 22 + ‘\n’)   // всичко е в първия параметър

 

BOOL JSI_API JSI_AddExtrVar(char *szName, pJSI_VarGet pGetFunction, pJSI_VarSet pSetFunction);
Добавя променливата с име szName, към списъка с валидни променливи. При четене от променливата се извиква функцията сочена от pGetFunction. При писане в променливата се извиква функцията сочена от pSetFunction. Ако вместо валиден адрес на функция се подаде NULL, това прави променливата съответно, write-only или read-only.

 

TVarType JSI_API JSI_GetParam(int iVarNum, char **szValue, double *dValue, PVar pVars);
Връща стойността на параметъра и неговия тип (типовете са описани в jsi.h). Определянето на параметъра става според неговия номер. Номерата на параметрите започват от 0.

 

void JSI_API JSI_SetResult(char *szValue, double dValue, TVarType Type);
Задава стойността и типа на резултата върнат от външната функция към Java Script интерпретатора.

ВАЖНО: Тази функция задължително трябва да се използва за връщане на типа и стойността на външните променливи добавени с функцията JSI_AddExtrVar(), като се използва от функцията подадена като pGetFunction, параметър.

Пример:

static int iProba = -2;

/*********************************************************/
int JSI_CALLBACK GetMyVar(void)
{
    JSI_SetResult(NULL, (double)iProba, varNum); // това е задължително
    return 0;
}
/*********************************************************/
int JSI_CALLBACK SetMyVar(TVarType Type, char* szValue, double dValue)
{
    if (Type == varNum)
        iProba = (int)dValue;
    return 0;
}
/*********************************************************/
int main(int argc, char *argv[])
{
    JSI_AddExtrVar("ExternalVar", GetMyVar, SetMyVar);
    return 0;
}
/*********************************************************/
Допълнителна информация: http://demosten.com/jsi
Последна промяна: 19.08.2000г.

</край_на_файла>