Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. #include <stdio.h>
  2. #include <mesys.h>
  3.  
  4. typedef struct{
  5.   dword subproc  ;//* +0: dword: íîìåð ïîäôóíêöèè
  6.   int offset_l   ;//* +4: dword: ñìåùåíèå â ôàéëå
  7.   int offset_h   ;//* +8: dword: ñòàðøèé dword ñìåùåíèÿ (äîëæåí áûòü 0) èëè ïîëå ôëàãîâ
  8.   int   size     ;//* +12 = +0xC: dword: ðàçìåð
  9.   void* data     ;//* +16 = +0x10: dword: óêàçàòåëü íà äàííûå
  10.   char  letter   ;//* +20 = +0x14: n db: ASCIIZ-ñòðîêà ñ èìåíåì ôàéëà
  11.   char* name     ;//  èëè
  12.                   //* +20 = +0x14: db 0
  13.                   //* +21 = +0x15: dd óêàçàòåëü íà ASCIIZ-ñòðîêó ñ èìåíåì ôàéëà
  14. } mesys_file;
  15.  
  16.  
  17.  
  18. int  stdcall _msys_read_file(char* filename, int fileoffset,int
  19.                              size,void* data, int* filesize)
  20. {
  21.    mesys_file file;
  22.    int res;
  23.  
  24.    file.subproc = 0;
  25.    file.letter = 0;
  26.    file.offset_h = 0;
  27.    file.offset_l = fileoffset;
  28.    file.size = size;
  29.    file.name = filename;
  30.    file.data = data;
  31.    
  32.    asm("movl    $70,%eax");
  33.    asm("movl    file,%ebx");
  34.    asm("int     $0x40");
  35.    asm("movl    %eax, res");
  36.    asm("movl    %ebx, size");
  37.    
  38.    if(res==0)
  39.    {
  40.       if(filesize) filesize = size;
  41.       return 0;
  42.    }else return res;
  43. }
  44.  
  45. int  stdcall _msys_write_file(char* filename,int fileoffset, int size, void* data)
  46. {
  47.    mesys_file file;
  48.  
  49.    file.subproc = 3;
  50.    file.letter = 0;
  51.    file.offset_h = 0;
  52.    file.offset_l = fileoffset;
  53.    file.size = size;
  54.    file.name = filename;
  55.    file.data = data;
  56.    
  57.    asm("movl    $70,%eax");
  58.    asm("movl    file,%ebx");
  59.    asm("int     $0x40");
  60. }
  61.  
  62. void stdcall _msys_run_program(char* filename,char* parameters)
  63. {
  64.    mesys_file file;
  65.  
  66.    file.subproc = 7;
  67.    file.letter = 0;
  68.    file.offset_h = parameters;
  69.    file.offset_l = 0;
  70.    file.size = 0;
  71.    file.name = filename;
  72.    file.data = 0;
  73.    
  74.    asm("movl    $70,%eax");
  75.    asm("movl    file,%ebx");
  76.    asm("int     $0x40");
  77. }
  78.  
  79. int stdcall _msys_create_file(char* filename)
  80. {
  81.    mesys_file file;
  82.  
  83.    file.subproc = 2;
  84.    file.letter = 0;
  85.    file.offset_h = 0;
  86.    file.offset_l = 0;
  87.    file.size = 0;
  88.    file.name = filename;
  89.    file.data = (dword)&file;
  90.    
  91.    asm("movl    $70,%eax");
  92.    asm("movl    file,%ebx");
  93.    asm("int     $0x40");
  94. /* asm("movl    %eax, 0(res)");
  95.    asm("movl    %ebx, 0(size)");
  96.    return res;*/
  97. }