Board.KolibriOS.org

Official KolibriOS board
It is currently Fri Jul 19, 2019 10:11 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 2 posts ] 
Author Message
PostPosted: Sat Dec 31, 2016 8:25 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Quote:
Siemargl « Сб дек 31, 2016 4:14 pm » где взять номер сборки системы? хочу в шелл добавить,а то путаю педали
Pathoswithin « Сб дек 31, 2016 4:42 pm » Сисфункция 18.13 для ядра. Для всей системы вроде нигде не хранится.
Нашёл такой пример на паскале
Spoiler: Show
Attachment:
0.PNG
0.PNG [ 12.5 KiB | Viewed 1507 times ]
Attachment:
Unit1.kex [544 Bytes]
Downloaded 120 times
Code:
Unit Unit1;
(* -------------------------------------------------------- *)
Interface
(* -------------------------------------------------------- *)
Type

  Dword = Cardinal;

  TKernelVersion = Packed Record
    A, B, C, D: Byte;
    reserved:   Byte;
    Revision:   Dword;
  End;
 
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; Forward;
  Procedure ThreadTerminate; Forward;
  Function  LoadLibrary(Path: PChar): Pointer; StdCall; Forward;
  Function  GetProcAddress(hLib: Pointer; ProcName: PChar): Pointer; StdCall; Forward;
  Procedure GetKernelVersion(Var Buffer: TKernelVersion); StdCall;Forward;
(* -------------------------------------------------------- *)
Implementation
(* -------------------------------------------------------- *)
Procedure Main();
Var
   KernelVersion: TKernelVersion;
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');

   GetKernelVersion(KernelVersion);
   With KernelVersion Do Begin
     printf('Version  = %d.%d.%d.%d'#10, A, B, C, D);
     printf('Revision = %d'#10, Revision);
   End;
   
   ConsoleExit(0);
   ThreadTerminate;
End;
(* -------------------------------------------------------- *)
{18.13}   Procedure GetKernelVersion(Var Buffer: TKernelVersion); StdCall;
          Asm
                  push   ebx
                  mov    eax, 18
                  mov    ebx, 13
                  mov    ecx, Buffer
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
Procedure ThreadTerminate();
Asm
        mov    eax, $FFFFFFFF
        int    64
End;
(* -------------------------------------------------------- *)
Function GetProcAddress(hLib: Pointer; ProcName: PChar): Pointer;
Asm
        push   esi
        push   edi
        push   ebx
        mov    edx, hLib
        xor    eax, eax
        test   edx, edx
        jz     @end
        mov    edi, ProcName
        mov    ecx, $FFFFFFFF
        repne scasb
        mov    ebx, ecx
        not    ebx
@next:
        mov    esi, [edx]
        test   esi, esi
        jz     @end
        mov    ecx, ebx
        mov    edi, ProcName
        add    edx, 8
        repe cmpsb
        jne    @next
        mov    eax, [edx - 4]
@end:
        pop    ebx
        pop    edi
        pop    esi
End;
(* -------------------------------------------------------- *)
Function LoadLibrary(Path: PChar): Pointer;
Asm
        push   ebx
        mov    eax, 68
        mov    ebx, 19
        mov    ecx, Path
        int    64
        pop    ebx
End;
(* -------------------------------------------------------- *)
End.


Top
   
PostPosted: Thu Feb 22, 2018 11:51 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Сейчас формат структуры такой:
Code:
db a,b,c,d for version a.b.c.d
db 0: reserved
dd REV - kernel SVN revision number
For Kolibri 0.7.7.0+ kernel:
db 0,7,7,0
db 0
dd 1675
А когда-то раньше был
Code:
db a,b,c,d for version a.b.c.d
db UID_xxx: one of UID_NONE=0, UID_MENUET=1, UID_KOLIBRI=2
db 'name',0 - ASCIIZ-string with the name
For Kolibri 0.5.8.1 kernel:
db 0,5,8,1
db 2
db 'Kolibri',0
Потом в редакции 540 он стал таким
Code:
db a,b,c,d for version a.b.c.d
db UID_xxx: one of UID_NONE=0, UID_MENUET=1, UID_KOLIBRI=2
dd REV - kernel SVN revision number
For Kolibri 0.7.0.0 kernel:
db 0,7,0,0
db 2
dd 533
Кстати, эмулятор KlbrInWin возвращает UID_KlbrInWin = 3. viewtopic.php?p=12431#p12431
Но в эмуляторе MeOSEmul такая функция отсутствует, хотя тоже можно было бы возвращать какой-нибудь UID_xxx.
А затем в редакции 1675 5-ый байт был зарезервирован и формат принял нынешний вид.
viewtopic.php?f=1&t=153&start=15#p29902
А по-моему идея с UID_xxx была хорошей, почему всё же было решено отказаться от этого?


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 2 posts ] 

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited