LINUX.ORG.RU

Мои проги на PureBasic

 


4

5

Если у кого есть желание ознакомится можете скачать архив прог (53Мб), в комплекте общая справка по прогам в CHM со скриншотами. Можно посмотреть её в онлайн

В комплекте исходники и можно их скомпилировать. Для Linux собраны 3 варианта пакетов deb (Mint-x64 и MX-x86), rpm (Fedora), zst (Arch), и исполняемые для Raspberry-x32, и есть отдельно архив для Андроида Можете посмотреть видео о PureBasic на моём ютуб канале


Ответ на: комментарий от anonymous

Тем не менее, kchmviewer никак не модифицирует контент, только меняет масштабирование. Возможно, в системе нет нужного шрифта и он заменяется на другой, но это претензия опять не к программе. Могу предложить форк, вдруг понравится.

u-235
()
Ответ на: комментарий от AZJIO

В таких случаях в опенсорсе принято слать багрепорт. Если есть возможность и силы – с приложением патча. Если нет – просто с детальным описанием, какая проблема, в каком дистрибутиве и DE ты написал. Логика подсказывает, что если автор разобрался с парсингом и рендерингом CHM, то проблему с сохранением шрифтов он как-нибудь решит, это не настолько сложно. То же и с FreeFileSync.

Нет, я не говорю, что твои программы это «ненужно», нравится – пиши. Вполне возможно, что кому-то пригодится. Только с подходом «вот вам архив с программами, что за программы, не скажу» 90% потенциальной целевой аудитории пройдёт мимо.

Хочешь привлечь интерес на ЛОРе – напиши прямо в теме аннотации, по одному абзацу на программу: что за программа, что делает, какие требования, чем она лучше аналогов. Лучше всего прямо в ОП, но на него, скорее всего, срок редактирования уже истёк. Если так – можешь написать комментарием, я перенесу наверх.

Я сейчас пишу, от того что линукс слабоват.

Нууу… кому как. Мне как программисту, например, гораздо удобнее всю разработку делать под линуксом, а сборку для винды производить на отдельной машине.

hobbit ★★★★★
()
Ответ на: комментарий от AUX

Lazarus, как уже сказали, это Pascal. В качестве свободной реализации BASIC есть FreeBASIC. Тут и лицензия GPL, и дурацких ограничений нет, и современные архитектуры поддерживаются.

yars068 ★★★★★
()
Ответ на: комментарий от yars068

FreeBASIC

Так с ним потом работать годами. Цена вашей работы может стоить сотни тысяч, поэтому лучше отдать недельный зароботок, ой, с текущими ценами пару смен, а для кого и пол смены, и потом не мучится, а с другими вы потеряете человекочасами в несколько раз больше. Проблема может быть только в том, что платный компилятор не даст возможности установить пакет компиляцией. FreeBASIC он же как Си, просто несколько стандартных функций, вам придётся писать код используя GTK3 и он не будет одинаков для Windows или MacOS. PureBasic же делает одинаковый код для обоих ОС. Прочтите здесь, выкладываю второй раз.

AZJIO
() автор топика
Ответ на: комментарий от yars068

Почитал исходники этого FreeBASIC в качестве наглядных примеров кода. Так как компилятор FreeBASIC написан на FreeBASIC.

Всё-таки слишком verbose.

Открываешь заголовочный файл, а там declare function ... и так 40 раз.

wandrien ★★★
()
Ответ на: комментарий от AZJIO

FreeBASIC он же как Си, просто несколько стандартных функций, вам придётся писать код используя GTK3 и он не будет одинаков для Windows или MacOS. PureBasic же делает одинаковый код для обоих ОС. Прочтите здесь, выкладываю второй раз.

Так может взять да написать недостающие библиотеки для FreeBASIC, чтобы код приложений можно было делать одинаковым для разных ОС? Если BASIC реально кому-то нужен, то это было бы полезнее для сообщества, нежели пиарить проприетарный продукт.

wandrien ★★★
()
Ответ на: комментарий от wandrien

