Page 52 of 67

Re: Eolite

Posted: Fri Nov 25, 2016 11:05 am
by Mega_Myr
Можно ли как-то поменять иконки исполняемых файлов на свои, без перекомпиляции приложения? Сейчас из-за них происходит путаница с другими файлами без расширения.

Re: Eolite

Posted: Fri Nov 25, 2016 5:18 pm
by Leency
Eolite 3.75
Читает первые 4 байта у файлов без расширения, и если это "KPAC" или "MENU", то показывает иконку программы.

Re: Eolite

Posted: Fri Nov 25, 2016 5:20 pm
by 0CodErr

Code: Select all

IF(DSDWORD[#BYTE_HEAD_FILE]=='KCPK')||(DSDWORD[#BYTE_HEAD_FILE]=='UNEM') icon_n = 6;
Очень плохая идея. Упаковано kpack-ом может быть всё что угодно.

Re: Eolite

Posted: Fri Nov 25, 2016 5:23 pm
by Leency
0CodErr wrote:

Code: Select all

IF(DSDWORD[#BYTE_HEAD_FILE]=='KCPK')||(DSDWORD[#BYTE_HEAD_FILE]=='UNEM') icon_n = 6;
Очень плохая идея. Упаковано kpack-ом может быть всё что угодно.
Решение не идеальное, но оно в целом хорошее.
Вероятность того, что файл упакован kpack-ом и не имеет расширения - мала.

Re: Eolite

Posted: Fri Nov 25, 2016 5:47 pm
by Mega_Myr
Значит ли это, что у приложений колибри нет собственного идентификатора?
Или я чего-то не правильно понимаю?

Re: Eolite

Posted: Fri Nov 25, 2016 5:53 pm
by 0CodErr
Вероятность того, что файл упакован kpack-ом и не имеет расширения - мала.
Ну вообще, да. Но можно при желании поправить kpack и добавить в header упакованного файла флаг, означающий, что упаковано приложение. Для этого вполне хватит одного бита. Другой вариант, это всё-таки начать использовать расширения kex. Хотя это вызовет увеличение длины имени файла. В принципе, думаю, можно даже оба варианта реализовать.
Mega_Myr wrote:Значит ли это, что у приложений колибри нет собственного идентификатора?
Или я чего-то не правильно понимаю?
'MENUET01', если ты об этом.

Re: Eolite

Posted: Fri Nov 25, 2016 6:26 pm
by Mega_Myr
Похоже я совсем не понимаю что происходит. Пожалуй на время воздержусь от вопросов.

Re: Eolite

Posted: Fri Nov 25, 2016 6:50 pm
by Leency
Mega_Myr wrote:Похоже я совсем не понимаю что происходит. Пожалуй на время воздержусь от вопросов.
У программ Колибри есть соственный идентификатор MENUET01 http://prntscr.com/dboos7
Однако все программый в дисте сжаты KPACK'ом, потому имеют KPACK http://prntscr.com/dbopbk

Как мне определить что сжатый файл это программа? Ну... его можно разжать, вот только это долго и нетсмысла так нагружать проц, чтобы просто отобразить иконку.

Как вариант, предположить, что сжатый файл без расширения - это программа. Так и будет в 99,9% случаев, что приемлимо.

0CodErr предложил варианты решения ситуации. Например, добавлять расширение .kex все программам.

Re: Eolite

Posted: Fri Nov 25, 2016 8:14 pm
by 0CodErr
Leency wrote:Как мне определить что сжатый файл это программа? Ну... его можно разжать, вот только это долго и нетсмысла так нагружать проц, чтобы просто отобразить иконку.
Чтение файла в любом случае долго. А что, если это будет не локальная папка? Получается, что лучше всё-таки использовать расширения. В принципе, никто и не мешает добавить их к программам.

Re: Eolite

Posted: Fri Nov 25, 2016 8:24 pm
by Leency
У меня стояло в начале ограничение на эту фичу только /rd/1 и /tmp
Но я решил включить для всех.

Расширения вариант.

Re: Eolite

Posted: Fri Nov 25, 2016 8:27 pm
by Siemargl
Может наоборот ?

Без расширения == программа.

Re: Eolite

Posted: Fri Nov 25, 2016 8:44 pm
by Leency
что делать с файлами без расширений вроде licence и readme которые часто идут вместе с исходниками?

Re: Eolite

Posted: Fri Nov 25, 2016 8:47 pm
by 0CodErr
Siemargl wrote:Без расширения == программа.
Шире мыслить надо, шире! Можешь даже ради эксперимента проверить, сколько у тебя самого таких "программ без расширения".
Вот, смотри, например
Spoiler:
0.PNG
0.PNG (21.12 KiB)
Viewed 4851 times
Leency, я, кстати, вспомнил вдруг, что раньше можно было узнать размер свободного места на рамдиске.
Лайфхак, как это можно сделать сейчас :P
Думаю, суть кода понятна будет
Spoiler:

Code: Select all

Unit Unit1;
(* -------------------------------------------------------- *)
Interface
(* -------------------------------------------------------- *)
Uses KolibriOS;
(* -------------------------------------------------------- *)
Var
  hConsole: Pointer;
  ConsoleInit:       Procedure(WndWidth, WndHeight, ScrWidth, ScrHeight: Dword; Caption: PChar); StdCall;
  ConsoleExit:       Procedure(bCloseWindow: Cardinal); StdCall;
  printf:            Function(Const Format: PChar): Integer; CDecl VarArgs;
(* -------------------------------------------------------- *)
Procedure Main;
(* -------------------------------------------------------- *)
Implementation
(* -------------------------------------------------------- *)
Procedure Main;
Const FileName = '/RD/1/........';
Var
    FileAttributes: TFileAttributes;
    LastAttributes: TFileAttributes;
Begin
  hConsole          := LoadLibrary('/sys/lib/console.obj');
  ConsoleInit       := GetProcAddress(hConsole, 'con_init');
  ConsoleExit       := GetProcAddress(hConsole, 'con_exit');
  printf            := GetProcAddress(hConsole, 'con_printf');

  ConsoleInit($FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, 'Test');

  If GetFileAttributes(FileName, LastAttributes) <> 0 {If File Is Not Exist} Then Begin
    If CreateFile(FileName) <> 0 Then
      printf('RDFreeSize can not be determined.'#10)
    Else Begin
      ResizeFile(FileName, $FFFFFFFF, 0);
      GetFileAttributes(FileName, FileAttributes);
      printf('RDFreeSize = %d'#10, FileAttributes.SizeLo);
      DeleteFile(FileName);
    End;
  End Else {If File Is Already Exist} Begin
    ResizeFile(FileName, $FFFFFFFF, 0);
    GetFileAttributes(FileName, FileAttributes);
    printf('RDFreeSize = %d'#10, FileAttributes.SizeLo);
    ResizeFile(FileName, LastAttributes.SizeLo, 0);
  End;

  ConsoleExit(0);
  ThreadTerminate;
End;
(* -------------------------------------------------------- *)
End.
Spoiler:
1.PNG
1.PNG (4.17 KiB)
Viewed 4851 times
Downloaded 174 times

Re: Eolite

Posted: Fri Nov 25, 2016 9:06 pm
by Siemargl
Leency wrote:что делать с файлами без расширений вроде licence и readme которые часто идут вместе с исходниками?
Переименовать к единому стандарту.

Т.е сначала утвердить некий список стандартных расширений.

Re: Eolite

Posted: Fri Nov 25, 2016 9:30 pm
by Pathoswithin
Вроде всегда licence.txt и readme.txt. У меня вообще нет ни одного файла без расширения.