PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Новости » PureBasic 6.30


PureBasic 6.30

Сообщений 1 страница 18 из 18

1

https://www.purebasic.fr/english/viewtopic.php?t=87454

Код:
- Added: Brand new HID library !
- Added: Add #PB_ListIcon_NoHeaders flag ListIconGadget()
- Added: Add #PB_Explorer_NoHeaders flag ExplorerListGadget()
- Added: Add Unicode() to create a dynamic unicode string like Ascii() and UTF8()
- Added: HeaderSection/EndHeaderSection to put C or ASM code outside the main() function
- Added: #PB_InputRequester_HandleCancel to have a special return for InputRequester() if the user cancelled it
- Added: Gzip encoding support for HttpRequest(), HttpRequestMemory(), RecieveHTTPFile() and RecieveHTTPMemory()
- Added: #PB_Menu_NativeImageSize tot CreateImageMenu() and CreatePopupImageMenu() to allow larger icons in menus (Windows)
- Added: #PB_2DDrawing_FastText for DrawingMode() to use have a faster text rendering (Windows).
- Added: #PB_Mail_NoSSLCheck and #PB_Mail_WeakSSL flags for SendMail() to ease tests.
- Added: Automatic BOM handling to CreateFile() and ReadFile()/OpenFile() with #PB_File_BOM flag
- Added: Changed x,y type for DisplaySprite/DisplayTransparentSprite() from integer to float (Not supported on DX9 or DX11 subsystem)
- Added: Placeholder support for StringGadget() with #PB_String_PlaceHolder flag
- Added: PackerCallback() to monitor and abort compression.

- Updated: Splitted the 2DDrawing lib with function which doesn't needed dependencies (

- Changed: CreateImage() background color now takes full RGBA() color for 32-bit picture. #PB_Image_Transparent and #PB_Image_TransparentBlack can be used to set a transparent background with white or black antialising.

+1

2

