Вверх ↑
Этот топик читают: sаmakacd, nesco, Гость, De_Cadanz
Ответов: 1416
Рейтинг: 97
#241: 2019-02-10 10:49:18 ЛС | профиль | цитата
О-о-о!!!
карма: 3

0
Главный модератор
Ответов: 2702
Рейтинг: 355
#242: 2019-02-10 11:06:21 ЛС | профиль | цитата
flint2 писал(а):
О-о-о!!!

Анекдот

— Петя, ты говорят, женился?
— Угу.
— Жена, небось, красавица?
— Угу. На Матерь Божью похожа, говорят.
— А фото есть?
— Есть.
— Покажи… О-о-о!!! МАТЕРЬ БОЖЬЯ!
Немного переделал примеры использования элемента HCVBJScript.
карма: 8
Дорогу осилит идущий. HiAsm.NET is based on HiAsm 5
0
файлы: 1HiAsmNET_HCVBJScript.sha.zip [2.4KB] [70]
Главный модератор
Ответов: 2702
Рейтинг: 355
#243: 2019-02-12 21:37:31 ЛС | профиль | цитата
  Опубликовано обновление программы. Сделан элемент базового пакета HCLua. Выполняет сценарии на языке Lua. Функционально похож на элемент HCVBJScript с некоторыми отличиями в механизме передачи данных в сценарий и обратно.
карма: 8
Дорогу осилит идущий. HiAsm.NET is based on HiAsm 5
0
файлы: 1HiAsmNET_HCLua.zip [2.2KB] [68]
Ответов: 1416
Рейтинг: 97
#244: 2019-02-12 22:16:37 ЛС | профиль | цитата
Nic,
Ну, думаю, теперь будем делать шедевры игростроя!
Угодил!

Будет настроение и желание, можно сделать Debugger.
А то когда скрипт больше 500 строк, или когда сложные алгоритмы, без Debugger-а бывает трудно разобраться.
В компонент, Breakpoints строк и переменных лучше передавать списком, это я о будущем компоненте.
Примерно вот что надо: https://studio.zerobrane.com/doc-lua-debugging
Что-то типа этого

#include "LuaDebugger.h"
#include <cstdio>

LuaDebugger* LuaDebugger::m_spActiveDebugger = NULL;

LuaDebugger::LuaDebugger()
{
m_pGlobalState = luaL_newstate();
luaL_openlibs(m_pGlobalState);
m_pDebuggeeState = lua_newthread(m_pGlobalState);
}

LuaDebugger::~LuaDebugger()
{
lua_close(m_pGlobalState);
if(this == m_spActiveDebugger)
m_spActiveDebugger = NULL;
}

void LuaDebugger::LoadLuaFile(const char* name)
{
if(luaL_loadfile(m_pDebuggeeState , name))
{
fprintf(stderr , "can not load script(%s)\n" , lua_tostring(m_pDebuggeeState , -1));
lua_pop(m_pDebuggeeState , 1);
}
}

void LuaDebugger::Hook(lua_State* L , lua_Debug* ar)
{
if(!m_spActiveDebugger)
fprintf(stderr , "no active debugger!\n");
else
{
switch(ar->event)
{
case LUA_HOOKLINE:
{
if(m_spActiveDebugger->GetMode() == DM_STEP)
{
m_spActiveDebugger->Pause();
m_spActiveDebugger->WatchVarValue();
m_spActiveDebugger->SetMode(DM_NORM);
}
else if(m_spActiveDebugger->FindBreakPoint(ar->currentline))
{
printf("break on line %d\n" , ar->currentline);
m_spActiveDebugger->Pause();
m_spActiveDebugger->WatchVarValue();
}
}
break;
case LUA_HOOKCALL:
{
if(m_spActiveDebugger->GetMode() == DM_FUNC)
{
m_spActiveDebugger->Pause();
m_spActiveDebugger->WatchVarValue();
m_spActiveDebugger->SetMode(DM_NORM);
}
}
break;
}
}
}

void LuaDebugger::Run()
{
int err = lua_resume(m_pDebuggeeState , NULL , 0);
if(err == LUA_ERRRUN)
fprintf(stderr , "no code to run!\n");
else if(err != LUA_OK && err != LUA_YIELD)
fprintf(stderr , "error to run (%d)\n" , err);
}

void LuaDebugger::Pause()
{
lua_yield(m_pDebuggeeState , 0);
}

void LuaDebugger::Stop()
{

}

void LuaDebugger::SetMode(const Mode mode)
{
int mask = lua_gethookmask(m_pDebuggeeState);
m_emMode = mode;
switch(m_emMode)
{
case DM_NORM:
if(m_listBreakPoints.empty())
lua_sethook(m_pDebuggeeState , NULL , 0 , 0);
else
lua_sethook(m_pDebuggeeState , Hook , LUA_MASKLINE , 0);
break;
case DM_FUNC:
lua_sethook(m_pDebuggeeState , Hook , LUA_MASKCALL | mask , 0);
break;
case DM_STEP:
lua_sethook(m_pDebuggeeState , Hook , LUA_MASKLINE | mask , 0);
break;
}
}

void LuaDebugger::AddBreakPoint(int lineNum)
{
/// TODO: check the validation of lineNum
if(m_listBreakPoints.empty())
lua_sethook(m_pDebuggeeState , Hook , LUA_MASKLINE , 0);

std::list<int>::const_iterator iter = m_listBreakPoints.begin();
bool bExist = false;
for(; iter != m_listBreakPoints.end(); ++iter)
{
if(*iter == lineNum)
{
fprintf(stderr , "the breakpoint has been added!\n");
bExist = true;
break;
}
}

if(!bExist)
{
m_listBreakPoints.push_back(lineNum);
printf("add a breakpoint on #%d.\n" , lineNum);
}
else
{
if(m_listBreakPoints.empty())
lua_sethook(m_pDebuggeeState , NULL , 0 , 0);
}
}

void LuaDebugger::RemoveBreakPoint(int lineNum)
{
std::list<int>::iterator iter = m_listBreakPoints.begin();
bool bExist = false;
for(; iter != m_listBreakPoints.end(); ++iter)
{
if(*iter == lineNum)
{
m_listBreakPoints.erase(iter);
printf("remove a breakpoint on #%d.\n" , lineNum);
bExist = true;
break;
}
}

if(!bExist)
fprintf(stderr , "no breakpoint found on #%d.\n" , lineNum);
}

bool LuaDebugger::FindBreakPoint(int lineNum)
{
std::list<int>::const_iterator iter = m_listBreakPoints.begin();
for(; iter != m_listBreakPoints.end(); ++iter)
{
if(*iter == lineNum)
{
return true;
}
}

return false;
}

void LuaDebugger::WatchVarValue()
{
lua_Debug ar;
int level = 0;
char buf[256] = {0};

while(lua_getstack(m_pDebuggeeState , level++ , &ar))
{
int i = 1;
const char* name;
lua_getinfo(m_pDebuggeeState , "Sln" , &ar);
printf("%s %s function %s in %s :\n" , ar.namewhat , ar.what , ar.name , ar.short_src);
while(name = lua_getlocal(m_pDebuggeeState , &ar , i++))
{
lua_getinfo(m_pDebuggeeState , "Sln" , &ar);

buf[0] = NULL;
if(lua_isnumber(m_pDebuggeeState , -1))
sprintf(buf , "\t%s = %f\n" , name , lua_tonumber(m_pDebuggeeState , -1));
else if(lua_isstring(m_pDebuggeeState , -1))
sprintf(buf , "\t%s = %s\n" , name , lua_tostring(m_pDebuggeeState , -1));
else if(lua_istable(m_pDebuggeeState , -1))
sprintf(buf , "\t%s is table.\n" , name);

printf(buf);
lua_pop(m_pDebuggeeState , 1);
}
}
}


Редактировалось 2 раз(а), последний 2019-02-13 00:56:55
карма: 3

0
Главный модератор
Ответов: 2702
Рейтинг: 355
#245: 2019-02-15 07:41:29 ЛС | профиль | цитата
  Опубликовано обновление программы. Исправлена ошибка открытия "старых" схем. Подробности об ошибке в этой теме. В связи с этим стали работать некоторые схемы пакета Windows. В набор тестируемых ОС добавлена версия Windows Vista x64 RU:


Редактировалось 2 раз(а), последний 2019-02-15 07:48:02
карма: 8
Дорогу осилит идущий. HiAsm.NET is based on HiAsm 5
0
Главный модератор
Ответов: 2702
Рейтинг: 355
#246: 2019-02-17 10:54:49 ЛС | профиль | цитата
  Опубликовано обновление программы. Сделан элемент базового пакета HCMathParse. Элемент предназначен для вычисления математических выражений. По функционалу похож на упрощенный вариант элемента MathParse пакета Windows.
Demo


карма: 8
Дорогу осилит идущий. HiAsm.NET is based on HiAsm 5
0
файлы: 1HCMathParse.sha.zip [1.8KB] [64]
Главный модератор
Ответов: 2702
Рейтинг: 355
#247: 2019-02-21 17:48:39 ЛС | профиль | цитата
  Опубликовано обновление программы. Сделан элемент базового пакета HCStrLen. Элемент предназначен для вычисления длины строки. По функционалу идентичен элементу StrLen пакета Windows. Пример, демонстрирующий использование элемента HCTplListView для создания простой телефонной книжки. В режиме отображения Details можно использовать подобно элементу StringTable в пакете Windows.