У всех разные уровни знаний. Кто-то попал в среду программирования, у кого-то отец программист, у всех по разному сложилось. Мне вот лично никто в ухо не закладывал как что делать, а там бывает одной запятой не хватает чтобы всё пошло. Если месяцами ковыряешься в песочнике и нет продвижения, то пропадает стимул. Человеку нужен результат своей работы видеть, а не просто цифры в консоли складывать. Я уже на эту тему не раз спорил.

AZJIO
() автор топика
Ответ на: комментарий от AZJIO

Просто ситуация такая, что известных кроссплатформенных тулкитов и фреймворков существует несколько штук.

Но не бывает серебряной пули в программировании: ничто из них не идеально, «само» не заработает, и в любом случае требует каких-то знаний.

И вот приходите вы с никому неизвестным PureBasic, и с ваших слов получается, что его разрабам лучше удалось решить эту задачу.

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

wandrien ★★★
()
Последнее исправление: wandrien (всего исправлений: 1)
Ответ на: комментарий от wandrien

Что это за такая серебряная пуля, о которой никто не знает

Да не любитель я выступать в роли уговорщика, неблагодарная это работа. Посмотрел вашу тему используется FASM. В PureBasic тоже используется FASM но не так давно для расширения возможностей поддерживать ARM-архитектуры добавлен C-Backend, код преобразуется в Си и компилируется c gcc. Ком-строка компилятора позволяет получить ASM или C код, я даже интсрумент-плаг делал для упрощения возможности, там же можно сгенерировать код с отладчиком, встраивать номера строк, чтобы выдавать номер строки с ошибкой в скомпилированной программе.

Но это не значит что функции PureBasic будут раскрыты в C-Backend, они там идут объектами статическими библиотеками, раскрыт будет только написанный код пользователем.

Вот моя сборка PureBasic, но без самого PureBasic, там настройка темы, плаги и т.д.

AZJIO
() автор топика
Последнее исправление: AZJIO (всего исправлений: 2)
Ответ на: комментарий от hobbit

В таких случаях в опенсорсе принято слать багрепорт.

так я же именно так и сделал в обоих случаях.

что за программы, не скажу

я же дал онлайн и офлайн описание.

Хочешь привлечь интерес на ЛОРе – напиши прямо в теме аннотации, по одному абзацу на программу

Можно и так, я пытался вызвать минимальную отрицательную реакцию. В Японии есть поговорка «Торчащий гвоздь забивают». Ага ещё аватар добавь, чтобы сразу забанили.

AZJIO
() автор топика
Ответ на: комментарий от wandrien

В чем прикол этого PureBasic?

Ни в чём! Таких бэйсиков «широко известных в узких кругах»(С) - как грязи за свинарником :)

Раз уж Обезьян его хвалит, стало любопытно.

А чем он известен, чтоб его слово имело больший вес чем слово какого-нить из анонимов? Меня например?

Ну а хотя … «Чего это я? Я же добрый!»(С) Э-э-х из армянского мульта :)

Вот вам FreeBASIC https://freebasic.net/ - free в обоих смыслах! И возрадуйтесь!

Практическая ценность доказана - я в 90-е написал кое-какие QuickBASIC прожки для геологов… И внезапно через 30 лет они меня нашли и попросили пересобрать, чтоб на нонешнем HW\SW работало 8-о Сказать что я был удивлён это… :-D Короче - пересобрал с минимальными изменениями в коде, и под винду и под линукс.

PS: А ещё «Лунолёты» переписанные тогда arvi на бэйсик - снова залетали :) Я суперстар походу, но если ты понял о чём тут написано - то «и ты бро!»(С) ;-)))

anonymous
()
Ответ на: комментарий от anonymous

Вот вам FreeBASIC

так было уже

Кстати, вот ещё нашёл тему по памяти, где пользователи PureBasic пишут какими бэйсиковыми языками пользовались в своей жизни. Ну если вдруг покажется, что люди на этом форуме ничего кроме PureBasic`ка не видели.

AZJIO
() автор топика
Последнее исправление: AZJIO (всего исправлений: 3)
Ответ на: комментарий от AZJIO

FreeBASIC Так с ним потом работать годами. Цена вашей работы может стоить сотни тысяч,

Трепло :) Всё что ты показал - ни стоит ничего! А за бэёсик - уплочено, ну или вернее - своровано :-р

поэтому лучше отдать недельный зароботок, ой, с текущими ценами пару смен, а для кого и пол смены, и потом не мучится, а с другими вы потеряете человекочасами в несколько раз больше.

Иди в дупу - сам выбрал маргинальный язычок, сам и страдай! В мире полно языков к которым идут эшелоны библиотек, и всё - бесплатно. C\C++\Pascal(fpc)\C#\F#\Java\Go\Rust\JS\TS\Python\Perl\Ruby - ТЫЩЩИ ИХ!(С) Всё бесплатно … НО НЕТ!(С)

Короче нужен бэйсик? А нужен он только для того чтобы старый софт заработал на новом HW\SW - юзайте FreeBASIC! А новый софт на бэйсике писать не надо совсем, получится оно как у топик-стартера :)

anonymous
()
Ответ на: комментарий от wandrien

Открываешь заголовочный файл, а там declare function … и так 40 раз.

А знаешь почему так? Волшебный ты наш на всю голову :) А потому что там декларируется 40 функций! ВНЕЗАПНА!(С) :-)

anonymous
()
Ответ на: комментарий от AZJIO

В PureBasic тоже используется … добавлен C-Backend, код преобразуется в Си и компилируется c gcc.

Ух ты! Круто! Прямо как в FreeBASIC изначально :) А насчёт библиотек - из фрибэёсика сишные либы чепляются на раз-два(С) …

PS: Народ! Да не надо на бэйсиках софт писать, умерла так умерла!(С)

anonymous
()
Ответ на: комментарий от anonymous

Трепло :)

Иди в дупу

Ваш круг общения оставляет желать лучшего… Если что, я не читал, в таких текстах ловить нечего…

AZJIO
() автор топика
Последнее исправление: AZJIO (всего исправлений: 1)
Ответ на: комментарий от mord0d

Что-то не похоже.

$ cd /run/user/1000
$ dd if=/dev/urandom of=randfile bs=1048576 count=100
$ cp randfile randfile1
$ time diff -q randfile randfile1 
real	0m0,109s
user	0m0,011s
sys	0m0,078s
$ time cmp randfile randfile1 
real	0m0,194s
user	0m0,038s
sys	0m0,067s
$ time cmp randfile randfile1 
real	0m0,145s
user	0m0,044s
sys	0m0,086s
$ time cmp randfile randfile1 
real	0m0,108s
user	0m0,028s
sys	0m0,079s
$ time diff -q randfile randfile1 
real	0m0,094s
user	0m0,017s
sys	0m0,070s
$ time diff -q randfile randfile1 
real	0m0,091s
user	0m0,017s
sys	0m0,069s
$ time diff -q randfile randfile1 
real	0m0,094s
user	0m0,012s
sys	0m0,075s
$ time cmp randfile randfile1 
real	0m0,120s
user	0m0,032s
sys	0m0,072s
$ time cmp randfile randfile1 
real	0m0,111s
user	0m0,027s
sys	0m0,077s

cmp даже медленнее в среднем на 20% почему-то. Теоретически разницы там быть не должно, обе команды должны делать тупо read() + memcmp().

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)

Путешественник во времени! Добро пожаловать в БУДУЩЕЕ! Но как ты смог совершить скачок в двадцать лет? У меня аж олдскулы свело, как никак ты мне вернул мой 2005-й!

itn ★★★
()
Ответ на: комментарий от AZJIO

постоянно писать begin и end

Тебе не приходилось поддерживать код, которому 5, 10, а то и 15 лет? Да хотя бы 3-5? Просто разбирать и исправлять старый код?Когда тебе 100 строк надо прочесть, а десяток при этом добавить?

Вот я тебя уверяю, читаемость кода при этом значительно важнее скорописи. Если писать по принципу «написал - забыл», то да, это всё неважно.

Ну и автодополнение тоже есть, хотя пока опытный программист пишет begin, оно, скорее всего, сработать не успеет.

и точку с запятой в каждой строке

А вот тут захихикали пишущие на С++ и Java.

hobbit ★★★★★
()
Ответ на: комментарий от AZJIO

я же дал онлайн и офлайн описание.

Онлайн описание идёт третьей ссылкой, после архива и CHM. То есть уже после того, как у многих читателей сработает триггер. И даже после того, как по ссылке перейдёшь, разделы с линуксовыми и кроссплатформенными программами ещё поискать надо.

Ну и для того, чтобы человек пошёл по ссылке, у него должна быть какая-то мотивация. Если нет никаких подробностей, кроме «это я, а вон там мои программы», мотивацией может быть только сильное любопытство и большое количество свободного времени. А тут с этим не очень, когда-то ЛОР считался сайтом школьников, но они уже давно подросли и работают.

я пытался вызвать минимальную отрицательную реакцию

Я не очень понял, почему деловые аннотации на каждую программу должны вызвать отрицательную реакцию, ну да ладно. Тем более, они там сильно разные. Программа create-desktop-file, например, действительно могла бы пригодиться более-менее широкой ЦА. А вот для чего нужен GUI_Qemu_Linux, это надо вникать. Он умеет что-то, чего не умеет virt-manager?

Заодно вопрос: что надо для распространения программ на PureBasic? Надо тащить какой-то рантайм, что-то устанавливать?

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

Вот я тебя уверяю, читаемость кода при этом значительно важнее скорописи. Если писать по принципу «написал - забыл», то да, это всё неважно.

Так Паскаль сосёт по читаемости.

Глядя на Паскаль понимаешь, что уж лучше Питон, хотя казалось бы что может быть неудобнее Питона.

FreeBASIC:

private function hOptConstAccum2( byval n as ASTNODE ptr ) as ASTNODE ptr
        dim as ASTNODE ptr l = any, r = any, accumval = any
                
        '' walk
        if( n->l ) then end if          
                n->l = hOptConstAccum2( n->l )
        end if
        
        if( n->r ) then
                n->r = hOptConstAccum2( n->r )
        end if

        '' check any ADD|SUB|MUL BOP node and then go to child leafs accumulating
        '' any constants found there, deleting those nodes and then add the
        '' result to a new node, at right side of the current one
        '' (this will handle for ex. a+1+(b+2)+(c+3), that will become a+b+c+6)
        if( n->class = AST_NODECLASS_BOP ) then
                accumval = NULL

                select case n->op.op
                case AST_OP_ADD
                        '' don't mess with strings..
                        select case as const astGetDataType( n )
                        case FB_DATATYPE_STRING, FB_DATATYPE_FIXSTR, _
                                 FB_DATATYPE_WCHAR

                        case else
                                n = hConstAccumADDSUB( n, accumval, 1 )
                                if( accumval ) then
                                        n = astNewBOP( AST_OP_ADD, n, accumval )
                                end if
                        end select

                case AST_OP_MUL
                        n = hConstAccumMUL( n, accumval )
                        if( accumval ) then
                                n = astNewBOP( AST_OP_MUL, n, accumval )
                        end if

                end select
        end if

        function = n
end function

FreePascal:

function TLIL.Parse(ACommand: string; FuncLevel: Boolean=False): TLILValue;
label cleanup;
var
  SaveCode: string;
  SHead, SaveHead, SaveCLen, i: Integer;
  SaveFixHead: Boolean;
  Words: TLILList;
  Func: TLILFunction;
  Args: TLILValue;
begin
  SaveCode:=Code;
  SaveHead:=Head;
  SaveCLen:=CLen;
  Code:=ACommand;
  CLen:=Length(Code);
  Inc(ParseDepth);
  if ParseDepth=1 then begin
    RootCode:=Code;
    Env:=RootEnv;
    FError:=False;
    FErrorMessage:='';
    FErrorHead:=1;
  end;
  Head:=1;
  SkipSpaces;
  Words:=nil;
  Result:=nil;
  {$IFDEF LIL_ENABLE_RECLIMIT}
  if ParseDepth > MAX_RECLIMIT then begin
    SetError('Too many recursive calls');
    goto cleanup;
  end;
  {$ENDIF}
  if FuncLevel then Env.BreakRun:=False;
  while (Head <= CLen) and (not FError) do begin
    if Words <> nil then FreeAndNil(Words);
    if Result <> nil then FreeAndNil(Result);
    Words:=Substitute;
    if (Words=nil) or FError then goto cleanup;
    if Words.Count > 0 then begin
      Func:=FindFunction(ToString(Words[0]));
      if Func=nil then begin
        if Words[0].Length > 0 then begin
          if Catcher <> '' then begin
            if InCatcher < MAX_CATCHER_DEPTH then begin
              Inc(InCatcher);
              PushEnv;
              Env.CatcherFor:=Words[0].Clone;
              Args:=Words.ToValue;
              SetVar('args', Args, lsvlLocalNew);
              FreeAndNil(Args);
              Result:=Parse(Catcher, True);
              PopEnv;
              Env.CatcherFor.Free;
              Env.CatcherFor:=nil;
              Dec(InCatcher);
            end else begin
              SetError('Catcher limit reached while trying to call unknown function ' + ToString(Words[0]));
              goto cleanup;
            end;
          end else begin
            SetError('Unknown function ' + ToString(Words[0]));
            goto cleanup;
          end;
        end;
      end else begin
        if Func.Native then begin
          SHead:=Head;
          SaveFixHead:=FixHead;
          FFuncName:=ToString(Words[0]);
          Result:=Func.Proc(Self, Words.ToFunctionArgs);
          if FixHead then Head:=SHead;
          FixHead:=SaveFixHead;
        end else begin
          PushEnv;
          Env.Func:=Func;
          if (Func.ArgNames.Count=1) and (ToString(Func.ArgNames[0])='args') then begin
            Args:=Words.ToValue;
            SetVar('args', Args, lsvlLocalNew);
            FreeAndNil(Args);
          end else begin
            for i:=0 to Func.ArgNames.Count - 1 do begin
              if i < Words.Count - 1 then
                SetVar(ToString(Func.ArgNames[i]), Words[i + 1], lsvlLocalNew)
              else
                SetVar(ToString(Func.ArgNames[i]), Empty, lsvlLocalNew);
            end;
          end;
          Result:=ParseValue(Func.Code, True);
          PopEnv;
        end;
      end;
    end;
    if Env.BreakRun then goto cleanup;
    SkipSpaces;
    while AtEol do Inc(Head);
    SkipSpaces;
  end;

cleanup:
  if FError and Assigned(FOnError) and (ParseDepth=1) then
    FOnError(Self, ErrorHead, ErrorMessage);
  FreeAndNil(Words);
  Head:=SaveHead;
  CLen:=SaveCLen;
  Code:=SaveCode;
  if FuncLevel and Env.RetValSet then begin
    FreeAndNil(Result);
    Result:=Env.RetVal;
    Env.RetVal:=nil;
    Env.RetValSet:=False;
    Env.BreakRun:=False;
  end;
  Dec(ParseDepth);
  if Result=nil then Result:=TLILValue.Create;
end;

(Отдельно «спасибо» автору кода за goto.)

wandrien ★★★
()
Ответ на: комментарий от hobbit

Онлайн описание идёт третьей ссылкой, после архива и CHM. То есть уже после того, как у многих читателей сработает триггер. И даже после того, как по ссылке перейдёшь, разделы с линуксовыми и кроссплатформенными программами ещё поискать надо.

Слушай, но вы уже докопались до херни. Давай еще обвиним ТСа, что у него обувь неправильно размера или рост не тот.

wandrien ★★★
()
Ответ на: комментарий от wandrien

Давай еще обвиним ТСа

Стоп. Я ТСа ни в чём не обвиняю. Я пытаюсь ему объяснить, почему я считаю, что он сделал всё, чтобы большинство читателей до собственно программ не добралось. (Ну да, мы с вами - не большинство.) И даже предлагаю решение, см. ещё пару моих комментариев выше.

З.Ы. Кстати, по ссылке на сайт у ТСа на самом видном месте скрипты для AutoIt, а упоминание этой программы у пользователей операционки, у которой прямо сейчас отбирают X11 и впихивают Wayland, вызывает грусть. Да, это не к ТСу претензия, если что.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от wandrien

На мой взгляд, паскалевский вариант читаемее. Отдельное «спасибо» за блоки на отступах без операторных скобок (вот даже пофиг, { и } это или begin и end, главное, чтобы они были).

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

Я пытаюсь ему объяснить, почему я считаю, что он сделал всё, чтобы большинство читателей до собственно программ не добралось.

Отрицательная реакция на ТСа по большому счёту связана с тем, что он упомянул ключевые слова Basic и ютуб.

Ну и еще что в первых комментариях темы начал бурагозить и писать херню, что людям не нужны сорцы. Людям — не нужны, а людям, которые заходят в данный раздел форума — нужны, потому что сюда заходят именно сорцы почитать.

Остальное было немного предсказуемо.

wandrien ★★★
()
Последнее исправление: wandrien (всего исправлений: 1)

Желательно, чтобы возвращался xml с захваченными данными.
Держать SHIFT, … неудобно.
Нужно так.
Подвожу курсор в какое-либо место окна, а затем уже если нажал SHIFT, то одни данные, …
Желательно для программистов иметь возможность получить xml с данными по окну и controls (стили, …).
Также желательно, чтобы capture была всё время в фокусе какого-либо процесса и при смене диалогового окна не нужно была опять
к нему подводить курсор, …
Вообщем функциональность должна быть такой, чтобы программа действительно была удобной …

anonymous
()
Ответ на: комментарий от hobbit

Отдельное «спасибо» за блоки на отступах без операторных скобок (вот даже пофиг, { и } это или begin и end, главное, чтобы они были).

То есть ты хочешь обязательные операторные скобки, но при этом называешь менее читабельным язык, есть обязательность и ясная видимость операторных скобок?

Это синдром утёнка так работает?

(Кстати, я из mcview первый пример всталял, и сейчас увидел, что у меня заглючил терминал, оставив мусор в экранном буфере. В итоге получилась вот такая хрень в исходнике: if( n->l ) then end if. Блин, после какого-то обновления библиотек lilyterm перестал корректно работать с mc. А мне всё лень разобраться, где и что сломали.)

wandrien ★★★
()
Последнее исправление: wandrien (всего исправлений: 1)
Ответ на: комментарий от hobbit

На мой взгляд, паскалевский вариант читаемее.

Чем? Чем читабельнее?

Я вот могу сказать, чем читабельнее FB. Тем, что ты всегда ясно видишь, где у каждой конструкции начало и конец.

Тем, что не нужно засовывать переменные в отдельный блок объявлений, а можно объявлять их там, где они используются.

wandrien ★★★
()
Последнее исправление: wandrien (всего исправлений: 1)
Ответ на: комментарий от wandrien

Ты в третьем абзаце сам ответил на вопрос из первого. :)

Отступы ненадёжны by design. И заглючивший терминал не единственный и даже не самый убедительный пример. Ещё у разных редакторов кода может быть разное представление, сколько пробелов вставлять в отступ, некоторые без спроса заменяют пробелы на табы, некоторые наоборот.

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

Ты в третьем абзаце сам ответил на вопрос из первого. :) Отступы ненадёжны by design. И заглючивший терминал не единственный и даже не самый убедительный пример.

Бред какой-то. При чём тут отступы? При чем тут мой терминал к обсуждению синтаксиса ЯП? Ты в Бейсике где-то видел обязательность отступов? Или откуда оно взялось?

wandrien ★★★
()
Ответ на: комментарий от wandrien

Тем, что не нужно засовывать переменные в отдельный блок объявлений, а можно объявлять их там, где они используются.

Тут соглашусь, да. После плюсов (в которых я вообще отвык от того, что переменная может быть неинициализированной) в этом плане дельфёвый код править довольно неприятно.

Хотя это может служить мотиватором не писать методы больше, чем на один экран, например, в маленьких функциях отдельный блок объявлений большой проблемой не является. Да, я сам этого правила придерживаюсь далеко не всегда.

hobbit ★★★★★
()
Ответ на: комментарий от wandrien

но при этом называешь менее читабельным язык, есть обязательность и ясная видимость операторных скобок

Ты в Бейсике где-то видел обязательность отступов?

Ну поясни тогда, в чём там обязательность и ясная видимость операторных скобок. Я что-то запутался.

hobbit ★★★★★
()