Так много изменений, что непонятно, что полезно(:

0

3

разве это много? я бы назвал не 6.30, а 6.21... или какая там предыдущая была.

0

4

была версия 6.21.
6.30 beta 1 - можно подождать финалки.

Отредактировано egons (04.09.2025 12:44:38)

0

5

egons написал(а):

Так много изменений

Не то чтобы много, но USB HID теперь кроссплатформенная библиотека. Может не всем интересна, но мне не помешает.
HeaderSection/EndHeaderSection тоже нужные ключевые слова, упрощающие вставки сишного кода.

0

6

Пётр написал(а):

HeaderSection/EndHeaderSection тоже нужные ключевые слова, упрощающие вставки сишного кода.

А справка есть или примеры?

0

7

@ZOLO@ написал(а):

А справка есть или примеры?

Пока нет. Документация обновляется ближе к релизу.
Код без HeaderSection/EndHeaderSection.

Код:
CompilerIf #PB_Compiler_Backend <> #PB_Backend_C
  CompilerError "Компилятор не поддерживатся"
CompilerEndIf

!int Func(int a, int b)
!{
!   return a+b;
!}

x=0
! v_x = Func(2, 8);
Debug x

Результат.

Код:
#pragma warning(disable: 4024)
// 
typedef long long quad;
typedef quad integer;
#define PB_INFINITY (1.0 / 0.0)
#define PB_NEG_INFINITY (-1.0 / 0.0)
typedef struct pb_array { void *a; } pb_array;
typedef struct pb_array2 { void *a; integer b[2]; } pb_array2;
typedef struct pb_array3 { void *a; integer b[3]; } pb_array3;
typedef struct pb_array4 { void *a; integer b[4]; } pb_array4;
typedef struct pb_array5 { void *a; integer b[5]; } pb_array5;
typedef struct pb_array6 { void *a; integer b[6]; } pb_array6;
typedef struct pb_array7 { void *a; integer b[7]; } pb_array7;
typedef struct pb_array8 { void *a; integer b[8]; } pb_array8;
typedef struct pb_array9 { void *a; integer b[9]; } pb_array9;
typedef struct pb_listitem { void *a; void *b; void *c;} pb_listitem;
typedef struct pb_list { void *a; pb_listitem *b; } pb_list;
typedef struct pb_mapitem { void *a; void *b; void *c;} pb_mapitem;
typedef struct pb_pbmap { pb_mapitem *a; } pb_pbmap;
typedef struct pb_map { pb_pbmap *a; } pb_map;
static integer s_s[]={0, -1};
#define M_SYSFUNCTION(a) a
#define M_PBFUNCTION(a) a
#define M_CDECL
typedef void TCHAR;
static inline long long pb_llrint(double x) { long long out; __asm__ __volatile__("fldl %1\n" "fistpll %0" : "=m" (out) : "m" (x)); return out; }
#define SYS_BankerRound(x) pb_llrint(x)
#define SYS_BankerRoundQuad(x) pb_llrint(x)
integer f_exitprocess_(integer) asm("ExitProcess");
integer f_heapcreate_(integer,integer,integer) asm("HeapCreate");
integer f_heapdestroy_(integer) asm("HeapDestroy");
integer f_getmodulehandle_(integer) asm("GetModuleHandleW");
// 
static char *tls;
int PB_ExitCode=0;
integer PB_MemoryBase=0;
integer PB_Instance=0;
static unsigned char *pb_datapointer;
// 
// 
// 
integer f_internal_setcurrentdirectory_(integer) asm("SetCurrentDirectoryA");
// 
void SYS_Quit();
M_SYSFUNCTION(void) SYS_InitPureBasic();
volatile int PB_DEBUGGER_LineNumber=-1;
volatile int PB_DEBUGGER_IncludedFiles=0;
char *PB_DEBUGGER_FileName=0;
// 

static integer ms_s[]={0,-1};
static integer v_x=0;
// 
// 
// 
char PB_OpenGLSubsystem=1;
int PB_Compiler_Unicode=1;
int PB_Compiler_Thread=0;
int PB_Compiler_Purifier=0;
int PB_Compiler_Debugger=0;
int PB_Compiler_DPIAware=0;
int PB_Compiler_XPSkins=1;
int PB_ExecutableType=0;
// 
void PB_EndFunctions() {
}
// 
int WinMain(void *instance, void *prevInstance, void *cmdLine, int cmdShow) {
PB_Instance = f_getmodulehandle_(0);
PB_MemoryBase = f_heapcreate_(0,4096,0);
SYS_InitPureBasic();
// CompilerIf #PB_Compiler_Backend <> #PB_Backend_C
// 
// !void Func(int a, int b)
void Func(int a, int b)
// !{
{
// !   return a+b;
   return a+b;
// !}
}
// 
// x=0
v_x=0;
// 
// ! v_x = Func(2, 8);
 v_x = Func(2, 8);
// Debug x
SYS_Quit();
}

void SYS_Quit() {
PB_EndFunctions();
f_heapdestroy_(PB_MemoryBase);
f_exitprocess_(PB_ExitCode);
}

С HeaderSection/EndHeaderSection.

Код:
CompilerIf #PB_Compiler_Backend <> #PB_Backend_C
  CompilerError "Компилятор не поддерживатся"
CompilerEndIf

HeaderSection
int Func(int a, int b)
{
   Return a+b;
}
EndHeaderSection
x=0

!v_x = Func(2, 8);
Debug x

Результат.

Код:
#pragma warning(disable: 4024)
// 
typedef long long quad;
typedef quad integer;
#define PB_INFINITY (1.0 / 0.0)
#define PB_NEG_INFINITY (-1.0 / 0.0)
typedef struct pb_array { void *a; } pb_array;
typedef struct pb_array2 { void *a; integer b[2]; } pb_array2;
typedef struct pb_array3 { void *a; integer b[3]; } pb_array3;
typedef struct pb_array4 { void *a; integer b[4]; } pb_array4;
typedef struct pb_array5 { void *a; integer b[5]; } pb_array5;
typedef struct pb_array6 { void *a; integer b[6]; } pb_array6;
typedef struct pb_array7 { void *a; integer b[7]; } pb_array7;
typedef struct pb_array8 { void *a; integer b[8]; } pb_array8;
typedef struct pb_array9 { void *a; integer b[9]; } pb_array9;
typedef struct pb_listitem { void *a; void *b; void *c;} pb_listitem;
typedef struct pb_list { void *a; pb_listitem *b; } pb_list;
typedef struct pb_mapitem { void *a; void *b; void *c;} pb_mapitem;
typedef struct pb_pbmap { pb_mapitem *a; } pb_pbmap;
typedef struct pb_map { pb_pbmap *a; } pb_map;
static integer s_s[]={0, -1};
#define M_SYSFUNCTION(a) a
#define M_PBFUNCTION(a) a
#define M_CDECL
typedef void TCHAR;
static inline long long pb_llrint(double x) { long long out; __asm__ __volatile__("fldl %1\n" "fistpll %0" : "=m" (out) : "m" (x)); return out; }
#define SYS_BankerRound(x) pb_llrint(x)
#define SYS_BankerRoundQuad(x) pb_llrint(x)
integer f_exitprocess_(integer) asm("ExitProcess");
integer f_heapcreate_(integer,integer,integer) asm("HeapCreate");
integer f_heapdestroy_(integer) asm("HeapDestroy");
integer f_getmodulehandle_(integer) asm("GetModuleHandleW");
// 
static char *tls;
int PB_ExitCode=0;
integer PB_MemoryBase=0;
integer PB_Instance=0;
static unsigned char *pb_datapointer;
// 
// 
// 
integer f_internal_setcurrentdirectory_(integer) asm("SetCurrentDirectoryA");
// 
void SYS_Quit();
M_SYSFUNCTION(void) SYS_InitPureBasic();
volatile int PB_DEBUGGER_LineNumber=-1;
volatile int PB_DEBUGGER_IncludedFiles=0;
char *PB_DEBUGGER_FileName=0;
// 

static integer ms_s[]={0,-1};
static integer v_x=0;
// 
// 
// 
char PB_OpenGLSubsystem=1;
int PB_Compiler_Unicode=1;
int PB_Compiler_Thread=0;
int PB_Compiler_Purifier=0;
int PB_Compiler_Debugger=0;
int PB_Compiler_DPIAware=0;
int PB_Compiler_XPSkins=1;
int PB_ExecutableType=0;
// 
void PB_EndFunctions() {
}
// 
int Func(int a, int b)
{
   return a+b
}

int WinMain(void *instance, void *prevInstance, void *cmdLine, int cmdShow) {
PB_Instance = f_getmodulehandle_(0);
PB_MemoryBase = f_heapcreate_(0,4096,0);
SYS_InitPureBasic();
// CompilerIf #PB_Compiler_Backend <> #PB_Backend_C
// 
// HeaderSection
// x=0
v_x=0;
// 
// !v_x = Func(2, 8);
v_x = Func(2, 8);
// Debug x
SYS_Quit();
}

void SYS_Quit() {
PB_EndFunctions();
f_heapdestroy_(PB_MemoryBase);
f_exitprocess_(PB_ExitCode);
}

Обратите внимание на место нахождения сишной функции в коде.

0

8

Пётр написал(а):

Не то чтобы много, но USB HID теперь кроссплатформенная библиотека. Может не всем интересна, но мне не помешает.
HeaderSection/EndHeaderSection тоже нужные ключевые слова, упрощающие вставки сишного кода.

Я так и не решил, стоит ли переходить на версию 6.хх. Аргумет"Ты что, это новое!" не катит.

0

9

egons написал(а):

Я так и не решил, стоит ли переходить на версию 6.хх

На 6.02 или 6.04 стоит если задача максимально ускорить приложение. У компилятора Си оптимизация выше чем у ассемблерного.
Стоит ли переходить на версии новее зависит от того появилось ли в них что-то нужное.

0

10

Пётр написал(а):

На 6.02 или 6.04 стоит если задача максимально ускорить приложение. У компилятора Си оптимизация выше чем у ассемблерного.

Кстати, не сталкивались с тем, что параноики-антивирусы определяют программу, как вирьё? Может, компилятор как-то повлиял?

0

11

egons
а в чём проблема установить 10 версий? У меня именно так и сделано. Устанавливаешь в некую папку, например в "C:\PB\PureBasic_x64" и в C:\PB\PureBasic_x86. Потом, когда вышла новая версия переименовываешь папку PureBasic_x64 в "PureBasic 6.10 x64", а версию 6.21 снова устанавливаешь в "C:\PB\PureBasic_x64". Что решает данная комбинация? У тебя всегда свежая в "C:\PB\PureBasic_x64", но если тебе что-то в ней не нравится, то просто запускаешь из папки "PureBasic 6.10 x64" старую версию 6.10. По умолчанию запущенная переписывает ассоциации на себя, поэтому идеально сделать ярлыки с тем же именем "PureBasic 6.10 x64" указав ком-строку запрета изменения ассоциаций. В таком режиме во первых любой клик на исходнике откроет в правильном IDE, но можно ещё как я сделал - закрепил PureBasic на панели задач, поэтому всегда откроется тот что надо, но это не значит что PureBasic не позволяет открыть несколько версий, поэтому отмена переписывания расширений делает свою работу. Я уже выкладывал свою сборкутут), в ней инструмент выложен в отдельную папку, поэтому не привязан и не дублируется.