Demo


P.S. При использовании примера не забываем указать путь до папки с файлом PHONE.DBF!

Редактировалось 3 раз(а), последний 2019-02-21 17:57:13
карма: 8
Дорогу осилит идущий. HiAsm.NET is based on HiAsm 5
0
файлы: 1Core_DBFBlocknote.sha.zip [16.1KB] [68]
Главный модератор
Ответов: 2702
Рейтинг: 355
#248: 2019-02-27 16:04:20 ЛС | профиль | цитата
  Опубликовано обновление программы. Сделан элемент базового пакета HCInlineCode. Элемент предназначен для вставки фрагмента кода на языке C#. По функционалу похож на элемент HCVBJScript. Примеры, демонстрирующие использование элемента, расположены в папке пакета \_base\example\HelloScripts. Также добавлена папка с примерами доступа к базам данных, расположенная по пути \_base\example\DataBase.
карма: 8
Дорогу осилит идущий. HiAsm.NET is based on HiAsm 5
0
Главный модератор
Ответов: 2702
Рейтинг: 355
#249: 2019-03-03 05:54:03 ЛС | профиль | цитата
  Опубликовано обновление программы. Доработан элемент базового пакета HCInlineCode. Добавлены примеры, демонстрирующие использование элемента.
карма: 8
Дорогу осилит идущий. HiAsm.NET is based on HiAsm 5
0
Главный модератор
Ответов: 2702
Рейтинг: 355
#250: 2019-03-04 12:42:46 ЛС | профиль | цитата
  Опубликовано обновление программы. Сделан элемент базового пакета HCTplPropertyGrid. Элемент предназначен для отображения и редактирования свойств объектов. Можно использовать для отладки схем в проекте Core и приложений в проекте Windows Forms.
Demo


карма: 8
Дорогу осилит идущий. HiAsm.NET is based on HiAsm 5
0
файлы: 2Core_SDLite.sha.zip [2.5KB] [85], WF_FormDesigner.zip [21.5KB] [70]
Главный модератор
Ответов: 2702
Рейтинг: 355
#251: 2019-03-17 18:01:05 ЛС | профиль | цитата
  Опубликовано обновление программы. Исправлены ошибки элементов HCVBJScript, HCInlineCode и HCLua при работе на Windows XP. Добавлен элемент HCSettingsProperty, который позволяет сохранять настройки программы в файле и восстанавливать их из файла после запуска программы.
карма: 8
Дорогу осилит идущий. HiAsm.NET is based on HiAsm 5
0
Главный модератор
Ответов: 2702
Рейтинг: 355
#252: 2019-03-20 13:53:49 ЛС | профиль | цитата
  Опубликовано обновление программы. Сделан элемент базового пакета HCDateTime. Элемент предназначен для получения текущего времени компьютера, а также для его изменения. Реализован механизм сохранения/восстановления значений свойств программы. Например, для сохранения геометрии формы надо выполнить следующее: установить свойство AutoSaveSettings в True, установить свойство StartPosition в Manual, для свойств геометрии формы выбрать из контекстного меню пункт Binding(Связать) и напоследок соединить точки onCreate и doSettingsReload элемента Entrypoint:
Demo



Редактировалось 3 раз(а), последний 2019-03-20 13:55:38
карма: 8
Дорогу осилит идущий. HiAsm.NET is based on HiAsm 5
0
Главный модератор
Ответов: 2702
Рейтинг: 355
#253: 2019-03-23 15:32:57 ЛС | профиль | цитата
  Опубликовано обновление программы. Сделаны элементы базового пакета HCSerialPort и HCProcess. Элемент HCSerialPort предназначен для создания соединения через последовательный порт:
Demo


  Элемент HCProcess реализует управление дочерними процессами:
Demo



Редактировалось 1 раз(а), последний 2019-03-23 15:33:50
карма: 8
Дорогу осилит идущий. HiAsm.NET is based on HiAsm 5
0
файлы: 2Core_HCSerialPort.sha.zip [1KB] [74], Core_HCProcess.sha.zip [1.6KB] [69]
Ответов: 199
Рейтинг: 2
#254: 2019-03-24 13:33:35 ЛС | профиль | цитата
Nic, это будет платная среда в будущем ?
карма: 0

0
Главный модератор
Ответов: 2702
Рейтинг: 355
#255: 2019-03-24 14:33:38 ЛС | профиль | цитата
kaban4ik писал(а):
это будет платная среда в будущем ?

Если возникнут предпосылки к этому. Например, разработчик потеряет источник доходов для поддержки проекта или какие-либо другие причины.
карма: 8
Дорогу осилит идущий. HiAsm.NET is based on HiAsm 5
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)