#include #include typedef struct{ dword subproc ;//* +0: dword: номер подфункции int offset_l ;//* +4: dword: смещение в файле int offset_h ;//* +8: dword: старший dword смещения (должен быть 0) или поле флагов int size ;//* +12 = +0xC: dword: размер void* data ;//* +16 = +0x10: dword: указатель на данные char letter ;//* +20 = +0x14: n db: ASCIIZ-строка с именем файла char* name ;// или //* +20 = +0x14: db 0 //* +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла } mesys_file; int stdcall _msys_read_file(char* filename, int fileoffset,int size,void* data, int* filesize) { mesys_file file; int res; file.subproc = 0; file.letter = 0; file.offset_h = 0; file.offset_l = fileoffset; file.size = size; file.name = filename; file.data = data; asm("movl $70,%eax"); asm("movl file,%ebx"); asm("int $0x40"); asm("movl %eax, res"); asm("movl %ebx, size"); if(res==0) { if(filesize) filesize = size; return 0; }else return res; } int stdcall _msys_write_file(char* filename,int fileoffset, int size, void* data) { mesys_file file; file.subproc = 3; file.letter = 0; file.offset_h = 0; file.offset_l = fileoffset; file.size = size; file.name = filename; file.data = data; asm("movl $70,%eax"); asm("movl file,%ebx"); asm("int $0x40"); } void stdcall _msys_run_program(char* filename,char* parameters) { mesys_file file; file.subproc = 7; file.letter = 0; file.offset_h = parameters; file.offset_l = 0; file.size = 0; file.name = filename; file.data = 0; asm("movl $70,%eax"); asm("movl file,%ebx"); asm("int $0x40"); } int stdcall _msys_create_file(char* filename) { mesys_file file; file.subproc = 2; file.letter = 0; file.offset_h = 0; file.offset_l = 0; file.size = 0; file.name = filename; file.data = (dword)&file; asm("movl $70,%eax"); asm("movl file,%ebx"); asm("int $0x40"); /* asm("movl %eax, 0(res)"); asm("movl %ebx, 0(size)"); return res;*/ }