Я работаю в 6.04, но в настройках компилятора всегда добавляю свежую. Так что я легко по умолчанию компилю на 6.04, а если на форуме говорят что у них что-то не работает, то выбираю версию 6.21, при этом она запускает внешний отладчик, такой же как при запуске от админа, короче она запускает отладчик из 6.21, так как отладчик 6.04 не подходит для компилятора 6.21. Ничего сложного, могу и в 5.73 компилировать, обычно я так делал когда проблема с видюхами, на старой версии движок другой, но старьё не поддерживает новый движок с новыми параметрами в функциях и часто пишет, что параметр неверный и т.д.

Отредактировано AZJIO (Вчера 17:13:50)

0

12

AZJIO написал(а):

egons
а в чём проблема установить 10 версий?

Да ни в чем - при одной установленной версии удобнее открывать сырки одним кликом, чем лазить по компиляторам и запускать IDE для ассоциации.

Недавно поставил портативку версии 6, открыл старый исходник и долго разбирался, в чем причина - другие параметры для PeekS в формате UTF8. Разобрался, конечно, но я вангую, что вылезет немало подобных неизнакомых нюансов. Может, к Новому Году и созрею для перехода(:

0

13

egons
Так в любом случае без компиляторов ты ограничиваешь себя. Во первых ASM быстрей запускается и на форуме даже говорили, что тестят на ASM, потому что запускается мгновенно, а релиз компилируют в Си. Я так тоже делаю, бывает размер почти одинаковый, в Си чуть побольше, но уже обсуждалось, скорость минимум в 1.3 раза быстрее, максимум в 2-3 раза. На 6.04 размер ещё старой концепции, собирает маленькие файлы, после этой версии компилирует заметно большего размера, вроде начинается от 250 кб, там ещё какую ту библиотеку подключают, которая не внедряет в компилятор Си-шные библиотеки, который с 10-ки идут в комплекте "с++ redistributable", которые раньше по годам пачками ставили, в любом случае не достигают размера 6.04. Так что 6.04 даже на WinXP запустится, выше версии уже нет. На линуксе естественно на 6.21 собираю.

на счёт старых кодов, там чаще всего надо правильно указать var.l заменить на var.i. Фред сам говорил что изначально они делали неправильно и поменяли на правильное, не смотря на то что это работает. Вот буквально вчера исходник на 6.21 не работал, поменял "l" (L) на "i" и он заработал.

В общем представь, что на x64 ты суёшь данные размером в "i", то есть 8 байт, то есть аналог "q" в переменную размером в "l". Пока технически адреса маленькие это пролазит, как только адреса пойдут за пределами 4-х байтов, то прога перестанет работать.

Отредактировано AZJIO (Вчера 18:58:08)

0

14

Пока что скорость не такая уж и важная. У меня больше заморочка с графикой - программы работают, на форуме говорили, что нет.

0

15

AZJIO написал(а):

на счёт старых кодов, там чаще всего надо правильно указать var.l заменить на var.i. Фред сам говорил что изначально они делали неправильно и поменяли на правильное, не смотря на то что это работает. Вот буквально вчера исходник на 6.21 не работал, поменял "l" (L) на "i" и он заработал.

Нет, проблема была не с другими типами данных, а с параметрами PeekS для UTF8 Указал нужный флаг #PB_ByteLength и заработало норм.

0

16

egons написал(а):

У меня больше заморочка с графикой

Там графику с 5.73 уже два раза поменяли. В 6.21 вроде как по настоянию "pf shadoko" встроили последнюю версию OGRE. Пользователь BarryG говорит останусь на 6.10. Так что говорю же в идеале можно поставить все версии от 5.73 до 6.21, по крайней мере к этим точно ставь 6.04 и 6.10, итого 4 версии. А беты это уже для тех кто хочет помогать в развитии, а не для "ура последняя версия"

Отредактировано AZJIO (Вчера 19:26:54)

0

17

Пётр написал(а):

но USB HID теперь кроссплатформенная библиотека.

кстааааати! а может PB (в моем правда случае 6.20) работать с Raspberry Pico? которая Pico 1. то есть думаю использовать её как управляющую плату для светомузыки. понятно что излишне, и наверняка есть что-то более подходящее для такой задачи. раньше через LPT все моргало, но на этой мат-плате LPT нет. вот думаю может спаять USB приблуду. типа по USB с компом соединил и оно моргает типа.

да, pico в принципе и сама может раскладывать звук и на частоты и моргать, без компьютера. только звук подавай и светч напиши соответствующий. на ардуино правда делал... и плевался. решил что ну её в баню. в смысле отдельно. пусть будет через комп, но чтоб pico, и чтоб связь была через мою PB программу, а не через всякие макстоны или еще какие приблуды. типа моя PB программа слушает стереомикс, раскладывает на частоты, и моргает когда надо, и шлет в Pico, а она уже лампы на 12в зажигает. как бы чтение стереомикса и разложение у меня есть, когда я для LPT делал. вот можно ли Pico к этому делу присобачить?

просто пики у меня 2 и они дешевые нынче (те что китайские подделки). посему хочу на пике сделать.

Отредактировано SeregaZ (Вчера 22:22:46)

0

18

AZJIO написал(а):

на счёт старых кодов, там чаще всего надо правильно указать var.l заменить на var.i.

Это нужно было делать как минимум с версии 4.30 (2008 год) когда добавили x64. А если кто-то компилируя для x64 использовал long вместо integer для указателей, дескрипторов и т. д., то кто в этом виноват?

SeregaZ написал(а):

может PB (в моем правда случае 6.20) работать с Raspberry Pico?

Это версия без ОС, поэтому нет. Если бы на нее можно было поставить винду или линукс, то вероятно работал бы.
Возьмите обычную малину. На ней PB работает. На версии 3, 4 и предположительно 5 (не пробовал, т. к. нет железа) можно установить винду и PB для ARM64.

SeregaZ написал(а):

думаю использовать её как управляющую плату для светомузыки

Я бы лучше взял STM32. Писать придется на Си, но можно попробовать на MicroBasic for ARM.
Когда-то давно делал типа цветомузыку. :D STM32 - Цветомузыка
Но это было давно и сейчас куб и HAL я бы не использовал бы. :)

SeregaZ написал(а):

USB приблуду. типа по USB с компом соединил и оно моргает типа.

Если нужно готовое устройство вот с примерами (тестовая прога и плагин для аимп) http://pure-basic.narod.ru/forum_files/ … _USB_1.zip
Соответствие выводов платы с контроллером (Blue pill на STM32F103C8T6) и выводов ШИМ к которым нужно подключить светодиоды.

Свернутый текст

1- A8
2 - A9
3 - A10
4 - A0
5 - A1
6 - A2
7 - A3
8 - A6
9 - A7
10 - B0
11 - B1
12 - B6
13 - B7
14 - B8
15 - B9

Видео работы плагина

0


Вы здесь » PureBasic - форум » Новости » PureBasic 6.30